From 81c7ae0e263515b5bf8acb59b06d61ba446b8f0b Mon Sep 17 00:00:00 2001 From: Hongjun Ni Date: Thu, 20 Oct 2016 23:56:38 +0800 Subject: Augment nsh map API with nsh_action Depends on VPP's patch: https://gerrit.fd.io/r/#/c/3462/ Change-Id: I874cb7c5b39b9ece75d7d9af980e8d25df6f5aad Signed-off-by: Hongjun Ni --- nsh/api/src/main/yang/vpp-nsh.yang | 31 ++++++++++++++++++++++ .../vppnsh/impl/config/NshMapWriterCustomizer.java | 11 ++++++++ .../vppnsh/impl/oper/NshMapReaderCustomizer.java | 18 +++++++++++++ .../impl/config/NshMapWriterCustomizerTest.java | 5 ++++ .../impl/oper/NshMapReaderCustomizerTest.java | 5 ++++ 5 files changed, 70 insertions(+) (limited to 'nsh') diff --git a/nsh/api/src/main/yang/vpp-nsh.yang b/nsh/api/src/main/yang/vpp-nsh.yang index 47565ce49..a3313bad4 100644 --- a/nsh/api/src/main/yang/vpp-nsh.yang +++ b/nsh/api/src/main/yang/vpp-nsh.yang @@ -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; } diff --git a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizer.java b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizer.java index 7ca208110..c272e0e34 100755 --- a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizer.java +++ b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizer.java @@ -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; } diff --git a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizer.java b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizer.java index 47c408d2c..8e9b7793b 100755 --- a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizer.java +++ b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizer.java @@ -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); diff --git a/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizerTest.java b/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizerTest.java index e15e9c6e8..30f4c488c 100644 --- a/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizerTest.java +++ b/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshMapWriterCustomizerTest.java @@ -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; diff --git a/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizerTest.java b/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizerTest.java index 67db740aa..8e2add961 100644 --- a/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizerTest.java +++ b/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshMapReaderCustomizerTest.java @@ -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()); -- cgit 1.2.3-korg