Merge "Re-enable southbound build."
[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.sal.binding.api.BindingAwareBroker;
17 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
18 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
19 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
20 import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider;
21 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
22 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
23 import org.opendaylight.ovsdb.openstack.netvirt.api.EgressAclProvider;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.InboundNatProvider;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider;
26 import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider;
27 import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
28 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
29 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
30 import org.opendaylight.ovsdb.openstack.netvirt.api.OutboundNatProvider;
31 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
32 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
33 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
34 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
35 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.MdsalConsumer;
36 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.MdsalConsumerImpl;
37 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provider;
38 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
39 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestratorImpl;
40 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
41 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.ArpResponderService;
42 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.ClassifierService;
43 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.EgressAclService;
44 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.InboundNatService;
45 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.IngressAclService;
46 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L2ForwardingService;
47 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L2RewriteService;
48 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L3ForwardingService;
49 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.LoadBalancerService;
50 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.OutboundNatService;
51 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.RoutingService;
52 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
53 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
54
55 /**
56  * OSGi Bundle Activator for the Neutron providers
57  */
58 public class Activator extends ComponentActivatorAbstractBase {
59     /**
60      * Function called when the activator starts just after some
61      * initializations are done by the
62      * ComponentActivatorAbstractBase.
63      */
64     @Override
65     public void init() {
66     }
67
68     /**
69      * Function called when the activator stops just before the
70      * cleanup done by ComponentActivatorAbstractBase.
71      *
72      */
73     @Override
74     public void destroy() {
75     }
76
77     /**
78      * Function that is used to communicate to dependency manager the
79      * list of known implementations for services inside a container.
80      *
81      * @return An array containing all the CLASS objects that will be
82      * instantiated in order to get an fully working implementation
83      * Object
84      */
85     @Override
86     public Object[] getImplementations() {
87         Object[] res = {MdsalConsumerImpl.class,
88                         OF13Provider.class,
89                         PipelineOrchestratorImpl.class,
90                         ClassifierService.class,
91                         ArpResponderService.class,
92                         InboundNatService.class,
93                         IngressAclService.class,
94                         LoadBalancerService.class,
95                         RoutingService.class,
96                         L3ForwardingService.class,
97                         L2RewriteService.class,
98                         L2ForwardingService.class,
99                         EgressAclService.class,
100                         OutboundNatService.class};
101         return res;
102     }
103
104     /**
105      * Function that is called when configuration of the dependencies
106      * is required.
107      *
108      * @param c dependency manager Component object, used for
109      * configuring the dependencies exported and imported
110      * @param imp Implementation class that is being configured,
111      * needed as long as the same routine can configure multiple
112      * implementations
113      * @param containerName The containerName being configured, this allow
114      * also optional per-container different behavior if needed, usually
115      * should not be the case though.
116      */
117     @Override
118     public void configureInstance(Component c, Object imp,
119                                   String containerName) {
120
121         if (imp.equals(MdsalConsumerImpl.class)) {
122             c.setInterface(MdsalConsumer.class.getName(), null);
123             c.add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true));
124         }
125         if (imp.equals(OF13Provider.class)) {
126             Properties of13Properties = new Properties();
127             of13Properties.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
128             of13Properties.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW13);
129
130             c.setInterface(NetworkingProvider.class.getName(), of13Properties);
131             c.add(createServiceDependency()
132                           .setService(ConfigurationService.class)
133                           .setRequired(true));
134             c.add(createServiceDependency()
135                           .setService(BridgeConfigurationManager.class)
136                           .setRequired(true));
137             c.add(createServiceDependency()
138                           .setService(TenantNetworkManager.class)
139                           .setRequired(true));
140             c.add(createServiceDependency()
141                     .setService(SecurityServicesManager.class)
142                     .setRequired(true));
143             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
144             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
145             c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
146             c.add(createServiceDependency().setService(ClassifierProvider.class).setRequired(true));
147             c.add(createServiceDependency().setService(IngressAclProvider.class).setRequired(true));
148             c.add(createServiceDependency().setService(EgressAclProvider.class).setRequired(true));
149             c.add(createServiceDependency().setService(L2ForwardingProvider.class).setRequired(true));
150         }
151
152         if (imp.equals(PipelineOrchestratorImpl.class)) {
153             c.setInterface(PipelineOrchestrator.class.getName(), null);
154             c.add(createServiceDependency()
155                            .setService(AbstractServiceInstance.class)
156                            .setCallbacks("registerService", "unregisterService"));
157             c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
158         }
159
160         if (AbstractServiceInstance.class.isAssignableFrom((Class) imp)) {
161             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
162             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
163             c.add(createServiceDependency()
164                           .setService(PipelineOrchestrator.class)
165                           .setRequired(true));
166             c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
167         }
168
169         if (imp.equals(ClassifierService.class)) {
170             Properties properties = new Properties();
171             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
172             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
173             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
174                            properties);
175         }
176
177         if (imp.equals(ArpResponderService.class)) {
178             Properties properties = new Properties();
179             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
180             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
181             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
182                            properties);
183         }
184
185         if (imp.equals(InboundNatService.class)) {
186             Properties properties = new Properties();
187             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
188             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
189             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), InboundNatProvider.class.getName()},
190                            properties);
191         }
192
193         if (imp.equals(IngressAclService.class)) {
194             Properties properties = new Properties();
195             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
196             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
197             c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
198                                         IngressAclProvider.class.getName()}, properties);
199         }
200
201         if (imp.equals(LoadBalancerService.class)) {
202             Properties properties = new Properties();
203             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
204             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
205             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), LoadBalancerProvider.class.getName()},
206                            properties);
207         }
208
209         if (imp.equals(RoutingService.class)) {
210             Properties properties = new Properties();
211             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
212             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
213             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
214                            properties);
215         }
216
217         if (imp.equals(L3ForwardingService.class)) {
218             Properties properties = new Properties();
219             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
220             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
221             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L3ForwardingProvider.class.getName()},
222                            properties);
223         }
224
225         if (imp.equals(L2RewriteService.class)) {
226             Properties properties = new Properties();
227             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
228             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
229             c.setInterface(AbstractServiceInstance.class.getName(), properties);
230         }
231
232         if (imp.equals(L2ForwardingService.class)) {
233             Properties properties = new Properties();
234             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
235             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
236             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L2ForwardingProvider.class.getName()},
237                            properties);
238         }
239
240         if (imp.equals(EgressAclService.class)) {
241             Properties properties = new Properties();
242             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
243             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
244             c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
245                                         EgressAclProvider.class.getName()}, properties);
246         }
247
248         if (imp.equals(OutboundNatService.class)) {
249             Properties properties = new Properties();
250             properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
251             properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
252             c.setInterface(new String[] {AbstractServiceInstance.class.getName(), OutboundNatProvider.class.getName()},
253                            properties);
254         }
255     }
256 }