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.INeutronNetworkAware;
14 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
15 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
16 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
17 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
18 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
19 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
20 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
21 import org.opendaylight.controller.switchmanager.IInventoryListener;
22 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
23 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
26 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
27 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
28 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
29 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
30 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
31 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
32 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
33 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
34 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
36 import org.apache.felix.dm.Component;
39 * OSGi bundle activator for the OVSDB Neutron Interface.
41 public class Activator extends ComponentActivatorAbstractBase {
43 * Function called when the activator starts just after some
44 * initializations are done by the
45 * ComponentActivatorAbstractBase.
52 * Function called when the activator stops just before the
53 * cleanup done by ComponentActivatorAbstractBase.
57 public void destroy() {
61 * Function that is used to communicate to dependency manager the
62 * list of known implementations for services inside a container.
64 * @return An array containing all the CLASS objects that will be
65 * instantiated in order to get an fully working implementation
69 public Object[] getImplementations() {
70 Object[] res = {ConfigurationServiceImpl.class,
71 BridgeConfigurationManagerImpl.class,
72 TenantNetworkManagerImpl.class,
73 VlanConfigurationCacheImpl.class,
77 SouthboundHandler.class,
78 PortSecurityHandler.class,
79 ProviderNetworkManagerImpl.class};
84 * Function that is called when configuration of the dependencies
87 * @param c dependency manager Component object, used for
88 * configuring the dependencies exported and imported
89 * @param imp Implementation class that is being configured,
90 * needed as long as the same routine can configure multiple
92 * @param containerName The containerName being configured, this allow
93 * also optional per-container different behavior if needed, usually
94 * should not be the case though.
97 public void configureInstance(Component c, Object imp,
98 String containerName) {
99 if (imp.equals(ConfigurationServiceImpl.class)) {
100 c.setInterface(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class.getName(), null);
101 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
104 if (imp.equals(BridgeConfigurationManagerImpl.class)) {
105 c.setInterface(BridgeConfigurationManager.class.getName(), null);
106 c.add(createServiceDependency().setService(
107 org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
108 c.add(createServiceDependency().setService(NetworkingProviderManager.class));
109 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
112 if (imp.equals(TenantNetworkManagerImpl.class)) {
113 c.setInterface(TenantNetworkManager.class.getName(), null);
114 c.add(createServiceDependency().setService(NetworkingProviderManager.class));
115 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
116 c.add(createServiceDependency().setService(OvsdbConnectionService.class));
117 c.add(createServiceDependency().
118 setService(INeutronNetworkCRUD.class).
120 c.add(createServiceDependency().
121 setService(INeutronPortCRUD.class).
123 c.add(createServiceDependency().setService(VlanConfigurationCache.class));
126 if (imp.equals(VlanConfigurationCacheImpl.class)) {
127 c.setInterface(VlanConfigurationCache.class.getName(), null);
128 c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
129 c.add(createServiceDependency().setService(TenantNetworkManager.class));
132 if (imp.equals(NetworkHandler.class)) {
133 c.setInterface(INeutronNetworkAware.class.getName(), null);
134 c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
135 c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
136 c.add(createServiceDependency().setService(
137 org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
138 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
139 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
140 c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
141 c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
144 if (imp.equals(SubnetHandler.class)) {
145 c.setInterface(INeutronSubnetAware.class.getName(), null);
148 if (imp.equals(PortHandler.class)) {
149 c.setInterface(INeutronPortAware.class.getName(), null);
150 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
151 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
152 c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
155 if (imp.equals(SouthboundHandler.class)) {
156 c.setInterface(new String[] {OvsdbInventoryListener.class.getName(),
157 IInventoryListener.class.getName()}, null);
158 c.add(createServiceDependency().setService(
159 org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
160 c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
161 c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
162 c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
163 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
164 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
167 if (imp.equals(PortSecurityHandler.class)) {
168 c.setInterface(new String[] {INeutronSecurityRuleAware.class.getName(),
169 INeutronSecurityGroupAware.class.getName()}, null);
172 if (imp.equals(ProviderNetworkManagerImpl.class)) {
173 c.setInterface(NetworkingProviderManager.class.getName(), null);
174 c.add(createServiceDependency()
175 .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
177 c.add(createServiceDependency()
178 .setService(NetworkingProvider.class)
179 .setCallbacks("providerAdded", "providerRemoved"));