2 * Copyright (C) 2013 Red Hat, Inc.
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
8 * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
11 package org.opendaylight.ovsdb.openstack.netvirt.providers;
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;
36 import org.osgi.framework.BundleContext;
38 import java.util.Dictionary;
39 import java.util.Hashtable;
42 * OSGi Bundle Activator for the Neutron providers
44 public class Activator extends DependencyActivatorBase {
47 public void init(BundleContext context, DependencyManager manager) throws Exception {
49 manager.add(createComponent()
50 .setInterface(MdsalConsumer.class.getName(), null)
51 .setImplementation(MdsalConsumerImpl.class)
52 .add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true)));
54 Dictionary<String, Object> props1 = new Hashtable<>();
55 props1.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
56 props1.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW13);
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)));
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)));
82 Dictionary<String, Object> props2 = new Hashtable<>();
83 props2.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
84 props2.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
86 manager.add(createComponent()
87 .setInterface(new String[]{AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
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)));
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);
99 manager.add(createComponent()
100 .setInterface(new String[]{AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
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)));
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);
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)));
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);
125 manager.add(createComponent()
126 .setInterface(new String[]{AbstractServiceInstance.class.getName(), IngressAclProvider.class.getName()},
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)));
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);
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)));
147 Dictionary<String, Object> props7 = new Hashtable<>();
148 props7.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
149 props7.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
151 manager.add(createComponent()
152 .setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
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)));
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);
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)));
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);
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)));
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);
189 manager.add(createComponent()
190 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
191 L2ForwardingProvider.class.getName()},
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)));
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);
203 manager.add(createComponent()
204 .setInterface(new String[]{AbstractServiceInstance.class.getName(), EgressAclProvider.class.getName()},
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)));
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);
216 manager.add(createComponent()
217 .setInterface(new String[]{AbstractServiceInstance.class.getName(),
218 OutboundNatProvider.class.getName()},
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)));
228 public void destroy(BundleContext context, DependencyManager manager) throws Exception {