use of org.batfish.datamodel.routing_policy.RoutingPolicy in project batfish by batfish.
the class OspfTest method getOspfRoutes.
/*
* Int:1/2 2/1 2/3 3/2 3/4 4/3
* R1 <=========> R2 <=========> R3 <=========> R4
* A B C D E F G
*
* Areas:
* A: R1 Loopback0
* B: R1 E1/2, R2 E2/1
* C: R2 Loopback0
* D: R2 E2/3, R3 E3/2
* E: R3 Loopback0
* F: R3 E3/4, R4 E4/3
* G: R4 Loopback0
*/
private SortedMap<String, SortedMap<String, SortedSet<AbstractRoute>>> getOspfRoutes(long areaA, long areaB, long areaC, long areaD, long areaE, long areaF, long areaG, Long maxMetricExternalNetworks, Long maxMetricStubNetworks, Long maxMetricSummaryNetworks, Long maxMetricTransitLinks) {
String l0Name = "Loopback0";
String l1Name = "Loopback1";
String c1E1To2Name = "Ethernet1/2";
String c2E2To1Name = "Ethernet2/1";
String c2E2To3Name = "Ethernet2/3";
String c3E3To2Name = "Ethernet3/2";
String c3E3To4Name = "Ethernet3/4";
String c4E4To3Name = "Ethernet4/3";
RoutingPolicy.Builder rpb = _nf.routingPolicyBuilder();
OspfArea.Builder oaba = _nf.ospfAreaBuilder().setNumber(areaA);
OspfArea.Builder oabb = _nf.ospfAreaBuilder().setNumber(areaB);
OspfArea.Builder oabc = _nf.ospfAreaBuilder().setNumber(areaC);
OspfArea.Builder oabd = _nf.ospfAreaBuilder().setNumber(areaD);
OspfArea.Builder oabe = _nf.ospfAreaBuilder().setNumber(areaE);
OspfArea.Builder oabf = _nf.ospfAreaBuilder().setNumber(areaF);
OspfArea.Builder oabg = _nf.ospfAreaBuilder().setNumber(areaG);
Configuration c1 = _cb.setHostname(C1_NAME).build();
Vrf v1 = _vb.setOwner(c1).build();
RoutingPolicy c1ExportPolicy = rpb.setOwner(c1).setStatements(getExportPolicyStatements(C1_L1_ADDRESS)).build();
OspfProcess op1 = _opb.setVrf(v1).setExportPolicy(c1ExportPolicy).build();
OspfArea oa1a = oaba.setOspfProcess(op1).build();
OspfArea oa1b = areaA == areaB ? oa1a : oabb.setOspfProcess(op1).build();
_ib.setOwner(c1).setVrf(v1).setOspfArea(oa1a);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C1_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C1_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa1b);
_ib.setName(c1E1To2Name).setAddress(C1_E1_2_ADDRESS).build();
Configuration c2 = _cb.setHostname(C2_NAME).build();
Vrf v2 = _vb.setOwner(c2).build();
RoutingPolicy c2ExportPolicy = rpb.setOwner(c2).setStatements(getExportPolicyStatements(C2_L1_ADDRESS)).build();
OspfProcess op2 = _opb.setVrf(v2).setMaxMetricExternalNetworks(maxMetricExternalNetworks).setMaxMetricStubNetworks(maxMetricStubNetworks).setMaxMetricSummaryNetworks(maxMetricSummaryNetworks).setMaxMetricTransitLinks(maxMetricTransitLinks).setExportPolicy(c2ExportPolicy).build();
_opb.setMaxMetricExternalNetworks(null).setMaxMetricStubNetworks(null).setMaxMetricSummaryNetworks(null).setMaxMetricTransitLinks(null);
OspfArea oa2b = oabb.setOspfProcess(op2).build();
OspfArea oa2c = areaB == areaC ? oa2b : oabc.setOspfProcess(op2).build();
OspfArea oa2d = areaB == areaD ? oa2b : areaC == areaD ? oa2c : oabd.setOspfProcess(op2).build();
_ib.setOwner(c2).setVrf(v2).setOspfArea(oa2c);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C2_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C2_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa2b);
_ib.setName(c2E2To1Name).setAddress(C2_E2_1_ADDRESS).setOspfPointToPoint(true).build();
_ib.setOspfPointToPoint(false).setOspfArea(oa2d);
_ib.setName(c2E2To3Name).setAddress(C2_E2_3_ADDRESS).build();
Configuration c3 = _cb.setHostname(C3_NAME).build();
Vrf v3 = _vb.setOwner(c3).build();
RoutingPolicy c3ExportPolicy = rpb.setOwner(c3).setStatements(getExportPolicyStatements(C3_L1_ADDRESS)).build();
OspfProcess op3 = _opb.setVrf(v3).setExportPolicy(c3ExportPolicy).build();
OspfArea oa3d = oabd.setOspfProcess(op3).build();
OspfArea oa3e = areaD == areaE ? oa3d : oabe.setOspfProcess(op3).build();
OspfArea oa3f = areaD == areaF ? oa3d : areaE == areaF ? oa3e : oabf.setOspfProcess(op3).build();
_ib.setOwner(c3).setVrf(v3).setOspfArea(oa3e);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C3_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C3_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa3d);
_ib.setName(c3E3To2Name).setAddress(C3_E3_2_ADDRESS).build();
_ib.setName(c3E3To4Name).setAddress(C3_E3_4_ADDRESS).setOspfArea(oa3f).build();
Configuration c4 = _cb.setHostname(C4_NAME).build();
Vrf v4 = _vb.setOwner(c4).build();
RoutingPolicy c4ExportPolicy = rpb.setOwner(c4).setStatements(getExportPolicyStatements(C4_L1_ADDRESS)).build();
OspfProcess op4 = _opb.setVrf(v4).setExportPolicy(c4ExportPolicy).build();
OspfArea oa4f = oabf.setOspfProcess(op4).build();
OspfArea oa4g = areaF == areaG ? oa4f : oabg.setOspfProcess(op4).build();
_ib.setOwner(c4).setVrf(v4).setOspfArea(oa4g);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C4_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C4_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa4f);
_ib.setName(c4E4To3Name).setAddress(C4_E4_3_ADDRESS).build();
SortedMap<String, Configuration> configurations = new ImmutableSortedMap.Builder<String, Configuration>(String::compareTo).put(c1.getName(), c1).put(c2.getName(), c2).put(c3.getName(), c3).put(c4.getName(), c4).build();
BdpEngine engine = new BdpEngine(new MockBdpSettings(), new BatfishLogger(BatfishLogger.LEVELSTR_OUTPUT, false), (s, i) -> new AtomicInteger());
Topology topology = CommonUtil.synthesizeTopology(configurations);
BdpDataPlane dp = engine.computeDataPlane(false, configurations, topology, Collections.emptySet(), new BdpAnswerElement());
return engine.getRoutes(dp);
}
use of org.batfish.datamodel.routing_policy.RoutingPolicy in project batfish by batfish.
the class RouteReflectionTest method generateRoutesOneReflector.
/*
* See documentation of calling functions for information description of produced network
*/
private SortedMap<String, SortedMap<String, SortedSet<AbstractRoute>>> generateRoutesOneReflector(boolean edge1RouteReflectorClient, boolean edge2RouteReflectorClient) {
Ip as1PeeringIp = new Ip("10.12.11.1");
Ip edge1EbgpIfaceIp = new Ip("10.12.11.2");
Ip edge1IbgpIfaceIp = new Ip("10.1.12.1");
Ip edge1LoopbackIp = new Ip("2.0.0.1");
Ip rrEdge1IfaceIp = new Ip("10.1.12.2");
Ip rrEdge2IfaceIp = new Ip("10.1.23.2");
Ip rrLoopbackIp = new Ip("2.0.0.2");
Ip as3PeeringIp = new Ip("10.23.31.3");
Ip edge2EbgpIfaceIp = new Ip("10.23.31.2");
Ip edge2IbgpIfaceIp = new Ip("10.1.23.3");
Ip edge2LoopbackIp = new Ip("2.0.0.3");
Configuration edge1 = _cb.setHostname(EDGE1_NAME).build();
Vrf vEdge1 = _vb.setOwner(edge1).build();
_ib.setOwner(edge1).setVrf(vEdge1);
_ib.setAddress(new InterfaceAddress(edge1EbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge1LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge1IbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
StaticRoute.Builder sb = StaticRoute.builder();
vEdge1.setStaticRoutes(ImmutableSortedSet.of(sb.setNextHopIp(rrEdge1IfaceIp).setNetwork(new Prefix(rrLoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build()));
BgpProcess edge1Proc = _pb.setRouterId(edge1LoopbackIp).setVrf(vEdge1).build();
RoutingPolicy edge1EbgpExportPolicy = _nullExportPolicyBuilder.setOwner(edge1).build();
_nb.setOwner(edge1).setVrf(vEdge1).setBgpProcess(edge1Proc).setClusterId(edge1LoopbackIp.asLong()).setRemoteAs(1).setLocalIp(edge1EbgpIfaceIp).setPeerAddress(as1PeeringIp).setExportPolicy(edge1EbgpExportPolicy.getName()).build();
RoutingPolicy edge1IbgpExportPolicy = _defaultExportPolicyBuilder.setOwner(edge1).build();
_nb.setRemoteAs(2).setLocalIp(edge1LoopbackIp).setPeerAddress(rrLoopbackIp).setExportPolicy(edge1IbgpExportPolicy.getName()).build();
Configuration rr = _cb.setHostname(RR_NAME).build();
Vrf vRr = _vb.setOwner(rr).build();
_ib.setOwner(rr).setVrf(vRr);
_ib.setAddress(new InterfaceAddress(rrEdge1IfaceIp, EDGE_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(rrLoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(rrEdge2IfaceIp, EDGE_PREFIX_LENGTH)).build();
vRr.setStaticRoutes(ImmutableSortedSet.of(sb.setNextHopIp(edge1IbgpIfaceIp).setNetwork(new Prefix(edge1LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build(), sb.setNextHopIp(edge2IbgpIfaceIp).setNetwork(new Prefix(edge2LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build()));
BgpProcess rrProc = _pb.setRouterId(rrLoopbackIp).setVrf(vRr).build();
RoutingPolicy rrExportPolicy = _defaultExportPolicyBuilder.setOwner(rr).build();
_nb.setOwner(rr).setVrf(vRr).setBgpProcess(rrProc).setClusterId(rrLoopbackIp.asLong()).setRemoteAs(2).setLocalIp(rrLoopbackIp).setExportPolicy(rrExportPolicy.getName());
if (edge1RouteReflectorClient) {
_nb.setRouteReflectorClient(true);
}
_nb.setPeerAddress(edge1LoopbackIp).build();
_nb.setRouteReflectorClient(false);
if (edge2RouteReflectorClient) {
_nb.setRouteReflectorClient(true);
}
_nb.setPeerAddress(edge2LoopbackIp).build();
_nb.setRouteReflectorClient(false);
Configuration edge2 = _cb.setHostname(EDGE2_NAME).build();
Vrf vEdge2 = _vb.setOwner(edge2).build();
_ib.setOwner(edge2).setVrf(vEdge2);
_ib.setAddress(new InterfaceAddress(edge2EbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge2LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge2IbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
vEdge2.setStaticRoutes(ImmutableSortedSet.of(sb.setNextHopIp(rrEdge2IfaceIp).setNetwork(new Prefix(rrLoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build()));
BgpProcess edge2Proc = _pb.setRouterId(edge2LoopbackIp).setVrf(vEdge2).build();
RoutingPolicy edge2EbgpExportPolicy = _nullExportPolicyBuilder.setOwner(edge2).build();
_nb.setOwner(edge2).setVrf(vEdge2).setBgpProcess(edge2Proc).setClusterId(edge2LoopbackIp.asLong()).setRemoteAs(3).setLocalIp(edge2EbgpIfaceIp).setPeerAddress(as3PeeringIp).setExportPolicy(edge2EbgpExportPolicy.getName()).build();
RoutingPolicy edge2IbgpExportPolicy = _defaultExportPolicyBuilder.setOwner(edge2).build();
_nb.setRemoteAs(2).setLocalIp(edge2LoopbackIp).setPeerAddress(rrLoopbackIp).setExportPolicy(edge2IbgpExportPolicy.getName()).build();
SortedMap<String, Configuration> configurations = new ImmutableSortedMap.Builder<String, Configuration>(String::compareTo).put(edge1.getName(), edge1).put(rr.getName(), rr).put(edge2.getName(), edge2).build();
BdpEngine engine = new BdpEngine(new MockBdpSettings(), new BatfishLogger(BatfishLogger.LEVELSTR_OUTPUT, false), (s, i) -> new AtomicInteger());
Topology topology = CommonUtil.synthesizeTopology(configurations);
BdpDataPlane dp = engine.computeDataPlane(false, configurations, topology, ImmutableSet.of(_ab.setAsPath(AsPath.ofSingletonAsSets(1)).setDstIp(edge1EbgpIfaceIp).setDstNode(edge1.getName()).setNetwork(AS1_PREFIX).setNextHopIp(as1PeeringIp).setOriginatorIp(as1PeeringIp).setSrcIp(as1PeeringIp).setSrcNode("as1Edge").build(), _ab.setAsPath(AsPath.ofSingletonAsSets(3)).setDstIp(edge2EbgpIfaceIp).setDstNode(edge2.getName()).setNetwork(AS3_PREFIX).setNextHopIp(as3PeeringIp).setOriginatorIp(as3PeeringIp).setSrcIp(as3PeeringIp).setSrcNode("as3Edge").build()), new BdpAnswerElement());
return engine.getRoutes(dp);
}
use of org.batfish.datamodel.routing_policy.RoutingPolicy in project batfish by batfish.
the class VirtualRouterTest method computeBgpAdvertisementsSentToOutsideIgp.
@Test
public void computeBgpAdvertisementsSentToOutsideIgp() {
RoutingPolicy exportPolicy = _routingPolicyBuilder.setStatements(ImmutableList.of(new SetOrigin(new LiteralOrigin(OriginType.INCOMPLETE, null)), _exitAcceptStatement)).build();
_bgpNeighborBuilder.setExportPolicy(exportPolicy.getName()).setRemoteAs(TEST_AS2).build();
_testVirtualRouter._mainRib.mergeRoute(new OspfInternalRoute.Builder().setNetwork(TEST_NETWORK).setMetric(TEST_METRIC).setArea(TEST_AREA).setAdmin(TEST_ADMIN).setProtocol(RoutingProtocol.OSPF).build());
// checking number of bgp advertisements
assertThat(_testVirtualRouter.computeBgpAdvertisementsToOutside(_ipOwners), equalTo(1));
BgpAdvertisement bgpAdvertisement = _testVirtualRouter._sentBgpAdvertisements.iterator().next();
// checking the attributes of the bgp advertisement
assertThat(bgpAdvertisement, hasDestinationIp(TEST_DEST_IP));
assertThat(bgpAdvertisement, hasNetwork(TEST_NETWORK));
assertThat(bgpAdvertisement, hasOriginatorIp(TEST_SRC_IP));
assertThat(bgpAdvertisement, hasType(BgpAdvertisementType.EBGP_SENT));
assertThat(bgpAdvertisement, hasSourceIp(TEST_SRC_IP));
}
use of org.batfish.datamodel.routing_policy.RoutingPolicy in project batfish by batfish.
the class VirtualRouterTest method computeBgpAdvertisementsSTOEbgpAdvertiseInactive.
@Test
public void computeBgpAdvertisementsSTOEbgpAdvertiseInactive() {
RoutingPolicy exportPolicy = _routingPolicyBuilder.setStatements(ImmutableList.of(new SetOrigin(new LiteralOrigin(OriginType.INCOMPLETE, null)), _exitAcceptStatement)).build();
_bgpNeighborBuilder.setRemoteAs(TEST_AS2).setExportPolicy(exportPolicy.getName()).setAdvertiseInactive(true).build();
_testVirtualRouter._bgpBestPathRib.mergeRoute(_bgpRouteBuilder.setNextHopIp(TEST_NEXT_HOP_IP1).setReceivedFromIp(TEST_NEXT_HOP_IP1).setAsPath(AsPath.ofSingletonAsSets(TEST_AS3).getAsSets()).build());
// adding a connected route in main rib
_testVirtualRouter._mainRib.mergeRoute(new ConnectedRoute(TEST_NETWORK, Route.UNSET_NEXT_HOP_INTERFACE));
// checking that the inactive BGP route got advertised along with the active OSPF route
assertThat(_testVirtualRouter.computeBgpAdvertisementsToOutside(_ipOwners), equalTo(2));
// checking that both bgp advertisements have the same network and correct AS Paths
Set<AsPath> asPaths = new HashSet<>();
_testVirtualRouter._sentBgpAdvertisements.stream().forEach(bgpAdvertisement -> {
assertThat(bgpAdvertisement, hasNetwork(TEST_NETWORK));
asPaths.add(bgpAdvertisement.getAsPath());
});
// next Hop IP for the active OSPF route will be the neighbor's local IP
assertThat("AS Paths not valid in BGP advertisements", asPaths, equalTo(ImmutableSet.of(AsPath.ofSingletonAsSets(TEST_AS1, TEST_AS3), AsPath.ofSingletonAsSets(TEST_AS1))));
}
use of org.batfish.datamodel.routing_policy.RoutingPolicy in project batfish by batfish.
the class VirtualRouterTest method computeBgpAdvertisementsSTOIbgpNeighborReject.
@Test
public void computeBgpAdvertisementsSTOIbgpNeighborReject() {
RoutingPolicy exportPolicy = _routingPolicyBuilder.setStatements(ImmutableList.of(_exitRejectStatement)).build();
_bgpNeighborBuilder.setRemoteAs(TEST_AS1).setExportPolicy(exportPolicy.getName()).setAdvertiseExternal(true).setAdditionalPathSend(true).setAdditionalPathSelectAll(true).build();
_testVirtualRouter._ebgpBestPathRib.mergeRoute(_bgpRouteBuilder.setNextHopIp(TEST_NEXT_HOP_IP1).setReceivedFromIp(TEST_NEXT_HOP_IP1).build());
_testVirtualRouter._bgpMultipathRib.mergeRoute(_bgpRouteBuilder.build());
// number of BGP advertisements should be zero given the reject all export policy
assertThat(_testVirtualRouter.computeBgpAdvertisementsToOutside(_ipOwners), equalTo(0));
}
Aggregations