<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ ~
+ ~ This program and the accompanying materials are made available under the
+ ~ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ ~ and is available at http://www.eclipse.org/legal/epl-v10.html
+ -->
+
<features name="openflowplugin-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature version="${project.version}">odl-openflowplugin-flow-services-ui</feature>
</feature>
- <feature name='odl-openflowplugin-southbound' description="OpenDaylight :: Openflow Plugin :: SouthBound" version='${project.version}'>
+ <feature name='odl-openflowplugin-southbound' description="OpenDaylight :: Openflow Plugin :: Li southBound API implementation " version='${project.version}'>
<feature version="${mdsal.version}">odl-mdsal-broker</feature>
- <feature version="${project.version}">odl-openflowplugin-nsf-model</feature>
+ <feature version="${project.version}">odl-openflowplugin-nsf-services</feature>
<feature version="${openflowjava.version}">odl-openflowjava-protocol</feature>
+ <!-- TODO : remove dependency on openflowplugin in the future -->
<bundle>mvn:org.opendaylight.openflowplugin/openflowplugin/${project.version}</bundle>
+ <bundle>mvn:org.opendaylight.openflowplugin/openflowplugin-impl/${project.version}</bundle>
<bundle>mvn:org.opendaylight.openflowplugin/openflowplugin-api/${project.version}</bundle>
<bundle>mvn:org.opendaylight.openflowplugin/openflowplugin-extension-api/${project.version}</bundle>
<bundle>mvn:org.opendaylight.controller/liblldp/${sal.api.version}</bundle>
- <bundle>mvn:org.opendaylight.openflowplugin.applications/inventory-manager/${project.version}</bundle>
- <bundle>mvn:org.opendaylight.openflowplugin.applications/statistics-manager/${project.version}</bundle>
- <configfile finalname="etc/opendaylight/karaf/42-openflowplugin-He.xml">mvn:org.opendaylight.openflowplugin/openflowplugin-controller-config/${project.version}/xml/config-He</configfile>
- <configfile finalname="etc/opendaylight/karaf/43-msg-spy.xml">mvn:org.opendaylight.openflowplugin/openflowplugin-controller-config/${project.version}/xml/configmsgspy</configfile>
+ <configfile finalname="etc/opendaylight/karaf/42-openflowplugin-Li.xml">mvn:org.opendaylight.openflowplugin/openflowplugin-controller-config/${project.version}/xml/config-Li</configfile>
</feature>
<feature name='odl-openflowplugin-flow-services' description="OpenDaylight :: Openflow Plugin :: Flow Services" version='${project.version}'>
<feature version='${project.version}'>odl-openflowplugin-nsf-model</feature>
<bundle>mvn:org.opendaylight.openflowplugin.applications/topology-manager/${project.version}</bundle>
<bundle>mvn:org.opendaylight.openflowplugin.applications/topology-lldp-discovery/${project.version}</bundle>
- <bundle>mvn:org.opendaylight.openflowplugin.applications/statistics-manager/${project.version}</bundle>
- <bundle>mvn:org.opendaylight.openflowplugin.applications/inventory-manager/${project.version}</bundle>
<bundle>mvn:org.opendaylight.openflowplugin.applications/forwardingrules-manager/${project.version}</bundle>
<bundle>mvn:org.opendaylight.controller/liblldp/${sal.api.version}</bundle>
<configfile finalname="etc/opendaylight/karaf/30-forwardingrules-manager.xml">
package org.opendaylight.openflowplugin.api.openflow;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-
import java.util.Collection;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.controller.md.sal.binding.api.BindingService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.api.types.rev150327.OfpRole;
/**
* Created by Martin Bobak <mbobak@cisco.com> on 27.3.2015.
*/
-public interface OpenFlowPluginProvider extends AutoCloseable, BindingAwareProvider {
+public interface OpenFlowPluginProvider extends AutoCloseable, BindingService {
/**
* Method sets openflow java's connection providers.
/**
* setter
- * @param bindingAwareBroker
+ *
+ * @param dataBroker
*/
- void setBindingAwareBroker(BindingAwareBroker bindingAwareBroker);
+ void setDataBroker(DataBroker dataBroker);
+
+ void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry);
+
+ void setNotificationProviderService(NotificationProviderService notificationProviderService);
/**
* Method sets role of this application in clustered environment.
<name>openflow-switch-connection-provider-legacy</name>
</openflow-switch-connection-provider>
- <binding-aware-broker>
- <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
- binding:binding-broker-osgi-registry
- </type>
- <name>binding-osgi-broker</name>
- </binding-aware-broker>
-
+ <data-broker>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+ <name>pingpong-binding-data-broker</name>
+ </data-broker>
+ <rpc-registry>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+ <name>binding-rpc-broker</name>
+ </rpc-registry>
+ <notification-service>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+ <name>binding-notification-broker</name>
+ </notification-service>
<rpc-requests-quota>20000</rpc-requests-quota>
</module>
</modules>
package org.opendaylight.openflowplugin.impl;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.api.types.rev150327.OfpRole;
-
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import java.util.Collection;
import java.util.List;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
import org.opendaylight.openflowplugin.api.openflow.OpenFlowPluginProvider;
import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionManager;
import org.opendaylight.openflowplugin.impl.rpc.RpcManagerImpl;
import org.opendaylight.openflowplugin.impl.statistics.StatisticsManagerImpl;
import org.opendaylight.openflowplugin.impl.util.TranslatorLibraryUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.api.types.rev150327.OfpRole;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private DeviceManager deviceManager;
private RpcManager rpcManager;
+ private RpcProviderRegistry rpcProviderRegistry;
private StatisticsManager statisticsManager;
private ConnectionManager connectionManager;
- private BindingAwareBroker bindingAwareBroker;
- private ProviderContext providerContext;
+ private NotificationProviderService notificationProviderService;
+
+ private DataBroker dataBroker;
private OfpRole role;
private Collection<SwitchConnectionProvider> switchConnectionProviders;
private Long rpcRequestsQuota;
this.rpcRequestsQuota = rpcRequestsQuota;
}
- @Override
- public void onSessionInitiated(final ProviderContext providerContextArg) {
- providerContext = providerContextArg;
- final DataBroker dataBroker = providerContext.getSALService(DataBroker.class);
- final NotificationProviderService notificationService = providerContext.getSALService(NotificationProviderService.class);
-
- connectionManager = new ConnectionManagerImpl();
- deviceManager = new DeviceManagerImpl(dataBroker);
- statisticsManager = new StatisticsManagerImpl();
- rpcManager = new RpcManagerImpl(providerContext, rpcRequestsQuota);
-
- connectionManager.setDeviceConnectedHandler(deviceManager);
- deviceManager.setDeviceInitializationPhaseHandler(statisticsManager);
- deviceManager.setNotificationService(notificationService);
- statisticsManager.setDeviceInitializationPhaseHandler(rpcManager);
- rpcManager.setDeviceInitializationPhaseHandler(deviceManager);
-
- TranslatorLibraryUtil.setBasicTranslatorLibrary(deviceManager);
- startSwitchConnections();
- }
private void startSwitchConnections() {
final List<ListenableFuture<Boolean>> starterChain = new ArrayList<>(switchConnectionProviders.size());
this.switchConnectionProviders = switchConnectionProviders;
}
+ @Override
+ public void setDataBroker(final DataBroker dataBroker) {
+ this.dataBroker = dataBroker;
+ }
+
+ @Override
+ public void setRpcProviderRegistry(final RpcProviderRegistry rpcProviderRegistry) {
+ this.rpcProviderRegistry = rpcProviderRegistry;
+ }
+
@Override
public void setRole(final OfpRole role) {
this.role = role;
@Override
- public void setBindingAwareBroker(final BindingAwareBroker bindingAwareBroker) {
- this.bindingAwareBroker = bindingAwareBroker;
+ public void initialize() {
+
+ Preconditions.checkNotNull(dataBroker, "missing data broker");
+ Preconditions.checkNotNull(rpcProviderRegistry, "missing RPC provider registry");
+ Preconditions.checkNotNull(notificationProviderService, "missing notification provider service");
+
+ connectionManager = new ConnectionManagerImpl();
+ deviceManager = new DeviceManagerImpl(dataBroker);
+ statisticsManager = new StatisticsManagerImpl();
+ rpcManager = new RpcManagerImpl(rpcProviderRegistry, rpcRequestsQuota);
+
+ connectionManager.setDeviceConnectedHandler(deviceManager);
+ deviceManager.setDeviceInitializationPhaseHandler(statisticsManager);
+ deviceManager.setNotificationService(this.notificationProviderService);
+ statisticsManager.setDeviceInitializationPhaseHandler(rpcManager);
+ rpcManager.setDeviceInitializationPhaseHandler(deviceManager);
+
+ TranslatorLibraryUtil.setBasicTranslatorLibrary(deviceManager);
+ startSwitchConnections();
}
@Override
- public void initialize() {
- Preconditions.checkNotNull(bindingAwareBroker, "missing bindingAwareBroker");
- bindingAwareBroker.registerProvider(this);
+ public void setNotificationProviderService(final NotificationProviderService notificationProviderService) {
+ this.notificationProviderService = notificationProviderService;
}
@Override
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
public class RpcContextImpl implements RpcContext {
private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(RpcContextImpl.class);
- final ProviderContext providerContext;
+ final RpcProviderRegistry rpcProviderRegistry;
// TODO: add private Sal salBroker
private final DeviceContext deviceContext;
private int maxRequestsPerDevice;
- public RpcContextImpl(final ProviderContext providerContext, final DeviceContext deviceContext) {
- this.providerContext = providerContext;
+ public RpcContextImpl(final RpcProviderRegistry rpcProviderRegistry, final DeviceContext deviceContext) {
+ this.rpcProviderRegistry = rpcProviderRegistry;
this.deviceContext = deviceContext;
}
@Override
public <S extends RpcService> void registerRpcServiceImplementation(final Class<S> serviceClass,
final S serviceInstance) {
- final RoutedRpcRegistration<S> routedRpcReg = providerContext.addRoutedRpcImplementation(serviceClass, serviceInstance);
+ final RoutedRpcRegistration<S> routedRpcReg = rpcProviderRegistry.addRoutedRpcImplementation(serviceClass, serviceInstance);
routedRpcReg.registerPath(NodeContext.class, deviceContext.getDeviceState().getNodeInstanceIdentifier());
rpcRegistrations.add(routedRpcReg);
}
package org.opendaylight.openflowplugin.impl.rpc;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler;
import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
public class RpcManagerImpl implements RpcManager {
- private final ProviderContext providerContext;
+ private final RpcProviderRegistry rpcProviderRegistry;
private DeviceInitializationPhaseHandler deviceInitPhaseHandler;
private final Long maxRequestsQuota;
- public RpcManagerImpl(final ProviderContext providerContext,
+ public RpcManagerImpl(final RpcProviderRegistry rpcProviderRegistry,
final Long quotaValue) {
- this.providerContext = providerContext;
+ this.rpcProviderRegistry = rpcProviderRegistry;
maxRequestsQuota = quotaValue;
}
@Override
public void onDeviceContextLevelUp(final DeviceContext deviceContext) {
- final RpcContext rpcContext = new RpcContextImpl(providerContext, deviceContext);
+ final RpcContext rpcContext = new RpcContextImpl(rpcProviderRegistry, deviceContext);
rpcContext.setRequestContextQuota(maxRequestsQuota.intValue());
deviceContext.setDeviceDisconnectedHandler(rpcContext);
MdSalRegistratorUtils.registerServices(rpcContext, deviceContext);
openflowPluginProvider.setSwitchConnectionProviders(getOpenflowSwitchConnectionProviderDependency());
openflowPluginProvider.setRole(getRole());
- openflowPluginProvider.setBindingAwareBroker(getBindingAwareBrokerDependency());
+ openflowPluginProvider.setDataBroker(getDataBrokerDependency());
+ openflowPluginProvider.setRpcProviderRegistry(getRpcRegistryDependency());
+ openflowPluginProvider.setNotificationProviderService(getNotificationServiceDependency());
+
openflowPluginProvider.initialize();
return openflowPluginProvider;
case openflow-plugin-provider-impl {
when "/config:modules/config:module/config:type = 'openflow-plugin-provider-impl'";
- container binding-aware-broker {
+ container data-broker {
uses config:service-ref {
refine type {
mandatory true;
- config:required-identity md-sal-binding:binding-broker-osgi-registry;
+ config:required-identity md-sal-binding:binding-async-data-broker;
+ }
+ }
+ }
+ container rpc-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity md-sal-binding:binding-rpc-registry;
+ }
+ }
+ }
+ container notification-service {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity md-sal-binding:binding-notification-service;
}
}
}