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 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;
48 import java.util.Properties;
51 * OSGi bundle activator for the OVSDB Neutron Interface.
53 public class Activator extends ComponentActivatorAbstractBase {
55 * Function called when the activator starts just after some
56 * initializations are done by the
57 * ComponentActivatorAbstractBase.
64 * Function called when the activator stops just before the
65 * cleanup done by ComponentActivatorAbstractBase.
69 public void destroy() {
73 * Function that is used to communicate to dependency manager the
74 * list of known implementations for services inside a container.
76 * @return An array containing all the CLASS objects that will be
77 * instantiated in order to get an fully working implementation
81 public Object[] getImplementations() {
82 Object[] res = {ConfigurationServiceImpl.class,
83 BridgeConfigurationManagerImpl.class,
84 TenantNetworkManagerImpl.class,
85 VlanConfigurationCacheImpl.class,
86 FloatingIPHandler.class,
91 SouthboundHandler.class,
92 PortSecurityHandler.class,
93 ProviderNetworkManagerImpl.class,
94 EventDispatcherImpl.class,
101 * Function that is called when configuration of the dependencies
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
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.
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));
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));
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).
137 c.add(createServiceDependency().
138 setService(INeutronPortCRUD.class).
140 c.add(createServiceDependency().setService(VlanConfigurationCache.class));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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)
267 c.add(createServiceDependency()
268 .setService(NetworkingProvider.class)
269 .setCallbacks("providerAdded", "providerRemoved"));
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"));