/** * Returns {@code true} iff the given process has any BGP peer configured as a route reflector * client. */ @VisibleForTesting static boolean isRouteReflector(BgpProcess p) { return p.getActiveNeighbors().values().stream() .anyMatch(BgpActivePeerConfig::getRouteReflectorClient) || p.getPassiveNeighbors().values().stream() .anyMatch(BgpPassivePeerConfig::getRouteReflectorClient); } }
@Override protected BgpPassivePeerConfig featureValueOf(BgpProcess actual) { return actual.getPassiveNeighbors().get(_prefix); } }
_sendCommunity); if (_bgpProcess != null) { _bgpProcess.getPassiveNeighbors().put(_peerPrefix, bgpPeerConfig);
@VisibleForTesting public static Multiset<Row> getAnswerRows( Map<String, Configuration> configurations, Set<String> nodes, Map<String, ColumnMetadata> columnMetadata, BgpPeerPropertySpecifier propertySpecifier) { Multiset<Row> rows = HashMultiset.create(); for (String nodeName : nodes) { for (Vrf vrf : configurations.get(nodeName).getVrfs().values()) { BgpProcess bgpProcess = vrf.getBgpProcess(); if (bgpProcess == null) { continue; } Node node = new Node(nodeName); for (BgpActivePeerConfig peer : bgpProcess.getActiveNeighbors().values()) { rows.add(getRow(node, vrf.getName(), peer, columnMetadata, propertySpecifier)); } for (BgpPassivePeerConfig peer : bgpProcess.getPassiveNeighbors().values()) { rows.add(getRow(node, vrf.getName(), peer, columnMetadata, propertySpecifier)); } } } return rows; }
public BgpProcessDiff(BgpProcess before, BgpProcess after) { if (before != null && after == null) { _inBeforeOnly = true; } else if (before == null && after != null) { _inAfterOnly = true; } else if (before != null && after != null) { _neighborsDiff = new NeighborsDiff(before.getActiveNeighbors(), after.getActiveNeighbors()); if (_neighborsDiff.isEmpty()) { _neighborsDiff = null; } _dynamicNeighborsDiff = new NeighborsDiff(before.getPassiveNeighbors(), after.getPassiveNeighbors()); if (_dynamicNeighborsDiff.isEmpty()) { _dynamicNeighborsDiff = null; } } }
/** * Initialize incoming BGP message queues. * * @param bgpTopology source of truth for which sessions get established. */ void initBgpQueues(ValueGraph<BgpPeerConfigId, BgpSessionProperties> bgpTopology) { if (_vrf.getBgpProcess() == null) { _bgpIncomingRoutes = ImmutableSortedMap.of(); } else { _bgpIncomingRoutes = Stream.concat( _vrf.getBgpProcess().getActiveNeighbors().entrySet().stream() .map( e -> new BgpPeerConfigId( getHostname(), _vrf.getName(), e.getKey(), false)), _vrf.getBgpProcess().getPassiveNeighbors().entrySet().stream() .map( e -> new BgpPeerConfigId(getHostname(), _vrf.getName(), e.getKey(), true))) .filter(bgpTopology.nodes()::contains) .flatMap( dst -> bgpTopology.adjacentNodes(dst).stream().map(src -> new BgpEdgeId(src, dst))) .collect( toImmutableSortedMap(Function.identity(), e -> new ConcurrentLinkedQueue<>())); } }
@Override @Nullable public Ip getNextHopIp(Environment environment) { Prefix peerPrefix = environment.getPeerPrefix(); if (peerPrefix == null) { return null; } BgpPeerConfig neighbor = environment.getVrf().getBgpProcess().getActiveNeighbors().get(peerPrefix); if (neighbor == null) { neighbor = environment.getVrf().getBgpProcess().getPassiveNeighbors().get(peerPrefix); } if (neighbor == null) { return null; } return neighbor.getLocalIp(); }
Iterables.concat( bgpProc.getActiveNeighbors().values(), bgpProc.getPassiveNeighbors().values())) { asns.put(neighbor.getLocalAs(), hostname);
for (BgpPeerConfig neighbor : Iterables.concat( proc.getActiveNeighbors().values(), proc.getPassiveNeighbors().values())) { String exportPolicyName = neighbor.getExportPolicy(); if (exportPolicyName != null) {
proc.getActiveNeighbors().entrySet(), proc.getPassiveNeighbors().entrySet())) { Prefix prefix = entry.getKey(); BgpPeerConfig bgpPeerConfig = entry.getValue();
public void computeRoutingPolicySources(Warnings w) { for (String rpName : _routingPolicies.keySet()) { computeRoutingPolicySources(rpName, w); } for (Vrf vrf : _vrfs.values()) { BgpProcess bgpProcess = vrf.getBgpProcess(); if (bgpProcess != null) { for (BgpPeerConfig neighbor : Iterables.concat( bgpProcess.getActiveNeighbors().values(), bgpProcess.getPassiveNeighbors().values())) { neighbor.setExportPolicySources(getRoutingPolicySources(neighbor.getExportPolicy())); neighbor.setImportPolicySources(getRoutingPolicySources(neighbor.getImportPolicy())); } } OspfProcess ospfProcess = vrf.getOspfProcess(); if (ospfProcess != null) { ospfProcess.setExportPolicySources(getRoutingPolicySources(ospfProcess.getExportPolicy())); } for (GeneratedRoute gr : vrf.getGeneratedRoutes()) { gr.setAttributePolicySources(getRoutingPolicySources(gr.getAttributePolicy())); gr.setGenerationPolicySources(getRoutingPolicySources(gr.getGenerationPolicy())); } } }