Implement BGP Prefix Listener for BGP Controler
Change-Id: I8cbb43df45104e5cfd7dc7aa7225e5bf99a8ee37
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpControllerImpl.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpControllerImpl.java
index 804fb80..e23b838 100644
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpControllerImpl.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpControllerImpl.java
@@ -24,6 +24,7 @@
import org.onosproject.bgp.controller.BgpNodeListener;
import org.onosproject.bgp.controller.BgpPeer;
import org.onosproject.bgp.controller.BgpPeerManager;
+import org.onosproject.bgp.controller.BgpPrefixListener;
import org.onosproject.bgp.controller.BgpRouteListener;
import org.onosproject.bgpio.exceptions.BgpParseException;
import org.onosproject.bgpio.protocol.BgpMessage;
@@ -62,6 +63,7 @@
protected Set<BgpNodeListener> bgpNodeListener = new CopyOnWriteArraySet<>();
protected Set<BgpLinkListener> bgpLinkListener = new CopyOnWriteArraySet<>();
+ protected Set<BgpPrefixListener> bgpPrefixListener = new CopyOnWriteArraySet<>();
protected BgpController bgpController;
private BgpConfig bgpconfig = new BgpConfig(this);
private List<String> activeExceptionList = new LinkedList();
@@ -366,4 +368,19 @@
public Set<BgpLinkListener> linkListener() {
return bgpLinkListener;
}
+
+ @Override
+ public void addPrefixListener(BgpPrefixListener listener) {
+ bgpPrefixListener.add(listener);
+ }
+
+ @Override
+ public void removePrefixListener(BgpPrefixListener listener) {
+ bgpPrefixListener.remove(listener);
+ }
+
+ @Override
+ public Set<BgpPrefixListener> prefixListener() {
+ return bgpPrefixListener;
+ }
}
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java
index ece0933..c66b6e4 100644
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java
@@ -14,12 +14,12 @@
package org.onosproject.bgp.controller.impl;
import com.google.common.base.MoreObjects;
-
import org.onosproject.bgp.controller.BgpController;
import org.onosproject.bgp.controller.BgpId;
import org.onosproject.bgp.controller.BgpLinkListener;
import org.onosproject.bgp.controller.BgpLocalRib;
import org.onosproject.bgp.controller.BgpNodeListener;
+import org.onosproject.bgp.controller.BgpPrefixListener;
import org.onosproject.bgp.controller.BgpSessionInfo;
import org.onosproject.bgpio.exceptions.BgpParseException;
import org.onosproject.bgpio.protocol.BgpLSNlri;
@@ -183,10 +183,16 @@
decisionResult = selectionAlgo.compare(prefixTree.get(prefixIdentifier), detailsLocRib);
if (decisionResult <= 0) {
prefixTree.replace(prefixIdentifier, detailsLocRib);
+ for (BgpPrefixListener l : bgpController.prefixListener()) {
+ l.addPrefix((BgpPrefixIPv4LSNlriVer4) nlri, details);
+ }
log.debug("Local RIB update prefix: {}", detailsLocRib.toString());
}
} else {
prefixTree.put(prefixIdentifier, detailsLocRib);
+ for (BgpPrefixListener l : bgpController.prefixListener()) {
+ l.addPrefix((BgpPrefixIPv4LSNlriVer4) nlri, details);
+ }
log.debug("Local RIB add prefix: {}", detailsLocRib.toString());
}
}
@@ -397,6 +403,9 @@
BgpPrefixLSIdentifier prefixIdentifier = ((BgpPrefixIPv4LSNlriVer4) nlri).getPrefixIdentifier();
if (prefixTree.containsKey(prefixIdentifier)) {
log.debug("Local RIB remove prefix: {}", prefixIdentifier.toString());
+ for (BgpPrefixListener l : bgpController.prefixListener()) {
+ l.deletePrefix((BgpPrefixIPv4LSNlriVer4) nlri);
+ }
prefixTree.remove(prefixIdentifier);
}