Augment nsh map API with nsh_action 96/3496/3
authorHongjun Ni <hongjun.ni@intel.com>
Thu, 20 Oct 2016 15:56:38 +0000 (23:56 +0800)
committerMaros Marsalek <mmarsale@cisco.com>
Mon, 24 Oct 2016 09:01:26 +0000 (09:01 +0000)
Depends on VPP's patch: https://gerrit.fd.io/r/#/c/3462/

Change-Id: I874cb7c5b39b9ece75d7d9af980e8d25df6f5aad
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
nsh/api/src/main/yang/vpp-nsh.yang
nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizer.java
nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizer.java
nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizerTest.java
nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizerTest.java

index 47565ce..a3313ba 100644 (file)
@@ -59,6 +59,34 @@ module vpp-nsh {
     description "Identifies a specific next protocol for nsh";
   }
 
+  /*
+   * Defines the supported nsh header action.
+   */
+  identity action-type {
+    description "nsh header action type";
+  }
+
+  identity swap {
+    base "action-type";
+    description "swap action type";
+  }
+
+  identity push {
+    base "action-type";
+    description "push action type";
+  }
+
+  identity pop {
+    base "action-type";
+    description "pop action type";
+  }
+
+  typedef nsh-action-type {
+    type identityref {
+      base "action-type";
+    }
+  }
+
   /*
    * Defines the supported encap type.
    */
@@ -180,6 +208,9 @@ module vpp-nsh {
         range "1..255";
       }
     }
+    leaf nsh-action {
+      type nsh-action-type;
+    }
     leaf encap-type {
       type nsh-encap-type;
     }
index 7ca2081..c272e0e 100755 (executable)
@@ -33,6 +33,9 @@ import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh;
 import java.util.concurrent.CompletionStage;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VxlanGpe;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Swap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Push;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Pop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.nsh.maps.NshMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.nsh.maps.NshMapKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -114,6 +117,14 @@ public class NshMapWriterCustomizer extends FutureJVppNshCustomizer
         request.nspNsi = (map.getNsp().intValue() << 8) | map.getNsi();
         request.mappedNspNsi = (map.getMappedNsp().intValue() << 8) | map.getMappedNsi();
 
+        if (map.getNshAction() == Swap.class) {
+            request.nshAction = 0;
+        } else if (map.getNshAction() == Push.class) {
+            request.nshAction = 1;
+        } else if (map.getNshAction() == Pop.class) {
+            request.nshAction = 2;
+        }
+
         if (map.getEncapType() == VxlanGpe.class) {
             request.nextNode = 2;
         }
index 47c408d..8e9b779 100755 (executable)
@@ -36,6 +36,9 @@ import java.util.List;
 import java.util.concurrent.CompletionStage;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VxlanGpe;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Swap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Push;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Pop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.NshMapsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.nsh.maps.NshMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.nsh.maps.NshMapBuilder;
@@ -115,6 +118,21 @@ public class NshMapReaderCustomizer extends FutureJVppNshCustomizer
         builder.setMappedNsp((long) ((nshMapDetails.mappedNspNsi >> 8) & 0xFFFFFF));
         builder.setMappedNsi((short) (nshMapDetails.mappedNspNsi & 0xFF));
 
+        switch (nshMapDetails.nshAction) {
+        case 0:
+            builder.setNshAction(Swap.class);
+            break;
+        case 1:
+            builder.setNshAction(Push.class);
+            break;
+        case 2:
+            builder.setNshAction(Pop.class);
+            break;
+        default:
+            LOG.trace("Unsupported nsh_action for nsh map: {}", nshMapDetails.nshAction);
+            return;
+    }
+
         switch (nshMapDetails.nextNode) {
             case 2:
                 builder.setEncapType(VxlanGpe.class);
index e15e9c6..30f4c48 100644 (file)
@@ -33,6 +33,9 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import io.fd.honeycomb.translate.MappingContext;
 
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VxlanGpe;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Swap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Push;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Pop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.NshMaps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.NshMapsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.nsh.maps.NshMap;
@@ -81,6 +84,7 @@ public class NshMapWriterCustomizerTest extends WriterCustomizerTest {
         builder.setNsi((short) 255);
         builder.setMappedNsp(183L);
         builder.setMappedNsi((short) 254);
+        builder.setNshAction(Swap.class);
         builder.setEncapType(VxlanGpe.class);
         builder.setEncapIfName("vxlanGpeTun3");
 
@@ -107,6 +111,7 @@ public class NshMapWriterCustomizerTest extends WriterCustomizerTest {
         request.isAdd = isAdd;
         request.nspNsi = 184<<8 | 255;
         request.mappedNspNsi = 183<<8 | 254;
+        request.nshAction = 0;
         request.swIfIndex = ITF_INDEX;
         request.nextNode = 2;
 
index 67db740..8e2add9 100644 (file)
@@ -37,6 +37,9 @@ import org.mockito.Mock;
 import io.fd.honeycomb.translate.vpp.util.NamingContext;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VxlanGpe;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Swap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Push;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Pop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VppNshState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VppNshStateBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.NshMaps;
@@ -104,6 +107,7 @@ public class NshMapReaderCustomizerTest extends
         final NshMapDetails nshMapDetails = new NshMapDetails();
         nshMapDetails.nspNsi = (184<<8 | 255);
         nshMapDetails.mappedNspNsi = (183<<8 | 254);
+        nshMapDetails.nshAction = 0;
         nshMapDetails.swIfIndex = ITF_INDEX;
         nshMapDetails.nextNode = 2;
         reply.nshMapDetails = Lists.newArrayList(nshMapDetails);
@@ -120,6 +124,7 @@ public class NshMapReaderCustomizerTest extends
         assertEquals(255, builder.getNsi().intValue());
         assertEquals(183, builder.getMappedNsp().intValue());
         assertEquals(254, builder.getMappedNsi().intValue());
+        assertEquals(Swap.class, builder.getNshAction());
         assertEquals(VxlanGpe.class, builder.getEncapType());
         assertEquals("vxlanGpeTun3", builder.getEncapIfName());