Jonathan Hart

Move BGP listen port configuration to BgpSessionManager component

Change-Id: I445bff180740fededacaa59441fc53332cc3d482
...@@ -24,9 +24,8 @@ public interface BgpService { ...@@ -24,9 +24,8 @@ public interface BgpService {
24 * Starts the BGP service. 24 * Starts the BGP service.
25 * 25 *
26 * @param routeListener listener to send route updates to 26 * @param routeListener listener to send route updates to
27 - * @param bgpPort port number to listen on
28 */ 27 */
29 - void start(RouteListener routeListener, int bgpPort); 28 + void start(RouteListener routeListener);
30 29
31 /** 30 /**
32 * Stops the BGP service. 31 * Stops the BGP service.
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
55 </dependency> 55 </dependency>
56 56
57 <dependency> 57 <dependency>
58 + <groupId>org.osgi</groupId>
59 + <artifactId>org.osgi.compendium</artifactId>
60 + </dependency>
61 +
62 + <dependency>
58 <groupId>org.apache.karaf.shell</groupId> 63 <groupId>org.apache.karaf.shell</groupId>
59 <artifactId>org.apache.karaf.shell.console</artifactId> 64 <artifactId>org.apache.karaf.shell.console</artifactId>
60 </dependency> 65 </dependency>
......
...@@ -124,7 +124,7 @@ public class Router implements RoutingService { ...@@ -124,7 +124,7 @@ public class Router implements RoutingService {
124 this.fibComponent = checkNotNull(listener); 124 this.fibComponent = checkNotNull(listener);
125 this.hostService.addListener(hostListener); 125 this.hostService.addListener(hostListener);
126 126
127 - bgpService.start(new InternalRouteListener(), 2000); 127 + bgpService.start(new InternalRouteListener());
128 128
129 bgpUpdatesExecutor.execute(new Runnable() { 129 bgpUpdatesExecutor.execute(new Runnable() {
130 @Override 130 @Override
......
...@@ -15,7 +15,11 @@ ...@@ -15,7 +15,11 @@
15 */ 15 */
16 package org.onosproject.routing.bgp; 16 package org.onosproject.routing.bgp;
17 17
18 +import org.osgi.service.component.ComponentContext;
19 +import org.apache.felix.scr.annotations.Activate;
18 import org.apache.felix.scr.annotations.Component; 20 import org.apache.felix.scr.annotations.Component;
21 +import org.apache.felix.scr.annotations.Deactivate;
22 +import org.apache.felix.scr.annotations.Modified;
19 import org.apache.felix.scr.annotations.Service; 23 import org.apache.felix.scr.annotations.Service;
20 import org.jboss.netty.bootstrap.ServerBootstrap; 24 import org.jboss.netty.bootstrap.ServerBootstrap;
21 import org.jboss.netty.channel.Channel; 25 import org.jboss.netty.channel.Channel;
...@@ -40,6 +44,7 @@ import java.net.InetAddress; ...@@ -40,6 +44,7 @@ import java.net.InetAddress;
40 import java.net.InetSocketAddress; 44 import java.net.InetSocketAddress;
41 import java.net.SocketAddress; 45 import java.net.SocketAddress;
42 import java.util.Collection; 46 import java.util.Collection;
47 +import java.util.Dictionary;
43 import java.util.concurrent.ConcurrentHashMap; 48 import java.util.concurrent.ConcurrentHashMap;
44 import java.util.concurrent.ConcurrentMap; 49 import java.util.concurrent.ConcurrentMap;
45 50
...@@ -72,6 +77,47 @@ public class BgpSessionManager implements BgpInfoService, BgpService { ...@@ -72,6 +77,47 @@ public class BgpSessionManager implements BgpInfoService, BgpService {
72 77
73 private RouteListener routeListener; 78 private RouteListener routeListener;
74 79
80 + private static final int DEFAULT_BGP_PORT = 2000;
81 + private int bgpPort;
82 +
83 + @Activate
84 + protected void activate(ComponentContext context) {
85 + readComponentConfiguration(context);
86 + log.info("BgpSessionManager started");
87 + }
88 +
89 + @Deactivate
90 + protected void deactivate() {
91 + log.info("BgpSessionManager stopped");
92 + }
93 +
94 + /**
95 + * Extracts properties from the component configuration context.
96 + *
97 + * @param context the component context
98 + */
99 + private void readComponentConfiguration(ComponentContext context) {
100 + Dictionary<?, ?> properties = context.getProperties();
101 + try {
102 + String strPort = (String) properties.get("bgpPort");
103 + if (strPort != null) {
104 + bgpPort = Integer.parseInt(strPort);
105 + } else {
106 + bgpPort = DEFAULT_BGP_PORT;
107 + }
108 + } catch (Exception e) {
109 + bgpPort = DEFAULT_BGP_PORT;
110 + }
111 + log.debug("BGP port is set to {}", bgpPort);
112 + }
113 +
114 + @Modified
115 + public void modified(ComponentContext context) {
116 + // Blank @Modified method to catch modifications to the context.
117 + // If no @Modified method exists, it seems @Activate is called again
118 + // when the context is modified.
119 + }
120 +
75 /** 121 /**
76 * Checks whether the BGP Session Manager is shutdown. 122 * Checks whether the BGP Session Manager is shutdown.
77 * 123 *
...@@ -245,7 +291,7 @@ public class BgpSessionManager implements BgpInfoService, BgpService { ...@@ -245,7 +291,7 @@ public class BgpSessionManager implements BgpInfoService, BgpService {
245 } 291 }
246 292
247 @Override 293 @Override
248 - public void start(RouteListener routeListener, int listenPortNumber) { 294 + public void start(RouteListener routeListener) {
249 log.debug("BGP Session Manager start."); 295 log.debug("BGP Session Manager start.");
250 isShutdown = false; 296 isShutdown = false;
251 297
...@@ -271,7 +317,7 @@ public class BgpSessionManager implements BgpInfoService, BgpService { ...@@ -271,7 +317,7 @@ public class BgpSessionManager implements BgpInfoService, BgpService {
271 } 317 }
272 }; 318 };
273 InetSocketAddress listenAddress = 319 InetSocketAddress listenAddress =
274 - new InetSocketAddress(listenPortNumber); 320 + new InetSocketAddress(bgpPort);
275 321
276 serverBootstrap = new ServerBootstrap(channelFactory); 322 serverBootstrap = new ServerBootstrap(channelFactory);
277 // serverBootstrap.setOptions("reuseAddr", true); 323 // serverBootstrap.setOptions("reuseAddr", true);
......
...@@ -78,7 +78,7 @@ public class RouterAsyncArpTest { ...@@ -78,7 +78,7 @@ public class RouterAsyncArpTest {
78 hostService = createMock(HostService.class); 78 hostService = createMock(HostService.class);
79 79
80 BgpService bgpService = createMock(BgpService.class); 80 BgpService bgpService = createMock(BgpService.class);
81 - bgpService.start(anyObject(RouteListener.class), anyInt()); 81 + bgpService.start(anyObject(RouteListener.class));
82 bgpService.stop(); 82 bgpService.stop();
83 replay(bgpService); 83 replay(bgpService);
84 84
......
...@@ -84,7 +84,7 @@ public class RouterTest { ...@@ -84,7 +84,7 @@ public class RouterTest {
84 setUpHostService(); 84 setUpHostService();
85 85
86 BgpService bgpService = createMock(BgpService.class); 86 BgpService bgpService = createMock(BgpService.class);
87 - bgpService.start(anyObject(RouteListener.class), anyInt()); 87 + bgpService.start(anyObject(RouteListener.class));
88 bgpService.stop(); 88 bgpService.stop();
89 replay(bgpService); 89 replay(bgpService);
90 90
......
...@@ -35,16 +35,21 @@ import org.onlab.packet.Ip4Address; ...@@ -35,16 +35,21 @@ import org.onlab.packet.Ip4Address;
35 import org.onlab.packet.Ip4Prefix; 35 import org.onlab.packet.Ip4Prefix;
36 import org.onosproject.routingapi.RouteListener; 36 import org.onosproject.routingapi.RouteListener;
37 import org.onosproject.routingapi.RouteUpdate; 37 import org.onosproject.routingapi.RouteUpdate;
38 +import org.osgi.service.component.ComponentContext;
38 39
39 import java.net.InetAddress; 40 import java.net.InetAddress;
40 import java.net.InetSocketAddress; 41 import java.net.InetSocketAddress;
41 import java.net.SocketAddress; 42 import java.net.SocketAddress;
42 import java.util.ArrayList; 43 import java.util.ArrayList;
43 import java.util.Collection; 44 import java.util.Collection;
45 +import java.util.Dictionary;
44 import java.util.LinkedList; 46 import java.util.LinkedList;
45 import java.util.concurrent.Executors; 47 import java.util.concurrent.Executors;
46 import java.util.concurrent.TimeUnit; 48 import java.util.concurrent.TimeUnit;
47 49
50 +import static org.easymock.EasyMock.createMock;
51 +import static org.easymock.EasyMock.expect;
52 +import static org.easymock.EasyMock.replay;
48 import static org.hamcrest.Matchers.hasSize; 53 import static org.hamcrest.Matchers.hasSize;
49 import static org.hamcrest.Matchers.is; 54 import static org.hamcrest.Matchers.is;
50 import static org.hamcrest.Matchers.notNullValue; 55 import static org.hamcrest.Matchers.notNullValue;
...@@ -252,7 +257,14 @@ public class BgpSessionManagerTest { ...@@ -252,7 +257,14 @@ public class BgpSessionManagerTest {
252 // 257 //
253 bgpSessionManager = new BgpSessionManager(); 258 bgpSessionManager = new BgpSessionManager();
254 // NOTE: We use port 0 to bind on any available port 259 // NOTE: We use port 0 to bind on any available port
255 - bgpSessionManager.start(dummyRouteListener, 0); 260 + ComponentContext componentContext = createMock(ComponentContext.class);
261 + Dictionary<String, String> dictionary = createMock(Dictionary.class);
262 + expect(dictionary.get("bgpPort")).andReturn("0");
263 + replay(dictionary);
264 + expect(componentContext.getProperties()).andReturn(dictionary);
265 + replay(componentContext);
266 + bgpSessionManager.activate(componentContext);
267 + bgpSessionManager.start(dummyRouteListener);
256 268
257 // Get the port number the BGP Session Manager is listening on 269 // Get the port number the BGP Session Manager is listening on
258 Channel serverChannel = TestUtils.getField(bgpSessionManager, 270 Channel serverChannel = TestUtils.getField(bgpSessionManager,
......
...@@ -55,11 +55,6 @@ ...@@ -55,11 +55,6 @@
55 </dependency> 55 </dependency>
56 56
57 <dependency> 57 <dependency>
58 - <groupId>org.osgi</groupId>
59 - <artifactId>org.osgi.compendium</artifactId>
60 - </dependency>
61 -
62 - <dependency>
63 <groupId>org.onosproject</groupId> 58 <groupId>org.onosproject</groupId>
64 <artifactId>onlab-misc</artifactId> 59 <artifactId>onlab-misc</artifactId>
65 </dependency> 60 </dependency>
......
...@@ -18,7 +18,6 @@ package org.onosproject.sdnip; ...@@ -18,7 +18,6 @@ package org.onosproject.sdnip;
18 import org.apache.felix.scr.annotations.Activate; 18 import org.apache.felix.scr.annotations.Activate;
19 import org.apache.felix.scr.annotations.Component; 19 import org.apache.felix.scr.annotations.Component;
20 import org.apache.felix.scr.annotations.Deactivate; 20 import org.apache.felix.scr.annotations.Deactivate;
21 -import org.apache.felix.scr.annotations.Modified;
22 import org.apache.felix.scr.annotations.Reference; 21 import org.apache.felix.scr.annotations.Reference;
23 import org.apache.felix.scr.annotations.ReferenceCardinality; 22 import org.apache.felix.scr.annotations.ReferenceCardinality;
24 import org.apache.felix.scr.annotations.Service; 23 import org.apache.felix.scr.annotations.Service;
...@@ -34,11 +33,8 @@ import org.onosproject.net.host.HostService; ...@@ -34,11 +33,8 @@ import org.onosproject.net.host.HostService;
34 import org.onosproject.net.intent.IntentService; 33 import org.onosproject.net.intent.IntentService;
35 import org.onosproject.routingapi.RoutingService; 34 import org.onosproject.routingapi.RoutingService;
36 import org.onosproject.sdnip.config.SdnIpConfigurationReader; 35 import org.onosproject.sdnip.config.SdnIpConfigurationReader;
37 -import org.osgi.service.component.ComponentContext;
38 import org.slf4j.Logger; 36 import org.slf4j.Logger;
39 37
40 -import java.util.Dictionary;
41 -
42 import static org.slf4j.LoggerFactory.getLogger; 38 import static org.slf4j.LoggerFactory.getLogger;
43 39
44 /** 40 /**
...@@ -77,9 +73,6 @@ public class SdnIp implements SdnIpService { ...@@ -77,9 +73,6 @@ public class SdnIp implements SdnIpService {
77 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 73 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
78 protected NetworkConfigService networkConfigService; 74 protected NetworkConfigService networkConfigService;
79 75
80 - private static final int DEFAULT_BGP_PORT = 2000;
81 - private int bgpPort;
82 -
83 private IntentSynchronizer intentSynchronizer; 76 private IntentSynchronizer intentSynchronizer;
84 private SdnIpConfigurationReader config; 77 private SdnIpConfigurationReader config;
85 private PeerConnectivityManager peerConnectivity; 78 private PeerConnectivityManager peerConnectivity;
...@@ -90,9 +83,8 @@ public class SdnIp implements SdnIpService { ...@@ -90,9 +83,8 @@ public class SdnIp implements SdnIpService {
90 private ControllerNode localControllerNode; 83 private ControllerNode localControllerNode;
91 84
92 @Activate 85 @Activate
93 - protected void activate(ComponentContext context) { 86 + protected void activate() {
94 log.info("SDN-IP started"); 87 log.info("SDN-IP started");
95 - readComponentConfiguration(context);
96 88
97 appId = coreService.registerApplication(SDN_IP_APP); 89 appId = coreService.registerApplication(SDN_IP_APP);
98 config = new SdnIpConfigurationReader(); 90 config = new SdnIpConfigurationReader();
...@@ -117,9 +109,6 @@ public class SdnIp implements SdnIpService { ...@@ -117,9 +109,6 @@ public class SdnIp implements SdnIpService {
117 109
118 leadershipService.addListener(leadershipEventListener); 110 leadershipService.addListener(leadershipEventListener);
119 leadershipService.runForLeadership(appId.name()); 111 leadershipService.runForLeadership(appId.name());
120 -
121 - log.info("Starting BGP with port {}", bgpPort);
122 - // TODO feed port information through to the BgpService
123 } 112 }
124 113
125 @Deactivate 114 @Deactivate
...@@ -134,33 +123,6 @@ public class SdnIp implements SdnIpService { ...@@ -134,33 +123,6 @@ public class SdnIp implements SdnIpService {
134 log.info("SDN-IP Stopped"); 123 log.info("SDN-IP Stopped");
135 } 124 }
136 125
137 - /**
138 - * Extracts properties from the component configuration context.
139 - *
140 - * @param context the component context
141 - */
142 - private void readComponentConfiguration(ComponentContext context) {
143 - Dictionary<?, ?> properties = context.getProperties();
144 - try {
145 - String strPort = (String) properties.get("bgpPort");
146 - if (strPort != null) {
147 - bgpPort = Integer.parseInt(strPort);
148 - } else {
149 - bgpPort = DEFAULT_BGP_PORT;
150 - }
151 - } catch (Exception e) {
152 - bgpPort = DEFAULT_BGP_PORT;
153 - }
154 - log.debug("BGP port is set to {}", bgpPort);
155 - }
156 -
157 - @Modified
158 - public void modified(ComponentContext context) {
159 - // Blank @Modified method to catch modifications to the context.
160 - // If no @Modified method exists, it seems @Activate is called again
161 - // when the context is modified.
162 - }
163 -
164 @Override 126 @Override
165 public void modifyPrimary(boolean isPrimary) { 127 public void modifyPrimary(boolean isPrimary) {
166 intentSynchronizer.leaderChanged(isPrimary); 128 intentSynchronizer.leaderChanged(isPrimary);
......