Merge "Karaf Feature support for OVS based Openstack Network Virtualization"
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / Activator.java
1 /*
2  * Copyright (C) 2013 Red Hat, Inc.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt;
12
13 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallAware;
14 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyAware;
15 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleAware;
16 import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPAware;
17 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerAware;
18 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolAware;
19 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolMemberAware;
20 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
21 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
22 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
23 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
24 import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;
25 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
26 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
27 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
28 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
29 import org.opendaylight.controller.switchmanager.IInventoryListener;
30 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
31 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
32 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
33 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
34 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
35 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
36 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
37 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
38 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
39 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
40 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
41 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
42 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
43 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
44 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
45 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
46 import org.apache.felix.dm.Component;
47
48 import java.util.Properties;
49
50 /**
51  * OSGi bundle activator for the OVSDB Neutron Interface.
52  */
53 public class Activator extends ComponentActivatorAbstractBase {
54     /**
55      * Function called when the activator starts just after some
56      * initializations are done by the
57      * ComponentActivatorAbstractBase.
58      */
59     @Override
60     public void init() {
61     }
62
63     /**
64      * Function called when the activator stops just before the
65      * cleanup done by ComponentActivatorAbstractBase.
66      *
67      */
68     @Override
69     public void destroy() {
70     }
71
72     /**
73      * Function that is used to communicate to dependency manager the
74      * list of known implementations for services inside a container.
75      *
76      * @return An array containing all the CLASS objects that will be
77      * instantiated in order to get an fully working implementation
78      * Object
79      */
80     @Override
81     public Object[] getImplementations() {
82         Object[] res = {ConfigurationServiceImpl.class,
83                         BridgeConfigurationManagerImpl.class,
84                         TenantNetworkManagerImpl.class,
85                         VlanConfigurationCacheImpl.class,
86                         FloatingIPHandler.class,
87                         NetworkHandler.class,
88                         SubnetHandler.class,
89                         PortHandler.class,
90                         RouterHandler.class,
91                         SouthboundHandler.class,
92                         PortSecurityHandler.class,
93                         ProviderNetworkManagerImpl.class,
94                         EventDispatcherImpl.class,
95                         FWaasHandler.class,
96                         LBaaSHandler.class};
97         return res;
98     }
99
100     /**
101      * Function that is called when configuration of the dependencies
102      * is required.
103      *
104      * @param c dependency manager Component object, used for
105      * configuring the dependencies exported and imported
106      * @param imp Implementation class that is being configured,
107      * needed as long as the same routine can configure multiple
108      * implementations
109      * @param containerName The containerName being configured, this allow
110      * also optional per-container different behavior if needed, usually
111      * should not be the case though.
112      */
113     @Override
114     public void configureInstance(Component c, Object imp,
115                                   String containerName) {
116         if (imp.equals(ConfigurationServiceImpl.class)) {
117             c.setInterface(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class.getName(), null);
118             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
119         }
120
121         if (imp.equals(BridgeConfigurationManagerImpl.class)) {
122             c.setInterface(BridgeConfigurationManager.class.getName(), null);
123             c.add(createServiceDependency().setService(
124                     org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
125             c.add(createServiceDependency().setService(NetworkingProviderManager.class));
126             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
127         }
128
129         if (imp.equals(TenantNetworkManagerImpl.class)) {
130             c.setInterface(TenantNetworkManager.class.getName(), null);
131             c.add(createServiceDependency().setService(NetworkingProviderManager.class));
132             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
133             c.add(createServiceDependency().setService(OvsdbConnectionService.class));
134             c.add(createServiceDependency().
135                     setService(INeutronNetworkCRUD.class).
136                     setRequired(true));
137             c.add(createServiceDependency().
138                     setService(INeutronPortCRUD.class).
139                     setRequired(true));
140             c.add(createServiceDependency().setService(VlanConfigurationCache.class));
141         }
142
143         if (imp.equals(VlanConfigurationCacheImpl.class)) {
144             c.setInterface(VlanConfigurationCache.class.getName(), null);
145             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
146             c.add(createServiceDependency().setService(TenantNetworkManager.class));
147         }
148
149         if (imp.equals(FloatingIPHandler.class)) {
150             Properties floatingIPHandlerPorperties = new Properties();
151             floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
152                                             AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
153             c.setInterface(new String[] {INeutronFloatingIPAware.class.getName(),
154                                          AbstractHandler.class.getName()},
155                            floatingIPHandlerPorperties);
156             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
157             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
158             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
159             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
160         }
161
162         if (imp.equals(NetworkHandler.class)) {
163             Properties networkHandlerProperties = new Properties();
164             networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
165                                          AbstractEvent.HandlerType.NEUTRON_NETWORK);
166             c.setInterface(new String[] {INeutronNetworkAware.class.getName(),
167                                          AbstractHandler.class.getName()},
168                            networkHandlerProperties);
169             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
170             c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
171             c.add(createServiceDependency().setService(
172                     org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
173             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
174             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
175             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
176             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
177             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
178         }
179
180         if (imp.equals(SubnetHandler.class)) {
181             Properties subnetHandlerProperties = new Properties();
182             subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
183             c.setInterface(new String[] {INeutronSubnetAware.class.getName(),
184                                          AbstractHandler.class.getName()},
185                            subnetHandlerProperties);
186             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
187         }
188
189         if (imp.equals(PortHandler.class)) {
190             Properties portHandlerProperties = new Properties();
191             portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
192             c.setInterface(new String[] {INeutronPortAware.class.getName(),
193                                          AbstractHandler.class.getName()},
194                            portHandlerProperties);
195             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
196             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
197             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
198             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
199         }
200
201         if (imp.equals(RouterHandler.class)) {
202             Properties routerHandlerProperties = new Properties();
203             routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
204             c.setInterface(new String[] {INeutronRouterAware.class.getName(),
205                                          AbstractHandler.class.getName()},
206                            routerHandlerProperties);
207             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
208             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
209             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
210             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
211         }
212
213         if (imp.equals(SouthboundHandler.class)) {
214             Properties southboundHandlerProperties = new Properties();
215             southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
216             c.setInterface(new String[] {OvsdbInventoryListener.class.getName(),
217                                          IInventoryListener.class.getName(),
218                                          AbstractHandler.class.getName()},
219                            southboundHandlerProperties);
220             c.add(createServiceDependency().setService(
221                     org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
222             c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
223             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
224             c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
225             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
226             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
227             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
228         }
229
230         if (imp.equals(LBaaSHandler.class)) {
231             Properties lbaasHandlerProperties = new Properties();
232             lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_LBAAS);
233             c.setInterface(new String[] {INeutronLoadBalancerAware.class.getName(),
234                                          INeutronLoadBalancerPoolAware.class.getName(),
235                                          INeutronLoadBalancerPoolMemberAware.class.getName()},
236                                          lbaasHandlerProperties);
237             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
238         }
239
240         if (imp.equals(PortSecurityHandler.class)) {
241             Properties portSecurityHandlerProperties = new Properties();
242             portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
243                                               AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
244             c.setInterface(new String[] {INeutronSecurityRuleAware.class.getName(),
245                                          INeutronSecurityGroupAware.class.getName(),
246                                          AbstractHandler.class.getName()},
247                            portSecurityHandlerProperties);
248             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
249         }
250
251         if (imp.equals(FWaasHandler.class)) {
252             Properties fWaasHandlerProperties = new Properties();
253             fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
254             c.setInterface(new String[] {INeutronFirewallAware.class.getName(),
255                             INeutronFirewallRuleAware.class.getName(),
256                             INeutronFirewallPolicyAware.class.getName(),
257                             AbstractHandler.class.getName()},
258                     fWaasHandlerProperties);
259             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
260         }
261
262         if (imp.equals(ProviderNetworkManagerImpl.class)) {
263             c.setInterface(NetworkingProviderManager.class.getName(), null);
264             c.add(createServiceDependency()
265                     .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
266                     .setRequired(true));
267             c.add(createServiceDependency()
268                     .setService(NetworkingProvider.class)
269                     .setCallbacks("providerAdded", "providerRemoved"));
270         }
271
272         if (imp.equals(EventDispatcherImpl.class)) {
273             c.setInterface(EventDispatcher.class.getName(), null);
274             c.add(createServiceDependency()
275                           .setService(AbstractHandler.class)
276                           .setCallbacks("eventHandlerAdded", "eventHandlerRemoved"));
277         }
278     }
279 }