/** Return a new edge, pointing in the reverse direction */ public Edge reverse() { return new Edge(_head, _tail); }
@JsonCreator private static Edge create( @Nullable @JsonProperty(PROP_NODE1) String node1, @Nullable @JsonProperty(PROP_INT1) String int1, @Nullable @JsonProperty(PROP_NODE2) String node2, @Nullable @JsonProperty(PROP_INT2) String int2) { checkArgument(!Strings.isNullOrEmpty(node1), "Missing %s", PROP_NODE1); checkArgument(!Strings.isNullOrEmpty(int1), "Missing %s", PROP_INT1); checkArgument(!Strings.isNullOrEmpty(node2), "Missing %s", PROP_NODE2); checkArgument(!Strings.isNullOrEmpty(int2), "Missing %s", PROP_INT2); return new Edge(new NodeInterfacePair(node1, int1), new NodeInterfacePair(node2, int2)); }
@VisibleForTesting Map<Edge, Set<AbstractRoute>> computeRoutesWithDestIpEdge(Topology topology) { try (ActiveSpan span = GlobalTracer.get() .buildSpan("ForwardingAnalysisImpl.computeRoutesWithDestIpEdge") .startActive()) { assert span != null; // avoid unused warning ImmutableMap.Builder<Edge, Set<AbstractRoute>> routesByEdgeBuilder = ImmutableMap.builder(); _routesWhereDstIpCanBeArpIp.forEach( (hostname, routesWhereDstIpCanBeArpIpByVrf) -> routesWhereDstIpCanBeArpIpByVrf.forEach( (vrf, routesWhereDstIpCanBeArpIpByOutInterface) -> routesWhereDstIpCanBeArpIpByOutInterface.forEach( (outInterface, routes) -> { NodeInterfacePair out = new NodeInterfacePair(hostname, outInterface); Set<NodeInterfacePair> receivers = topology.getNeighbors(out); receivers.forEach( receiver -> routesByEdgeBuilder.put(new Edge(out, receiver), routes)); }))); return routesByEdgeBuilder.build(); } }
IpSpace recvReplies = _arpReplies.get(recvNode).get(recvInterface); Edge edge = new Edge(out, receiver); Set<AbstractRoute> routes = candidateRoutes.stream()
private static FlowTrace neighborUnreachableOrExitsNetworkTrace( NodeInterfacePair srcInterface, TransmissionContext transmissionContext, FlowDisposition disposition) { Edge edge = new Edge( srcInterface, new NodeInterfacePair(Configuration.NODE_NONE_NAME, Interface.NULL_INTERFACE_NAME)); FlowTraceHop flowTraceHop = new FlowTraceHop( edge, transmissionContext._routesForThisNextHopInterface, null, null, hopFlow(transmissionContext._originalFlow, transmissionContext._transformedFlow)); flowTraceHop.setFilterOut(transmissionContext._filterOutNotes); List<FlowTraceHop> newHops = ImmutableList.<FlowTraceHop>builder() .addAll(transmissionContext._hopsSoFar) .add(flowTraceHop) .build(); return new FlowTrace(disposition, newHops, disposition.toString()); }
continue; edges.add(new Edge(iface1, iface2));
if (edgeIpsecSession.isPresent() && edgeIpsecSession.get().getNegotiatedIpsecP2Proposal() != null) { successfulIPsecEdges.add(new Edge(tunnelEndPointU, tunnelEndPointV));
if (out) { Edge deniedOutEdge = new Edge( outInterface, new NodeInterfacePair(Configuration.NODE_NONE_NAME, Interface.NULL_INTERFACE_NAME));
@Test public void testReverse() { assertThat( EDGE.reverse(), equalTo( new Edge( new NodeInterfacePair("head", "headInt"), new NodeInterfacePair("tail", "tailInt")))); } }
@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 testPruneFailedIpsecSessionEdges() { _topology.pruneFailedIpsecSessionEdges(_ipsecTopology, _configurations); // Edges involving host1:Tunnel3, host2:Tunnel4, host1:Tunnel7 will be pruned assertThat( _topology.getEdges(), equalTo( ImmutableSet.of( new Edge( new NodeInterfacePair("host1", "Tunnel1"), new NodeInterfacePair("host2", "Tunnel2")), new Edge( new NodeInterfacePair("host2", "Tunnel2"), new NodeInterfacePair("host1", "Tunnel1")), new Edge( new NodeInterfacePair("host1", "interface5"), new NodeInterfacePair("host2", "interface6")), new Edge( new NodeInterfacePair("host1", "Tunnel9"), new NodeInterfacePair("host2", "Tunnel10"))))); } }
@Test public void testSynthesizeTopology_asymmetric() { NetworkFactory nf = new NetworkFactory(); Configuration.Builder cb = nf.configurationBuilder().setConfigurationFormat(ConfigurationFormat.CISCO_IOS); Configuration c1 = cb.build(); Configuration c2 = cb.build(); Interface i1 = nf.interfaceBuilder().setOwner(c1).setAddresses(new InterfaceAddress("1.2.3.4/24")).build(); Interface i2 = nf.interfaceBuilder().setOwner(c2).setAddresses(new InterfaceAddress("1.2.3.5/28")).build(); Topology t = TopologyUtil.synthesizeL3Topology( ImmutableMap.of(c1.getHostname(), c1, c2.getHostname(), c2)); assertThat(t.getEdges(), equalTo(ImmutableSet.of(new Edge(i1, i2), new Edge(i2, i1)))); }
@Test public void testSynthesizeTopology_selfEdges() { NetworkFactory nf = new NetworkFactory(); Configuration c = nf.configurationBuilder().setConfigurationFormat(ConfigurationFormat.CISCO_IOS).build(); Vrf v1 = nf.vrfBuilder().setOwner(c).setName("v1").build(); Vrf v2 = nf.vrfBuilder().setOwner(c).setName("v2").build(); Interface.Builder builder = nf.interfaceBuilder().setOwner(c); Interface i1 = builder.setAddresses(new InterfaceAddress("1.2.3.4/24")).setVrf(v1).build(); Interface i2 = builder.setAddresses(new InterfaceAddress("1.2.3.5/24")).setVrf(v1).build(); Interface i3 = builder.setAddresses(new InterfaceAddress("1.2.3.6/24")).setVrf(v2).build(); Topology t = TopologyUtil.synthesizeL3Topology(ImmutableMap.of(c.getHostname(), c)); assertThat( t.getEdges(), equalTo( ImmutableSet.of( new Edge(i1, i3), new Edge(i3, i1), new Edge(i2, i3), new Edge(i3, i2)))); }
@Test public void testEquals() { new EqualsTester() .addEqualityGroup( EDGE, new Edge( new NodeInterfacePair("tail", "tailInt"), new NodeInterfacePair("head", "headInt"))) .addEqualityGroup(EDGE.reverse()) .addEqualityGroup( new Edge( new NodeInterfacePair("tail1", "tailInt"), new NodeInterfacePair("head", "headInt"))) .addEqualityGroup( new Edge( new NodeInterfacePair("tail", "tailint"), new NodeInterfacePair("head", "headInt"))) .addEqualityGroup( new Edge( new NodeInterfacePair("tail", "tailInt"), new NodeInterfacePair("hEad", "headInt"))) .addEqualityGroup( new Edge( new NodeInterfacePair("tail", "tailInt"), new NodeInterfacePair("head", "headIntOther"))) .testEquals(); }
edgeBuilder .add( new Edge( new NodeInterfacePair("host1", "Tunnel1"), new NodeInterfacePair("host2", "Tunnel2"))) .add( new Edge( new NodeInterfacePair("host2", "Tunnel2"), new NodeInterfacePair("host1", "Tunnel1"))) .add( new Edge( new NodeInterfacePair("host1", "Tunnel3"), new NodeInterfacePair("host2", "Tunnel4"))) .add( new Edge( new NodeInterfacePair("host2", "Tunnel4"), new NodeInterfacePair("host1", "Tunnel3"))) new Edge( new NodeInterfacePair("host1", "interface5"), new NodeInterfacePair("host2", "interface6"))) new Edge( new NodeInterfacePair("host1", "Tunnel9"), new NodeInterfacePair("host2", "Tunnel10"))) new Edge( new NodeInterfacePair("host1", "Tunnel7"), new NodeInterfacePair("host2", "Tunnel8")))