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.neutron;
13 import org.apache.felix.dm.Component;
14 import org.opendaylight.controller.containermanager.IContainerManager;
15 import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
16 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
17 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
18 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
19 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
20 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
21 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupCRUD;
22 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
23 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleCRUD;
24 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
25 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
26 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
27 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
28 import org.opendaylight.controller.switchmanager.IInventoryListener;
29 import org.opendaylight.ovsdb.neutron.provider.IProviderNetworkManager;
30 import org.opendaylight.ovsdb.neutron.provider.ProviderNetworkManager;
31 import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
32 import org.opendaylight.ovsdb.plugin.OVSDBConfigService;
33 import org.opendaylight.ovsdb.plugin.OVSDBInventoryListener;
36 * OSGi bundle activator for the OVSDB Neutron Interface.
38 public class Activator extends ComponentActivatorAbstractBase {
40 * Function called when the activator starts just after some
41 * initializations are done by the
42 * ComponentActivatorAbstractBase.
49 * Function called when the activator stops just before the
50 * cleanup done by ComponentActivatorAbstractBase.
54 public void destroy() {
58 * Function that is used to communicate to dependency manager the
59 * list of known implementations for services inside a container.
61 * @return An array containing all the CLASS objects that will be
62 * instantiated in order to get an fully working implementation
66 public Object[] getImplementations() {
67 Object[] res = {AdminConfigManager.class,
68 InternalNetworkManager.class,
69 TenantNetworkManager.class,
73 SouthboundHandler.class,
74 PortSecurityHandler.class,
76 ProviderNetworkManager.class};
81 * Function that is called when configuration of the dependencies
84 * @param c dependency manager Component object, used for
85 * configuring the dependencies exported and imported
86 * @param imp Implementation class that is being configured,
87 * needed as long as the same routine can configure multiple
89 * @param containerName The containerName being configured, this allow
90 * also optional per-container different behavior if needed, usually
91 * should not be the case though.
94 public void configureInstance(Component c, Object imp,
95 String containerName) {
96 if (imp.equals(AdminConfigManager.class)) {
97 c.setInterface(IAdminConfigManager.class.getName(), null);
100 if (imp.equals(InternalNetworkManager.class)) {
101 c.setInterface(IInternalNetworkManager.class.getName(), null);
102 c.add(createServiceDependency().setService(IAdminConfigManager.class).setRequired(true));
103 c.add(createServiceDependency().setService(IProviderNetworkManager.class));
106 if (imp.equals(TenantNetworkManager.class)) {
107 c.setInterface(ITenantNetworkManager.class.getName(), null);
108 c.add(createServiceDependency().setService(IProviderNetworkManager.class));
111 if (imp.equals(NetworkHandler.class)) {
112 c.setInterface(INeutronNetworkAware.class.getName(), null);
113 c.add(createServiceDependency().setService(ITenantNetworkManager.class).setRequired(true));
116 if (imp.equals(SubnetHandler.class)) {
117 c.setInterface(INeutronSubnetAware.class.getName(), null);
120 if (imp.equals(PortHandler.class)) {
121 c.setInterface(INeutronPortAware.class.getName(), null);
124 if (imp.equals(SouthboundHandler.class)) {
125 c.setInterface(new String[] {OVSDBInventoryListener.class.getName(), IInventoryListener.class.getName()}, null);
126 c.add(createServiceDependency().setService(IAdminConfigManager.class).setRequired(true));
127 c.add(createServiceDependency().setService(IInternalNetworkManager.class).setRequired(true));
128 c.add(createServiceDependency().setService(ITenantNetworkManager.class).setRequired(true));
129 c.add(createServiceDependency().setService(IProviderNetworkManager.class).setRequired(true));
132 if (imp.equals(MDSALConsumer.class)) {
133 c.setInterface(IMDSALConsumer.class.getName(), null);
136 if (imp.equals(ProviderNetworkManager.class)) {
137 c.setInterface(IProviderNetworkManager.class.getName(), null);
138 c.add(createServiceDependency()
139 .setService(IAdminConfigManager.class)
141 c.add(createServiceDependency()
142 .setService(IInternalNetworkManager.class)
144 c.add(createServiceDependency()
145 .setService(ITenantNetworkManager.class)
148 if (imp.equals(PortSecurityHandler.class)) {
149 c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
150 c.setInterface(INeutronSecurityGroupAware.class.getName(), null);
153 //ToDo: DT: We don't need these dependencies for every implementation...
154 //ToDo: DT: Callbacks are only required when behaviour is more complex than simple set/unset operation
155 c.add(createServiceDependency().
156 setService(OVSDBConfigService.class).
157 setCallbacks("setOVSDBConfigService", "unsetOVSDBConfigService").
160 c.add(createServiceDependency().
161 setService(IConnectionServiceInternal.class).
162 setCallbacks("setConnectionService", "unsetConnectionService").
165 c.add(createServiceDependency().
166 setService(IContainerManager.class).
167 setCallbacks("setContainerManager", "unsetContainerManager").
170 c.add(createServiceDependency().
171 setService(IForwardingRulesManager.class).
172 setCallbacks("setForwardingRulesManager", "unsetForwardingRulesManager").
175 c.add(createServiceDependency()
176 .setService(BindingAwareBroker.class)
177 .setCallbacks("setBindingAwareBroker", "unsetBindingAwareBroker")
180 c.add(createServiceDependency().
181 setService(INeutronNetworkCRUD.class).
182 setCallbacks("setNeutronNetworkCRUD", "unsetNeutronNetworkCRUD").
184 c.add(createServiceDependency().
185 setService(INeutronSubnetCRUD.class).
186 setCallbacks("setNeutronSubnetCRUD", "unsetNeutronSubnetCRUD").
188 c.add(createServiceDependency().
189 setService(INeutronPortCRUD.class).
190 setCallbacks("setNeutronPortCRUD", "unsetNeutronPortCRUD").
192 c.add(createServiceDependency().
193 setService(INeutronSecurityRuleCRUD.class).
194 setCallbacks("setNeutronSecurityRuleCRUD", "unsetNeutronSecurityRuleCRUD").
196 c.add(createServiceDependency().
197 setService(INeutronSecurityGroupCRUD.class).
198 setCallbacks("setNeutronSecurityGroupCRUD", "unsetNeutronSecurityGroupCRUD").