Introducing Openflow NX Extension infrastructure and NX_RESUBMIT action in ovsdb... 67/9867/4
authorMadhu Venugopal <mavenugo@gmail.com>
Mon, 11 Aug 2014 20:51:40 +0000 (13:51 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Mon, 11 Aug 2014 21:17:53 +0000 (21:17 +0000)
- 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>
31 files changed:
commons/parent/pom.xml
distribution/opendaylight/pom.xml
distribution/opendaylight/src/assemble/bin.xml
distribution/opendaylight/src/main/resources/configuration/initial/42-openflowplugin.xml [deleted file]
of-extension/nx-ofjava/pom.xml [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraExtensionsRegistrator.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraMatchCodecs.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/NiciraActionCodecs.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/ResubmitCodec.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/api/config/rev140711/NiciraExtensionApiProviderModule.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/api/config/rev140711/NiciraExtensionApiProviderModuleFactory.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/config/rev140711/NiciraExtensionProviderModule.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/config/rev140711/NiciraExtensionProviderModuleFactory.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/resources/initial/50-ovs-nx-api-config.xml [new file with mode: 0644]
of-extension/nx-ofjava/src/main/resources/initial/51-ovs-nx-config.xml [new file with mode: 0644]
of-extension/nx-ofjava/src/main/yang/ovs-nx-action.yang [new file with mode: 0644]
of-extension/nx-ofjava/src/main/yang/ovs-nx-api-config.yang [new file with mode: 0644]
of-extension/nx-ofjava/src/main/yang/ovs-nx-config.yang [new file with mode: 0644]
of-extension/nx-ofjava/src/main/yang/ovs-nx-match.yang [new file with mode: 0644]
of-extension/nx-sal/pom.xml [new file with mode: 0644]
of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/NiciraExtensionProvider.java [new file with mode: 0644]
of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/ActionUtil.java [new file with mode: 0644]
of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/ResubmitConvertor.java [new file with mode: 0644]
of-extension/nx-sal/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/sal/config/impl/rev140711/ConfigurableNiciraExtensionProviderModule.java [new file with mode: 0644]
of-extension/nx-sal/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/sal/config/impl/rev140711/ConfigurableNiciraExtensionProviderModuleFactory.java [new file with mode: 0644]
of-extension/nx-sal/src/main/resources/initial/52-ovs-nx-sal-config.xml [new file with mode: 0644]
of-extension/nx-sal/src/main/yang/ovs-nx-sal-action.yang [new file with mode: 0644]
of-extension/nx-sal/src/main/yang/ovs-nx-sal-cfg-impl.yang [new file with mode: 0644]
of-extension/nx-sal/src/main/yang/ovs-nx-sal-cfg.yang [new file with mode: 0644]
of-extension/nx-sal/src/main/yang/ovs-nx-sal-match.yang [new file with mode: 0644]
pom.xml

index 2e7805d5f90afb7f2af54f055ab6f9204fbff787..0354977130a6b7e767079ec350bc9390a006bae3 100755 (executable)
@@ -31,6 +31,7 @@
     <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>
 
index 83c4b65b875d4ad492bc9945f91c47c3deadcb33..6a0d7249cfbf6fb35206bf56f3ed579891a7e8f3 100755 (executable)
@@ -85,6 +85,16 @@ see https://git.opendaylight.org/gerrit/#/c/390/
       <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>
@@ -138,23 +148,6 @@ see https://git.opendaylight.org/gerrit/#/c/390/
       </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>
@@ -181,14 +174,34 @@ see https://git.opendaylight.org/gerrit/#/c/390/
             </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>
index 44e2edfe084a03a81e6c912aa57ca81f3ebe13c4..a392baf267671301230b57eb411cca4bea6a091c 100644 (file)
         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>
diff --git a/distribution/opendaylight/src/main/resources/configuration/initial/42-openflowplugin.xml b/distribution/opendaylight/src/main/resources/configuration/initial/42-openflowplugin.xml
deleted file mode 100644 (file)
index a8ec1ba..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<?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&amp;revision=2014-03-28</capability>
-    <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider?module=openflow-switch-connection-provider&amp;revision=2014-03-28</capability>
-    <!-- openflowplugin -->
-    <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl?module=openflow-provider-impl&amp;revision=2014-03-26</capability>
-    <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config?module=openflow-provider&amp;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>
diff --git a/of-extension/nx-ofjava/pom.xml b/of-extension/nx-ofjava/pom.xml
new file mode 100644 (file)
index 0000000..f8cacbb
--- /dev/null
@@ -0,0 +1,127 @@
+<?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>
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraExtensionsRegistrator.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraExtensionsRegistrator.java
new file mode 100644 (file)
index 0000000..94fc1d1
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * 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();
+    }
+
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraMatchCodecs.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraMatchCodecs.java
new file mode 100644 (file)
index 0000000..79ccf64
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * 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 {
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/NiciraActionCodecs.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/NiciraActionCodecs.java
new file mode 100644 (file)
index 0000000..29208cb
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * 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();
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/ResubmitCodec.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/ResubmitCodec.java
new file mode 100644 (file)
index 0000000..99cb2b0
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * 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();
+    }
+
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/api/config/rev140711/NiciraExtensionApiProviderModule.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/api/config/rev140711/NiciraExtensionApiProviderModule.java
new file mode 100644 (file)
index 0000000..4932364
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * 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());
+
+    }
+
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/api/config/rev140711/NiciraExtensionApiProviderModuleFactory.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/api/config/rev140711/NiciraExtensionApiProviderModuleFactory.java
new file mode 100644 (file)
index 0000000..5a69953
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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 {
+
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/config/rev140711/NiciraExtensionProviderModule.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/config/rev140711/NiciraExtensionProviderModule.java
new file mode 100644 (file)
index 0000000..0bf0799
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * 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;
+    }
+
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/config/rev140711/NiciraExtensionProviderModuleFactory.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/config/rev140711/NiciraExtensionProviderModuleFactory.java
new file mode 100644 (file)
index 0000000..05dadfd
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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 {
+
+}
diff --git a/of-extension/nx-ofjava/src/main/resources/initial/50-ovs-nx-api-config.xml b/of-extension/nx-ofjava/src/main/resources/initial/50-ovs-nx-api-config.xml
new file mode 100644 (file)
index 0000000..76177df
--- /dev/null
@@ -0,0 +1,38 @@
+<?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&amp;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>
diff --git a/of-extension/nx-ofjava/src/main/resources/initial/51-ovs-nx-config.xml b/of-extension/nx-ofjava/src/main/resources/initial/51-ovs-nx-config.xml
new file mode 100644 (file)
index 0000000..008b3f4
--- /dev/null
@@ -0,0 +1,24 @@
+<?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&amp;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>
diff --git a/of-extension/nx-ofjava/src/main/yang/ovs-nx-action.yang b/of-extension/nx-ofjava/src/main/yang/ovs-nx-action.yang
new file mode 100644 (file)
index 0000000..bb1561f
--- /dev/null
@@ -0,0 +1,42 @@
+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;
+    }
+
+}
diff --git a/of-extension/nx-ofjava/src/main/yang/ovs-nx-api-config.yang b/of-extension/nx-ofjava/src/main/yang/ovs-nx-api-config.yang
new file mode 100644 (file)
index 0000000..668a887
--- /dev/null
@@ -0,0 +1,42 @@
+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
diff --git a/of-extension/nx-ofjava/src/main/yang/ovs-nx-config.yang b/of-extension/nx-ofjava/src/main/yang/ovs-nx-config.yang
new file mode 100644 (file)
index 0000000..3deb7cc
--- /dev/null
@@ -0,0 +1,36 @@
+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
diff --git a/of-extension/nx-ofjava/src/main/yang/ovs-nx-match.yang b/of-extension/nx-ofjava/src/main/yang/ovs-nx-match.yang
new file mode 100644 (file)
index 0000000..3b75e9f
--- /dev/null
@@ -0,0 +1,18 @@
+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";
+    }
+}
diff --git a/of-extension/nx-sal/pom.xml b/of-extension/nx-sal/pom.xml
new file mode 100644 (file)
index 0000000..0586a42
--- /dev/null
@@ -0,0 +1,141 @@
+<?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>
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/NiciraExtensionProvider.java b/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/NiciraExtensionProvider.java
new file mode 100644 (file)
index 0000000..bf83858
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * 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));
+    }
+}
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/ActionUtil.java b/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/ActionUtil.java
new file mode 100644 (file)
index 0000000..556e4d0
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * 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();
+    }
+}
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/ResubmitConvertor.java b/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/ResubmitConvertor.java
new file mode 100644 (file)
index 0000000..402226b
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * 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
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/sal/config/impl/rev140711/ConfigurableNiciraExtensionProviderModule.java b/of-extension/nx-sal/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/sal/config/impl/rev140711/ConfigurableNiciraExtensionProviderModule.java
new file mode 100644 (file)
index 0000000..bb5dd82
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * 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;
+    }
+
+}
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/sal/config/impl/rev140711/ConfigurableNiciraExtensionProviderModuleFactory.java b/of-extension/nx-sal/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/ovs/nx/sal/config/impl/rev140711/ConfigurableNiciraExtensionProviderModuleFactory.java
new file mode 100644 (file)
index 0000000..9eb5da2
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+* 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 {
+
+}
diff --git a/of-extension/nx-sal/src/main/resources/initial/52-ovs-nx-sal-config.xml b/of-extension/nx-sal/src/main/resources/initial/52-ovs-nx-sal-config.xml
new file mode 100644 (file)
index 0000000..a24c83b
--- /dev/null
@@ -0,0 +1,27 @@
+<?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&amp;revision=2014-07-11</capability>
+    <!-- openflowplugin -->
+    <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config?module=openflow-provider&amp;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>
diff --git a/of-extension/nx-sal/src/main/yang/ovs-nx-sal-action.yang b/of-extension/nx-sal/src/main/yang/ovs-nx-sal-action.yang
new file mode 100644 (file)
index 0000000..6c9998d
--- /dev/null
@@ -0,0 +1,142 @@
+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;
+        }
+    }
+}
diff --git a/of-extension/nx-sal/src/main/yang/ovs-nx-sal-cfg-impl.yang b/of-extension/nx-sal/src/main/yang/ovs-nx-sal-cfg-impl.yang
new file mode 100644 (file)
index 0000000..c053da6
--- /dev/null
@@ -0,0 +1,38 @@
+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;
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/of-extension/nx-sal/src/main/yang/ovs-nx-sal-cfg.yang b/of-extension/nx-sal/src/main/yang/ovs-nx-sal-cfg.yang
new file mode 100644 (file)
index 0000000..c9960fc
--- /dev/null
@@ -0,0 +1,20 @@
+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
diff --git a/of-extension/nx-sal/src/main/yang/ovs-nx-sal-match.yang b/of-extension/nx-sal/src/main/yang/ovs-nx-sal-match.yang
new file mode 100644 (file)
index 0000000..3267cf5
--- /dev/null
@@ -0,0 +1,13 @@
+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";
+    }
+}
diff --git a/pom.xml b/pom.xml
index 25ac506fb539c3d2112f0c0f3c1e5616c3f62304..41112c399cc1ed26346352b06eca5abc94d38af3 100755 (executable)
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,8 @@
     <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>