use of org.batfish.datamodel.Interface in project batfish by batfish.
the class SynthesizerInputImplTest method testComputeNeighborUnreachable.
@Test
public void testComputeNeighborUnreachable() {
Configuration node = _cb.build();
Vrf vrf = _vb.setOwner(node).build();
Interface iface1 = _ib.setOwner(node).setVrf(vrf).build();
Interface iface2 = _ib.build();
IpSpace ipSpace1 = Ip.ZERO;
IpSpace ipSpace2 = Ip.MAX;
IpSpaceMatchExpr m1 = new IpSpaceMatchExpr(ipSpace1, false, true);
IpSpaceMatchExpr m2 = new IpSpaceMatchExpr(ipSpace2, false, true);
SynthesizerInput inputWithoutDataPlane = _inputBuilder.setConfigurations(ImmutableMap.of(node.getName(), node)).build();
SynthesizerInput inputWithDataPlane = _inputBuilder.setForwardingAnalysis(MockForwardingAnalysis.builder().setNeighborUnreachable(ImmutableMap.of(node.getName(), ImmutableMap.of(vrf.getName(), ImmutableMap.of(iface1.getName(), ipSpace1, iface2.getName(), ipSpace2)))).build()).setTopology(new Topology(ImmutableSortedSet.of())).build();
assertThat(inputWithoutDataPlane, hasNeighborUnreachable(nullValue()));
assertThat(inputWithDataPlane, hasNeighborUnreachable(equalTo(ImmutableMap.of(node.getHostname(), ImmutableMap.of(vrf.getName(), ImmutableMap.of(iface1.getName(), m1, iface2.getName(), m2))))));
}
use of org.batfish.datamodel.Interface in project batfish by batfish.
the class SynthesizerInputImplTest method testComputeEnabledEdges.
@Test
public void testComputeEnabledEdges() {
Configuration srcNode = _cb.build();
Configuration nextHop = _cb.build();
Vrf srcVrf = _vb.setOwner(srcNode).build();
Vrf nextHopVrf = _vb.setOwner(nextHop).build();
Interface srcInterface = _ib.setOwner(srcNode).setVrf(srcVrf).build();
Interface nextHopInterface = _ib.setOwner(nextHop).setVrf(nextHopVrf).build();
Interface disabledNextHopInterface = _ib.setActive(false).build();
Edge expectedEnabledEdge = new Edge(srcInterface, nextHopInterface);
Edge expectedDisabledEdge = new Edge(srcInterface, disabledNextHopInterface);
SynthesizerInput inputWithoutDataPlane = _inputBuilder.setConfigurations(ImmutableMap.of(srcNode.getName(), srcNode, nextHop.getName(), nextHop)).build();
SynthesizerInput inputWithDataPlane = _inputBuilder.setForwardingAnalysis(MockForwardingAnalysis.builder().build()).setTopology(new Topology(ImmutableSortedSet.of(expectedEnabledEdge, expectedDisabledEdge))).build();
assertThat(inputWithDataPlane, hasEnabledEdges(hasItem(expectedEnabledEdge)));
assertThat(inputWithDataPlane, hasEnabledEdges(not(hasItem(expectedDisabledEdge))));
assertThat(inputWithDataPlane, hasEnabledEdges(not(hasItem(expectedDisabledEdge))));
assertThat(inputWithoutDataPlane, hasEnabledEdges(nullValue()));
}
use of org.batfish.datamodel.Interface in project batfish by batfish.
the class SynthesizerInputImplTest method testComputeArpTrueEdge.
@Test
public void testComputeArpTrueEdge() {
Configuration srcNode = _cb.build();
Vrf srcVrf = _vb.setOwner(srcNode).build();
Interface srcInterface = _ib.setOwner(srcNode).setVrf(srcVrf).build();
String nextHop1 = "nextHop1";
String nextHopInterface1 = "nextHopInterface1";
String nextHop2 = "nextHop2";
String nextHopInterface2 = "nextHopInterface2";
IpSpace ipSpace1 = Ip.ZERO;
IpSpace ipSpace2 = Ip.MAX;
IpSpaceMatchExpr m1 = new IpSpaceMatchExpr(ipSpace1, false, true);
IpSpaceMatchExpr m2 = new IpSpaceMatchExpr(ipSpace2, false, true);
Edge edge1 = new Edge(srcNode.getHostname(), srcInterface.getName(), nextHop1, nextHopInterface1);
Edge edge2 = new Edge(srcNode.getHostname(), srcInterface.getName(), nextHop2, nextHopInterface2);
SynthesizerInput inputWithoutDataPlane = _inputBuilder.setConfigurations(ImmutableMap.of(srcNode.getName(), srcNode)).build();
SynthesizerInput inputWithDataPlane = _inputBuilder.setForwardingAnalysis(MockForwardingAnalysis.builder().setArpTrueEdge(ImmutableMap.of(edge1, ipSpace1, edge2, ipSpace2)).build()).setTopology(new Topology(ImmutableSortedSet.of(edge1, edge2))).build();
assertThat(inputWithoutDataPlane, hasArpTrueEdge(nullValue()));
assertThat(inputWithDataPlane, hasArpTrueEdge(equalTo(ImmutableMap.of(srcNode.getHostname(), ImmutableMap.of(srcVrf.getName(), ImmutableMap.of(srcInterface.getName(), ImmutableMap.of(nextHop1, ImmutableMap.of(nextHopInterface1, m1), nextHop2, ImmutableMap.of(nextHopInterface2, m2))))))));
}
use of org.batfish.datamodel.Interface in project batfish by batfish.
the class SynthesizerInputImplTest method testComputeSourceNats.
@Test
public void testComputeSourceNats() {
Configuration srcNode = _cb.build();
Configuration nextHop = _cb.build();
Vrf srcVrf = _vb.setOwner(srcNode).build();
Vrf nextHopVrf = _vb.setOwner(nextHop).build();
Ip ip11 = new Ip("1.0.0.0");
Ip ip12 = new Ip("1.0.0.10");
Ip ip21 = new Ip("2.0.0.0");
Ip ip22 = new Ip("2.0.0.10");
IpAccessList sourceNat1Acl = _aclb.setLines(ImmutableList.of()).setOwner(srcNode).build();
IpAccessList sourceNat2Acl = _aclb.build();
SourceNat sourceNat1 = _snb.setPoolIpFirst(ip11).setPoolIpLast(ip12).setAcl(sourceNat1Acl).build();
SourceNat sourceNat2 = _snb.setPoolIpFirst(ip21).setPoolIpLast(ip22).setAcl(sourceNat2Acl).build();
Interface srcInterfaceZeroSourceNats = _ib.setOwner(srcNode).setVrf(srcVrf).setSourceNats(ImmutableList.of()).build();
Interface srcInterfaceOneSourceNat = _ib.setSourceNats(ImmutableList.of(sourceNat1)).build();
Interface srcInterfaceTwoSourceNats = _ib.setSourceNats(ImmutableList.of(sourceNat1, sourceNat2)).build();
Interface nextHopInterface = _ib.setOwner(nextHop).setVrf(nextHopVrf).setSourceNats(ImmutableList.of()).build();
Edge forwardEdge1 = new Edge(srcInterfaceZeroSourceNats, nextHopInterface);
Edge forwardEdge2 = new Edge(srcInterfaceOneSourceNat, nextHopInterface);
Edge forwardEdge3 = new Edge(srcInterfaceTwoSourceNats, nextHopInterface);
Edge backEdge1 = new Edge(nextHopInterface, srcInterfaceZeroSourceNats);
Edge backEdge2 = new Edge(nextHopInterface, srcInterfaceOneSourceNat);
Edge backEdge3 = new Edge(nextHopInterface, srcInterfaceTwoSourceNats);
SynthesizerInput inputWithoutDataPlane = _inputBuilder.setConfigurations(ImmutableMap.of(srcNode.getName(), srcNode, nextHop.getName(), nextHop)).build();
SynthesizerInput inputWithDataPlane = _inputBuilder.setForwardingAnalysis(MockForwardingAnalysis.builder().build()).setTopology(new Topology(ImmutableSortedSet.of(forwardEdge1, forwardEdge2, forwardEdge3, backEdge1, backEdge2, backEdge3))).build();
assertThat(inputWithDataPlane, hasSourceNats(hasEntry(equalTo(srcNode.getName()), hasEntry(equalTo(srcInterfaceZeroSourceNats.getName()), equalTo(ImmutableList.of())))));
assertThat(inputWithDataPlane, hasSourceNats(hasEntry(equalTo(srcNode.getName()), hasEntry(equalTo(srcInterfaceOneSourceNat.getName()), equalTo(ImmutableList.of(immutableEntry(new AclPermit(srcNode.getName(), sourceNat1Acl.getName()), new RangeMatchExpr(TransformationHeaderField.NEW_SRC_IP, TransformationHeaderField.NEW_SRC_IP.getSize(), ImmutableSet.of(Range.closed(ip11.asLong(), ip12.asLong()))))))))));
assertThat(inputWithDataPlane, hasSourceNats(hasEntry(equalTo(srcNode.getName()), hasEntry(equalTo(srcInterfaceTwoSourceNats.getName()), equalTo(ImmutableList.of(immutableEntry(new AclPermit(srcNode.getName(), sourceNat1Acl.getName()), new RangeMatchExpr(TransformationHeaderField.NEW_SRC_IP, TransformationHeaderField.NEW_SRC_IP.getSize(), ImmutableSet.of(Range.closed(ip11.asLong(), ip12.asLong())))), immutableEntry(new AclPermit(srcNode.getName(), sourceNat2Acl.getName()), new RangeMatchExpr(TransformationHeaderField.NEW_SRC_IP, TransformationHeaderField.NEW_SRC_IP.getSize(), ImmutableSet.of(Range.closed(ip21.asLong(), ip22.asLong()))))))))));
assertThat(inputWithoutDataPlane, hasSourceNats(nullValue()));
}
use of org.batfish.datamodel.Interface in project batfish by batfish.
the class VirtualRouter method initBaseRipRoutes.
/**
* Initialize RIP routes from the interface prefixes
*/
@VisibleForTesting
void initBaseRipRoutes() {
if (_vrf.getRipProcess() == null) {
// nothing to do
return;
}
// init internal routes from connected routes
for (String ifaceName : _vrf.getRipProcess().getInterfaces()) {
Interface iface = _vrf.getInterfaces().get(ifaceName);
if (iface.getActive()) {
Set<Prefix> allNetworkPrefixes = iface.getAllAddresses().stream().map(InterfaceAddress::getPrefix).collect(Collectors.toSet());
long cost = RipProcess.DEFAULT_RIP_COST;
for (Prefix prefix : allNetworkPrefixes) {
RipInternalRoute route = new RipInternalRoute(prefix, null, RoutingProtocol.RIP.getDefaultAdministrativeCost(_c.getConfigurationFormat()), cost);
_ripInternalRib.mergeRoute(route);
}
}
}
}
Aggregations