use of org.batfish.datamodel.InterfaceAddress in project batfish by batfish.
the class BdpDataPlanePluginTest method testStaticInterfaceRoutesWithoutEdge.
@Test
public void testStaticInterfaceRoutesWithoutEdge() {
NetworkFactory nf = new NetworkFactory();
Configuration c = nf.configurationBuilder().setConfigurationFormat(ConfigurationFormat.CISCO_IOS).build();
Vrf vrf = nf.vrfBuilder().setOwner(c).setName(DEFAULT_VRF_NAME).build();
Interface i = nf.interfaceBuilder().setOwner(c).setVrf(vrf).setAddress(new InterfaceAddress("10.0.0.0/24")).setActive(true).build();
StaticRoute srBoth = StaticRoute.builder().setNetwork(Prefix.parse("10.0.1.0/24")).setNextHopInterface(i.getName()).setNextHopIp(new Ip("10.0.0.1")).build();
vrf.getStaticRoutes().add(srBoth);
StaticRoute srJustInterface = StaticRoute.builder().setNetwork(Prefix.parse("10.0.2.0/24")).setNextHopInterface(i.getName()).build();
vrf.getStaticRoutes().add(srJustInterface);
BdpEngine engine = new BdpEngine(new MockBdpSettings(), new BatfishLogger(BatfishLogger.LEVELSTR_DEBUG, false), (a, b) -> new AtomicInteger());
Topology topology = new Topology(Collections.emptySortedSet());
BdpDataPlane dp = engine.computeDataPlane(false, ImmutableMap.of(c.getName(), c), topology, Collections.emptySet(), new BdpAnswerElement());
// generating fibs should not crash
dp.getFibs();
}
use of org.batfish.datamodel.InterfaceAddress in project batfish by batfish.
the class BdpDataPlanePluginTest method generateNetworkWithDuplicates.
private SortedMap<String, Configuration> generateNetworkWithDuplicates() {
Ip coreId = new Ip("1.1.1.1");
Ip neighborId = new Ip("1.1.1.2");
final int interfcePrefixBits = 24;
_vb.setName(DEFAULT_VRF_NAME);
Configuration core = _cb.setHostname(CORE_NAME).setConfigurationFormat(ConfigurationFormat.CISCO_IOS).build();
_epb.setStatements(ImmutableList.of(new SetDefaultPolicy("DEF")));
Vrf corevrf = _vb.setOwner(core).build();
_ib.setOwner(core).setVrf(corevrf).setActive(true);
_ib.setAddress(new InterfaceAddress(coreId, interfcePrefixBits)).build();
_ib.setAddress(new InterfaceAddress(new Ip("9.9.9.9"), interfcePrefixBits)).setName("OUT").build();
BgpProcess coreProc = _pb.setRouterId(coreId).setVrf(corevrf).build();
_nb.setOwner(core).setVrf(corevrf).setBgpProcess(coreProc).setRemoteAs(1).setLocalAs(1).setLocalIp(coreId).setPeerAddress(neighborId).setExportPolicy(_epb.setOwner(core).build().getName()).build();
_nb.setRemoteAs(1).setLocalAs(1).setLocalIp(coreId).setPeerAddress(neighborId).build();
Configuration n1 = _cb.setHostname("n1").build();
Vrf n1Vrf = _vb.setOwner(n1).build();
_ib.setOwner(n1).setVrf(n1Vrf);
BgpProcess n1Proc = _pb.setRouterId(neighborId).setVrf(n1Vrf).build();
_nb.setOwner(n1).setVrf(n1Vrf).setBgpProcess(n1Proc).setRemoteAs(1).setLocalAs(1).setLocalIp(neighborId).setPeerAddress(coreId).setExportPolicy(_epb.setOwner(n1).build().getName()).build();
Configuration n2 = _cb.setHostname("n2").build();
Vrf n2Vrf = _vb.setOwner(n2).build();
_ib.setOwner(n2).setVrf(n2Vrf);
_ib.setAddress(new InterfaceAddress(neighborId, interfcePrefixBits)).setVrf(n2Vrf).build();
BgpProcess n2Proc = _pb.setRouterId(neighborId).setVrf(n2Vrf).build();
_nb.setOwner(n2).setVrf(n2Vrf).setBgpProcess(n2Proc).setRemoteAs(1).setLocalAs(1).setLocalIp(neighborId).setPeerAddress(coreId).setExportPolicy(_epb.setOwner(n2).build().getName()).build();
return ImmutableSortedMap.of(CORE_NAME, core, "n1", n1, "n2", n2);
}
use of org.batfish.datamodel.InterfaceAddress in project batfish by batfish.
the class OspfTest method testOspfNonDefaultVrfAdjacency.
@Test
public void testOspfNonDefaultVrfAdjacency() {
OspfArea.Builder oab = _nf.ospfAreaBuilder().setNumber(1L);
Prefix adjacencyPrefix = Prefix.parse("1.0.0.0/31");
InterfaceAddress i1Address = new InterfaceAddress(adjacencyPrefix.getStartIp(), adjacencyPrefix.getPrefixLength());
InterfaceAddress i2Address = new InterfaceAddress(adjacencyPrefix.getEndIp(), adjacencyPrefix.getPrefixLength());
Configuration c1 = _cb.build();
Vrf v1 = _vb.setOwner(c1).build();
OspfProcess o1 = _opb.setVrf(v1).build();
OspfArea oa1 = oab.setOspfProcess(o1).build();
// Interface in default VRF on c1
_ib.setOwner(c1).setVrf(v1).setAddress(i1Address).setOspfArea(oa1).build();
Configuration c2 = _cb.build();
// default vrf
Vrf v2Default = _vb.setOwner(c2).build();
// default OSPF process
_opb.setVrf(v2Default).build();
Vrf v2Other = _vb.setName("v2Other").build();
OspfProcess o2Other = _opb.setVrf(v2Other).build();
OspfArea oa2 = oab.setOspfProcess(o2Other).build();
// Interface in VRF v2Other on c2
_ib.setOwner(c2).setVrf(v2Other).setAddress(i2Address).setOspfArea(oa2).build();
Map<String, Configuration> configurations = ImmutableMap.of(c1.getName(), c1, c2.getName(), c2);
Map<Ip, Set<String>> ipOwners = CommonUtil.computeIpOwners(configurations, true);
Topology topology = CommonUtil.synthesizeTopology(configurations);
CommonUtil.initRemoteOspfNeighbors(configurations, ipOwners, topology);
IpLink expectedIpEdge1 = new IpLink(i1Address.getIp(), i2Address.getIp());
IpLink expectedIpEdge2 = new IpLink(i2Address.getIp(), i1Address.getIp());
assertThat(o1, hasOspfNeighbors(hasKey(expectedIpEdge1)));
OspfNeighbor on1 = o1.getOspfNeighbors().get(expectedIpEdge1);
assertThat(o2Other, hasOspfNeighbors(hasKey(expectedIpEdge2)));
OspfNeighbor on2 = o2Other.getOspfNeighbors().get(expectedIpEdge2);
assertThat(on1, hasRemoteOspfNeighbor(sameInstance(on2)));
assertThat(on2, hasRemoteOspfNeighbor(sameInstance(on1)));
}
use of org.batfish.datamodel.InterfaceAddress 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.InterfaceAddress in project batfish by batfish.
the class NodJobChunkingTest method setupConfigs.
private void setupConfigs() {
_nf = new NetworkFactory();
Configuration.Builder cb = _nf.configurationBuilder().setConfigurationFormat(ConfigurationFormat.CISCO_IOS);
Interface.Builder ib = _nf.interfaceBuilder().setActive(true).setBandwidth(1E9d);
Vrf.Builder vb = _nf.vrfBuilder();
_srcNode1 = cb.build();
_srcNode2 = cb.build();
_srcVrf1 = vb.setOwner(_srcNode1).build();
_srcVrf2 = vb.setOwner(_srcNode2).build();
_originateVrf1 = new OriginateVrf(_srcNode1.getHostname(), _srcVrf1.getName());
_originateVrf2 = new OriginateVrf(_srcNode2.getHostname(), _srcVrf2.getName());
_dstNode = cb.build();
Vrf dstVrf = vb.setOwner(_dstNode).build();
Prefix p1 = Prefix.parse("1.0.0.0/31");
ib.setOwner(_srcNode1).setVrf(_srcVrf1).setAddress(new InterfaceAddress(p1.getStartIp(), p1.getPrefixLength())).setOutgoingFilter(mkOutgoingFilter(_srcNode1, p1.getStartIp())).build();
ib.setOwner(_dstNode).setVrf(dstVrf).setAddress(new InterfaceAddress(p1.getEndIp(), p1.getPrefixLength())).setSourceNats(ImmutableList.of()).build();
Prefix p2 = Prefix.parse("2.0.0.0/31");
ib.setOwner(_srcNode2).setVrf(_srcVrf2).setAddress(new InterfaceAddress(p2.getStartIp(), p2.getPrefixLength())).setOutgoingFilter(mkOutgoingFilter(_srcNode2, p2.getStartIp())).build();
ib.setOwner(_dstNode).setVrf(dstVrf).setAddress(new InterfaceAddress(p2.getEndIp(), p2.getPrefixLength())).setSourceNats(ImmutableList.of()).build();
// For the destination
Prefix pDest = Prefix.parse("3.0.0.0/32");
ib.setOwner(_dstNode).setVrf(dstVrf).setAddress(new InterfaceAddress(pDest.getEndIp(), pDest.getPrefixLength())).build();
StaticRoute.Builder bld = StaticRoute.builder().setNetwork(pDest);
_srcVrf1.getStaticRoutes().add(bld.setNextHopIp(p1.getEndIp()).build());
_srcVrf2.getStaticRoutes().add(bld.setNextHopIp(p2.getEndIp()).build());
_configs = ImmutableSortedMap.of(_srcNode1.getName(), _srcNode1, _srcNode2.getName(), _srcNode2, _dstNode.getName(), _dstNode);
}
Aggregations