From: manjunath.hethur Date: Wed, 8 Jan 2020 04:53:58 +0000 (+0530) Subject: BGP forward porting & Update source enhancement. X-Git-Tag: release/aluminium~50 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=677a3ec4bd557e54211bec4bcf6dbbb3209ef923;p=netvirt.git BGP forward porting & Update source enhancement. JIRA: NETVIRT-1657 Signed-off-by: manjunath.hethur Change-Id: If472fe4a0c20b6137c02684de0c3899f1d2e4007 --- diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java index 6ddf237030..32bfdd2fc1 100755 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java @@ -61,6 +61,7 @@ import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker; +import org.opendaylight.genius.mdsalutil.MDSALUtil; import org.opendaylight.genius.mdsalutil.NwConstants; import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils; import org.opendaylight.infrautils.metrics.MetricProvider; @@ -200,6 +201,7 @@ public class BgpConfigurationManager implements EbgpService { private static final String UPD_WARN = "Update operation not supported; Config store updated;" + " restore with another Update if needed."; private static long bgp_as_num = 0; + private static List nbrList = new ArrayList<>(); private int bgpKaTime = 0; private int bgpHoldTime = 0; private int bgpGrRestartTime = 0; @@ -877,12 +879,21 @@ public class BgpConfigurationManager implements EbgpService { @Override protected void add(InstanceIdentifier iid, Neighbors val) { + if (nbrList != null && !nbrList.contains(val)) { + LOG.trace("Adding nbr {} to nbrlist", val.getAddress().getValue()); + nbrList.add(val); + } if (!isBGPEntityOwner()) { return; } LOG.debug("received add Neighbors config val {}", val.getAddress().getValue()); synchronized (BgpConfigurationManager.this) { String peerIp = val.getAddress().getValue(); + String sourceIp = (val.getUpdateSource() == null) ? null : + val.getUpdateSource().getSourceIp().getValue(); + int nhops = (val.getEbgpMultihop() == null) ? 0 : + val.getEbgpMultihop().getNhops().intValue(); + List afs = val.getAddressFamilies(); long as = val.getRemoteAs().toJava(); final String md5Secret = extractMd5Secret(val); BgpRouter br = getClient(YANG_OBJ); @@ -894,6 +905,19 @@ public class BgpConfigurationManager implements EbgpService { try { //itmProvider.buildTunnelsToDCGW(new IpAddress(peerIp.toCharArray())); br.addNeighbor(peerIp, as, md5Secret); + if (nhops != 0) { + br.addEbgpMultihop(peerIp, nhops); + } + if (sourceIp != null) { + br.addUpdateSource(peerIp, sourceIp); + } + if (afs != null) { + for (AddressFamilies af : afs) { + af_afi afi = af_afi.findByValue(af.getAfi().intValue()); + af_safi safi = af_safi.findByValue(af.getSafi().intValue()); + br.addAddressFamily(af.getPeerIp().getValue(), afi, safi); + } + } } catch (TException | BgpRouterException e) { LOG.error("{} Add received exception; {}", YANG_OBJ, ADD_WARN, e); @@ -913,6 +937,10 @@ public class BgpConfigurationManager implements EbgpService { @Override protected void remove(InstanceIdentifier iid, Neighbors val) { + if (nbrList != null && nbrList.contains(val)) { + LOG.trace("Removing nbr {} from nbr list", val.getAddress().getValue()); + nbrList.remove(val); + } if (!isBGPEntityOwner()) { return; } @@ -1823,7 +1851,13 @@ public class BgpConfigurationManager implements EbgpService { public long getStalePathtime(int defValue, AsId asId) { long spt = 0; try { - spt = getConfig().getGracefulRestart().getStalepathTime().toJava(); + InstanceIdentifier id = + InstanceIdentifier.create(Bgp.class).child(GracefulRestart.class); + Optional gracefulRestartOptional = MDSALUtil.read(dataBroker, + LogicalDatastoreType.CONFIGURATION, id); + if (gracefulRestartOptional.isPresent()) { + spt = gracefulRestartOptional.get().getStalepathTime().toJava(); + } } catch (NullPointerException e) { try { spt = asId.getStalepathTime().toJava(); @@ -3198,6 +3232,10 @@ public class BgpConfigurationManager implements EbgpService { return totalCleared; } + public static List getNbrList() { + return nbrList; + } + public BgpCounters getBgpCounters() { return bgpCountersReference.get(); } diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpAlarms.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpAlarms.java index 02ca736050..fa0a371908 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpAlarms.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpAlarms.java @@ -26,6 +26,7 @@ public class BgpAlarms implements Runnable, AutoCloseable { private final BgpJMXAlarmAgent alarmAgent = new BgpJMXAlarmAgent(); private final BgpConfigurationManager bgpMgr; private final Map neighborsRaisedAlarmStatusMap = new ConcurrentHashMap<>(); + private volatile List nbrList = null; public BgpAlarms(BgpConfigurationManager bgpManager) { bgpMgr = Objects.requireNonNull(bgpManager); @@ -53,7 +54,6 @@ public class BgpAlarms implements Runnable, AutoCloseable { @Override public void run() { - List nbrList = null; LOG.debug("Fetching neighbor status' from BGP"); BgpCounters.resetFile(BgpCounters.BGP_VPNV4_SUMMARY_FILE); BgpCounters.resetFile(BgpCounters.BGP_VPNV6_SUMMARY_FILE);