Carry information about source ONOS node in each route.
Change-Id: I4877a048771935e3dbe310272e0b82c77b8678af
diff --git a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java
index 96f3a92..2c73dc0 100644
--- a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java
+++ b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java
@@ -17,6 +17,7 @@
package org.onosproject.routing.bgp;
import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.ClusterService;
import org.onosproject.incubator.net.routing.Route;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,14 +33,17 @@
LoggerFactory.getLogger(BgpRouteSelector.class);
private BgpSessionManager bgpSessionManager;
+ private ClusterService clusterService;
/**
* Constructor.
*
* @param bgpSessionManager the BGP Session Manager to use
+ * @param clusterService the cluster service
*/
- BgpRouteSelector(BgpSessionManager bgpSessionManager) {
+ BgpRouteSelector(BgpSessionManager bgpSessionManager, ClusterService clusterService) {
this.bgpSessionManager = bgpSessionManager;
+ this.clusterService = clusterService;
}
/**
@@ -82,7 +86,7 @@
Collection<Route> withdraws) {
if (routeUpdate != null) {
Route route = new Route(Route.Source.BGP, routeUpdate.routeEntry().prefix(),
- routeUpdate.routeEntry().nextHop());
+ routeUpdate.routeEntry().nextHop(), clusterService.getLocalNode().id());
if (routeUpdate.type().equals(RouteUpdate.Type.UPDATE)) {
updates.add(route);
} else if (routeUpdate.type().equals(RouteUpdate.Type.DELETE)) {
diff --git a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
index a8cf5d8..e9e851b 100644
--- a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
+++ b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
@@ -37,6 +37,7 @@
import org.onlab.packet.Ip4Prefix;
import org.onlab.packet.Ip6Prefix;
import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.ClusterService;
import org.onosproject.incubator.net.routing.Route;
import org.onosproject.incubator.net.routing.RouteAdminService;
import org.osgi.service.component.ComponentContext;
@@ -66,6 +67,9 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected RouteAdminService routeService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ClusterService clusterService;
+
boolean isShutdown = true;
private Channel serverChannel; // Listener for incoming BGP connections
private ServerBootstrap serverBootstrap;
@@ -74,7 +78,7 @@
new ConcurrentHashMap<>();
private Ip4Address myBgpId; // Same BGP ID for all peers
- private BgpRouteSelector bgpRouteSelector = new BgpRouteSelector(this);
+ private BgpRouteSelector bgpRouteSelector;
private ConcurrentMap<Ip4Prefix, BgpRouteEntry> bgpRoutes4 =
new ConcurrentHashMap<>();
private ConcurrentMap<Ip6Prefix, BgpRouteEntry> bgpRoutes6 =
@@ -85,6 +89,7 @@
@Activate
protected void activate(ComponentContext context) {
+ bgpRouteSelector = new BgpRouteSelector(this, clusterService);
readComponentConfiguration(context);
start();
log.info("BgpSessionManager started");
diff --git a/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java b/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
index 9f9ad3c..3bbad0c 100644
--- a/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
+++ b/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
@@ -34,6 +34,10 @@
import org.onlab.junit.TestUtils.TestUtilsException;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.Ip4Prefix;
+import org.onlab.packet.IpAddress;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.DefaultControllerNode;
+import org.onosproject.cluster.NodeId;
import org.onosproject.incubator.net.routing.RouteAdminService;
import org.osgi.service.component.ComponentContext;
@@ -80,6 +84,9 @@
private static final long DEFAULT_MULTI_EXIT_DISC = 20;
private static final long BETTER_MULTI_EXIT_DISC = 30;
+ private static final NodeId NODE_ID = new NodeId("local");
+ private static final IpAddress LOCAL = IpAddress.valueOf("127.0.0.1");
+
BgpRouteEntry.AsPath asPathShort;
BgpRouteEntry.AsPath asPathLong;
@@ -255,6 +262,12 @@
replay(routeService);
bgpSessionManager.routeService = routeService;
+ ClusterService clusterService = createMock(ClusterService.class);
+ expect(clusterService.getLocalNode())
+ .andReturn(new DefaultControllerNode(NODE_ID, LOCAL)).anyTimes();
+ replay(clusterService);
+ bgpSessionManager.clusterService = clusterService;
+
// NOTE: We use port 0 to bind on any available port
ComponentContext componentContext = createMock(ComponentContext.class);
getDictionaryMock(componentContext);