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.providers;
13 import java.util.Properties;
15 import org.apache.felix.dm.Component;
16 import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
17 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
18 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
19 import org.opendaylight.controller.switchmanager.ISwitchManager;
20 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
21 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
22 import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider;
23 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.EgressAclProvider;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.InboundNatProvider;
26 import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider;
27 import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider;
28 import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
29 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
30 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
31 import org.opendaylight.ovsdb.openstack.netvirt.api.OutboundNatProvider;
32 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
33 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
34 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
35 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow10.OF10Provider;
36 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
37 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.MdsalConsumer;
38 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.MdsalConsumerImpl;
39 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provider;
40 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
41 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestratorImpl;
42 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
43 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.ArpResponderService;
44 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.ClassifierService;
45 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.EgressAclService;
46 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.InboundNatService;
47 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.IngressAclService;
48 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L2ForwardingService;
49 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L2RewriteService;
50 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L3ForwardingService;
51 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.LoadBalancerService;
52 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.OutboundNatService;
53 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.RoutingService;
54 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
55 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
58 * OSGi Bundle Activator for the Neutron providers
60 public class Activator extends ComponentActivatorAbstractBase {
62 * Function called when the activator starts just after some
63 * initializations are done by the
64 * ComponentActivatorAbstractBase.
71 * Function called when the activator stops just before the
72 * cleanup done by ComponentActivatorAbstractBase.
76 public void destroy() {
80 * Function that is used to communicate to dependency manager the
81 * list of known implementations for services inside a container.
83 * @return An array containing all the CLASS objects that will be
84 * instantiated in order to get an fully working implementation
88 public Object[] getImplementations() {
89 Object[] res = {MdsalConsumerImpl.class,
92 PipelineOrchestratorImpl.class,
93 ClassifierService.class,
94 ArpResponderService.class,
95 InboundNatService.class,
96 IngressAclService.class,
97 LoadBalancerService.class,
99 L3ForwardingService.class,
100 L2RewriteService.class,
101 L2ForwardingService.class,
102 EgressAclService.class,
103 OutboundNatService.class};
108 * Function that is called when configuration of the dependencies
111 * @param c dependency manager Component object, used for
112 * configuring the dependencies exported and imported
113 * @param imp Implementation class that is being configured,
114 * needed as long as the same routine can configure multiple
116 * @param containerName The containerName being configured, this allow
117 * also optional per-container different behavior if needed, usually
118 * should not be the case though.
121 public void configureInstance(Component c, Object imp,
122 String containerName) {
124 if (imp.equals(MdsalConsumerImpl.class)) {
125 c.setInterface(MdsalConsumer.class.getName(), null);
126 c.add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true));
129 if (imp.equals(OF10Provider.class)) {
130 Properties of10Properties = new Properties();
131 of10Properties.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
132 of10Properties.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW10);
134 c.setInterface(NetworkingProvider.class.getName(), of10Properties);
135 c.add(createServiceDependency()
136 .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
138 c.add(createServiceDependency()
139 .setService(BridgeConfigurationManager.class)
141 c.add(createServiceDependency()
142 .setService(TenantNetworkManager.class)
144 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
145 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
146 c.add(createServiceDependency().
147 setService(IForwardingRulesManager.class).
149 c.add(createServiceDependency().
150 setService(ISwitchManager.class).
154 if (imp.equals(OF13Provider.class)) {
155 Properties of13Properties = new Properties();
156 of13Properties.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
157 of13Properties.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW13);
159 c.setInterface(NetworkingProvider.class.getName(), of13Properties);
160 c.add(createServiceDependency()
161 .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
163 c.add(createServiceDependency()
164 .setService(BridgeConfigurationManager.class)
166 c.add(createServiceDependency()
167 .setService(TenantNetworkManager.class)
169 c.add(createServiceDependency()
170 .setService(SecurityServicesManager.class)
172 c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
173 c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
174 c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
175 c.add(createServiceDependency().setService(ClassifierProvider.class).setRequired(true));
176 c.add(createServiceDependency().setService(IngressAclProvider.class).setRequired(true));
177 c.add(createServiceDependency().setService(EgressAclProvider.class).setRequired(true));
178 c.add(createServiceDependency().setService(L2ForwardingProvider.class).setRequired(true));
181 if (imp.equals(PipelineOrchestratorImpl.class)) {
182 c.setInterface(PipelineOrchestrator.class.getName(), null);
183 c.add(createServiceDependency()
184 .setService(AbstractServiceInstance.class)
185 .setCallbacks("registerService", "unregisterService"));
188 if (AbstractServiceInstance.class.isAssignableFrom((Class) imp)) {
189 c.add(createServiceDependency()
190 .setService(PipelineOrchestrator.class)
192 c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
195 if (imp.equals(ClassifierService.class)) {
196 Properties properties = new Properties();
197 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
198 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
199 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
203 if (imp.equals(ArpResponderService.class)) {
204 Properties properties = new Properties();
205 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
206 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
207 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
211 if (imp.equals(InboundNatService.class)) {
212 Properties properties = new Properties();
213 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
214 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
215 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), InboundNatProvider.class.getName()},
219 if (imp.equals(IngressAclService.class)) {
220 Properties properties = new Properties();
221 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
222 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
223 c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
224 IngressAclProvider.class.getName()}, properties);
227 if (imp.equals(LoadBalancerService.class)) {
228 Properties properties = new Properties();
229 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
230 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
231 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), LoadBalancerProvider.class.getName()},
235 if (imp.equals(RoutingService.class)) {
236 Properties properties = new Properties();
237 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
238 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
239 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
243 if (imp.equals(L3ForwardingService.class)) {
244 Properties properties = new Properties();
245 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
246 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
247 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L3ForwardingProvider.class.getName()},
251 if (imp.equals(L2RewriteService.class)) {
252 Properties properties = new Properties();
253 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
254 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
255 c.setInterface(AbstractServiceInstance.class.getName(), properties);
258 if (imp.equals(L2ForwardingService.class)) {
259 Properties properties = new Properties();
260 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
261 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
262 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L2ForwardingProvider.class.getName()},
266 if (imp.equals(EgressAclService.class)) {
267 Properties properties = new Properties();
268 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
269 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
270 c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
271 EgressAclProvider.class.getName()}, properties);
274 if (imp.equals(OutboundNatService.class)) {
275 Properties properties = new Properties();
276 properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
277 properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
278 c.setInterface(new String[] {AbstractServiceInstance.class.getName(), OutboundNatProvider.class.getName()},