@VisibleForTesting static Multiset<Row> getEigrpEdges( Set<String> includeNodes, Set<String> includeRemoteNodes, Network<EigrpInterface, EigrpEdge> eigrpTopology) { return eigrpTopology.edges().stream() .filter( eigrpEdge -> includeNodes.contains(eigrpEdge.getNode1().getHostname()) && includeRemoteNodes.contains(eigrpEdge.getNode2().getHostname())) .map(EdgesAnswerer::eigrpEdgeToRow) .collect(Collectors.toCollection(HashMultiset::create)); }
@Nonnull public IpEdge toIpEdge(NetworkConfigurations nc) { return new IpEdge( _node1.getHostname(), _node1.getInterface(nc).getAddress().getIp(), _node2.getHostname(), _node2.getInterface(nc).getAddress().getIp()); }
private void queueOutgoingExternalRoutes( Map<String, Node> allNodes, @Nonnull RibDelta<EigrpExternalRoute> delta) { // Loop over neighbors, enqueue messages for (EigrpEdge edge : _incomingRoutes.keySet()) { Queue<RouteAdvertisement<EigrpExternalRoute>> queue = requireNonNull( allNodes .get(edge.getNode1().getHostname()) .getVirtualRouters() .get(edge.getNode1().getVrf()) .getEigrpProcess(_asn)) ._incomingRoutes .get(edge.reverse()); VirtualRouter.queueDelta(queue, delta); } }
/** * Propagate EIGRP internal routes from every valid EIGRP neighbors * * @param nodes mapping of node names to instances. * @param topology network topology * @param nc All network configurations * @return true if new routes have been added to the staging RIB */ boolean propagateInternalRoutes( Map<String, Node> nodes, Network<EigrpInterface, EigrpEdge> topology, NetworkConfigurations nc) { return _interfaces.stream() .filter(topology.nodes()::contains) .flatMap(n -> topology.inEdges(n).stream()) .map( edge -> propagateInternalRoutesFromNeighbor( nodes.get(edge.getNode1().getHostname()), edge.getNode2().getInterfaceSettings(nc).getMetric(), edge.getNode1().getInterface(nc))) .reduce(false, (a, b) -> a || b); }
@VisibleForTesting static Row eigrpEdgeToRow(EigrpEdge eigrpEdge) { RowBuilder row = Row.builder(); row.put( COL_INTERFACE, new NodeInterfacePair( eigrpEdge.getNode1().getHostname(), eigrpEdge.getNode1().getInterfaceName())) .put( COL_REMOTE_INTERFACE, new NodeInterfacePair( eigrpEdge.getNode2().getHostname(), eigrpEdge.getNode2().getInterfaceName())); return row.build(); }