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