Moving the InventoryListener out of AbstractServiceInstance and into a common place...
[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             c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
187         }
188
189         if (AbstractServiceInstance.class.isAssignableFrom((Class) imp)) {
190             c.add(createServiceDependency()
191                           .setService(PipelineOrchestrator.class)
192                           .setRequired(true));
193             c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
194         }
195
196         if (imp.equals(ClassifierService.class)) {
197             Properties properties = new Properties();
198             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
199             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
200             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
201                            properties);
202         }
203
204         if (imp.equals(ArpResponderService.class)) {
205             Properties properties = new Properties();
206             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
207             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
208             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
209                            properties);
210         }
211
212         if (imp.equals(InboundNatService.class)) {
213             Properties properties = new Properties();
214             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
215             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
216             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), InboundNatProvider.class.getName()},
217                            properties);
218         }
219
220         if (imp.equals(IngressAclService.class)) {
221             Properties properties = new Properties();
222             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
223             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
224             c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
225                                         IngressAclProvider.class.getName()}, properties);
226         }
227
228         if (imp.equals(LoadBalancerService.class)) {
229             Properties properties = new Properties();
230             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
231             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
232             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), LoadBalancerProvider.class.getName()},
233                            properties);
234         }
235
236         if (imp.equals(RoutingService.class)) {
237             Properties properties = new Properties();
238             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
239             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
240             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
241                            properties);
242         }
243
244         if (imp.equals(L3ForwardingService.class)) {
245             Properties properties = new Properties();
246             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
247             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
248             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L3ForwardingProvider.class.getName()},
249                            properties);
250         }
251
252         if (imp.equals(L2RewriteService.class)) {
253             Properties properties = new Properties();
254             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
255             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
256             c.setInterface(AbstractServiceInstance.class.getName(), properties);
257         }
258
259         if (imp.equals(L2ForwardingService.class)) {
260             Properties properties = new Properties();
261             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
262             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
263             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L2ForwardingProvider.class.getName()},
264                            properties);
265         }
266
267         if (imp.equals(EgressAclService.class)) {
268             Properties properties = new Properties();
269             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
270             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
271             c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
272                                         EgressAclProvider.class.getName()}, properties);
273         }
274
275         if (imp.equals(OutboundNatService.class)) {
276             Properties properties = new Properties();
277             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
278             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
279             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), OutboundNatProvider.class.getName()},
280                            properties);
281         }
282     }
283 }