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(MdsalConsumer.class).setRequired(true))
66 .add(createServiceDependency().setService(ClassifierProvider.class).setRequired(true))
67 .add(createServiceDependency().setService(IngressAclProvider.class).setRequired(true))
68 .add(createServiceDependency().setService(EgressAclProvider.class).setRequired(true))
69 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true))
70 .add(createServiceDependency().setService(L2ForwardingProvider.class).setRequired(true)));
72 manager.add(createComponent()
73 .setInterface(new String[]{PipelineOrchestrator.class.getName(),
74 NodeCacheListener.class.getName()}, null)
75 .setImplementation(PipelineOrchestratorImpl.class)
76 .add(createServiceDependency().setService(AbstractServiceInstance.class)
77 .setCallbacks("registerService", "unregisterService"))
78 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true))
79 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
81 Dictionary<String, Object> props2 = new Hashtable<>();
82 props2.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
83 props2.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
85 manager.add(createComponent()
86 .setInterface(new String[]{AbstractServiceInstance.class.getName(),
87 ClassifierProvider.class.getName()},props2)
88 .setImplementation(ClassifierService.class)
89 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
90 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
92 Dictionary<String, Object> props3 = new Hashtable<>();
93 props3.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
94 props3.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
96 manager.add(createComponent()
97 .setInterface(new String[]{AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
99 .setImplementation(ArpResponderService.class)
100 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
101 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
103 Dictionary<String, Object> props4 = new Hashtable<>();
104 props4.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
105 props4.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
107 manager.add(createComponent()
108 .setInterface(new String[]{AbstractServiceInstance.class.getName(),
109 InboundNatProvider.class.getName()}, props4)
110 .setImplementation(InboundNatService.class)
111 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
112 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
114 Dictionary<String, Object> props5 = new Hashtable<>();
115 props5.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
116 props5.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
118 manager.add(createComponent()
119 .setInterface(new String[]{AbstractServiceInstance.class.getName(), IngressAclProvider.class.getName()},
121 .setImplementation(IngressAclService.class)
122 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
123 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
125 Dictionary<String, Object> props6 = new Hashtable<>();
126 props6.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
127 props6.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
129 manager.add(createComponent()
130 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
131 LoadBalancerProvider.class.getName()}, props6)
132 .setImplementation(LoadBalancerService.class)
133 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
134 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
136 Dictionary<String, Object> props7 = new Hashtable<>();
137 props7.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
138 props7.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
140 manager.add(createComponent()
141 .setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
143 .setImplementation(RoutingService.class)
144 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
145 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
147 Dictionary<String, Object> props8 = new Hashtable<>();
148 props8.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
149 props8.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
151 manager.add(createComponent()
152 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
153 L3ForwardingProvider.class.getName()}, props8)
154 .setImplementation(L3ForwardingService.class)
155 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
156 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
158 Dictionary<String, Object> props9 = new Hashtable<>();
159 props9.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
160 props9.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
162 manager.add(createComponent()
163 .setInterface(AbstractServiceInstance.class.getName(), props9)
164 .setImplementation(L2RewriteService.class)
165 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
166 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
168 Dictionary<String, Object> props10 = new Hashtable<>();
169 props10.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
170 props10.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
172 manager.add(createComponent()
173 .setInterface(new String[] {AbstractServiceInstance.class.getName(),
174 L2ForwardingProvider.class.getName()},
176 .setImplementation(L2ForwardingService.class)
177 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
178 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
180 Dictionary<String, Object> props11 = new Hashtable<>();
181 props11.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
182 props11.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
184 manager.add(createComponent()
185 .setInterface(new String[]{AbstractServiceInstance.class.getName(), EgressAclProvider.class.getName()},
187 .setImplementation(EgressAclService.class)
188 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
189 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
191 Dictionary<String, Object> props12 = new Hashtable<>();
192 props12.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
193 props12.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
195 manager.add(createComponent()
196 .setInterface(new String[]{AbstractServiceInstance.class.getName(),
197 OutboundNatProvider.class.getName()}, props12)
198 .setImplementation(OutboundNatService.class)
199 .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
200 .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
204 public void destroy(BundleContext context, DependencyManager manager) throws Exception {