bdedccb8eb02cc43f353e28f274e189f2c4c9761
[ovsdb.git] / openstack / net-virt-providers / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / providers / Activator.java
1 /*
2  * Copyright (C) 2013 Red Hat, Inc.
3  *
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
7  *
8  * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt.providers;
12
13 import java.util.Properties;
14
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;
56
57 /**
58  * OSGi Bundle Activator for the Neutron providers
59  */
60 public class Activator extends ComponentActivatorAbstractBase {
61     /**
62      * Function called when the activator starts just after some
63      * initializations are done by the
64      * ComponentActivatorAbstractBase.
65      */
66     @Override
67     public void init() {
68     }
69
70     /**
71      * Function called when the activator stops just before the
72      * cleanup done by ComponentActivatorAbstractBase.
73      *
74      */
75     @Override
76     public void destroy() {
77     }
78
79     /**
80      * Function that is used to communicate to dependency manager the
81      * list of known implementations for services inside a container.
82      *
83      * @return An array containing all the CLASS objects that will be
84      * instantiated in order to get an fully working implementation
85      * Object
86      */
87     @Override
88     public Object[] getImplementations() {
89         Object[] res = {MdsalConsumerImpl.class,
90                         OF10Provider.class,
91                         OF13Provider.class,
92                         PipelineOrchestratorImpl.class,
93                         ClassifierService.class,
94                         ArpResponderService.class,
95                         InboundNatService.class,
96                         IngressAclService.class,
97                         LoadBalancerService.class,
98                         RoutingService.class,
99                         L3ForwardingService.class,
100                         L2RewriteService.class,
101                         L2ForwardingService.class,
102                         EgressAclService.class,
103                         OutboundNatService.class};
104         return res;
105     }
106
107     /**
108      * Function that is called when configuration of the dependencies
109      * is required.
110      *
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
115      * implementations
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.
119      */
120     @Override
121     public void configureInstance(Component c, Object imp,
122                                   String containerName) {
123
124         if (imp.equals(MdsalConsumerImpl.class)) {
125             c.setInterface(MdsalConsumer.class.getName(), null);
126             c.add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true));
127         }
128
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);
133
134             c.setInterface(NetworkingProvider.class.getName(), of10Properties);
135             c.add(createServiceDependency()
136                           .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
137                           .setRequired(true));
138             c.add(createServiceDependency()
139                           .setService(BridgeConfigurationManager.class)
140                           .setRequired(true));
141             c.add(createServiceDependency()
142                           .setService(TenantNetworkManager.class)
143                           .setRequired(true));
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).
148                     setRequired(true));
149             c.add(createServiceDependency().
150                     setService(ISwitchManager.class).
151                     setRequired(true));
152         }
153
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);
158
159             c.setInterface(NetworkingProvider.class.getName(), of13Properties);
160             c.add(createServiceDependency()
161                           .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
162                           .setRequired(true));
163             c.add(createServiceDependency()
164                           .setService(BridgeConfigurationManager.class)
165                           .setRequired(true));
166             c.add(createServiceDependency()
167                           .setService(TenantNetworkManager.class)
168                           .setRequired(true));
169             c.add(createServiceDependency()
170                     .setService(SecurityServicesManager.class)
171                     .setRequired(true));
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));
179         }
180
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"));
186         }
187
188         if (AbstractServiceInstance.class.isAssignableFrom((Class) imp)) {
189             c.add(createServiceDependency()
190                           .setService(PipelineOrchestrator.class)
191                           .setRequired(true));
192             c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
193         }
194
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()},
200                            properties);
201         }
202
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()},
208                            properties);
209         }
210
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()},
216                            properties);
217         }
218
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);
225         }
226
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()},
232                            properties);
233         }
234
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()},
240                            properties);
241         }
242
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()},
248                            properties);
249         }
250
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);
256         }
257
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()},
263                            properties);
264         }
265
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);
272         }
273
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()},
279                            properties);
280         }
281     }
282 }