@JsonCreator private static Topology jacksonCreateTopology(SortedSet<Edge> edges) { return new Topology(firstNonNull(edges, ImmutableSortedSet.of())); }
/** * Compute the layer 3 topology from the layer-2 topology and layer-3 information contained in the * configurations. */ public static @Nonnull Topology computeLayer3Topology( @Nonnull Layer2Topology layer2Topology, @Nonnull Map<String, Configuration> configurations) { return new Topology( synthesizeL3Topology(configurations).getEdges().stream() .filter(edge -> layer2Topology.inSameBroadcastDomain(edge.getHead(), edge.getTail())) .collect(ImmutableSortedSet.toImmutableSortedSet(Comparator.naturalOrder()))); }
@Override public Topology getEnvironmentTopology() { return new Topology(ImmutableSortedSet.of()); }
@Override public Topology getEnvironmentTopology() { return new Topology(ImmutableSortedSet.of()); }
@Test public void testPruneInterface2() { Topology topo = new Topology(_bothEdges); topo.prune(null, null, ImmutableSet.of(_nip2)); assertThat(topo.getEdges(), equalTo(ImmutableSet.of())); assertThat(topo.getInterfaceEdges(), equalTo(ImmutableMap.of())); assertThat(topo.getNodeEdges(), equalTo(ImmutableMap.of())); assertThat(topo.getNeighbors(_nip1), equalTo(ImmutableSet.of())); assertThat(topo.getNeighbors(_nip3), equalTo(ImmutableSet.of())); }
@Test public void testPruneNode2() { Topology topo = new Topology(_bothEdges); topo.prune(null, ImmutableSet.of("n2"), null); assertThat(topo.getEdges(), equalTo(ImmutableSet.of())); assertThat(topo.getInterfaceEdges(), equalTo(ImmutableMap.of())); assertThat(topo.getNodeEdges(), equalTo(ImmutableMap.of())); assertThat(topo.getNeighbors(_nip1), equalTo(ImmutableSet.of())); assertThat(topo.getNeighbors(_nip3), equalTo(ImmutableSet.of())); }
@Test public void testComputeRoutesWithDestIpEdge() { String c1 = "c1"; String c2 = "c2"; String v1 = "v1"; String i1 = "i1"; String i2 = "i2"; AbstractRoute r1 = new ConnectedRoute(P1, i1); _routesWhereDstIpCanBeArpIp = ImmutableMap.of(c1, ImmutableMap.of(v1, ImmutableMap.of(i1, ImmutableSet.of(r1)))); Edge e1 = Edge.of(c1, i1, c2, i2); _arpReplies = ImmutableMap.of(c2, ImmutableMap.of(i2, P2.getStartIp().toIpSpace())); Topology topology = new Topology(ImmutableSortedSet.of(e1)); ForwardingAnalysisImpl forwardingAnalysisImpl = initForwardingAnalysisImpl(); Map<Edge, Set<AbstractRoute>> result = forwardingAnalysisImpl.computeRoutesWithDestIpEdge(topology); assertThat(result, equalTo(ImmutableMap.of(e1, ImmutableSet.of(r1)))); }
@Test public void testPruneNode1() { Topology topo = new Topology(_bothEdges); topo.prune(null, ImmutableSet.of("n1"), null); assertThat(topo.getEdges(), equalTo(_edge2to3Set)); assertThat( topo.getInterfaceEdges(), equalTo(ImmutableMap.of(_nip2, _edge2to3Set, _nip3, _edge2to3Set))); assertThat( topo.getNodeEdges(), equalTo(ImmutableMap.of("n2", _edge2to3Set, "n3", _edge2to3Set))); assertThat(topo.getNeighbors(_nip2), equalTo(ImmutableSet.of(_nip3))); assertThat(topo.getNeighbors(_nip3), equalTo(ImmutableSet.of())); }
@Test public void testPruneInterface1() { Topology topo = new Topology(_bothEdges); topo.prune(null, null, ImmutableSet.of(_nip1)); assertThat(topo.getEdges(), equalTo(_edge2to3Set)); assertThat( topo.getInterfaceEdges(), equalTo(ImmutableMap.of(_nip2, _edge2to3Set, _nip3, _edge2to3Set))); assertThat( topo.getNodeEdges(), equalTo(ImmutableMap.of("n2", _edge2to3Set, "n3", _edge2to3Set))); assertThat(topo.getNeighbors(_nip2), equalTo(ImmutableSet.of(_nip3))); assertThat(topo.getNeighbors(_nip3), equalTo(ImmutableSet.of())); }
@Test public void testPruneNode3() { Topology topo = new Topology(_bothEdges); topo.prune(null, ImmutableSet.of("n3"), null); assertThat(topo.getEdges(), equalTo(_edge1to2Set)); assertThat( topo.getInterfaceEdges(), equalTo(ImmutableMap.of(_nip1, _edge1to2Set, _nip2, _edge1to2Set))); assertThat( topo.getNodeEdges(), equalTo(ImmutableMap.of("n1", _edge1to2Set, "n2", _edge1to2Set))); assertThat(topo.getNeighbors(_nip1), equalTo(ImmutableSet.of(_nip2))); assertThat(topo.getNeighbors(_nip2), equalTo(ImmutableSet.of())); }
@Test public void testEmptyTopology() { SortedSet<Edge> edges = ImmutableSortedSet.of(); Topology topo = new Topology(edges); assertThat(topo.getEdges(), equalTo(ImmutableSet.of())); assertThat(topo.getInterfaceEdges(), equalTo(ImmutableMap.of())); assertThat(topo.getNodeEdges(), equalTo(ImmutableMap.of())); assertThat( topo.getNeighbors(new NodeInterfacePair("node", "iface")), equalTo(ImmutableSet.of())); }
@Test public void testPruneInterface3() { Topology topo = new Topology(_bothEdges); topo.prune(null, null, ImmutableSet.of(_nip3)); assertThat(topo.getEdges(), equalTo(_edge1to2Set)); assertThat( topo.getInterfaceEdges(), equalTo(ImmutableMap.of(_nip1, _edge1to2Set, _nip2, _edge1to2Set))); assertThat( topo.getNodeEdges(), equalTo(ImmutableMap.of("n1", _edge1to2Set, "n2", _edge1to2Set))); assertThat(topo.getNeighbors(_nip1), equalTo(ImmutableSet.of(_nip2))); assertThat(topo.getNeighbors(_nip2), equalTo(ImmutableSet.of())); } }
@Test public void testTwoEdges() { Topology topo = new Topology(_bothEdges); assertThat(topo.getEdges(), equalTo(_bothEdges)); assertThat( topo.getInterfaceEdges(), equalTo(ImmutableMap.of(_nip1, _edge1to2Set, _nip2, _bothEdges, _nip3, _edge2to3Set))); assertThat( topo.getNodeEdges(), equalTo(ImmutableMap.of("n1", _edge1to2Set, "n2", _bothEdges, "n3", _edge2to3Set))); assertThat(topo.getNeighbors(_nip1), equalTo(ImmutableSet.of(_nip2))); assertThat(topo.getNeighbors(_nip2), equalTo(ImmutableSet.of(_nip3))); assertThat(topo.getNeighbors(_nip3), equalTo(ImmutableSet.of())); }
@Test public void testPruneEdge() { Topology topo = new Topology(_bothEdges); topo.prune(_edge1to2Set, null, null); assertThat(topo.getEdges(), equalTo(_edge2to3Set)); assertThat( topo.getInterfaceEdges(), equalTo(ImmutableMap.of(_nip2, _edge2to3Set, _nip3, _edge2to3Set))); assertThat( topo.getNodeEdges(), equalTo(ImmutableMap.of("n2", _edge2to3Set, "n3", _edge2to3Set))); assertThat(topo.getNeighbors(_nip1), equalTo(ImmutableSet.of())); assertThat(topo.getNeighbors(_nip2), equalTo(ImmutableSet.of(_nip3))); assertThat(topo.getNeighbors(_nip3), equalTo(ImmutableSet.of())); }
@Test public void testOneEdge() { NodeInterfacePair nip1 = new NodeInterfacePair("n1", "i1"); NodeInterfacePair nip2 = new NodeInterfacePair("n2", "i2"); Edge edge = new Edge(nip1, nip2); SortedSet<Edge> edges = ImmutableSortedSet.of(edge); Topology topo = new Topology(edges); assertThat(topo.getEdges(), equalTo(edges)); assertThat(topo.getInterfaceEdges(), equalTo(ImmutableMap.of(nip1, edges, nip2, edges))); assertThat(topo.getNodeEdges(), equalTo(ImmutableMap.of("n1", edges, "n2", edges))); assertThat(topo.getNeighbors(nip1), equalTo(ImmutableSet.of(nip2))); assertThat(topo.getNeighbors(nip2), equalTo(ImmutableSet.of())); assertThat(topo.getNeighbors(new NodeInterfacePair("x", "y")), equalTo(ImmutableSet.of())); }
@Test public void testComputeSomeoneReplies() { String c1 = "c1"; String i1 = "i1"; String c2 = "c2"; String i2 = "i2"; Edge e1 = Edge.of(c1, i1, c2, i2); _arpReplies = ImmutableMap.of(c2, ImmutableMap.of(i2, P1.toIpSpace())); Topology topology = new Topology(ImmutableSortedSet.of(e1)); ForwardingAnalysisImpl forwardingAnalysisImpl = initForwardingAnalysisImpl(); Map<String, Map<String, IpSpace>> result = forwardingAnalysisImpl.computeSomeoneReplies(topology); /* IPs allowed by neighbor should appear */ assertThat(result, hasEntry(equalTo(c1), hasEntry(equalTo(i1), containsIp(P1.getStartIp())))); assertThat(result, hasEntry(equalTo(c1), hasEntry(equalTo(i1), containsIp(P1.getEndIp())))); /* IPs not allowed by neighbor should not appear */ assertThat( result, hasEntry(equalTo(c1), hasEntry(equalTo(i1), not(containsIp(P2.getStartIp()))))); }
@Test public void testGetLayer3Edges() { Topology layer3Topology = new Topology(ImmutableSortedSet.of(Edge.of("host1", "int1", "host2", "int2"))); Multiset<Row> rows = getLayer3Edges(_configurations, _includeNodes, _includeRemoteNodes, layer3Topology); assertThat( rows, contains( allOf( hasColumn( COL_INTERFACE, equalTo(new NodeInterfacePair("host1", "int1")), Schema.INTERFACE), hasColumn( COL_IPS, equalTo(ImmutableSet.of(Ip.parse("1.1.1.1"))), Schema.set(Schema.IP)), hasColumn( COL_REMOTE_INTERFACE, equalTo(new NodeInterfacePair("host2", "int2")), Schema.INTERFACE), hasColumn( COL_REMOTE_IPS, equalTo(ImmutableSet.of(Ip.parse("2.2.2.2"))), Schema.set(Schema.IP))))); }
boolean simplify, boolean specialize) { Topology topology = new Topology(dataPlane.getTopologyEdges());
public static void initSnapshotWithTopology(String network, String snapshot, Set<String> nodes) throws IOException { IdManager idManager = Main.getWorkMgr().getIdManager(); NetworkId networkId = idManager.getNetworkId(network); SnapshotId snapshotId = idManager.hasSnapshotId(snapshot, networkId) ? idManager.getSnapshotId(snapshot, networkId) : idManager.generateSnapshotId(); idManager.assignSnapshot(snapshot, networkId, snapshotId); SnapshotMetadataMgr.writeMetadata( new SnapshotMetadata(new Date().toInstant(), null), networkId, snapshotId); Topology pojoTopology = new Topology(snapshot); pojoTopology.setNodes(nodes.stream().map(Node::new).collect(Collectors.toSet())); Main.getWorkMgr().getStorage().storePojoTopology(pojoTopology, networkId, snapshotId); org.batfish.datamodel.Topology envTopology = new org.batfish.datamodel.Topology(ImmutableSortedSet.of()); Main.getWorkMgr().getStorage().storeTopology(envTopology, networkId, snapshotId); }
@Before public void setup() { NetworkFactory nf = new NetworkFactory(); Configuration.Builder cb = nf.configurationBuilder().setConfigurationFormat(ConfigurationFormat.CISCO_IOS); _host1 = cb.setHostname("host1").build(); _host1.setInterfaces( ImmutableSortedMap.of( "int1", Interface.builder() .setName("int1") .setAddress(new InterfaceAddress(Ip.parse("1.1.1.1"), 24)) .build())); _host2 = cb.setHostname("host2").build(); _host2.setInterfaces( ImmutableSortedMap.of( "int2", Interface.builder() .setName("int2") .setAddress(new InterfaceAddress(Ip.parse("2.2.2.2"), 24)) .build())); _configurations = ImmutableSortedMap.of("host1", _host1, "host2", _host2); _includeNodes = ImmutableSortedSet.of("host1", "host2"); _includeRemoteNodes = ImmutableSortedSet.of("host1", "host2"); // Sending an edge from host1 to host2 in layer 3 _topology = new Topology(ImmutableSortedSet.of(Edge.of("host1", "int1", "host2", "int2"))); }