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