Jonathan Hart

[Falcon] More flexible component choice for routing apps

Change-Id: I0b01f633332fa7f099d4b3ffe58d86141f3a040b
...@@ -22,6 +22,7 @@ import org.apache.felix.scr.annotations.Reference; ...@@ -22,6 +22,7 @@ import org.apache.felix.scr.annotations.Reference;
22 import org.apache.felix.scr.annotations.ReferenceCardinality; 22 import org.apache.felix.scr.annotations.ReferenceCardinality;
23 import org.onosproject.core.ApplicationId; 23 import org.onosproject.core.ApplicationId;
24 import org.onosproject.core.CoreService; 24 import org.onosproject.core.CoreService;
25 +import org.onosproject.incubator.component.ComponentService;
25 import org.onosproject.incubator.net.intf.InterfaceService; 26 import org.onosproject.incubator.net.intf.InterfaceService;
26 import org.onosproject.net.DeviceId; 27 import org.onosproject.net.DeviceId;
27 import org.onosproject.net.config.NetworkConfigService; 28 import org.onosproject.net.config.NetworkConfigService;
...@@ -36,6 +37,8 @@ import org.onosproject.routing.config.RoutingConfigurationService; ...@@ -36,6 +37,8 @@ import org.onosproject.routing.config.RoutingConfigurationService;
36 import org.slf4j.Logger; 37 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory; 38 import org.slf4j.LoggerFactory;
38 39
40 +import java.util.ArrayList;
41 +import java.util.List;
39 import java.util.Optional; 42 import java.util.Optional;
40 43
41 /** 44 /**
...@@ -72,6 +75,9 @@ public class BgpRouter { ...@@ -72,6 +75,9 @@ public class BgpRouter {
72 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 75 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
73 protected DeviceService deviceService; 76 protected DeviceService deviceService;
74 77
78 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
79 + protected ComponentService componentService;
80 +
75 private ApplicationId appId; 81 private ApplicationId appId;
76 82
77 // Device id of control-plane switch (OVS) connected to BGP Speaker - should be 83 // Device id of control-plane switch (OVS) connected to BGP Speaker - should be
...@@ -85,10 +91,19 @@ public class BgpRouter { ...@@ -85,10 +91,19 @@ public class BgpRouter {
85 private DeviceListener deviceListener; 91 private DeviceListener deviceListener;
86 private IcmpHandler icmpHandler; 92 private IcmpHandler icmpHandler;
87 93
94 + private static List<String> components = new ArrayList<>();
95 + static {
96 + components.add("org.onosproject.routing.bgp.BgpSessionManager");
97 + components.add("org.onosproject.routing.impl.Router");
98 + components.add("org.onosproject.routing.impl.SingleSwitchFibInstaller");
99 + }
100 +
88 @Activate 101 @Activate
89 protected void activate() { 102 protected void activate() {
90 appId = coreService.registerApplication(BGP_ROUTER_APP); 103 appId = coreService.registerApplication(BGP_ROUTER_APP);
91 104
105 + components.forEach(name -> componentService.activate(appId, name));
106 +
92 ApplicationId routerAppId = coreService.getAppId(RoutingService.ROUTER_APP_ID); 107 ApplicationId routerAppId = coreService.getAppId(RoutingService.ROUTER_APP_ID);
93 BgpConfig bgpConfig = 108 BgpConfig bgpConfig =
94 networkConfigService.getConfig(routerAppId, RoutingService.CONFIG_CLASS); 109 networkConfigService.getConfig(routerAppId, RoutingService.CONFIG_CLASS);
...@@ -123,6 +138,8 @@ public class BgpRouter { ...@@ -123,6 +138,8 @@ public class BgpRouter {
123 138
124 @Deactivate 139 @Deactivate
125 protected void deactivate() { 140 protected void deactivate() {
141 + components.forEach(name -> componentService.deactivate(appId, name));
142 +
126 connectivityManager.stop(); 143 connectivityManager.stop();
127 icmpHandler.stop(); 144 icmpHandler.stop();
128 deviceService.removeListener(deviceListener); 145 deviceService.removeListener(deviceListener);
......
...@@ -55,7 +55,7 @@ import static org.onlab.util.Tools.groupedThreads; ...@@ -55,7 +55,7 @@ import static org.onlab.util.Tools.groupedThreads;
55 /** 55 /**
56 * BGP Session Manager class. 56 * BGP Session Manager class.
57 */ 57 */
58 -@Component(immediate = true) 58 +@Component(immediate = true, enabled = false)
59 @Service 59 @Service
60 public class BgpSessionManager implements BgpInfoService, BgpService { 60 public class BgpSessionManager implements BgpInfoService, BgpService {
61 private static final Logger log = 61 private static final Logger log =
......
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.bgprouter; 16 +
17 +package org.onosproject.routing.impl;
17 18
18 import java.util.Objects; 19 import java.util.Objects;
19 20
......
...@@ -13,15 +13,15 @@ ...@@ -13,15 +13,15 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.bgprouter;
17 16
18 -import static com.google.common.base.Preconditions.checkNotNull; 17 +package org.onosproject.routing.impl;
19 -
20 -import java.util.Objects;
21 18
19 +import com.google.common.base.MoreObjects;
22 import org.onlab.packet.IpAddress; 20 import org.onlab.packet.IpAddress;
23 21
24 -import com.google.common.base.MoreObjects; 22 +import java.util.Objects;
23 +
24 +import static com.google.common.base.Preconditions.checkNotNull;
25 25
26 /** 26 /**
27 * Identifier for a next hop group. 27 * Identifier for a next hop group.
......
...@@ -72,7 +72,7 @@ import static org.onosproject.routing.RouteEntry.createBinaryString; ...@@ -72,7 +72,7 @@ import static org.onosproject.routing.RouteEntry.createBinaryString;
72 * (RIB). After route updates have been processed and next hops have been 72 * (RIB). After route updates have been processed and next hops have been
73 * resolved, FIB updates are sent to any listening FIB components. 73 * resolved, FIB updates are sent to any listening FIB components.
74 */ 74 */
75 -@Component(immediate = true) 75 +@Component(immediate = true, enabled = false)
76 @Service 76 @Service
77 public class Router implements RoutingService { 77 public class Router implements RoutingService {
78 78
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 16
17 -package org.onosproject.bgprouter; 17 +package org.onosproject.routing.impl;
18 18
19 import com.google.common.collect.ConcurrentHashMultiset; 19 import com.google.common.collect.ConcurrentHashMultiset;
20 import com.google.common.collect.HashMultimap; 20 import com.google.common.collect.HashMultimap;
...@@ -70,8 +70,8 @@ import java.util.Set; ...@@ -70,8 +70,8 @@ import java.util.Set;
70 /** 70 /**
71 * Programs routes to a single OpenFlow switch. 71 * Programs routes to a single OpenFlow switch.
72 */ 72 */
73 -@Component(immediate = true) 73 +@Component(immediate = true, enabled = false)
74 -public class SingleSwitchRouter { 74 +public class SingleSwitchFibInstaller {
75 75
76 private final Logger log = LoggerFactory.getLogger(getClass()); 76 private final Logger log = LoggerFactory.getLogger(getClass());
77 77
...@@ -129,7 +129,7 @@ public class SingleSwitchRouter { ...@@ -129,7 +129,7 @@ public class SingleSwitchRouter {
129 129
130 getDeviceConfiguration(bgpConfig); 130 getDeviceConfiguration(bgpConfig);
131 131
132 - appId = coreService.getAppId(BgpRouter.BGP_ROUTER_APP); 132 + appId = coreService.getAppId(RoutingService.ROUTER_APP_ID);
133 133
134 deviceListener = new InnerDeviceListener(); 134 deviceListener = new InnerDeviceListener();
135 deviceService.addListener(deviceListener); 135 deviceService.addListener(deviceListener);
...@@ -376,8 +376,8 @@ public class SingleSwitchRouter { ...@@ -376,8 +376,8 @@ public class SingleSwitchRouter {
376 @Override 376 @Override
377 public void update(Collection<FibUpdate> updates, 377 public void update(Collection<FibUpdate> updates,
378 Collection<FibUpdate> withdraws) { 378 Collection<FibUpdate> withdraws) {
379 - SingleSwitchRouter.this.deleteFibEntry(withdraws); 379 + SingleSwitchFibInstaller.this.deleteFibEntry(withdraws);
380 - SingleSwitchRouter.this.updateFibEntry(updates); 380 + SingleSwitchFibInstaller.this.updateFibEntry(updates);
381 } 381 }
382 } 382 }
383 383
......
...@@ -23,6 +23,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality; ...@@ -23,6 +23,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality;
23 import org.onosproject.app.ApplicationService; 23 import org.onosproject.app.ApplicationService;
24 import org.onosproject.core.ApplicationId; 24 import org.onosproject.core.ApplicationId;
25 import org.onosproject.core.CoreService; 25 import org.onosproject.core.CoreService;
26 +import org.onosproject.incubator.component.ComponentService;
26 import org.onosproject.incubator.net.intf.InterfaceService; 27 import org.onosproject.incubator.net.intf.InterfaceService;
27 import org.onosproject.net.config.NetworkConfigService; 28 import org.onosproject.net.config.NetworkConfigService;
28 import org.onosproject.routing.IntentSynchronizationAdminService; 29 import org.onosproject.routing.IntentSynchronizationAdminService;
...@@ -30,6 +31,9 @@ import org.onosproject.routing.IntentSynchronizationService; ...@@ -30,6 +31,9 @@ import org.onosproject.routing.IntentSynchronizationService;
30 import org.onosproject.routing.RoutingService; 31 import org.onosproject.routing.RoutingService;
31 import org.slf4j.Logger; 32 import org.slf4j.Logger;
32 33
34 +import java.util.ArrayList;
35 +import java.util.List;
36 +
33 import static org.slf4j.LoggerFactory.getLogger; 37 import static org.slf4j.LoggerFactory.getLogger;
34 38
35 /** 39 /**
...@@ -59,12 +63,24 @@ public class SdnIp { ...@@ -59,12 +63,24 @@ public class SdnIp {
59 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 63 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 protected IntentSynchronizationAdminService intentSynchronizerAdmin; 64 protected IntentSynchronizationAdminService intentSynchronizerAdmin;
61 65
66 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
67 + protected ComponentService componentService;
68 +
62 private PeerConnectivityManager peerConnectivity; 69 private PeerConnectivityManager peerConnectivity;
63 70
64 private ApplicationId appId; 71 private ApplicationId appId;
65 72
73 + private static List<String> components = new ArrayList<>();
74 + static {
75 + components.add("org.onosproject.routing.bgp.BgpSessionManager");
76 + components.add("org.onosproject.routing.impl.Router");
77 + components.add(org.onosproject.sdnip.SdnIpFib.class.getName());
78 + }
79 +
66 @Activate 80 @Activate
67 protected void activate() { 81 protected void activate() {
82 + components.forEach(name -> componentService.activate(appId, name));
83 +
68 appId = coreService.registerApplication(SDN_IP_APP); 84 appId = coreService.registerApplication(SDN_IP_APP);
69 85
70 peerConnectivity = new PeerConnectivityManager(appId, 86 peerConnectivity = new PeerConnectivityManager(appId,
...@@ -83,6 +99,8 @@ public class SdnIp { ...@@ -83,6 +99,8 @@ public class SdnIp {
83 99
84 @Deactivate 100 @Deactivate
85 protected void deactivate() { 101 protected void deactivate() {
102 + components.forEach(name -> componentService.deactivate(appId, name));
103 +
86 peerConnectivity.stop(); 104 peerConnectivity.stop();
87 105
88 log.info("SDN-IP Stopped"); 106 log.info("SDN-IP Stopped");
......
...@@ -58,7 +58,7 @@ import static com.google.common.base.Preconditions.checkArgument; ...@@ -58,7 +58,7 @@ import static com.google.common.base.Preconditions.checkArgument;
58 /** 58 /**
59 * FIB component of SDN-IP. 59 * FIB component of SDN-IP.
60 */ 60 */
61 -@Component(immediate = true) 61 +@Component(immediate = true, enabled = false)
62 public class SdnIpFib { 62 public class SdnIpFib {
63 private Logger log = LoggerFactory.getLogger(getClass()); 63 private Logger log = LoggerFactory.getLogger(getClass());
64 64
......