- this.bgpPeer = new BGPPeer(Ipv4Util.toStringIP(this.neighborAddress), rib, mappingService.toPeerRole(neighbor), rpcRegistry);
- final List<BgpParameters> bgpParameters = getBgpParameters(neighbor, rib, mappingService);
- final KeyMapping key = OpenConfigMappingUtil.getNeighborKey(neighbor);
- this.prefs = new BGPSessionPreferences(rib.getLocalAs(), getHoldTimer(neighbor), rib.getBgpIdentifier(), getPeerAs(neighbor, rib),
- bgpParameters, getPassword(key));
- this.activeConnection = OpenConfigMappingUtil.isActive(neighbor);
+
+ PeerGroup peerGroup = null;
+ String peerGroupName = null;
+ final Config neighborConfig = neighbor.getConfig();
+ if (neighborConfig != null) {
+ final NeighborPeerGroupConfig pgConfig = neighborConfig.getAugmentation(NeighborPeerGroupConfig.class);
+ if (pgConfig != null) {
+ peerGroupName = StringUtils.substringBetween(pgConfig.getPeerGroup(), "=\"", "\"");
+ peerGroup = peerGroupLoader.getPeerGroup(bgpIid, peerGroupName);
+ }
+ }
+ final AfiSafis afisSAfis;
+ if (peerGroup != null && peerGroup.getAfiSafis() != null) {
+ afisSAfis = peerGroup.getAfiSafis();
+ } else {
+ afisSAfis = requireNonNull(neighbor.getAfiSafis(), "Missing mandatory AFIs/SAFIs");
+ }
+
+ final Set<TablesKey> afiSafisAdvertized = OpenConfigMappingUtil
+ .toTableKey(afisSAfis.getAfiSafi(), tableTypeRegistry);
+
+ final PeerRole role = OpenConfigMappingUtil.toPeerRole(neighbor, peerGroup);
+ final ClusterIdentifier clusterId = OpenConfigMappingUtil
+ .getNeighborClusterIdentifier(neighbor.getConfig());
+
+ this.bgpPeer = new BGPPeer(this.neighborAddress, peerGroupName, rib, role, clusterId,
+ BgpPeer.this.rpcRegistry, afiSafisAdvertized, Collections.emptySet());
+
+ final List<BgpParameters> bgpParameters = getBgpParameters(afisSAfis, rib, tableTypeRegistry);
+ final KeyMapping keyMapping = OpenConfigMappingUtil.getNeighborKey(neighbor);
+ final IpAddress neighborLocalAddress = OpenConfigMappingUtil.getLocalAddress(neighbor.getTransport());
+ int hold = OpenConfigMappingUtil.getHoldTimer(neighbor, peerGroup);
+ final AsNumber ribAs = rib.getLocalAs();
+ final AsNumber neighborAs = OpenConfigMappingUtil.getPeerAs(neighbor, peerGroup, ribAs);
+
+ this.prefs = new BGPSessionPreferences(ribAs, hold, rib.getBgpIdentifier(),
+ neighborAs, bgpParameters, getPassword(keyMapping));
+ this.activeConnection = OpenConfigMappingUtil.isActive(neighbor, peerGroup);
+ this.retryTimer = OpenConfigMappingUtil.getRetryTimer(neighbor, peerGroup);