cfd5a336d96c0763f386cfdd25a551914ecd4d6c
[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 java.util.Dictionary;
14 import java.util.Hashtable;
15
16 import org.apache.felix.dm.DependencyActivatorBase;
17 import org.apache.felix.dm.DependencyManager;
18 import org.opendaylight.neutron.spi.INeutronFirewallAware;
19 import org.opendaylight.neutron.spi.INeutronFirewallPolicyAware;
20 import org.opendaylight.neutron.spi.INeutronFirewallRuleAware;
21 import org.opendaylight.neutron.spi.INeutronFloatingIPAware;
22 import org.opendaylight.neutron.spi.INeutronLoadBalancerAware;
23 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
24 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolAware;
25 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
26 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberAware;
27 import org.opendaylight.neutron.spi.INeutronNetworkAware;
28 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
29 import org.opendaylight.neutron.spi.INeutronPortAware;
30 import org.opendaylight.neutron.spi.INeutronPortCRUD;
31 import org.opendaylight.neutron.spi.INeutronRouterAware;
32 import org.opendaylight.neutron.spi.INeutronSecurityGroupAware;
33 import org.opendaylight.neutron.spi.INeutronSecurityRuleAware;
34 import org.opendaylight.neutron.spi.INeutronSubnetAware;
35 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
36 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
37 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
38 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
39 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
40 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
41 import org.opendaylight.ovsdb.openstack.netvirt.api.InboundNatProvider;
42 import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
43 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
44 import org.opendaylight.ovsdb.openstack.netvirt.api.MultiTenantAwareRouter;
45 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
46 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
47 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
48 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
49 import org.opendaylight.ovsdb.openstack.netvirt.api.OutboundNatProvider;
50 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
51 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
52 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
53 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
54 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
55 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
56 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
57 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
58 import org.opendaylight.ovsdb.openstack.netvirt.impl.NodeCacheManagerImpl;
59 import org.opendaylight.ovsdb.openstack.netvirt.impl.OpenstackRouter;
60 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
61 import org.opendaylight.ovsdb.openstack.netvirt.impl.SecurityServicesImpl;
62 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
63 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
64 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
65 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
66 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
67
68 import org.osgi.framework.BundleContext;
69
70 /**
71  * OSGi bundle activator for the OVSDB Neutron Interface.
72  */
73 public class Activator extends DependencyActivatorBase {
74
75     @Override
76     public void init(BundleContext context, DependencyManager manager) throws Exception {
77
78         manager.add(createComponent()
79                 .setInterface(ConfigurationService.class.getName(), null)
80                 .setImplementation(ConfigurationServiceImpl.class)
81                 .add(createServiceDependency().setService(OvsdbConfigurationService.class)));
82
83         manager.add(createComponent()
84                 .setInterface(BridgeConfigurationManager.class.getName(), null)
85                 .setImplementation(BridgeConfigurationManagerImpl.class)
86                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
87                 .add(createServiceDependency().setService(NetworkingProviderManager.class))
88                 .add(createServiceDependency().setService(OvsdbConfigurationService.class)));
89
90         manager.add(createComponent()
91                 .setInterface(TenantNetworkManager.class.getName(), null)
92                 .setImplementation(TenantNetworkManagerImpl.class)
93                 .add(createServiceDependency().setService(OvsdbConfigurationService.class))
94                 .add(createServiceDependency().setService(OvsdbConnectionService.class))
95                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
96                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
97                 .add(createServiceDependency().setService(VlanConfigurationCache.class)));
98
99         manager.add(createComponent()
100                 .setInterface(VlanConfigurationCache.class.getName(), null)
101                 .setImplementation(VlanConfigurationCacheImpl.class)
102                 .add(createServiceDependency().setService(OvsdbConfigurationService.class))
103                 .add(createServiceDependency().setService(TenantNetworkManager.class)));
104
105         Dictionary<String, Object> floatingIPHandlerPorperties = new Hashtable<>();
106         floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
107                 AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
108
109         manager.add(createComponent()
110                 .setInterface(new String[]{INeutronFloatingIPAware.class.getName(), AbstractHandler.class.getName()},
111                         floatingIPHandlerPorperties)
112                 .setImplementation(FloatingIPHandler.class)
113                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
114                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
115
116         Dictionary<String, Object> networkHandlerProperties = new Hashtable<>();
117         networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_NETWORK);
118
119         manager.add(createComponent()
120                 .setInterface(new String[]{INeutronNetworkAware.class.getName(), AbstractHandler.class.getName()},
121                         networkHandlerProperties)
122                 .setImplementation(NetworkHandler.class)
123                 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
124                 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
125                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
126                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
127                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
128                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
129                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
130
131         Dictionary<String, Object> subnetHandlerProperties = new Hashtable<>();
132         subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
133
134         manager.add(createComponent()
135                 .setInterface(new String[]{INeutronSubnetAware.class.getName(), AbstractHandler.class.getName()},
136                         subnetHandlerProperties)
137                 .setImplementation(SubnetHandler.class)
138                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
139                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
140
141         Dictionary<String, Object> portHandlerProperties = new Hashtable<>();
142         portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
143
144         manager.add(createComponent()
145                 .setInterface(new String[]{INeutronPortAware.class.getName(), AbstractHandler.class.getName()},
146                         portHandlerProperties)
147                 .setImplementation(PortHandler.class)
148                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
149                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
150                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
151                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
152
153         Dictionary<String, Object> routerHandlerProperties = new Hashtable<>();
154         routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
155
156         manager.add(createComponent()
157                 .setInterface(new String[]{INeutronRouterAware.class.getName(), AbstractHandler.class.getName()},
158                         routerHandlerProperties)
159                 .setImplementation(RouterHandler.class)
160                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
161                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
162
163         Dictionary<String, Object> southboundHandlerProperties = new Hashtable<>();
164         southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
165
166         manager.add(createComponent()
167                 .setInterface(new String[]{OvsdbInventoryListener.class.getName(),
168                                 NodeCacheListener.class.getName(),
169                                 AbstractHandler.class.getName()},
170                         southboundHandlerProperties)
171                 .setImplementation(SouthboundHandler.class)
172                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
173                 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
174                 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
175                 .add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true))
176                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
177                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
178                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
179                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true))
180                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
181
182         Dictionary<String, Object> lbaasHandlerProperties = new Hashtable<>();
183         lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
184                 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER);
185
186         manager.add(createComponent()
187                 .setInterface(new String[]{INeutronLoadBalancerAware.class.getName(),
188                                 NodeCacheListener.class.getName(), AbstractHandler.class.getName()},
189                         lbaasHandlerProperties)
190                 .setImplementation(LBaaSHandler.class)
191                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
192                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
193                 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
194                 .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
195                 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
196                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
197                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
198                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
199
200         Dictionary<String, Object> lbaasPoolHandlerProperties = new Hashtable<>();
201         lbaasPoolHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
202                 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL);
203
204         manager.add(createComponent()
205                 .setInterface(new String[]{INeutronLoadBalancerPoolAware.class.getName(),
206                         AbstractHandler.class.getName()}, lbaasPoolHandlerProperties)
207                 .setImplementation(LBaaSPoolHandler.class)
208                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
209                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
210                 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
211                 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
212                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
213                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
214                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
215
216         Dictionary<String, Object> lbaasPoolMemberHandlerProperties = new Hashtable<>();
217         lbaasPoolMemberHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
218                 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL_MEMBER);
219
220         manager.add(createComponent()
221                 .setInterface(new String[]{INeutronLoadBalancerPoolMemberAware.class.getName(),
222                         AbstractHandler.class.getName()}, lbaasPoolMemberHandlerProperties)
223                 .setImplementation(LBaaSPoolMemberHandler.class)
224                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
225                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
226                 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
227                 .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
228                 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
229                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
230                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
231                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
232
233         Dictionary<String, Object> portSecurityHandlerProperties = new Hashtable<>();
234         portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
235                 AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
236
237         manager.add(createComponent()
238                 .setInterface(new String[]{INeutronSecurityRuleAware.class.getName(),
239                                 INeutronSecurityGroupAware.class.getName(), AbstractHandler.class.getName()},
240                         portSecurityHandlerProperties)
241                 .setImplementation(PortSecurityHandler.class)
242                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
243
244         manager.add(createComponent()
245                 .setInterface(new String[]{SecurityServicesManager.class.getName()}, null)
246                 .setImplementation(SecurityServicesImpl.class)
247                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true)));
248
249         Dictionary<String, Object> fWaasHandlerProperties = new Hashtable<>();
250         fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
251
252         manager.add(createComponent()
253                 .setInterface(new String[] {INeutronFirewallAware.class.getName(),
254                                 INeutronFirewallRuleAware.class.getName(), INeutronFirewallPolicyAware.class.getName(),
255                                 AbstractHandler.class.getName()}, fWaasHandlerProperties)
256                 .setImplementation(FWaasHandler.class)
257                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
258
259         manager.add(createComponent()
260                 .setInterface(NetworkingProviderManager.class.getName(), null)
261                 .setImplementation(ProviderNetworkManagerImpl.class)
262                 .add(createServiceDependency().setService(NetworkingProvider.class)
263                         .setCallbacks("providerAdded", "providerRemoved")));
264
265         manager.add(createComponent()
266                 .setInterface(EventDispatcher.class.getName(), null)
267                 .setImplementation(EventDispatcherImpl.class)
268                 .add(createServiceDependency()
269                         .setService(AbstractHandler.class)
270                         .setCallbacks("eventHandlerAdded", "eventHandlerRemoved")));
271
272         manager.add(createComponent()
273                 .setInterface(NeutronL3Adapter.class.getName(), null)
274                 .setImplementation(NeutronL3Adapter.class)
275                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
276                 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
277                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
278                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
279                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
280                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
281                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
282                 /* ToDo, we should probably just use the NetworkingProvider interface
283                  * This should provide a way of getting service implementations
284                  * Either that, or we should do service lookup at runtime based on getProvider().getName()
285                  * This is a shortcut as for now there will only be one implementation of these classes.
286                  */
287                 .add(createServiceDependency().setService(ArpProvider.class).setRequired(false))
288                 .add(createServiceDependency().setService(InboundNatProvider.class).setRequired(false))
289                 .add(createServiceDependency().setService(OutboundNatProvider.class).setRequired(false))
290                 .add(createServiceDependency().setService(RoutingProvider.class).setRequired(false))
291                 .add(createServiceDependency().setService(L3ForwardingProvider.class).setRequired(false)));
292
293         manager.add(createComponent()
294                 .setInterface(MultiTenantAwareRouter.class.getName(), null)
295                 .setImplementation(OpenstackRouter.class));
296
297         Dictionary<String, Object> nodeCacheManagerProperties = new Hashtable<>();
298         nodeCacheManagerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NODE);
299         manager.add(createComponent()
300                 .setInterface(new String[]{NodeCacheManager.class.getName(), AbstractHandler.class.getName()},
301                         nodeCacheManagerProperties)
302                 .setImplementation(NodeCacheManagerImpl.class)
303                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
304                 .add(createServiceDependency().setService(NodeCacheListener.class)
305                         .setCallbacks("cacheListenerAdded", "cacheListenerRemoved")));
306     }
307
308     @Override
309     public void destroy(BundleContext context, DependencyManager manager) throws Exception {
310     }
311 }