2 * Copyright (C) 2013 Red Hat, Inc.
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
8 * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
11 package org.opendaylight.ovsdb.openstack.netvirt;
13 import java.util.Dictionary;
14 import java.util.Hashtable;
16 import org.apache.felix.dm.DependencyActivatorBase;
17 import org.apache.felix.dm.DependencyManager;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
19 import org.opendaylight.neutron.spi.INeutronFirewallAware;
20 import org.opendaylight.neutron.spi.INeutronFirewallPolicyAware;
21 import org.opendaylight.neutron.spi.INeutronFirewallRuleAware;
22 import org.opendaylight.neutron.spi.INeutronFloatingIPAware;
23 import org.opendaylight.neutron.spi.INeutronLoadBalancerAware;
24 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
25 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolAware;
26 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
27 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberAware;
28 import org.opendaylight.neutron.spi.INeutronNetworkAware;
29 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
30 import org.opendaylight.neutron.spi.INeutronPortAware;
31 import org.opendaylight.neutron.spi.INeutronPortCRUD;
32 import org.opendaylight.neutron.spi.INeutronRouterAware;
33 import org.opendaylight.neutron.spi.INeutronSecurityGroupAware;
34 import org.opendaylight.neutron.spi.INeutronSecurityRuleAware;
35 import org.opendaylight.neutron.spi.INeutronSubnetAware;
36 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
37 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
38 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
39 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
40 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
41 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
42 import org.opendaylight.ovsdb.openstack.netvirt.api.InboundNatProvider;
43 import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
44 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
45 import org.opendaylight.ovsdb.openstack.netvirt.api.MultiTenantAwareRouter;
46 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
47 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
48 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
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.OvsdbConnectionService;
52 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
53 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
54 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
55 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
56 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
57 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
58 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
59 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
60 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
61 import org.opendaylight.ovsdb.openstack.netvirt.impl.OvsdbInventoryServiceImpl;
62 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
63 import org.opendaylight.ovsdb.openstack.netvirt.impl.NodeCacheManagerImpl;
64 import org.opendaylight.ovsdb.openstack.netvirt.impl.OpenstackRouter;
65 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
66 import org.opendaylight.ovsdb.openstack.netvirt.impl.SecurityServicesImpl;
67 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
68 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
70 import org.osgi.framework.BundleContext;
73 * OSGi bundle activator for the OVSDB Neutron Interface.
75 public class Activator extends DependencyActivatorBase {
78 public void init(BundleContext context, DependencyManager manager) throws Exception {
80 manager.add(createComponent()
81 .setInterface(ConfigurationService.class.getName(), null)
82 .setImplementation(ConfigurationServiceImpl.class));
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)));
90 manager.add(createComponent()
91 .setInterface(TenantNetworkManager.class.getName(), null)
92 .setImplementation(TenantNetworkManagerImpl.class)
93 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
94 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
95 .add(createServiceDependency().setService(VlanConfigurationCache.class)));
97 manager.add(createComponent()
98 .setInterface(VlanConfigurationCache.class.getName(), null)
99 .setImplementation(VlanConfigurationCacheImpl.class)
100 .add(createServiceDependency().setService(TenantNetworkManager.class)));
102 Dictionary<String, Object> floatingIPHandlerPorperties = new Hashtable<>();
103 floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
104 AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
106 manager.add(createComponent()
107 .setInterface(new String[]{INeutronFloatingIPAware.class.getName(), AbstractHandler.class.getName()},
108 floatingIPHandlerPorperties)
109 .setImplementation(FloatingIPHandler.class)
110 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
111 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
113 Dictionary<String, Object> networkHandlerProperties = new Hashtable<>();
114 networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_NETWORK);
116 manager.add(createComponent()
117 .setInterface(new String[]{INeutronNetworkAware.class.getName(), AbstractHandler.class.getName()},
118 networkHandlerProperties)
119 .setImplementation(NetworkHandler.class)
120 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
121 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
122 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
123 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
124 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
125 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
127 Dictionary<String, Object> subnetHandlerProperties = new Hashtable<>();
128 subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
130 manager.add(createComponent()
131 .setInterface(new String[]{INeutronSubnetAware.class.getName(), AbstractHandler.class.getName()},
132 subnetHandlerProperties)
133 .setImplementation(SubnetHandler.class)
134 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
135 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
137 Dictionary<String, Object> portHandlerProperties = new Hashtable<>();
138 portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
140 manager.add(createComponent()
141 .setInterface(new String[]{INeutronPortAware.class.getName(), AbstractHandler.class.getName()},
142 portHandlerProperties)
143 .setImplementation(PortHandler.class)
144 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
145 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
146 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
148 Dictionary<String, Object> routerHandlerProperties = new Hashtable<>();
149 routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
151 manager.add(createComponent()
152 .setInterface(new String[]{INeutronRouterAware.class.getName(), AbstractHandler.class.getName()},
153 routerHandlerProperties)
154 .setImplementation(RouterHandler.class)
155 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
156 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
158 Dictionary<String, Object> southboundHandlerProperties = new Hashtable<>();
159 southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
161 manager.add(createComponent()
162 .setInterface(new String[]{OvsdbInventoryListener.class.getName(),
163 NodeCacheListener.class.getName(),
164 AbstractHandler.class.getName()},
165 southboundHandlerProperties)
166 .setImplementation(SouthboundHandler.class)
167 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
168 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
169 //.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
170 .add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true))
171 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
172 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
173 //.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true))
174 .add(createServiceDependency().setService(OvsdbInventoryService.class).setRequired(true))
175 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
177 Dictionary<String, Object> lbaasHandlerProperties = new Hashtable<>();
178 lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
179 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER);
181 manager.add(createComponent()
182 .setInterface(new String[]{INeutronLoadBalancerAware.class.getName(),
183 NodeCacheListener.class.getName(), AbstractHandler.class.getName()},
184 lbaasHandlerProperties)
185 .setImplementation(LBaaSHandler.class)
186 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
187 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
188 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
189 .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
190 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
191 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
192 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
193 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
195 Dictionary<String, Object> lbaasPoolHandlerProperties = new Hashtable<>();
196 lbaasPoolHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
197 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL);
199 manager.add(createComponent()
200 .setInterface(new String[]{INeutronLoadBalancerPoolAware.class.getName(),
201 AbstractHandler.class.getName()}, lbaasPoolHandlerProperties)
202 .setImplementation(LBaaSPoolHandler.class)
203 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
204 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
205 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
206 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
207 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
208 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
209 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
211 Dictionary<String, Object> lbaasPoolMemberHandlerProperties = new Hashtable<>();
212 lbaasPoolMemberHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
213 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL_MEMBER);
215 manager.add(createComponent()
216 .setInterface(new String[]{INeutronLoadBalancerPoolMemberAware.class.getName(),
217 AbstractHandler.class.getName()}, lbaasPoolMemberHandlerProperties)
218 .setImplementation(LBaaSPoolMemberHandler.class)
219 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
220 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
221 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
222 .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
223 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
224 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
225 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
226 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
228 Dictionary<String, Object> portSecurityHandlerProperties = new Hashtable<>();
229 portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
230 AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
232 manager.add(createComponent()
233 .setInterface(new String[]{INeutronSecurityRuleAware.class.getName(),
234 INeutronSecurityGroupAware.class.getName(), AbstractHandler.class.getName()},
235 portSecurityHandlerProperties)
236 .setImplementation(PortSecurityHandler.class)
237 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
239 manager.add(createComponent()
240 .setInterface(new String[]{SecurityServicesManager.class.getName()}, null)
241 .setImplementation(SecurityServicesImpl.class)
242 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true)));
244 Dictionary<String, Object> fWaasHandlerProperties = new Hashtable<>();
245 fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
247 manager.add(createComponent()
248 .setInterface(new String[]{INeutronFirewallAware.class.getName(),
249 INeutronFirewallRuleAware.class.getName(), INeutronFirewallPolicyAware.class.getName(),
250 AbstractHandler.class.getName()}, fWaasHandlerProperties)
251 .setImplementation(FWaasHandler.class)
252 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
254 manager.add(createComponent()
255 .setInterface(NetworkingProviderManager.class.getName(), null)
256 .setImplementation(ProviderNetworkManagerImpl.class)
257 .add(createServiceDependency().setService(NetworkingProvider.class)
258 .setCallbacks("providerAdded", "providerRemoved")));
260 manager.add(createComponent()
261 .setInterface(EventDispatcher.class.getName(), null)
262 .setImplementation(EventDispatcherImpl.class)
263 .add(createServiceDependency()
264 .setService(AbstractHandler.class)
265 .setCallbacks("eventHandlerAdded", "eventHandlerRemoved")));
267 manager.add(createComponent()
268 .setInterface(NeutronL3Adapter.class.getName(), null)
269 .setImplementation(NeutronL3Adapter.class)
270 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
271 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
272 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
273 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
274 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
275 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
276 .add(createServiceDependency().setService(ArpProvider.class).setRequired(false))
277 .add(createServiceDependency().setService(InboundNatProvider.class).setRequired(false))
278 .add(createServiceDependency().setService(OutboundNatProvider.class).setRequired(false))
279 .add(createServiceDependency().setService(RoutingProvider.class).setRequired(false))
280 .add(createServiceDependency().setService(L3ForwardingProvider.class).setRequired(false)));
282 manager.add(createComponent()
283 .setInterface(MultiTenantAwareRouter.class.getName(), null)
284 .setImplementation(OpenstackRouter.class));
286 Dictionary<String, Object> nodeCacheManagerProperties = new Hashtable<>();
287 nodeCacheManagerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NODE);
288 manager.add(createComponent()
289 .setInterface(new String[]{NodeCacheManager.class.getName(), AbstractHandler.class.getName()},
290 nodeCacheManagerProperties)
291 .setImplementation(NodeCacheManagerImpl.class)
292 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
293 .add(createServiceDependency().setService(NodeCacheListener.class)
294 .setCallbacks("cacheListenerAdded", "cacheListenerRemoved")));
296 manager.add(createComponent()
297 .setInterface(new String[] {OvsdbConnectionService.class.getName(),
298 OvsdbInventoryService.class.getName()}, null)
299 .setImplementation(OvsdbInventoryServiceImpl.class)
300 .add(createServiceDependency().setService(OvsdbInventoryListener.class)
301 .setCallbacks("listenerAdded", "listenerRemoved"))
302 .add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true)));
306 public void destroy(BundleContext context, DependencyManager manager) throws Exception {