<artifactId>openstack.net-virt-providers</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>openstack.net-virt-providers</artifactId>
- <version>${project.version}</version>
- <type>xml</type>
- <classifier>config</classifier>
- </dependency>
<dependency>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>schema.openvswitch</artifactId>
<bundle>mvn:org.opendaylight.netvirt/openstack.net-virt/{{VERSION}}</bundle>
<bundle>mvn:org.opendaylight.netvirt/openstack.net-virt-providers/{{VERSION}}</bundle>
<bundle>mvn:commons-net/commons-net/{{VERSION}}</bundle>
- <configfile finalname="etc/opendaylight/karaf/netvirt-providers-impl-default-config.xml">mvn:org.opendaylight.netvirt/openstack.net-virt-providers/{{VERSION}}/xml/config</configfile>
</feature>
<feature name="odl-ovsdb-openstack-it" description="OpenDaylight :: OVSDB :: OpenStack Network Virtualization IT"
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<snapshot>
- <required-capabilities>
- <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:netvirt:impl?module=netvirt-impl&revision=2015-05-13</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:netvirt:providers:impl?module=netvirt-providers-impl&revision=2015-05-13</capability>
- </required-capabilities>
- <configuration>
- <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
- <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:netvirt:providers:impl">prefix:netvirt-providers-impl</type>
- <name>netvirt-providers-default</name>
- <table-offset>0</table-offset>
- <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>
- </broker>
- <clustering-entity-ownership-service>
- <type xmlns:ns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service">ns:entity-ownership-service</type>
- <name>entity-ownership-service</name>
- </clustering-entity-ownership-service>
- </module>
- </modules>
- </data>
- </configuration>
-</snapshot>
package org.opendaylight.netvirt.openstack.netvirt.providers;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
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.NotificationProviderService;
import org.opendaylight.netvirt.openstack.netvirt.api.ArpProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.ClassifierProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.ConfigurationService;
+import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
import org.opendaylight.netvirt.openstack.netvirt.api.EgressAclProvider;
+import org.opendaylight.netvirt.openstack.netvirt.api.GatewayMacResolver;
import org.opendaylight.netvirt.openstack.netvirt.api.IcmpEchoProvider;
+import org.opendaylight.netvirt.openstack.netvirt.api.InboundNatProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.IngressAclProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.L2ForwardingProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.L2RewriteProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.LoadBalancerProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProviderManager;
+import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheListener;
import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
import org.opendaylight.netvirt.openstack.netvirt.api.OutboundNatProvider;
import org.opendaylight.netvirt.openstack.netvirt.api.RoutingProvider;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.OF13Provider;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
+import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.PipelineOrchestratorImpl;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.services.ArpResponderService;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.services.ClassifierService;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.services.OutboundNatService;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.services.RoutingService;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.services.arp.GatewayMacResolverService;
-import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
-import org.opendaylight.netvirt.openstack.netvirt.api.GatewayMacResolver;
-import org.opendaylight.netvirt.openstack.netvirt.api.InboundNatProvider;
-import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheListener;
-import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.PipelineOrchestratorImpl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.List;
-
public class ConfigActivator implements BundleActivator {
private static final Logger LOG = LoggerFactory.getLogger(ConfigActivator.class);
private List<ServiceRegistration<?>> registrations = new ArrayList<>();
- private ProviderContext providerContext;
- public ConfigActivator(ProviderContext providerContext) {
- this.providerContext = providerContext;
+ private final DataBroker dataBroker;
+ private final NotificationProviderService notificationProviderService;
+ private final PacketProcessingService packetProcessingService;
+ private final SalFlowService salFlowService;
+
+ public ConfigActivator(final DataBroker dataBroker,
+ final NotificationProviderService notificationProviderService,
+ final PacketProcessingService packetProcessingService,
+ final SalFlowService salFlowService) {
+ this.dataBroker = dataBroker;
+ this.notificationProviderService = notificationProviderService;
+ this.packetProcessingService = packetProcessingService;
+ this.salFlowService = salFlowService;
}
@Override
LOG.info("ConfigActivator start:");
NetvirtProvidersConfigImpl netvirtProvidersConfig =
- new NetvirtProvidersConfigImpl(providerContext.getSALService(DataBroker.class),
+ new NetvirtProvidersConfigImpl(dataBroker,
NetvirtProvidersProvider.getTableOffset());
registerService(context,
new String[] {NetvirtProvidersConfigImpl.class.getName()},
registerService(context, OutboundNatProvider.class.getName(),
outboundNatService, Service.OUTBOUND_NAT);
- final GatewayMacResolverService gatewayMacResolverService = new GatewayMacResolverService();
+ final GatewayMacResolverService gatewayMacResolverService = new GatewayMacResolverService(packetProcessingService, salFlowService);
registerService(context, GatewayMacResolver.class.getName(),
gatewayMacResolverService, Service.GATEWAY_RESOLVER);
- getNotificationProviderService().registerNotificationListener(gatewayMacResolverService);
+ notificationProviderService.registerNotificationListener(gatewayMacResolverService);
IcmpEchoResponderService icmpEchoResponderService = new IcmpEchoResponderService();
registerService(context, IcmpEchoProvider.class.getName(),
new String[] {AbstractServiceInstance.class.getName(), interfaceClassName},
properties, impl);
}
-
- private NotificationProviderService getNotificationProviderService(){
- return this.providerContext.getSALService(NotificationProviderService.class);
- }
-}
+}
\ No newline at end of file
package org.opendaylight.netvirt.openstack.netvirt.providers;
-import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.Service;
-import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
-
+import java.util.concurrent.atomic.AtomicBoolean;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
import org.opendaylight.controller.md.sal.common.api.clustering.CandidateAlreadyRegisteredException;
+import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipCandidateRegistration;
import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipChange;
import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListener;
import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
+import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.Service;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.concurrent.atomic.AtomicBoolean;
-
/**
* @author Sam Hague (shague@redhat.com)
*/
-public class NetvirtProvidersProvider implements BindingAwareProvider, AutoCloseable {
+public class NetvirtProvidersProvider implements AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvidersProvider.class);
- private BundleContext bundleContext = null;
- private static DataBroker dataBroker = null;
+ private final BundleContext bundleContext;
+ private static DataBroker dataBroker;
private ConfigActivator activator;
- private static ProviderContext providerContext = null;
- private static EntityOwnershipService entityOwnershipService;
+ private final EntityOwnershipService entityOwnershipService;
private ProviderEntityListener providerEntityListener = null;
private static AtomicBoolean hasProviderEntityOwnership = new AtomicBoolean(false);
private static short tableOffset;
- private NetvirtProvidersConfigImpl netvirtProvidersConfig = null;
-
- public NetvirtProvidersProvider(BundleContext bundleContext, EntityOwnershipService eos, short tableOffset) {
- LOG.info("NetvirtProvidersProvider: bundleContext: {}", bundleContext);
- this.bundleContext = bundleContext;
- entityOwnershipService = eos;
+ private final NotificationProviderService notificationProviderService;
+ private final PacketProcessingService packetProcessingService;
+ private final SalFlowService salFlowService;
+
+ public NetvirtProvidersProvider(final DataBroker dataBroker,
+ final EntityOwnershipService eos,
+ final NotificationProviderService notificationProviderService,
+ final PacketProcessingService packetProcessingService,
+ final SalFlowService salFlowService,
+ final short tableOffset) {
+ LOG.info("NetvirtProvidersProvider");
+ NetvirtProvidersProvider.dataBroker = dataBroker;
+ this.notificationProviderService = notificationProviderService;
+ this.entityOwnershipService = eos;
+ this.bundleContext = FrameworkUtil.getBundle(NetvirtProvidersProvider.class).getBundleContext();
+ this.salFlowService = salFlowService;
+ this.packetProcessingService = packetProcessingService;
setTableOffset(tableOffset);
}
- public static DataBroker getDataBroker() {
- return dataBroker;
- }
-
- public static ProviderContext getProviderContext() {
- return providerContext;
- }
-
public static boolean isMasterProviderInstance() {
return hasProviderEntityOwnership.get();
}
providerEntityListener.close();
}
- @Override
- public void onSessionInitiated(ProviderContext providerContextRef) {
- dataBroker = providerContextRef.getSALService(DataBroker.class);
- providerContext = providerContextRef;
+ public void start() {
LOG.info("NetvirtProvidersProvider: onSessionInitiated dataBroker: {}", dataBroker);
providerEntityListener = new ProviderEntityListener(this, entityOwnershipService);
- this.activator = new ConfigActivator(providerContextRef);
+ this.activator = new ConfigActivator(dataBroker, notificationProviderService, packetProcessingService, salFlowService);
try {
activator.start(bundleContext);
} catch (Exception e) {
provider.handleOwnershipChange(ownershipChange);
}
}
+
+ public static DataBroker getDataBroker() {
+ return dataBroker;
+ }
}
package org.opendaylight.netvirt.openstack.netvirt.providers.openflow13;
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.CheckedFuture;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
+import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
import org.opendaylight.netvirt.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.netvirt.utils.mdsal.openflow.InstructionUtils;
import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.CheckedFuture;
-
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
*/
package org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.services.arp;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
-import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
-import org.opendaylight.openflowplugin.api.OFConstants;
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
import org.opendaylight.netvirt.openstack.netvirt.api.ConfigurationService;
import org.opendaylight.netvirt.openstack.netvirt.api.GatewayMacResolver;
import org.opendaylight.netvirt.openstack.netvirt.api.GatewayMacResolverListener;
+import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
import org.opendaylight.netvirt.openstack.netvirt.providers.ConfigInterface;
-import org.opendaylight.netvirt.openstack.netvirt.providers.NetvirtProvidersProvider;
+import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
import org.opendaylight.netvirt.openstack.netvirt.providers.openflow13.Service;
+import org.opendaylight.openflowplugin.api.OFConstants;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.math.BigInteger;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.ThreadFactory;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
/**
*
* @author Anil Vishnoi (avishnoi@Brocade.com)
private static final int ARP_REPLY_TO_CONTROLLER_FLOW_PRIORITY = 10000;
private static final Instruction SEND_TO_CONTROLLER_INSTRUCTION;
private ArpSender arpSender;
- private SalFlowService flowService;
+ private final SalFlowService flowService;
private final AtomicLong flowCookie = new AtomicLong();
private final ConcurrentMap<Ipv4Address, ArpResolverMetadata> gatewayToArpMetadataMap =
new ConcurrentHashMap<>();
private volatile ConfigurationService configurationService;
private volatile NodeCacheManager nodeCacheManager;
+ private final PacketProcessingService packetProcessingService;
+
static {
ApplyActions applyActions = new ApplyActionsBuilder().setAction(
ImmutableList.of(ArpFlowFactory.createSendToControllerAction(0))).build();
.build();
}
- public GatewayMacResolverService(){
- super(Service.GATEWAY_RESOLVER);
+ public GatewayMacResolverService(final PacketProcessingService packetProcessingService, final SalFlowService salFlowService) {
+ this(Service.GATEWAY_RESOLVER, packetProcessingService, salFlowService);
}
- public GatewayMacResolverService(Service service){
+ public GatewayMacResolverService(Service service, final PacketProcessingService packetProcessingService, final SalFlowService salFlowService) {
super(service);
+ this.packetProcessingService = packetProcessingService;
+ this.flowService = salFlowService;
}
private void init(){
if(!initializationDone.get()){
initializationDone.set(true);
- ProviderContext providerContext = NetvirtProvidersProvider.getProviderContext();
- checkNotNull(providerContext);
- PacketProcessingService packetProcessingService = providerContext.getRpcService(PacketProcessingService.class);
if (packetProcessingService != null) {
LOG.debug("{} was found.", PacketProcessingService.class.getSimpleName());
this.arpSender = new ArpSender(packetProcessingService);
LOG.error("Missing service {}", PacketProcessingService.class.getSimpleName());
this.arpSender = null;
}
- flowService = providerContext.getRpcService(SalFlowService.class);
refreshRequester.scheduleWithFixedDelay(new Runnable(){
@Override
+++ /dev/null
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.impl.rev150513;
-
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.netvirt.openstack.netvirt.providers.NetvirtProvidersProvider;
-import org.osgi.framework.BundleContext;
-
-public class NetvirtProvidersImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.impl.rev150513.AbstractNetvirtProvidersImplModule {
- private BundleContext bundleContext = null;
-
- public NetvirtProvidersImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public NetvirtProvidersImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.impl.rev150513.NetvirtProvidersImplModule oldModule, java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void customValidation() {
- // add custom validation form module attributes here.
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- NetvirtProvidersProvider provider = new NetvirtProvidersProvider(bundleContext,
- getClusteringEntityOwnershipServiceDependency(), getTableOffset());
- BindingAwareBroker localBroker = getBrokerDependency();
- localBroker.registerProvider(provider);
- return provider;
- }
-
- public void setBundleContext(BundleContext bundleContext) {
- this.bundleContext = bundleContext;
- }
-}
+++ /dev/null
-/*
-* Generated file
-*
-* Generated from: yang module name: netvirt-providers-impl yang module local name: netvirt-providers-impl
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Wed May 20 16:57:59 EDT 2015
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.impl.rev150513;
-
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
-import org.opendaylight.controller.config.spi.Module;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NetvirtProvidersImplModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.impl.rev150513.AbstractNetvirtProvidersImplModuleFactory {
- private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvidersImplModuleFactory.class);
-
- @Override
- public Module createModule(String instanceName,
- DependencyResolver dependencyResolver,
- DynamicMBeanWithInstance old, BundleContext bundleContext)
- throws Exception {
- Module module = super.createModule(instanceName, dependencyResolver, old, bundleContext);
- setModuleBundleContext(bundleContext, module);
- return module;
- }
-
- @Override
- public Module createModule(String instanceName,
- DependencyResolver dependencyResolver, BundleContext bundleContext) {
- Module module = super.createModule(instanceName, dependencyResolver, bundleContext);
- setModuleBundleContext(bundleContext, module);
- return module;
- }
-
- private void setModuleBundleContext(BundleContext bundleContext,
- Module module) {
- if (module instanceof NetvirtProvidersImplModule) {
- ((NetvirtProvidersImplModule)module).setBundleContext(bundleContext);
- } else {
- LOG.warn("Module is of type {} expected type {}",
- module.getClass(), NetvirtProvidersImplModule.class);
- }
- }
-}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+ xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+ odl:use-default-for-reference-types="true">
+
+ <reference id="dataBroker"
+ interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" />
+ <reference id="entityOwnershipService"
+ interface="org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService" />
+ <reference id="notificationService"
+ interface="org.opendaylight.controller.sal.binding.api.NotificationProviderService" />
+ <reference id="rpcRegistry"
+ interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry" />
+
+ <odl:clustered-app-config id="netvirtProviderConfig"
+ binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.config.rev160109.NetvirtProvidersConfig">
+ </odl:clustered-app-config>
+
+ <odl:rpc-service id="salFlowService"
+ interface="org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService" />
+ <odl:rpc-service id="packetProcessingService"
+ interface="org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService" />
+
+ <bean id="netvirtProviders"
+ class="org.opendaylight.netvirt.openstack.netvirt.providers.NetvirtProvidersProvider"
+ init-method="start" destroy-method="close">
+ <argument ref="dataBroker" />
+ <argument ref="entityOwnershipService" />
+ <argument ref="notificationService" />
+ <argument ref="packetProcessingService" />
+ <argument ref="salFlowService" />
+ <argument>
+ <bean factory-ref="netvirtProviderConfig" factory-method="getTableOffset" />
+ </argument>
+ </bean>
+
+</blueprint>
leaf table-offset {
description "The table-offset is used to set the starting table for the netvirt pipeline";
type uint8;
+ default 0;
}
}
}
+++ /dev/null
-module netvirt-providers-impl {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:netvirt:providers:impl";
- prefix "netvirt-providers-impl";
-
- import config { prefix config; revision-date 2013-04-05; }
- import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
- import opendaylight-entity-ownership-service {prefix eos; revision-date 2015-08-10;}
-
- description
- "Service definition for netvirt providers project";
-
- revision "2015-05-13" {
- description
- "Initial revision";
- }
-
- identity netvirt-providers-impl {
- base config:module-type;
- config:java-name-prefix NetvirtProvidersImpl;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netvirtproviders-impl {
- when "/config:modules/config:module/config:type = 'netvirt-providers-impl'";
- container broker {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity md-sal-binding:binding-broker-osgi-registry;
- }
- }
- }
-
- container clustering-entity-ownership-service {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity eos:entity-ownership-service;
- }
- }
- }
-
- leaf table-offset {
- description "The table-offset is used to set the starting table for the netvirt pipeline";
- type uint8;
- }
- }
- }
-}
@Test
public void testGetTableOffset() {
short tableOffset = 10;
- NetvirtProvidersProvider netvirtProvidersProvider = new NetvirtProvidersProvider(null, null, tableOffset);
+ NetvirtProvidersProvider.setTableOffset(tableOffset);
assertEquals("Table offset was not set", tableOffset, NetvirtProvidersProvider.getTableOffset());
}
public void testSetTableOffset() {
// verify a good value can be set
short tableOffset = 0;
- NetvirtProvidersProvider netvirtProvidersProvider = new NetvirtProvidersProvider(null, null, tableOffset);
tableOffset = 10;
NetvirtProvidersProvider.setTableOffset(tableOffset);
public void testTableOffsetNegative() {
// verify an out of range value is not set
short tableOffset = 0;
- NetvirtProvidersProvider netvirtProvidersProvider = new NetvirtProvidersProvider(null, null, tableOffset);
-
+ NetvirtProvidersProvider.setTableOffset(tableOffset);
short tableOffsetBad = (short)(256 - Service.L2_FORWARDING.getTable());
NetvirtProvidersProvider.setTableOffset(tableOffsetBad);
assertEquals("tableOffset should not be set", 0, NetvirtProvidersProvider.getTableOffset());
import org.mockito.runners.MockitoJUnitRunner;
import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
+import org.opendaylight.netvirt.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@Test
public void testGetTableOffset() {
short tableOffset = 0;
+ NetvirtProvidersProvider.setTableOffset(tableOffset);
assertEquals("tableOffset was not set", tableOffset, orchestrator.getTableOffset());
}
*/
@Test
public void testGetTableOffsetWithService() {
+ short tableOffset = 0;
+ NetvirtProvidersProvider.setTableOffset(tableOffset);
assertEquals("tableOffset was not set", Service.CLASSIFIER.getTable(),
orchestrator.getTable(Service.CLASSIFIER));
}