<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.ovsdb</groupId>
<version>1.2.0-SNAPSHOT</version>
<relativePath>../commons/parent</relativePath>
</parent>
-
- <artifactId>ovs-sfc</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <name>Opendaylight OVS SFC Plugin</name>
+ <artifactId>ovssfc</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>
+ <properties>
+ <sfc-model.version>0.0.1-SNAPSHOT</sfc-model.version>
+ <jmxGeneratorPath>target/generated-sources/config</jmxGeneratorPath>
+ </properties>
+
<dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
- <artifactId>sal</artifactId>
+ <artifactId>sal-binding-config</artifactId>
+ <version>${mdsal.version}</version>
</dependency>
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
+ <groupId>org.opendaylight.sfc</groupId>
+ <artifactId>sfc-model</artifactId>
+ <version>${sfc-model.version}</version>
</dependency>
</dependencies>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
- <version>2.3.6</version>
+ <version>${bundle.plugin.version}</version>
<extensions>true</extensions>
<configuration>
- <instructions>
- <Import-Package>
- org.opendaylight.controller.sal.core,
- org.slf4j
- </Import-Package>
- <Export-Package>
- org.opendaylight.ovsdb.ovssfc
- </Export-Package>
- <Bundle-Activator>org.opendaylight.ovsdb.ovssfc.internal.Activator</Bundle-Activator>
- </instructions>
<manifestLocation>${project.basedir}/META-INF</manifestLocation>
</configuration>
</plugin>
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>config</id>
+ <goals>
+ <goal>generate-sources</goal>
+ </goals>
+ <configuration>
+ <codeGenerators>
+ <generator>
+ <codeGeneratorClass>
+ org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+ </codeGeneratorClass>
+ <outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
+ <additionalConfiguration>
+ <namespaceToPackage1>
+ urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang
+ </namespaceToPackage1>
+ </additionalConfiguration>
+ </generator>
+ </codeGenerators>
+ <inspectDependencies>true</inspectDependencies>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>yang-jmx-generator-plugin</artifactId>
+ <version>${controller.config.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>maven-sal-api-gen-plugin</artifactId>
+ <version>${yangtools.version}</version>
+ </dependency>
+ </dependencies>
</plugin>
- <!--
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-failsafe-plugin</artifactId>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.jacoco</groupId>
- <artifactId>jacoco-maven-plugin</artifactId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
- -->
</plugins>
</build>
--- /dev/null
+/*
+* Copyright (C) 2014 Red Hat, Inc.
+*
+* 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
+*
+* Authors : Sam Hague
+*/
+package org.opendaylight.controller.config.yang.config.ovssfc_provider.impl;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.ovsdb.ovssfc.OvsSfcProvider;
+
+public class OvsSfcProviderModule extends org.opendaylight.controller.config.yang.config.ovssfc_provider.impl.AbstractOvsSfcProviderModule {
+ public OvsSfcProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public OvsSfcProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.ovssfc_provider.impl.OvsSfcProviderModule 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() {
+ DataBroker dataBroker = getDataBrokerDependency();
+ final OvsSfcProvider ovsSfcProvider = new OvsSfcProvider(dataBroker);
+
+ final class AutoCloseableSfc implements AutoCloseable {
+
+ @Override
+ public void close() throws Exception {
+ ovsSfcProvider.close();
+ }
+ }
+
+ AutoCloseable ret = new AutoCloseableSfc();
+ return ret;
+ }
+
+}
--- /dev/null
+/*
+* Generated file
+*
+* Generated from: yang module name: ovssfc-provider-impl yang module local name: ovssfc-provider-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Mon Aug 11 13:45:11 EDT 2014
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.config.ovssfc_provider.impl;
+public class OvsSfcProviderModuleFactory extends org.opendaylight.controller.config.yang.config.ovssfc_provider.impl.AbstractOvsSfcProviderModuleFactory {
+
+}
--- /dev/null
+/*
+* Copyright (C) 2014 Red Hat, Inc.
+*
+* 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
+*
+* Authors : Sam Hague
+*/
+package org.opendaylight.ovsdb.ovssfc;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public abstract class AbstractDataListener implements DataChangeListener {
+ private DataBroker dataBroker;
+ private InstanceIdentifier<?> iID;
+ private ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
+
+ public void setDataBroker (DataBroker dataBroker) {
+ this.dataBroker = dataBroker;
+ }
+
+ public void setIID (InstanceIdentifier<?> IID) {
+ this.iID = IID;
+ }
+
+ public void registerAsDataChangeListener () {
+ dataChangeListenerRegistration = dataBroker.registerDataChangeListener( LogicalDatastoreType.CONFIGURATION,
+ iID, this, DataBroker.DataChangeScope.SUBTREE );
+ }
+
+ public void closeDataChangeListener () {
+ dataChangeListenerRegistration.close();
+ }
+}
--- /dev/null
+/*
+* Copyright (C) 2014 Red Hat, Inc.
+*
+* 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
+*
+* Authors : Sam Hague
+*/
+package org.opendaylight.ovsdb.ovssfc;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OvsSfcProvider implements AutoCloseable {
+ private static final Logger logger = LoggerFactory.getLogger(OvsSfcProvider.class);
+ private DataBroker dataBroker;
+ private SfcDataListener sfcDataListener;
+ private SffDataListener sffDataListener;
+ private SfpDataListener sfpDataListener;
+
+ public OvsSfcProvider(DataBroker dataBroker) {
+ setDataBroker(dataBroker);
+
+ sfcDataListener = new SfcDataListener(dataBroker);
+ sffDataListener = new SffDataListener(dataBroker);
+ sfpDataListener = new SfpDataListener(dataBroker);
+
+ logger.info("Initialized");
+ }
+
+ public void setDataBroker(DataBroker dataBroker) {
+ this.dataBroker = dataBroker;
+ }
+
+ @Override
+ public void close() throws Exception {
+ sfcDataListener.closeDataChangeListener();
+ sffDataListener.closeDataChangeListener();
+ sfpDataListener.closeDataChangeListener();
+ logger.info("Closed");
+ }
+}
--- /dev/null
+/*
+* Copyright (C) 2014 Red Hat, Inc.
+*
+* 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
+*
+* Authors : Sam Hague
+*/
+package org.opendaylight.ovsdb.ovssfc;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfc.rev140701.ServiceFunctionChains;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.Map;
+
+public class SfcDataListener extends AbstractDataListener {
+ private static final Logger logger = LoggerFactory.getLogger(SfcDataListener.class);
+
+ public SfcDataListener(DataBroker dataBroker) {
+ setDataBroker(dataBroker);
+ setIID(InstanceIdentifier.builder(ServiceFunctionChains.class).build());
+ registerAsDataChangeListener();
+ }
+
+ @Override
+ public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change ) {
+ logger.trace("\nOVSSFC Enter: {}", Thread.currentThread().getStackTrace()[1]);
+
+ Map<InstanceIdentifier<?>, DataObject> dataCreatedObject = change.getCreatedData();
+
+ Map<InstanceIdentifier<?>, DataObject> dataUpdatedConfigurationObject = change.getUpdatedData();
+ for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : dataUpdatedConfigurationObject.entrySet()) {
+ if (entry.getValue() instanceof ServiceFunctionChains) {
+ ServiceFunctionChains updatedServiceFunctionChains = (ServiceFunctionChains) entry.getValue();
+ logger.trace("\nOVSSFC sfp:\n {}", updatedServiceFunctionChains.toString());
+ }
+ }
+
+ logger.trace("\nOVSSFC Exit: {}", Thread.currentThread().getStackTrace()[1]);
+ }
+}
--- /dev/null
+/*
+* Copyright (C) 2014 Red Hat, Inc.
+*
+* 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
+*
+* Authors : Sam Hague
+*/
+package org.opendaylight.ovsdb.ovssfc;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.ServiceFunctionForwarders;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.List;
+import java.util.Map;
+
+public class SffDataListener extends AbstractDataListener {
+ private static final Logger logger = LoggerFactory.getLogger(SffDataListener.class);
+
+ public SffDataListener (DataBroker dataBroker) {
+ setDataBroker(dataBroker);
+ setIID(InstanceIdentifier.builder(ServiceFunctionForwarders.class).build());
+ registerAsDataChangeListener();
+ }
+
+ @Override
+ public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change ) {
+ logger.trace("\nOVSSFC Enter: {}", Thread.currentThread().getStackTrace()[1]);
+
+ Map<InstanceIdentifier<?>, DataObject> dataCreatedObject = change.getCreatedData();
+
+ Map<InstanceIdentifier<?>, DataObject> dataUpdatedConfigurationObject = change.getUpdatedData();
+ for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : dataUpdatedConfigurationObject.entrySet()) {
+ if (entry.getValue() instanceof ServiceFunctionForwarders) {
+
+ ServiceFunctionForwarders updatedServiceFunctionForwarders = (ServiceFunctionForwarders) entry.getValue();
+ List<ServiceFunctionForwarder> serviceFunctionForwarderList = updatedServiceFunctionForwarders.getServiceFunctionForwarder();
+ for (ServiceFunctionForwarder serviceFunctionForwarder : serviceFunctionForwarderList) {
+ logger.trace("\nOVSSFC sff:\n {}", serviceFunctionForwarder.toString());
+
+ /*
+ List<SffDataPlaneLocator> sffDataPlaneLocatorList = serviceFunctionForwarder.getSffDataPlaneLocator();
+ for (SffDataPlaneLocator sffDataPlaneLocator : sffDataPlaneLocatorList) {
+ logger.trace("\nsffdpl: {}", sffDataPlaneLocator.toString());
+ logger.trace("\nsffdpl: name: {}", sffDataPlaneLocator.getName());
+ logger.trace("\nsffdpl: transport: {}", sffDataPlaneLocator.getTransport().getName());
+ logger.trace("\nsffdpl: dpl: {}", sffDataPlaneLocator.getDataPlaneLocator().toString());
+ }
+ */
+ }
+ }
+ }
+
+ logger.trace("\nOVSSFC Exit: {}", Thread.currentThread().getStackTrace()[1]);
+ }
+}
--- /dev/null
+/*
+* Copyright (C) 2014 Red Hat, Inc.
+*
+* 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
+*
+* Authors : Sam Hague
+*/
+package org.opendaylight.ovsdb.ovssfc;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.Map;
+
+public class SfpDataListener extends AbstractDataListener {
+ private static final Logger logger = LoggerFactory.getLogger(SfpDataListener.class);
+
+ public SfpDataListener(DataBroker dataBroker) {
+ setDataBroker(dataBroker);
+ setIID(InstanceIdentifier.builder(ServiceFunctionPaths.class).build());
+ registerAsDataChangeListener();
+ }
+
+ @Override
+ public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change ) {
+ logger.trace("\nOVSSFC Enter: {}", Thread.currentThread().getStackTrace()[1]);
+
+ Map<InstanceIdentifier<?>, DataObject> dataCreatedObject = change.getCreatedData();
+
+ Map<InstanceIdentifier<?>, DataObject> dataUpdatedConfigurationObject = change.getUpdatedData();
+ for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : dataUpdatedConfigurationObject.entrySet()) {
+ if (entry.getValue() instanceof ServiceFunctionPaths) {
+ ServiceFunctionPaths updatedServiceFunctionPaths = (ServiceFunctionPaths) entry.getValue();
+ logger.trace("\nOVSSFC sfp:\n {}", updatedServiceFunctionPaths.toString());
+ }
+ }
+
+ logger.trace("\nOVSSFC Exit: {}", Thread.currentThread().getStackTrace()[1]);
+ }
+}
+++ /dev/null
-/*
- * Copyright (C) 2014 Red Hat, Inc.
- *
- * 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
- *
- * Authors : Sam Hague
- */
-package org.opendaylight.ovsdb.ovssfc.internal;
-
-import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
-
-public class Activator extends ComponentActivatorAbstractBase {
-
- /**
- * Function called when the activator starts just after some initializations
- * are done by the ComponentActivatorAbstractBase.
- */
- @Override
- public void init() {
- }
-
- /**
- * Function called when the activator stops just before the cleanup done by
- * ComponentActivatorAbstractBase
- *
- */
- @Override
- public void destroy() {
- }
-}
\ No newline at end of file
--- /dev/null
+<snapshot>
+ <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:ovssfc="urn:opendaylight:params:xml:ns:yang:controller:config:ovssfc-provider:impl">
+ ovssfc:ovssfc-provider-impl
+ </type>
+ <name>ovssfc-provider-impl</name>
+
+ <data-broker>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+ <name>binding-data-broker</name>
+ </data-broker>
+ </module>
+ </modules>
+ </data>
+
+ </configuration>
+
+ <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:controller:config:ovssfc-provider:impl?module=ovssfc-provider-impl&revision=2014-06-30</capability>
+ </required-capabilities>
+
+</snapshot>
--- /dev/null
+// vi: set smarttab et sw=4 tabstop=4:
+module ovssfc-provider-impl {
+
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:controller:config:ovssfc-provider:impl";
+ prefix "ovssfc-provider-impl";
+
+ import config { prefix config; revision-date 2013-04-05; }
+ import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+
+
+ description
+ "This module contains the base YANG definitions for
+ ovssfc-provider impl implementation.";
+
+ revision "2014-06-30" {
+ description
+ "Initial revision.";
+ }
+
+ identity ovssfc-provider-impl {
+ base config:module-type;
+
+ config:java-name-prefix OvsSfcProvider;
+ }
+
+ augment "/config:modules/config:module/config:configuration" {
+ case ovssfc-provider-impl {
+ when "/config:modules/config:module/config:type = 'ovssfc-provider-impl'";
+
+ //wires in the data-broker service
+ container data-broker {
+ uses config:service-ref {
+ refine type {
+ mandatory false;
+ config:required-identity mdsal:binding-async-data-broker;
+ }
+ }
+ }
+ }
+ }
+}