<artifactId>neutron</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>neutron</artifactId>
- <version>${project.version}</version>
- <type>xml</type>
- <classifier>config</classifier>
- </dependency>
<dependency>
<groupId>org.opendaylight.dlux</groupId>
<artifactId>features-dlux</artifactId>
<bundle>mvn:org.opendaylight.netvirt/utils.mdsal-utils/{{VERSION}}</bundle>
<bundle>mvn:org.opendaylight.ovsdb/utils.mdsal-utils/{{VERSION}}</bundle>
<bundle>mvn:org.opendaylight.netvirt/neutron/{{VERSION}}</bundle>
- <configfile finalname="etc/opendaylight/karaf/netvirt-neutron-default-config.xml">mvn:org.opendaylight.netvirt/neutron/{{VERSION}}/xml/config</configfile>
</feature>
<feature name='odl-netvirt-it' version='${project.version}' description='OpenDaylight :: netvirt :: IT'>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright (c) 2016 Red Hat, 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
--->
-<snapshot>
- <required-capabilities>
- <capability>urn:opendaylight:params:xml:ns:yang:netvirt:neutron?module=netvirt-neutron&revision=2016-03-08</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28</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:neutron">prefix:netvirt-neutron</type>
- <name>netvirt-neutron</name>
- <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>
- </module>
- </modules>
- </data>
- </configuration>
-</snapshot>
package org.opendaylight.netvirt.netvirt.renderers.neutron;
import com.google.common.collect.ImmutableBiMap;
-import com.google.common.collect.ImmutableBiMap.Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.NetworkTypeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.NetworkTypeFlat;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.NetworkTypeGre;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.NetworkTypeVlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.NetworkTypeVxlan;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeBase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeComputeNova;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeDhcp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeFloatingIp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeRouter;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeRouterGateway;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeRouterInterfaceDistributed;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.PortTypeRouter;
/**
* A collection of configuration constants
*/
public class DelegatingDataTreeListener<T extends DataObject> implements AutoCloseable, ClusteredDataTreeChangeListener<T> {
private static final Logger LOG = LoggerFactory.getLogger(DelegatingDataTreeListener.class);
- protected NeutronProvider provider;
protected DataBroker db;
private static final ThreadFactory threadFactory = new ThreadFactoryBuilder()
.setNameFormat("NV-NeutronDTL-%d").build();
private final DataProcessor<T> dataProcessor;
private ListenerRegistration<DelegatingDataTreeListener<T>> listenerRegistration;
- public DelegatingDataTreeListener(NeutronProvider provider, DataProcessor<T> dataProcessor,
+ public DelegatingDataTreeListener(DataProcessor<T> dataProcessor,
DataBroker db, DataTreeIdentifier<T> treeId) {
- this.provider = Preconditions.checkNotNull(provider, "provider can not be null!");
this.dataProcessor = Preconditions.checkNotNull(dataProcessor, "Data processor can not be null!");
registerListener(Preconditions.checkNotNull(db, "Data broker can not be null!"),
Preconditions.checkNotNull(treeId, "Tree identifier can not be null!"));
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.ports.Port;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.ports.PortKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class MdsalHelper {
- private static final Logger LOG = LoggerFactory.getLogger(MdsalHelper.class);
public static InstanceIdentifier<Port> createPortInstanceIdentifier(Uuid portUuid) {
return InstanceIdentifier.create(Ports.class)
.child(Port.class, new PortKey(portUuid));
public class NeutronNetworkChangeListener extends DelegatingDataTreeListener<Network> {
/**
* {@link NeutronNetworkChangeListener} constructor.
- * @param provider Neutron Provider
* @param db MdSal {@link DataBroker}
*/
- public NeutronNetworkChangeListener(final NeutronProvider provider, final DataBroker db) {
- super(provider, new NeutronNetworkDataProcessor(provider, db), db,
+ public NeutronNetworkChangeListener(final DataBroker db) {
+ super(new NeutronNetworkDataProcessor(db), db,
new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
InstanceIdentifier.create(Neutron.class).child(Networks.class).child(Network.class)));
}
public class NeutronNetworkDataProcessor implements DataProcessor<Network> {
private static final Logger LOG = LoggerFactory.getLogger(NeutronNetworkDataProcessor.class);
private final MdsalUtils mdsalUtils;
- private final NeutronProvider provider;
/**
*
- * @param provider - Neutron provider
* @param db - mdsal
*/
- public NeutronNetworkDataProcessor(final NeutronProvider provider, DataBroker db) {
- this.provider = Preconditions.checkNotNull(provider, "Provider can not be null!");
+ public NeutronNetworkDataProcessor(DataBroker db) {
mdsalUtils = new MdsalUtils(db);
}
public class NeutronPortChangeListener extends DelegatingDataTreeListener<Port> {
/**
* {@link NeutronPortChangeListener} constructor.
- * @param provider Neutron Provider
* @param db MdSal {@link DataBroker}
*/
- public NeutronPortChangeListener(final NeutronProvider provider, final DataBroker db) {
- super(provider, new NeutronPortDataProcessor(provider, db), db,
+ public NeutronPortChangeListener(final DataBroker db) {
+ super(new NeutronPortDataProcessor(db), db,
new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
InstanceIdentifier.create(Neutron.class).child(Ports.class).child(Port.class)));
}
public class NeutronPortDataProcessor implements DataProcessor<Port> {
private static final Logger LOG = LoggerFactory.getLogger(NeutronPortDataProcessor.class);
private MdsalUtils mdsalUtils;
- private final NeutronProvider provider;
/**
*
- * @param provider - Neutron provider
* @param db - mdsal
*/
- public NeutronPortDataProcessor(final NeutronProvider provider, DataBroker db) {
- this.provider = Preconditions.checkNotNull(provider, "Provider can not be null!");
+ public NeutronPortDataProcessor(DataBroker db) {
mdsalUtils = new MdsalUtils(db);
}
+++ /dev/null
-/*
- * Copyright (c) 2016 Red Hat, 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
- */
-package org.opendaylight.netvirt.netvirt.renderers.neutron;
-
-import com.google.common.base.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState;
-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.EntityOwnershipService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
-import org.osgi.framework.BundleContext;
-
-public class NeutronProvider implements BindingAwareProvider, AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(NeutronProvider.class);
- private BundleContext bundleContext = null;
- private static DataBroker dataBroker = null;
- private static EntityOwnershipService entityOwnershipService;
- private static final Entity ownerInstanceEntity = new Entity(Constants.NETVIRT_NEUTRON_OWNER_ENTITY_TYPE,
- Constants.NETVIRT_NEUTRON_OWNER_ENTITY_TYPE);
- private NeutronPortChangeListener neutronPortChangeListener;
- private NeutronNetworkChangeListener neutronNetworkChangeListener;
-
- public NeutronProvider(BundleContext bundleContext, EntityOwnershipService eos) {
- LOG.info("Netvirt NeutronProvider: bundleContext: {}", bundleContext);
- this.bundleContext = bundleContext;
- entityOwnershipService = eos;
- }
-
- public NeutronProvider() {
- LOG.info("Netvirt NeutronProvider created");
- }
-
- public static boolean isMasterProviderInstance() {
- if (entityOwnershipService != null) {
- Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
- return state.isPresent() && state.get().isOwner();
- }
- return false;
- }
-
-
- @Override
- public void onSessionInitiated(ProviderContext providerContext) {
- dataBroker = providerContext.getSALService(DataBroker.class);
- LOG.info("Netvirt NeutronProvider: onSessionInitiated dataBroker: {}", dataBroker);
-
- neutronPortChangeListener = new NeutronPortChangeListener(this, dataBroker);
- neutronNetworkChangeListener = new NeutronNetworkChangeListener(this, dataBroker);
- }
-
- @Override
- public void close() throws Exception {
- if (neutronPortChangeListener != null) {
- neutronPortChangeListener.close();
- }
- if (neutronNetworkChangeListener != null) {
- neutronNetworkChangeListener.close();
- }
- LOG.info("Netvirt NeutronProvider Closed");
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Red Hat, 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
- */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.neutron.rev160308;
-
-import org.opendaylight.netvirt.netvirt.renderers.neutron.NeutronProvider;
-
-public class NeutronModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.neutron.rev160308.AbstractNeutronModule {
- public NeutronModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public NeutronModule(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.neutron.rev160308.NeutronModule 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() {
- NeutronProvider provider = new NeutronProvider();
- getBrokerDependency().registerProvider(provider);
- return provider;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Red Hat, 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
- */
-/*
-* Generated file
-*
-* Generated from: yang module name: neutron yang module local name: neutron
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-*
-* 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.neutron.rev160308;
-public class NeutronModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.neutron.rev160308.AbstractNeutronModuleFactory {
-
-}
--- /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"
+ odl:type="default" />
+
+ <bean id="neutronPortChangeListener"
+ class="org.opendaylight.netvirt.netvirt.renderers.neutron.NeutronPortChangeListener"
+ destroy-method="close">
+ <argument ref="dataBroker" />
+ </bean>
+
+ <bean id="neutronNetworkChangeListener"
+ class="org.opendaylight.netvirt.netvirt.renderers.neutron.NeutronNetworkChangeListener"
+ destroy-method="close">
+ <argument ref="dataBroker" />
+ </bean>
+</blueprint>
\ No newline at end of file
+++ /dev/null
-module netvirt-neutron {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:netvirt:neutron";
- prefix "neutron";
-
- 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 Neutron renderer";
-
- revision "2016-03-08" {
- description
- "Initial revision";
- }
-
- identity netvirt-neutron {
- base config:module-type;
- config:java-name-prefix Neutron;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netvirt-neutron {
- when "/config:modules/config:module/config:type = 'netvirt-neutron'";
- container broker {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity md-sal-binding:binding-broker-osgi-registry;
- }
- }
- }
- }
- }
-}
package org.opendaylight.netvirt.netvirt.renderers.neutron;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import com.google.common.base.Optional;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIpsBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
-import com.google.common.base.Optional;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
* Unit test for {@link NeutronPortDataProcessor}
InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.ports.Port> portIid =
MdsalHelper.createPortInstanceIdentifier(uuid);
- org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.ports.Port netvirtPort = null;
Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ports.rev151227.ports.Port> data =
getDataBroker()
.newReadOnlyTransaction()
if (!initialized) {
session = mock(ProviderContext.class);
when(session.getSALService(DataBroker.class)).thenReturn(getDataBroker());
- neutronPortDataProcessor = new NeutronPortDataProcessor(new NeutronProvider(), session.getSALService(DataBroker.class));
+ neutronPortDataProcessor = new NeutronPortDataProcessor(getDataBroker());
initialized = true;
}
}
+++ /dev/null
-/*
- * Copyright (c) 2016 Red Hat, 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
- */
-package org.opendaylight.netvirt.netvirt.renderers.neutron;
-
-import org.junit.Test;
-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 static org.mockito.Mockito.mock;
-
-public class NeutronProviderTest {
- @Test
- public void testOnSessionInitiated() {
-
- NeutronProvider provider = new NeutronProvider();
-
- // ensure no exceptions
- // currently this method is empty
-
- //TODO
- //provider.onSessionInitiated(mock(BindingAwareBroker.ProviderContext.class));
- }
-
- @Test
- public void testClose() throws Exception {
- NeutronProvider provider = new NeutronProvider();
-
- // ensure no exceptions
- // currently this method is empty
- provider.close();
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Red Hat, 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
- */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.neutron.rev160308;
-
-import org.junit.Test;
-
-public class NeutronModuleFactoryTest {
- @Test
- public void testFactoryConstructor() {
- // ensure no exceptions on construction
- new NeutronModuleFactory();
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Red Hat, 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
- */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.neutron.rev160308;
-
-import org.junit.Test;
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.opendaylight.controller.config.api.JmxAttribute;
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.netvirt.netvirt.renderers.neutron.NeutronProvider;
-
-import javax.management.ObjectName;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class NeutronModuleTest {
- @Test
- public void testCustomValidation() {
- NeutronModule module = new NeutronModule(mock(ModuleIdentifier.class), mock(DependencyResolver.class));
-
- // ensure no exceptions on validation
- // currently this method is empty
- module.customValidation();
- }
-
- @Test
- public void testCreateInstance() throws Exception {
- // configure mocks
- DependencyResolver dependencyResolver = mock(DependencyResolver.class);
- BindingAwareBroker broker = mock(BindingAwareBroker.class);
- when(dependencyResolver.resolveInstance(eq(BindingAwareBroker.class), any(ObjectName.class), any(JmxAttribute.class))).thenReturn(broker);
-
- // create instance of module with injected mocks
- NeutronModule module = new NeutronModule(mock(ModuleIdentifier.class), dependencyResolver);
-
- // getInstance calls resolveInstance to get the broker dependency and then calls createInstance
- AutoCloseable closeable = module.getInstance();
-
- // verify that the module registered the returned provider with the broker
- verify(broker).registerProvider((NeutronProvider)closeable);
-
- // ensure no exceptions on close
- closeable.close();
- }
-}