Add support for openflow node callbacks
[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 org.apache.felix.dm.DependencyActivatorBase;
14 import org.apache.felix.dm.DependencyManager;
15 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
16 import org.opendaylight.ovsdb.openstack.netvirt.api.*;
17 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
18 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.MdsalConsumer;
19 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.MdsalConsumerImpl;
20 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provider;
21 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
22 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestratorImpl;
23 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
24 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.ArpResponderService;
25 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.ClassifierService;
26 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.EgressAclService;
27 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.InboundNatService;
28 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.IngressAclService;
29 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L2ForwardingService;
30 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L2RewriteService;
31 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.L3ForwardingService;
32 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.LoadBalancerService;
33 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.OutboundNatService;
34 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.RoutingService;
35
36 import org.osgi.framework.BundleContext;
37
38 import java.util.Dictionary;
39 import java.util.Hashtable;
40
41 /**
42  * OSGi Bundle Activator for the Neutron providers
43  */
44 public class Activator extends DependencyActivatorBase {
45
46     @Override
47     public void init(BundleContext context, DependencyManager manager) throws Exception {
48
49         manager.add(createComponent()
50                 .setInterface(MdsalConsumer.class.getName(), null)
51                 .setImplementation(MdsalConsumerImpl.class)
52                 .add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true)));
53
54         Dictionary<String, Object> props1 = new Hashtable<>();
55         props1.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
56         props1.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW13);
57
58         manager.add(createComponent()
59                 .setInterface(NetworkingProvider.class.getName(), props1)
60                 .setImplementation(OF13Provider.class)
61                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
62                 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
63                 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
64                 .add(createServiceDependency().setService(SecurityServicesManager.class).setRequired(true))
65                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
66                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
67                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true))
68                 .add(createServiceDependency().setService(ClassifierProvider.class).setRequired(true))
69                 .add(createServiceDependency().setService(IngressAclProvider.class).setRequired(true))
70                 .add(createServiceDependency().setService(EgressAclProvider.class).setRequired(true))
71                 .add(createServiceDependency().setService(L2ForwardingProvider.class).setRequired(true)));
72
73         manager.add(createComponent()
74                 .setInterface(new String[]{PipelineOrchestrator.class.getName(),
75                         NodeCacheListener.class.getName()}, null)
76                 .setImplementation(PipelineOrchestratorImpl.class)
77                 .add(createServiceDependency().setService(AbstractServiceInstance.class)
78                         .setCallbacks("registerService", "unregisterService"))
79                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true))
80                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
81
82         Dictionary<String, Object> props2 = new Hashtable<>();
83         props2.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
84         props2.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
85
86         manager.add(createComponent()
87                 .setInterface(new String[]{AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
88                         props2)
89                 .setImplementation(ClassifierService.class)
90                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
91                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
92                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
93                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
94
95         Dictionary<String, Object> props3 = new Hashtable<>();
96         props3.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
97         props3.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
98
99         manager.add(createComponent()
100                 .setInterface(new String[]{AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
101                         props3)
102                 .setImplementation(ArpResponderService.class)
103                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
104                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
105                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
106                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
107
108         Dictionary<String, Object> props4 = new Hashtable<>();
109         props4.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
110         props4.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
111
112         manager.add(createComponent()
113                 .setInterface(new String[]{AbstractServiceInstance.class.getName(),
114                         InboundNatProvider.class.getName()}, props4)
115                 .setImplementation(InboundNatService.class)
116                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
117                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
118                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
119                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
120
121         Dictionary<String, Object> props5 = new Hashtable<>();
122         props5.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
123         props5.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
124
125         manager.add(createComponent()
126                 .setInterface(new String[]{AbstractServiceInstance.class.getName(), IngressAclProvider.class.getName()},
127                         props5)
128                 .setImplementation(IngressAclService.class)
129                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
130                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
131                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
132                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
133
134         Dictionary<String, Object> props6 = new Hashtable<>();
135         props6.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
136         props6.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
137
138         manager.add(createComponent()
139                 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
140                                 LoadBalancerProvider.class.getName()}, props6)
141                 .setImplementation(LoadBalancerService.class)
142                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
143                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
144                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
145                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
146
147         Dictionary<String, Object> props7 = new Hashtable<>();
148         props7.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
149         props7.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
150
151         manager.add(createComponent()
152                 .setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
153                         props7)
154                 .setImplementation(RoutingService.class)
155                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
156                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
157                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
158                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
159
160         Dictionary<String, Object> props8 = new Hashtable<>();
161         props8.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
162         props8.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
163
164         manager.add(createComponent()
165                 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
166                                 L3ForwardingProvider.class.getName()}, props8)
167                 .setImplementation(L3ForwardingService.class)
168                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
169                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
170                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
171                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
172
173         Dictionary<String, Object> props9 = new Hashtable<>();
174         props9.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
175         props9.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
176
177         manager.add(createComponent()
178                 .setInterface(AbstractServiceInstance.class.getName(), props9)
179                 .setImplementation(L2RewriteService.class)
180                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
181                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
182                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
183                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
184
185         Dictionary<String, Object> props10 = new Hashtable<>();
186         props10.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
187         props10.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
188
189         manager.add(createComponent()
190                 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
191                                 L2ForwardingProvider.class.getName()},
192                         props10)
193                 .setImplementation(L2ForwardingService.class)
194                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
195                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
196                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
197                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
198
199         Dictionary<String, Object> props11 = new Hashtable<>();
200         props11.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
201         props11.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
202
203         manager.add(createComponent()
204                 .setInterface(new String[]{AbstractServiceInstance.class.getName(), EgressAclProvider.class.getName()},
205                         props11)
206                 .setImplementation(EgressAclService.class)
207                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
208                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
209                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
210                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
211
212         Dictionary<String, Object> props12 = new Hashtable<>();
213         props12.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
214         props12.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
215
216         manager.add(createComponent()
217                 .setInterface(new String[]{AbstractServiceInstance.class.getName(),
218                                 OutboundNatProvider.class.getName()},
219                         props12)
220                 .setImplementation(OutboundNatService.class)
221                 .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
222                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
223                 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
224                 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
225     }
226
227     @Override
228     public void destroy(BundleContext context, DependencyManager manager) throws Exception {
229     }
230 }