package org.opendaylight.ovsdb.openstack.netvirt.sfc;
+import java.util.Dictionary;
+import java.util.Hashtable;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provider;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.ovsdb.openstack.netvirt.sfc.openflow13.INetvirtSfcOF13Provider;
import org.opendaylight.ovsdb.openstack.netvirt.sfc.openflow13.NetvirtSfcOF13Provider;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.openflow13.services.SfcClassifierService;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NetvirtSfcProvider implements BindingAwareProvider, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NetvirtSfcProvider.class);
- private DataBroker dataBroker = null;
- private BundleContext bundleContext = null;
private NetvirtSfcAclListener aclListener;
-
private NetvirtSfcClassifierListener classfierListener;
- private INetvirtSfcOF13Provider provider;
+
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ LOG.info("bundleContext is: {}", bundleContext);
+ }
+
+ private BundleContext bundleContext;
public NetvirtSfcProvider(BundleContext bundleContext) {
- LOG.info("NetvirtProvider: bundleContext: {}", bundleContext);
+ LOG.info("NetvirtSfcProvider: bundleContext: {}", bundleContext);
this.bundleContext = bundleContext;
}
@Override
public void onSessionInitiated(ProviderContext session) {
LOG.info("NetvirtSfcProvider Session Initiated");
- dataBroker = session.getSALService(DataBroker.class);
+ DataBroker dataBroker = session.getSALService(DataBroker.class);
+
+ INetvirtSfcOF13Provider provider = new NetvirtSfcOF13Provider(dataBroker);
+ aclListener = new NetvirtSfcAclListener(provider, dataBroker);
+ classfierListener = new NetvirtSfcClassifierListener(provider, dataBroker);
- provider = new NetvirtSfcOF13Provider(this.dataBroker);
- aclListener = new NetvirtSfcAclListener(provider, this.dataBroker);
- classfierListener = new NetvirtSfcClassifierListener(provider, this.dataBroker);
+ addToPipeline();
}
@Override
aclListener.close();
classfierListener.close();
}
+
+ private void addToPipeline() {
+ SfcClassifierService sfcClassifierService = new SfcClassifierService();
+ registerService(bundleContext, SfcClassifierService.class.getName(),
+ sfcClassifierService, Service.SFC_CLASSIFIER);
+ sfcClassifierService.setDependencies(bundleContext, null);
+ }
+
+ private ServiceRegistration<?> registerService(BundleContext bundleContext, String[] interfaces,
+ Dictionary<String, Object> properties, Object impl) {
+ ServiceRegistration<?> serviceRegistration = bundleContext.registerService(interfaces, impl, properties);
+ return serviceRegistration;
+ }
+
+ private ServiceRegistration<?> registerService(BundleContext bundleContext, String interfaceClassName,
+ Object impl, Object serviceProperty) {
+ Dictionary<String, Object> properties = new Hashtable<>();
+ properties.put(AbstractServiceInstance.SERVICE_PROPERTY, serviceProperty);
+ properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+ return registerService(bundleContext,
+ new String[] {AbstractServiceInstance.class.getName(),
+ interfaceClassName}, properties, impl);
+ }
}