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.MultiTenantAwareRouter;
34 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
35 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
36 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
37 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
38 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
39 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
40 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
41 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
42 import org.opendaylight.ovsdb.openstack.netvirt.impl.OpenstackRouter;
43 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
44 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
45 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
46 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
47 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
48 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
49 import org.apache.felix.dm.Component;
51 import java.util.Properties;
54 * OSGi bundle activator for the OVSDB Neutron Interface.
56 public class Activator extends ComponentActivatorAbstractBase {
58 * Function called when the activator starts just after some
59 * initializations are done by the
60 * ComponentActivatorAbstractBase.
67 * Function called when the activator stops just before the
68 * cleanup done by ComponentActivatorAbstractBase.
72 public void destroy() {
76 * Function that is used to communicate to dependency manager the
77 * list of known implementations for services inside a container.
79 * @return An array containing all the CLASS objects that will be
80 * instantiated in order to get an fully working implementation
84 public Object[] getImplementations() {
85 Object[] res = {ConfigurationServiceImpl.class,
86 BridgeConfigurationManagerImpl.class,
87 TenantNetworkManagerImpl.class,
88 VlanConfigurationCacheImpl.class,
89 FloatingIPHandler.class,
94 SouthboundHandler.class,
95 PortSecurityHandler.class,
96 ProviderNetworkManagerImpl.class,
97 EventDispatcherImpl.class,
100 NeutronL3Adapter.class,
101 OpenstackRouter.class};
106 * Function that is called when configuration of the dependencies
109 * @param c dependency manager Component object, used for
110 * configuring the dependencies exported and imported
111 * @param imp Implementation class that is being configured,
112 * needed as long as the same routine can configure multiple
114 * @param containerName The containerName being configured, this allow
115 * also optional per-container different behavior if needed, usually
116 * should not be the case though.
119 public void configureInstance(Component c, Object imp,
120 String containerName) {
121 if (imp.equals(ConfigurationServiceImpl.class)) {
122 c.setInterface(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class.getName(), null);
123 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
126 if (imp.equals(BridgeConfigurationManagerImpl.class)) {
127 c.setInterface(BridgeConfigurationManager.class.getName(), null);
128 c.add(createServiceDependency().setService(
129 org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
130 c.add(createServiceDependency().setService(NetworkingProviderManager.class));
131 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
134 if (imp.equals(TenantNetworkManagerImpl.class)) {
135 c.setInterface(TenantNetworkManager.class.getName(), null);
136 c.add(createServiceDependency().setService(NetworkingProviderManager.class));
137 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
138 c.add(createServiceDependency().setService(OvsdbConnectionService.class));
139 c.add(createServiceDependency().
140 setService(INeutronNetworkCRUD.class).
142 c.add(createServiceDependency().
143 setService(INeutronPortCRUD.class).
145 c.add(createServiceDependency().setService(VlanConfigurationCache.class));
148 if (imp.equals(VlanConfigurationCacheImpl.class)) {
149 c.setInterface(VlanConfigurationCache.class.getName(), null);
150 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
151 c.add(createServiceDependency().setService(TenantNetworkManager.class));
154 if (imp.equals(FloatingIPHandler.class)) {
155 Properties floatingIPHandlerPorperties = new Properties();
156 floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
157 AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
158 c.setInterface(new String[]{INeutronFloatingIPAware.class.getName(),
159 AbstractHandler.class.getName()},
160 floatingIPHandlerPorperties);
161 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
162 c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
165 if (imp.equals(NetworkHandler.class)) {
166 Properties networkHandlerProperties = new Properties();
167 networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
168 AbstractEvent.HandlerType.NEUTRON_NETWORK);
169 c.setInterface(new String[]{INeutronNetworkAware.class.getName(),
170 AbstractHandler.class.getName()},
171 networkHandlerProperties);
172 c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
173 c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
174 c.add(createServiceDependency().setService(
175 org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
176 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
177 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
178 c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
179 c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
180 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
181 c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
184 if (imp.equals(SubnetHandler.class)) {
185 Properties subnetHandlerProperties = new Properties();
186 subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
187 c.setInterface(new String[]{INeutronSubnetAware.class.getName(),
188 AbstractHandler.class.getName()},
189 subnetHandlerProperties);
190 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
191 c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
194 if (imp.equals(PortHandler.class)) {
195 Properties portHandlerProperties = new Properties();
196 portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
197 c.setInterface(new String[]{INeutronPortAware.class.getName(),
198 AbstractHandler.class.getName()},
199 portHandlerProperties);
200 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
201 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
202 c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
203 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
204 c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
207 if (imp.equals(RouterHandler.class)) {
208 Properties routerHandlerProperties = new Properties();
209 routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
210 c.setInterface(new String[]{INeutronRouterAware.class.getName(),
211 AbstractHandler.class.getName()},
212 routerHandlerProperties);
213 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
214 c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
217 if (imp.equals(SouthboundHandler.class)) {
218 Properties southboundHandlerProperties = new Properties();
219 southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
220 c.setInterface(new String[]{OvsdbInventoryListener.class.getName(),
221 IInventoryListener.class.getName(),
222 AbstractHandler.class.getName()},
223 southboundHandlerProperties);
224 c.add(createServiceDependency().setService(
225 org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
226 c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
227 c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
228 c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
229 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
230 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
231 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
232 c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
235 if (imp.equals(LBaaSHandler.class)) {
236 Properties lbaasHandlerProperties = new Properties();
237 lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_LBAAS);
238 c.setInterface(new String[] {INeutronLoadBalancerAware.class.getName(),
239 INeutronLoadBalancerPoolAware.class.getName(),
240 INeutronLoadBalancerPoolMemberAware.class.getName()},
241 lbaasHandlerProperties);
242 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
245 if (imp.equals(PortSecurityHandler.class)) {
246 Properties portSecurityHandlerProperties = new Properties();
247 portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
248 AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
249 c.setInterface(new String[] {INeutronSecurityRuleAware.class.getName(),
250 INeutronSecurityGroupAware.class.getName(),
251 AbstractHandler.class.getName()},
252 portSecurityHandlerProperties);
253 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
256 if (imp.equals(FWaasHandler.class)) {
257 Properties fWaasHandlerProperties = new Properties();
258 fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
259 c.setInterface(new String[] {INeutronFirewallAware.class.getName(),
260 INeutronFirewallRuleAware.class.getName(),
261 INeutronFirewallPolicyAware.class.getName(),
262 AbstractHandler.class.getName()},
263 fWaasHandlerProperties);
264 c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
267 if (imp.equals(ProviderNetworkManagerImpl.class)) {
268 c.setInterface(NetworkingProviderManager.class.getName(), null);
269 c.add(createServiceDependency()
270 .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
272 c.add(createServiceDependency()
273 .setService(NetworkingProvider.class)
274 .setCallbacks("providerAdded", "providerRemoved"));
277 if (imp.equals(EventDispatcherImpl.class)) {
278 c.setInterface(EventDispatcher.class.getName(), null);
279 c.add(createServiceDependency()
280 .setService(AbstractHandler.class)
281 .setCallbacks("eventHandlerAdded", "eventHandlerRemoved"));
284 if (imp.equals(NeutronL3Adapter.class)) {
285 c.setInterface(NeutronL3Adapter.class.getName(), null);
287 c.add(createServiceDependency().setService(MultiTenantAwareRouter.class).setRequired(true));
288 // TODO: it will require MultiTenantRouterForwardingProvider
289 // c.add(createServiceDependency().setService(MultiTenantRouterForwardingProvider.class).setRequired(true));
292 if (imp.equals(OpenstackRouter.class)) {
293 c.setInterface(MultiTenantAwareRouter.class.getName(), null);