- This infrastruture will make use of the openflowplugin's extension infrastructure to add to the Extensibility tree.
- Few of the NX actions and matches will be introduced here and ideally all the NX actions should reside in a OVS friendly place.
- NX_RESUBMIT and NX_RESUBMIT_TABLE codec are added and the appropriate action type will be used based on the data passed by the application
- Fixed Distribution to make use of this infra.
Change-Id: Ibdc634afe7704c9a4890a952ddb4bff5ef066610
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
<ovsdb.northbound.version>0.6.0-SNAPSHOT</ovsdb.northbound.version>
<schema.openvswitch.version>1.0.0-SNAPSHOT</schema.openvswitch.version>
<schema.hardwarevtep.version>1.0.0-SNAPSHOT</schema.hardwarevtep.version>
+ <ovsdb.ofextension.version>1.0.0-SNAPSHOT</ovsdb.ofextension.version>
<!-- Skip Coverage and IT by default -->
<skip.coverage>true</skip.coverage>
<skip.integrationtest>true</skip.integrationtest>
<sal.connection.version>0.1.2-SNAPSHOT</sal.connection.version>
<sal.networkconfiguration.version>0.0.3-SNAPSHOT</sal.networkconfiguration.version>
<mdsal.version>1.1-SNAPSHOT</mdsal.version>
+ <openflowplugin.version>0.0.3-SNAPSHOT</openflowplugin.version>
+ <openflowplugin-nicira.version>0.0.3-SNAPSHOT</openflowplugin-nicira.version>
+ <openflowplugin-extension.version>0.0.3-SNAPSHOT</openflowplugin-extension.version>
+ <openflowjava-nicira.version>0.0.3-SNAPSHOT</openflowjava-nicira.version>
+ <openflowjava-extension.version>0.0.3-SNAPSHOT</openflowjava-extension.version>
+ <openflowjava.version>0.5-SNAPSHOT</openflowjava.version>
+ <controller.config.version>0.2.5-SNAPSHOT</controller.config.version>
<switchmanager.api.version>0.7.1-SNAPSHOT</switchmanager.api.version>
<yangtools.version>0.6.2-SNAPSHOT</yangtools.version>
<northbound.commons.version>0.4.2-SNAPSHOT</northbound.commons.version>
<artifactId>model-flow-base</artifactId>
<version>${mdsal.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller.model</groupId>
+ <artifactId>model-flow-statistics</artifactId>
+ <version>${mdsal.version}</version>
+ </dependency>
<dependency>
<groupId>org.opendaylight.controller.model</groupId>
<artifactId>model-flow-service</artifactId>
<artifactId>commons.northbound</artifactId>
<version>${northbound.commons.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-api</artifactId>
+ <version>${controller.config.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-api</artifactId>
+ <version>${openflowjava.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-spi</artifactId>
+ <version>${openflowjava.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-impl</artifactId>
+ <version>${openflowjava.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>util</artifactId>
+ <version>${openflowjava.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowjava-extension-nicira-api</artifactId>
+ <version>${openflowjava-nicira.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowjava-extension-nicira</artifactId>
+ <version>${openflowjava-nicira.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin-extension-api</artifactId>
+ <version>${openflowplugin-extension.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin-extension-nicira</artifactId>
+ <version>${openflowplugin-nicira.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin</artifactId>
+ <version>${openflowplugin.version}</version>
+ </dependency>
<dependency>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>library</artifactId>
<artifactId>plugin-mdsal-adapter</artifactId>
<version>${ovsdb.plugin.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <artifactId>of-extension.nx-ofjava</artifactId>
+ <version>${ovsdb.ofextension.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <artifactId>of-extension.nx-sal</artifactId>
+ <version>${ovsdb.ofextension.version}</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<artifactId>openflowplugin-controller-config</artifactId>
<version>${openflowplugin.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <artifactId>of-extension.nx-ofjava</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <artifactId>of-extension.nx-sal</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>library</artifactId>
</resource>
</resources>
<plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <executions>
- <execution>
- <id>distro-assembly</id>
- <goals>
- <goal>single</goal>
- </goals>
- <phase>package</phase>
- <configuration>
- <descriptors>
- <descriptor>src/assemble/bin.xml</descriptor>
- </descriptors>
- </configuration>
- </execution>
- </executions>
- </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</goals>
<phase>generate-resources</phase>
<configuration>
- <outputDirectory>${project.build.directory}/provided-configs</outputDirectory>
- <includeArtifactIds>openflowplugin-controller-config</includeArtifactIds>
+ <outputDirectory>${project.build.directory}/generated-resources/opendaylight/configuration</outputDirectory>
+ <includeArtifactIds>
+ openflowplugin-controller-config, test-extension, openflowjava-extension-nicira, openflowjava-extension-nicira-api, openflowplugin-extension-nicira,
+ of-extension.nx-ofjava, of-extension.nx-sal
+ </includeArtifactIds>
<includes>**\/*.xml</includes>
<excludeTransitive>true</excludeTransitive>
<ignorePermissions>false</ignorePermissions>
</configuration>
</execution>
</executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>distro-assembly</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assemble/bin.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
opendaylight/
</outputDirectory>
</fileSet>
- <fileSet>
- <directory>${project.build.directory}/provided-configs/initial</directory>
- <outputDirectory>/opendaylight/configuration/initial.available</outputDirectory>
- <excludes>
- <exclude>**/META-INF/**</exclude>
- </excludes>
- </fileSet>
</fileSets>
<files>
<file>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright (c) 2014 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
--->
-<snapshot>
- <required-capabilities>
- <!-- openflowjava -->
- <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl?module=openflow-switch-connection-provider-impl&revision=2014-03-28</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider?module=openflow-switch-connection-provider&revision=2014-03-28</capability>
- <!-- openflowplugin -->
- <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl?module=openflow-provider-impl&revision=2014-03-26</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config?module=openflow-provider&revision=2014-03-26</capability>
- <!-- binding-broker-impl - provided -->
- </required-capabilities>
-
- <configuration>
-
- <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
- <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
- <!-- default OF-switch-connection-provider (port 6633) -->
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl">prefix:openflow-switch-connection-provider-impl</type>
- <name>openflow-switch-connection-provider-default-impl</name>
- <port>6633</port>
- <switch-idle-timeout>15000</switch-idle-timeout>
-<!-- Exemplary TLS configuration:
- - uncomment the <tls> tag
- - copy exemplary-switch-privkey.pem, exemplary-switch-cert.pem and exemplary-cacert.pem
- files into your virtual machine
- - set VM encryption options to use copied keys
- - start communication
- Please visit OpenflowPlugin or Openflow Protocol Library#Documentation wiki pages
- for detailed information regarding TLS -->
-<!-- <tls>
- <keystore>/exemplary-ctlKeystore</keystore>
- <keystore-type>JKS</keystore-type>
- <keystore-path-type>CLASSPATH</keystore-path-type>
- <keystore-password>opendaylight</keystore-password>
- <truststore>/exemplary-ctlTrustStore</truststore>
- <truststore-type>JKS</truststore-type>
- <truststore-path-type>CLASSPATH</truststore-path-type>
- <truststore-password>opendaylight</truststore-password>
- <certificate-password>opendaylight</certificate-password>
- </tls> -->
- </module>
- <!-- default OF-switch-connection-provider (port 6653) -->
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl">prefix:openflow-switch-connection-provider-impl</type>
- <name>openflow-switch-connection-provider-legacy-impl</name>
- <port>6653</port>
- <switch-idle-timeout>15000</switch-idle-timeout>
-<!-- Exemplary TLS configuration:
- - uncomment the <tls> tag
- - copy exemplary-switch-privkey.pem, exemplary-switch-cert.pem and exemplary-cacert.pem
- files into your virtual machine
- - set VM encryption options to use copied keys
- - start communication
- Please visit OpenflowPlugin or Openflow Protocol Library#Documentation wiki pages
- for detailed information regarding TLS -->
-<!-- <tls>
- <keystore>/exemplary-ctlKeystore</keystore>
- <keystore-type>JKS</keystore-type>
- <keystore-path-type>CLASSPATH</keystore-path-type>
- <keystore-password>opendaylight</keystore-password>
- <truststore>/exemplary-ctlTrustStore</truststore>
- <truststore-type>JKS</truststore-type>
- <truststore-path-type>CLASSPATH</truststore-path-type>
- <truststore-password>opendaylight</truststore-password>
- <certificate-password>opendaylight</certificate-password>
- </tls> -->
- </module>
-
-
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl">prefix:openflow-provider-impl</type>
- <name>openflow-provider-impl</name>
-
- <openflow-switch-connection-provider>
- <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
- <name>openflow-switch-connection-provider-default</name>
- </openflow-switch-connection-provider>
- <openflow-switch-connection-provider>
- <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
- <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>
- </module>
- </modules>
-
- <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
- <service>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">prefix:openflow-switch-connection-provider</type>
- <instance>
- <name>openflow-switch-connection-provider-default</name>
- <provider>/modules/module[type='openflow-switch-connection-provider-impl'][name='openflow-switch-connection-provider-default-impl']</provider>
- </instance>
- <instance>
- <name>openflow-switch-connection-provider-legacy</name>
- <provider>/modules/module[type='openflow-switch-connection-provider-impl'][name='openflow-switch-connection-provider-legacy-impl']</provider>
- </instance>
- </service>
-
- <service>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:common:config">prefix:openflow-provider</type>
- <instance>
- <name>openflow-provider</name>
- <provider>/modules/module[type='openflow-provider-impl'][name='openflow-provider-impl']</provider>
- </instance>
- </service>
- </services>
- </data>
-
- </configuration>
-</snapshot>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+ <parent>
+ <artifactId>commons</artifactId>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../commons/parent</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>of-extension.nx-ofjava</artifactId>
+ <version>${ovsdb.ofextension.version}</version>
+ <packaging>bundle</packaging>
+ <name>Opendaylight OVS NX Extensions for OpenflowJava Flow Models</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-spi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowjava-extension-nicira-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowjava-extension-nicira</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-buffer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.6</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-sources</goal>
+ </goals>
+ <configuration>
+ <codeGenerators>
+ <generator>
+ <codeGeneratorClass>
+ org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+ </codeGeneratorClass>
+ <outputBaseDir>${project.build.directory}/generated-sources/config</outputBaseDir>
+ <additionalConfiguration>
+ <namespaceToPackage1>
+ urn:opendaylight:params:xml:ns:yang:controller:config==org.opendaylight.controller.config.yang
+ </namespaceToPackage1>
+ </additionalConfiguration>
+ </generator>
+ <generator>
+ <codeGeneratorClass>
+ org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl
+ </codeGeneratorClass>
+ <outputBaseDir>${project.build.directory}/generated-sources/sal</outputBaseDir>
+ </generator>
+ <generator>
+ <codeGeneratorClass>org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl</codeGeneratorClass>
+ <outputBaseDir>${project.build.directory}/site/models</outputBaseDir>
+ </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>
+ <type>jar</type>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.ofjava;
+import org.opendaylight.openflowjava.nx.api.NiciraExtensionCodecRegistrator;
+import org.opendaylight.ovs.nx.ofjava.codec.action.NiciraActionCodecs;
+import org.opendaylight.ovs.nx.ofjava.codec.action.ResubmitCodec;
+
+import com.google.common.base.Preconditions;
+
+public class NiciraExtensionsRegistrator implements AutoCloseable {
+
+ private final NiciraExtensionCodecRegistrator registrator;
+ public NiciraExtensionsRegistrator(NiciraExtensionCodecRegistrator registrator) {
+ Preconditions.checkNotNull(registrator);
+ this.registrator = registrator;
+ }
+
+ public void registerNiciraExtensions() {
+ registrator.registerActionDeserializer(ResubmitCodec.RESUBMIT_DESERIALIZER_KEY, NiciraActionCodecs.RESUBMIT_CODEC);
+ registrator.registerActionDeserializer(ResubmitCodec.RESUBMIT_TABLE_DESERIALIZER_KEY, NiciraActionCodecs.RESUBMIT_CODEC);
+ registrator.registerActionSerializer(ResubmitCodec.SERIALIZER_KEY, NiciraActionCodecs.RESUBMIT_CODEC);
+ }
+
+ public void unregisterExtensions() {
+ registrator.unregisterActionDeserializer(ResubmitCodec.RESUBMIT_DESERIALIZER_KEY);
+ registrator.unregisterActionDeserializer(ResubmitCodec.RESUBMIT_TABLE_DESERIALIZER_KEY);
+ registrator.unregisterActionSerializer(ResubmitCodec.SERIALIZER_KEY);
+ }
+
+ @Override
+ public void close() throws Exception {
+ unregisterExtensions();
+ }
+
+}
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.ofjava;
+public class NiciraMatchCodecs {
+}
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.ofjava.codec.action;
+public class NiciraActionCodecs {
+ public static final ResubmitCodec RESUBMIT_CODEC = new ResubmitCodec();
+}
--- /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 : Madhu Venugopal
+ */
+
+package org.opendaylight.ovs.nx.ofjava.codec.action;
+
+import io.netty.buffer.ByteBuf;
+
+import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
+import org.opendaylight.openflowjava.nx.api.NiciraActionSerializerKey;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;
+import org.opendaylight.openflowjava.nx.codec.action.AbstractActionCodec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.NxmNxResubmit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.resubmit.grouping.ActionResubmit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.resubmit.grouping.ActionResubmitBuilder;
+
+/**
+ * Codec for the NX_RESUBMIT and NX_RESUBMIT_TABLE
+ */
+public class ResubmitCodec extends AbstractActionCodec {
+ public static final int LENGTH = 16;
+ public static final byte NXAST_RESUBMIT_SUBTYPE = 1;
+ public static final byte NXAST_RESUBMIT_TABLE_SUBTYPE = 14;
+ public static final NiciraActionSerializerKey SERIALIZER_KEY =
+ new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, NxmNxResubmit.class);
+ public static final NiciraActionDeserializerKey RESUBMIT_DESERIALIZER_KEY =
+ new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NXAST_RESUBMIT_SUBTYPE);
+ public static final NiciraActionDeserializerKey RESUBMIT_TABLE_DESERIALIZER_KEY =
+ new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NXAST_RESUBMIT_TABLE_SUBTYPE);
+
+ private static final byte OFP_TABLE_ALL = (byte)255;
+ private static final short OFP_IN_PORT = (short)0xfff8;
+ private static final int padding = 3; // nx_action_resubmit : uint8_t pad[3];
+
+ public byte getSubType(ActionResubmit action) {
+ if ((action.getTable() == null) || (action.getTable().byteValue() == OFP_TABLE_ALL)) return NXAST_RESUBMIT_SUBTYPE;
+ return NXAST_RESUBMIT_TABLE_SUBTYPE;
+ }
+
+ @Override
+ public void serialize(Action input, ByteBuf outBuffer) {
+ byte table = OFP_TABLE_ALL;
+ short inPort = OFP_IN_PORT;
+
+ ActionResubmit action = input.getAugmentation(OfjAugNxAction.class).getActionResubmit();
+ serializeHeader(LENGTH, getSubType(action), outBuffer);
+
+ if (action.getInPort() != null) inPort = action.getInPort().shortValue();
+ if (action.getTable() != null) table = action.getTable().byteValue();
+ outBuffer.writeShort(inPort);
+ outBuffer.writeByte(table);
+ outBuffer.writeZero(padding);
+ }
+
+ @Override
+ public Action deserialize(ByteBuf message) {
+ ActionBuilder actionBuilder = deserializeHeader(message);
+ ActionResubmitBuilder builder = new ActionResubmitBuilder();
+ builder.setInPort(message.readUnsignedShort());
+ builder.setTable(message.readUnsignedByte());
+ message.skipBytes(padding);
+ OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+ augNxActionBuilder.setActionResubmit(builder.build());
+ actionBuilder.addAugmentation(ExperimenterIdAction.class,
+ createExperimenterIdAction(NxmNxResubmit.class));
+ actionBuilder.addAugmentation(OfjAugNxAction.class, augNxActionBuilder.build());
+ return actionBuilder.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 : Madhu Venugopal
+ */
+package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.api.config.rev140711;
+
+import org.opendaylight.openflowjava.nx.api.impl.NiciraExtensionCodecRegistratorImpl;
+
+public class NiciraExtensionApiProviderModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.api.config.rev140711.AbstractNiciraExtensionApiProviderModule {
+ public NiciraExtensionApiProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public NiciraExtensionApiProviderModule(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.ovs.nx.api.config.rev140711.NiciraExtensionApiProviderModule 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() {
+ return new NiciraExtensionCodecRegistratorImpl(getOpenflowSwitchConnectionProviderDependency());
+
+ }
+
+}
--- /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 : Madhu Venugopal
+ */
+/*
+* Generated file
+*
+* Generated from: yang module name: ovs-nx-api-config yang module local name: ovs-nx-api
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Sat Aug 09 23:38:15 PDT 2014
+*
+* 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.ovs.nx.api.config.rev140711;
+public class NiciraExtensionApiProviderModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.api.config.rev140711.AbstractNiciraExtensionApiProviderModuleFactory {
+
+}
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.config.rev140711;
+
+import org.opendaylight.ovs.nx.ofjava.NiciraExtensionsRegistrator;
+
+public class NiciraExtensionProviderModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.config.rev140711.AbstractNiciraExtensionProviderModule {
+ public NiciraExtensionProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public NiciraExtensionProviderModule(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.ovs.nx.config.rev140711.NiciraExtensionProviderModule 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() {
+ NiciraExtensionsRegistrator registrator = new NiciraExtensionsRegistrator(getNxCodecRegistratorDependency());
+ registrator.registerNiciraExtensions();
+ return registrator;
+ }
+
+}
--- /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 : Madhu Venugopal
+ */
+/*
+* Generated file
+*
+* Generated from: yang module name: ovs-nx-config yang module local name: ovs-nx
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Sat Aug 09 23:54:31 PDT 2014
+*
+* 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.ovs.nx.config.rev140711;
+public class NiciraExtensionProviderModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.config.rev140711.AbstractNiciraExtensionProviderModuleFactory {
+
+}
--- /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:ovs:nx:api:config?module=ovs-nx-api-config&revision=2014-07-11</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:ovs:nx:api:config">prefix:ovs-nx-api</type>
+ <name>ovs-nx-api-bundle</name>
+ <openflow-switch-connection-provider>
+ <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
+ <name>openflow-switch-connection-provider-legacy</name>
+ </openflow-switch-connection-provider>
+ <openflow-switch-connection-provider>
+ <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
+ <name>openflow-switch-connection-provider-default</name>
+ </openflow-switch-connection-provider>
+ </module>
+ </modules>
+
+ <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+ <service>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:ovs:nx:api:config">prefix:nx-codec-registrator</type>
+ <instance>
+ <name>ovs-nx-registrator</name>
+ <provider>/modules/module[type='ovs-nx-api'][name='ovs-nx-api-bundle']</provider>
+ </instance>
+ </service>
+ </services>
+ </data>
+
+ </configuration>
+</snapshot>
--- /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:ovs:nx:config?module=ovs-nx-config&revision=2014-07-11</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:ovs:nx:config">prefix:ovs-nx</type>
+ <name>ovs-nx-bundle</name>
+ <nx-codec-registrator>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:ovs:nx:api:config">prefix:nx-codec-registrator</type>
+ <name>ovs-nx-registrator</name>
+ </nx-codec-registrator>
+ </module>
+ </modules>
+ </data>
+
+ </configuration>
+</snapshot>
--- /dev/null
+module ovs-nx-action {
+ yang-version 1;
+
+ namespace "urn:opendaylight:ovs:nx:action";
+ prefix "nx-action";
+
+ import openflow-action {prefix ofaction;}
+ import openflow-types {prefix oft;}
+ import yang-ext {prefix ext; revision-date "2013-07-09";}
+
+ description
+ "Nicira openflow action extensions";
+
+ revision "2014-04-21" {
+ description "Initial revision";
+ }
+
+ identity nxm-nx-resubmit {
+ base ofaction:experimenter-action-sub-type;
+ }
+
+ grouping ofj-nx-action-resubmit-grouping {
+ container action-resubmit {
+ leaf in-port {
+ type uint16;
+ default 0xfff8; // OFPP_INPORT
+ }
+ leaf table {
+ type uint8 {
+ range "0 .. 255";
+ }
+ default 255; // Current Table
+ }
+ }
+ }
+
+ augment "/ofaction:actions-container/ofaction:action" {
+ ext:augment-identifier "ofj-aug-nx-action";
+ uses ofj-nx-action-resubmit-grouping;
+ }
+
+}
--- /dev/null
+module ovs-nx-api-config {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:ovs:nx:api:config";
+ prefix "ovs-nx-api";
+
+ import config {prefix config; revision-date 2013-04-05;}
+ import openflow-switch-connection-provider {prefix openflow-switch-connection-provider;revision-date 2014-03-28;}
+
+ description
+ "Nicira extensions API in openflow library.";
+
+ revision "2014-07-11" {
+ description
+ "Initial revision";
+ }
+
+ identity ovs-nx-api {
+ base config:module-type;
+ config:provided-service nx-codec-registrator;
+ config:java-name-prefix NiciraExtensionApiProvider;
+ }
+
+ identity nx-codec-registrator {
+ base config:service-type;
+ config:java-class "org.opendaylight.openflowjava.nx.api.NiciraExtensionCodecRegistrator";
+ }
+
+ augment "/config:modules/config:module/config:configuration" {
+ case ovs-nx-api {
+ when "/config:modules/config:module/config:type = 'ovs-nx-api'";
+
+ list openflow-switch-connection-provider {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity openflow-switch-connection-provider:openflow-switch-connection-provider;
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+module ovs-nx-config {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:ovs:nx:config";
+ prefix "ovs-nx";
+
+ import config {prefix config; revision-date 2013-04-05;}
+ import ovs-nx-api-config {prefix ovs-nx-api-config;revision-date 2014-07-11;}
+
+ description
+ "Nicira extensions in openflow library.";
+
+ revision "2014-07-11" {
+ description
+ "Initial revision";
+ }
+
+ identity ovs-nx {
+ base config:module-type;
+ config:java-name-prefix NiciraExtensionProvider;
+ }
+
+ augment "/config:modules/config:module/config:configuration" {
+ case ovs-nx {
+ when "/config:modules/config:module/config:type = 'ovs-nx'";
+
+ container nx-codec-registrator {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity ovs-nx-api-config:nx-codec-registrator;
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+module ovs-nx-match {
+ yang-version 1;
+
+ namespace "urn:opendaylight:ovs:nx:match";
+ prefix "nx-match";
+
+ import openflow-extensible-match {prefix ofoxm;}
+ import openflow-types {prefix oft;}
+ import ietf-yang-types {prefix yang; revision-date "2010-09-24";}
+ import yang-ext {prefix ext; revision-date "2013-07-09";}
+
+ description
+ "Nicira openflow match extensions";
+
+ revision "2014-04-21" {
+ description "Initial revision";
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+ <parent>
+ <artifactId>commons</artifactId>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../commons/parent</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>of-extension.nx-sal</artifactId>
+ <version>${ovsdb.ofextension.version}</version>
+ <packaging>bundle</packaging>
+ <name>Opendaylight OVS NX Extensions for SAL Flow Models</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowjava-extension-nicira</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowjava-extension-nicira-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin-extension-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin-extension-nicira</artifactId>
+ </dependency>
+ <dependency>
+ <!-- configSubsystem yang should be moved to API and this would be doomed for removal -->
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin</artifactId>
+ </dependency>
+
+ <!-- MD-SAL models -->
+ <dependency>
+ <groupId>org.opendaylight.controller.model</groupId>
+ <artifactId>model-flow-base</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller.model</groupId>
+ <artifactId>model-flow-service</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller.model</groupId>
+ <artifactId>model-flow-statistics</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller.model</groupId>
+ <artifactId>model-inventory</artifactId>
+ </dependency>
+
+ <!-- OpenFlowJava-API models -->
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.ovsdb</groupId>
+ <artifactId>of-extension.nx-ofjava</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.6</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-sources</goal>
+ </goals>
+ <configuration>
+ <codeGenerators>
+ <generator>
+ <codeGeneratorClass>
+ org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+ </codeGeneratorClass>
+ <outputBaseDir>${project.build.directory}/generated-sources/config</outputBaseDir>
+ <additionalConfiguration>
+ <namespaceToPackage1>
+ urn:opendaylight:params:xml:ns:yang:controller:config==org.opendaylight.controller.config.yang
+ </namespaceToPackage1>
+ </additionalConfiguration>
+ </generator>
+ <generator>
+ <codeGeneratorClass>
+ org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl
+ </codeGeneratorClass>
+ <outputBaseDir>${project.build.directory}/generated-sources/sal</outputBaseDir>
+ </generator>
+ <generator>
+ <codeGeneratorClass>org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl</codeGeneratorClass>
+ <outputBaseDir>${project.build.directory}/site/models</outputBaseDir>
+ </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>
+ <type>jar</type>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.sal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.opendaylight.openflowjava.nx.api.NiciraUtil;
+import org.opendaylight.ovs.nx.sal.convertor.action.ResubmitConvertor;
+import org.opendaylight.ovs.nx.ofjava.codec.action.ResubmitCodec;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
+import org.opendaylight.openflowplugin.extension.api.ExtensionConverterRegistrator;
+import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitRpcAddFlowApplyActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.flow.input.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionResubmitRpcAddFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionResubmitRpcAddGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionResubmitNodesNodeGroupBucketsBucketActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitNodesNodeTableFlowApplyActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionResubmitNodesNodeTableFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionResubmitRpcRemoveGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionResubmitRpcUpdateGroupOriginalCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionResubmitRpcUpdateGroupUpdatedCase;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+
+public class NiciraExtensionProvider implements AutoCloseable {
+
+ private static final Logger LOG = LoggerFactory
+ .getLogger(NiciraExtensionProvider.class);
+
+ private ExtensionConverterRegistrator extensionConverterRegistrator;
+ private Set<ObjectRegistration<?>> registrations;
+
+ private final static ResubmitConvertor RESUBMIT_CONVERTOR = new ResubmitConvertor();
+
+ @Override
+ public void close() {
+ for (AutoCloseable janitor : registrations) {
+ try {
+ janitor.close();
+ } catch (Exception e) {
+ LOG.warn("closing of extension converter failed", e);
+ }
+ }
+ extensionConverterRegistrator = null;
+ }
+
+ public void setExtensionConverterRegistrator(
+ ExtensionConverterRegistrator extensionConverterRegistrator) {
+ this.extensionConverterRegistrator = extensionConverterRegistrator;
+ }
+
+ public void registerConverters() {
+ Preconditions.checkNotNull(extensionConverterRegistrator);
+ registrations = new HashSet<>();
+
+ registerAction13(NxActionResubmitNodesNodeTableFlowApplyActionsCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitNodesNodeTableFlowWriteActionsCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitNodesNodeGroupBucketsBucketActionsCase.class, RESUBMIT_CONVERTOR);
+
+
+ registerAction13(NxActionResubmitRpcAddFlowApplyActionsCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitRpcAddFlowWriteActionsCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitRpcAddGroupCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitRpcRemoveGroupCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitRpcUpdateGroupOriginalCase.class, RESUBMIT_CONVERTOR);
+ registerAction13(NxActionResubmitRpcUpdateGroupUpdatedCase.class, RESUBMIT_CONVERTOR);
+
+ registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(ResubmitCodec.SERIALIZER_KEY), RESUBMIT_CONVERTOR));
+ }
+
+ private void registerAction13(
+ Class<? extends Action> actionCaseType,
+ ConvertorActionToOFJava<Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action> actionConvertor) {
+ TypeVersionKey<? extends Action> key = new TypeVersionKey<>(actionCaseType, EncodeConstants.OF13_VERSION_ID);
+ registrations.add(extensionConverterRegistrator.registerActionConvertor(key, actionConvertor));
+ }
+}
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.ovs.nx.sal.convertor.action;
+
+import org.opendaylight.openflowjava.nx.api.NiciraConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.ExperimenterActionSubType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxAction;
+
+public class ActionUtil {
+
+ private final static ExperimenterIdActionBuilder EXPERIMENTER_ID_ACTION_BUILDER;
+
+ static {
+ EXPERIMENTER_ID_ACTION_BUILDER = new ExperimenterIdActionBuilder();
+ EXPERIMENTER_ID_ACTION_BUILDER.setExperimenter(new ExperimenterId(NiciraConstants.NX_VENDOR_ID));
+ }
+
+ /**
+ * @param augNxAction
+ * @param subType
+ * @return OFJava action with augmentation containing action subtype and experimenter type
+ */
+ public static Action createNiciraAction(OfjAugNxAction augNxAction,
+ Class<? extends ExperimenterActionSubType> subType) {
+ ActionBuilder actionBuilder = new ActionBuilder();
+ actionBuilder.setType(Experimenter.class);
+ actionBuilder.addAugmentation(ExperimenterIdAction.class, EXPERIMENTER_ID_ACTION_BUILDER.setSubType(subType)
+ .build());
+ actionBuilder.addAugmentation(OfjAugNxAction.class, augNxAction);
+ return actionBuilder.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 : Madhu Venugopal
+ */
+
+package org.opendaylight.ovs.nx.sal.convertor.action;
+
+import org.opendaylight.openflowplugin.extension.api.ConvertorActionFromOFJava;
+import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
+import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
+import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.NxmNxResubmit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjAugNxActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.resubmit.grouping.ActionResubmit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.resubmit.grouping.ActionResubmitBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.NxActionResubmitGrouping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionResubmitNotifFlowsStatisticsUpdateWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionResubmitNotifGroupDescStatsUpdatedCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionResubmitNodesNodeTableFlowWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.resubmit.grouping.NxResubmit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * Convert to/from SAL flow model to openflowjava model for Resubmit action
+ */
+public class ResubmitConvertor implements
+ConvertorActionToOFJava<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, Action>,
+ConvertorActionFromOFJava<Action, ActionPath> {
+
+ @Override
+ public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(Action input, ActionPath path) {
+ ActionResubmit action = input.getAugmentation(OfjAugNxAction.class).getActionResubmit();
+ NxResubmitBuilder builder = new NxResubmitBuilder();
+ builder.setInPort(action.getInPort());
+ builder.setTable(action.getTable());
+ return resolveAction(builder.build(), path);
+ }
+
+ private static org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action resolveAction(NxResubmit value, ActionPath path) {
+ switch (path) {
+ case NODES_NODE_TABLE_FLOW_INSTRUCTIONS_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION_EXTENSIONLIST_EXTENSION:
+ return new NxActionResubmitNodesNodeTableFlowWriteActionsCaseBuilder().setNxResubmit(value).build();
+ case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION:
+ return new NxActionResubmitNotifFlowsStatisticsUpdateWriteActionsCaseBuilder().setNxResubmit(value).build();
+ case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION:
+ return new NxActionResubmitNotifFlowsStatisticsUpdateApplyActionsCaseBuilder().setNxResubmit(value).build();
+ case GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION:
+ return new NxActionResubmitNotifGroupDescStatsUpdatedCaseBuilder().setNxResubmit(value).build();
+ default:
+ throw new CodecPreconditionException(path);
+ }
+ }
+
+ @Override
+ public Action convert(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) {
+ Preconditions.checkArgument(nxActionArg instanceof NxActionResubmitGrouping);
+ NxActionResubmitGrouping nxAction = (NxActionResubmitGrouping) nxActionArg;
+ ActionResubmitBuilder builder = new ActionResubmitBuilder();
+ builder.setInPort(nxAction.getNxResubmit().getInPort());
+ builder.setTable(nxAction.getNxResubmit().getTable());
+ OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+ augNxActionBuilder.setActionResubmit(builder.build());
+ return ActionUtil.createNiciraAction(augNxActionBuilder.build(), NxmNxResubmit.class);
+ }
+
+}
\ No newline at end of file
--- /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 : Madhu Venugopal
+ */
+package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.sal.config.impl.rev140711;
+
+import org.opendaylight.openflowplugin.extension.api.ExtensionConverterRegistrator;
+import org.opendaylight.ovs.nx.sal.NiciraExtensionProvider;
+
+public class ConfigurableNiciraExtensionProviderModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.sal.config.impl.rev140711.AbstractConfigurableNiciraExtensionProviderModule {
+ public ConfigurableNiciraExtensionProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public ConfigurableNiciraExtensionProviderModule(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.ovs.nx.sal.config.impl.rev140711.ConfigurableNiciraExtensionProviderModule 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() {
+ NiciraExtensionProvider provider = new NiciraExtensionProvider();
+ ExtensionConverterRegistrator registrator = getOpenflowPluginProviderDependency().getExtensionConverterRegistrator();
+ provider.setExtensionConverterRegistrator(registrator);
+ provider.registerConverters();
+ return provider;
+ }
+
+}
--- /dev/null
+/*
+* Generated file
+*
+* Generated from: yang module name: ovs-nx-sal-impl yang module local name: ovs-nx-sal-provider-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Sun Aug 10 00:20:39 PDT 2014
+*
+* 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.ovs.nx.sal.config.impl.rev140711;
+public class ConfigurableNiciraExtensionProviderModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovs.nx.sal.config.impl.rev140711.AbstractConfigurableNiciraExtensionProviderModuleFactory {
+
+}
--- /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:ovs:nx:sal:config:impl?module=ovs-nx-sal-cfg-impl&revision=2014-07-11</capability>
+ <!-- openflowplugin -->
+ <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config?module=openflow-provider&revision=2014-03-26</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:ovs:nx:sal:config:impl">prefix:ovs-nx-sal-provider-impl</type>
+ <name>ovs-nx-sal-provider-default-impl</name>
+
+ <openflow-plugin-provider>
+ <type xmlns:opfprov="urn:opendaylight:params:xml:ns:yang:openflow:common:config">opfprov:openflow-provider</type>
+ <name>openflow-provider</name>
+ </openflow-plugin-provider>
+ </module>
+ </modules>
+ </data>
+
+ </configuration>
+</snapshot>
--- /dev/null
+module ovs-nx-sal-action {
+ yang-version 1;
+
+ namespace "urn:opendaylight:ovs:nx:sal:action";
+ prefix "ovs-nx-sal-action";
+
+ import yang-ext {prefix ext; revision-date "2013-07-09";}
+ import flow-node-inventory {prefix fni; revision-date 2013-08-19; }
+ import opendaylight-inventory {prefix inv;revision-date "2013-08-19";}
+ import sal-flow {prefix sal-flow;revision-date "2013-08-19";}
+ import sal-group {prefix sal-group;revision-date "2013-09-18";}
+ import packet-processing {prefix sal-packet;revision-date "2013-07-09";}
+ import opendaylight-flow-statistics {prefix odl-flow-stats;revision-date "2013-08-19";}
+ import opendaylight-group-statistics {prefix odl-group-stats;revision-date "2013-11-11";}
+ import nicira-match {prefix nicira-match;revision-date "2014-04-21";}
+ import openflowplugin-extension-general {prefix ext-gen;revision-date "2014-07-14";}
+ import openflow-action {prefix ofaction;revision-date "2013-07-31";}
+
+ description
+ "Nicira openflow action extensions.";
+
+ revision "2014-07-14" {
+ description "Initial revision";
+ }
+ grouping nx-action-resubmit-grouping {
+ container nx-resubmit {
+ description "Re-searches OpenFlow flow table (or the table whose number is specified by table)
+ with the in-port field replaced by port (if port is specified) and executes the actions found";
+ leaf in-port {
+ type uint16;
+ default 0xfff8; // OFPP_INPORT
+ }
+ leaf table {
+ type uint8 {
+ range "0 .. 255";
+ }
+ default 255; // Current Table
+ }
+ }
+ }
+
+ // ACTION augmentations
+
+ augment "/sal-flow:add-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case nx-action-resubmit-rpc-add-flow-write-actions-case {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+
+ augment "/sal-flow:add-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case nx-action-resubmit-rpc-add-flow-apply-actions-case {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-flow:remove-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-resubmit-rpc-remove-flow-write-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-flow:remove-flow/sal-flow:input/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-resubmit-rpc-remove-flow-apply-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:original-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-resubmit-rpc-update-flow-original-write-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:original-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-resubmit-rpc-update-flow-original-apply-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:updated-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:write-actions-case/sal-flow:write-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-resubmit-rpc-update-flow-updated-write-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-flow:update-flow/sal-flow:input/sal-flow:updated-flow/sal-flow:instructions/sal-flow:instruction/sal-flow:instruction/sal-flow:apply-actions-case/sal-flow:apply-actions/sal-flow:action/sal-flow:action" {
+ case "nx-action-resubmit-rpc-update-flow-updated-apply-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-group:add-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-resubmit-rpc-add-group-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-group:remove-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-resubmit-rpc-remove-group-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-group:update-group/sal-group:input/sal-group:original-group/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-resubmit-rpc-update-group-original-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-group:update-group/sal-group:input/sal-group:updated-group/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+ case "nx-action-resubmit-rpc-update-group-updated-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/sal-packet:transmit-packet/sal-packet:input/sal-packet:action/sal-packet:action" {
+ case "nx-action-resubmit-rpc-transmit-packet-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/inv:nodes/inv:node/fni:table/fni:flow/fni:instructions/fni:instruction/fni:instruction/fni:write-actions-case/fni:write-actions/fni:action/fni:action" {
+ case "nx-action-resubmit-nodes-node-table-flow-write-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/inv:nodes/inv:node/fni:table/fni:flow/fni:instructions/fni:instruction/fni:instruction/fni:apply-actions-case/fni:apply-actions/fni:action/fni:action" {
+ case "nx-action-resubmit-nodes-node-table-flow-apply-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/inv:nodes/inv:node/fni:group/fni:buckets/fni:bucket/fni:action/fni:action" {
+ case "nx-action-resubmit-nodes-node-group-buckets-bucket-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/odl-flow-stats:flows-statistics-update/odl-flow-stats:flow-and-statistics-map-list/odl-flow-stats:instructions/odl-flow-stats:instruction/odl-flow-stats:instruction/odl-flow-stats:write-actions-case/odl-flow-stats:write-actions/odl-flow-stats:action/odl-flow-stats:action" {
+ case "nx-action-resubmit-notif-flows-statistics-update-write-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/odl-flow-stats:flows-statistics-update/odl-flow-stats:flow-and-statistics-map-list/odl-flow-stats:instructions/odl-flow-stats:instruction/odl-flow-stats:instruction/odl-flow-stats:apply-actions-case/odl-flow-stats:apply-actions/odl-flow-stats:action/odl-flow-stats:action" {
+ case "nx-action-resubmit-notif-flows-statistics-update-apply-actions-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+ augment "/odl-group-stats:group-desc-stats-updated/odl-group-stats:group-desc-stats/odl-group-stats:buckets/odl-group-stats:bucket/odl-group-stats:action/odl-group-stats:action" {
+ case "nx-action-resubmit-notif-group-desc-stats-updated-case" {
+ uses nx-action-resubmit-grouping;
+ }
+ }
+}
--- /dev/null
+module ovs-nx-sal-cfg-impl {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:ovs:nx:sal:config:impl";
+ prefix "ovs-nx-sal-cfg-impl";
+
+ import config {prefix config; revision-date 2013-04-05;}
+ import openflow-provider {prefix openflow-provider; revision-date 2014-03-26;}
+ import ovs-nx-sal-cfg {prefix ovs-nx-sal-cfg;}
+
+ description
+ "openflow extension for nicira - config-impl";
+
+ revision "2014-07-11" {
+ description
+ "Initial revision";
+ }
+
+ identity ovs-nx-sal-provider-impl {
+ base config:module-type;
+ config:provided-service ovs-nx-sal-cfg:ovs-nx-sal-provider;
+ config:java-name-prefix ConfigurableNiciraExtensionProvider;
+ }
+
+ augment "/config:modules/config:module/config:configuration" {
+ case ovs-nx-sal-provider-impl {
+ when "/config:modules/config:module/config:type = 'ovs-nx-sal-provider-impl'";
+
+ container openflow-plugin-provider {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity openflow-provider:openflow-provider;
+ }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+module ovs-nx-sal-cfg {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:controller:config:ovs:nx:sal:config";
+ prefix "ovs-nx-sal-cfg";
+
+ import config {prefix config; revision-date 2013-04-05; }
+
+ description
+ "openflow extension for nicira - config";
+
+ revision "2014-07-11" {
+ description
+ "Initial revision";
+ }
+
+ identity ovs-nx-sal-provider {
+ base config:service-type;
+ config:java-class "org.opendaylight.ovs.nx.sal.NiciraExtensionProvider";
+ }
+}
\ No newline at end of file
--- /dev/null
+module ovs-nx-sal-match {
+ yang-version 1;
+
+ namespace "urn:opendaylight:ovs:nx:sal:match";
+ prefix "ovs-nx-sal-match";
+
+ description
+ "Nicira openflow match extensions.";
+
+ revision "2014-07-14" {
+ description "Initial revision";
+ }
+}
<module>northbound</module>
<module>openstack/net-virt</module>
<module>openstack/net-virt-providers</module>
+ <module>of-extension/nx-ofjava</module>
+ <module>of-extension/nx-sal</module>
<module>ovs-sfc</module>
<!-- Integration Tests -->
<module>integrationtest</module>