@VisibleForTesting static Multiset<Row> getIsisEdges( Set<String> includeNodes, Set<String> includeRemoteNodes, Network<IsisNode, IsisEdge> isisTopology) { return isisTopology.edges().stream() .filter(Objects::nonNull) .filter( isisEdge -> includeNodes.contains(isisEdge.getNode1().getNode()) && includeRemoteNodes.contains(isisEdge.getNode2().getNode())) .map(EdgesAnswerer::isisEdgeToRow) .collect(Collectors.toCollection(HashMultiset::create)); }
@Nonnull public IsisEdge reverse() { return new IsisEdge(_circuitType, _node2, _node1); }
/** Initialize the ISIS topology as a directed graph. */ public static Network<IsisNode, IsisEdge> initIsisTopology( Map<String, Configuration> configurations, Topology topology) { try (ActiveSpan span = GlobalTracer.get().buildSpan("IsisTopology.initIsisTopology").startActive()) { assert span != null; // avoid unused warning Set<IsisEdge> edges = topology.getEdges().stream() .map(edge -> IsisEdge.edgeIfCircuit(edge, configurations)) .filter(Optional::isPresent) .map(Optional::get) .collect(ImmutableSet.toImmutableSet()); MutableNetwork<IsisNode, IsisEdge> graph = NetworkBuilder.directed().allowsParallelEdges(false).allowsSelfLoops(false).build(); ImmutableSet.Builder<IsisNode> nodes = ImmutableSet.builder(); edges.forEach( edge -> { nodes.add(edge.getNode1()); nodes.add(edge.getNode2()); }); nodes.build().forEach(graph::addNode); edges.forEach(edge -> graph.addEdge(edge.getNode1(), edge.getNode2(), edge)); return ImmutableNetwork.copyOf(graph); } } }
Interface iface = edge.getNode2().getInterface(nc); IsisInterfaceLevelSettings level1Settings = iface.getIsis().getLevel1(); IsisInterfaceLevelSettings level2Settings = iface.getIsis().getLevel2(); .get(edge.getNode1().getNode()) .getVirtualRouters() .get(edge.getNode1().getInterface(nc).getVrfName()); Queue<RouteAdvertisement<IsisRoute>> queue = remoteVr._isisIncomingRoutes.get(edge.reverse()); IsisLevel circuitType = edge.getCircuitType(); if (circuitType.includes(IsisLevel.LEVEL_1) && activeLevels.includes(IsisLevel.LEVEL_1)) { queueDelta(queue, correctedL1Delta);
processLevel(proc1), interfaceSettingsLevel(is1), processLevel(proc2), interfaceSettingsLevel(is2), sameArea ? LEVEL_1_2 : LEVEL_2); if (circuitType == null) { new IsisEdge( circuitType, new IsisNode(c1.getHostname(), iface1.getName()),
static Row isisEdgeToRow(IsisEdge isisEdge) { RowBuilder row = Row.builder(); row.put( COL_INTERFACE, new NodeInterfacePair( isisEdge.getNode1().getNode(), isisEdge.getNode1().getInterfaceName())) .put( COL_REMOTE_INTERFACE, new NodeInterfacePair( isisEdge.getNode2().getNode(), isisEdge.getNode2().getInterfaceName())); return row.build(); }
@JsonCreator private static @Nonnull IsisEdge create( @JsonProperty(PROP_CIRCUIT_TYPE) IsisLevel circuitType, @JsonProperty(PROP_NODE1) IsisNode node1, @JsonProperty(PROP_NODE2) IsisNode node2) { return new IsisEdge(requireNonNull(circuitType), requireNonNull(node1), requireNonNull(node2)); }
@Test public void testIsisToRow() { IsisEdge testEdge = new IsisEdge( IsisLevel.LEVEL_1, new IsisNode("host1", "int1"), new IsisNode("host2", "int2")); Row row = isisEdgeToRow(testEdge); assertThat( row, allOf( hasColumn( COL_INTERFACE, equalTo(new NodeInterfacePair("host1", "int1")), Schema.INTERFACE), hasColumn( COL_REMOTE_INTERFACE, equalTo(new NodeInterfacePair("host2", "int2")), Schema.INTERFACE))); }
@Test public void testGetIsisEdges() { IsisNode node1 = new IsisNode("host1", "int1"); IsisNode node2 = new IsisNode("host2", "int2"); IsisEdge edge = new IsisEdge(IsisLevel.LEVEL_1, node1, node2); MutableNetwork<IsisNode, IsisEdge> isisTopology = NetworkBuilder.directed().allowsParallelEdges(false).allowsSelfLoops(false).build(); isisTopology.addEdge(node1, node2, edge); Multiset<Row> rows = getIsisEdges(_includeNodes, _includeRemoteNodes, isisTopology); assertThat( rows, contains( allOf( hasColumn( COL_INTERFACE, equalTo(new NodeInterfacePair("host1", "int1")), Schema.INTERFACE), hasColumn( COL_REMOTE_INTERFACE, equalTo(new NodeInterfacePair("host2", "int2")), Schema.INTERFACE)))); }