set_nsp and set_nsi action NX support
authorMadhu Venugopal <mavenugo@gmail.com>
Wed, 13 Aug 2014 05:14:12 +0000 (22:14 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Wed, 13 Aug 2014 05:14:12 +0000 (22:14 -0700)
Sample output from OVS:
[madhu@localhost ~]# sudo ovs-ofctl dump-flows br-int -O OpenFlow13
OFPST_FLOW reply (OF1.3) (xid=0x2):
 cookie=0x0, duration=20.337s, table=1, n_packets=0, n_bytes=0, send_flow_rem ip,nw_dst=1.1.1.1 actions=set_nsp:0x3e8,set_nsi:45

Change-Id: Ie533ed3eaca7f032a36bf19230a22004d75db424
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/NiciraExtensionsRegistrator.java
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/NiciraActionCodecs.java
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/SetNsiCodec.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/SetNspCodec.java [new file with mode: 0644]
of-extension/nx-ofjava/src/main/yang/ovs-nx-action.yang
of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/NiciraExtensionProvider.java
of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/SetNsiConvertor.java [new file with mode: 0644]
of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/SetNspConvertor.java [new file with mode: 0644]
of-extension/nx-sal/src/main/yang/ovs-nx-sal-action.yang

index 94fc1d1a0e35ba0198ac96fe18c7ba9467b55b19..e81d5a5ba87fc64082a89f2da7ec7017caa000be 100644 (file)
@@ -11,6 +11,8 @@ 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 org.opendaylight.ovs.nx.ofjava.codec.action.SetNsiCodec;
+import org.opendaylight.ovs.nx.ofjava.codec.action.SetNspCodec;
 
 import com.google.common.base.Preconditions;
 
@@ -26,12 +28,22 @@ public class NiciraExtensionsRegistrator implements AutoCloseable {
         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);
+
+        registrator.registerActionDeserializer(SetNspCodec.DESERIALIZER_KEY, NiciraActionCodecs.SET_NSP_CODEC);
+        registrator.registerActionSerializer(SetNspCodec.SERIALIZER_KEY, NiciraActionCodecs.SET_NSP_CODEC);
+
+        registrator.registerActionDeserializer(SetNsiCodec.DESERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC);
+        registrator.registerActionSerializer(SetNsiCodec.SERIALIZER_KEY, NiciraActionCodecs.SET_NSI_CODEC);
     }
 
     public void unregisterExtensions() {
         registrator.unregisterActionDeserializer(ResubmitCodec.RESUBMIT_DESERIALIZER_KEY);
         registrator.unregisterActionDeserializer(ResubmitCodec.RESUBMIT_TABLE_DESERIALIZER_KEY);
         registrator.unregisterActionSerializer(ResubmitCodec.SERIALIZER_KEY);
+        registrator.unregisterActionDeserializer(SetNsiCodec.DESERIALIZER_KEY);
+        registrator.unregisterActionSerializer(SetNsiCodec.SERIALIZER_KEY);
+        registrator.unregisterActionDeserializer(SetNspCodec.DESERIALIZER_KEY);
+        registrator.unregisterActionSerializer(SetNspCodec.SERIALIZER_KEY);
     }
 
     @Override
index 29208cb4f6d3f38eefa6aa9d2cc3383575c9c753..2faefa1c750f8071de8560932dc91de734081f99 100644 (file)
@@ -10,4 +10,6 @@
 package org.opendaylight.ovs.nx.ofjava.codec.action;
 public class NiciraActionCodecs {
     public static final ResubmitCodec RESUBMIT_CODEC = new ResubmitCodec();
+    public static final SetNspCodec SET_NSP_CODEC = new SetNspCodec();
+    public static final SetNsiCodec SET_NSI_CODEC = new SetNsiCodec();
 }
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/SetNsiCodec.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/SetNsiCodec.java
new file mode 100644 (file)
index 0000000..e24d1cc
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * 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.nx.codec.action.AbstractActionCodec;
+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.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.NxmNxSetNsi;
+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.set.nsi.grouping.ActionSetNsi;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.set.nsi.grouping.ActionSetNsiBuilder;
+
+/**
+ * Codec for the NX_SetNsi and NX_SetNsi_TABLE
+ */
+public class SetNsiCodec extends AbstractActionCodec {
+    public static final int LENGTH = 16;
+    public static final byte NXAST_SET_NSI_SUBTYPE = 33;
+    public static final NiciraActionSerializerKey SERIALIZER_KEY =
+            new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, NxmNxSetNsi.class);
+    public static final NiciraActionDeserializerKey DESERIALIZER_KEY =
+            new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NXAST_SET_NSI_SUBTYPE);
+    private static final int padding = 5; // nx_action_SetNsi : uint8_t pad[3];
+
+    @Override
+    public void serialize(Action input, ByteBuf outBuffer) {
+        ActionSetNsi action = input.getAugmentation(OfjAugNxAction.class).getActionSetNsi();
+        serializeHeader(LENGTH, NXAST_SET_NSI_SUBTYPE, outBuffer);
+        outBuffer.writeByte(action.getNsi().byteValue());
+        outBuffer.writeZero(padding);
+    }
+
+    @Override
+    public Action deserialize(ByteBuf message) {
+        ActionBuilder actionBuilder = deserializeHeader(message);
+        ActionSetNsiBuilder builder = new ActionSetNsiBuilder();
+        builder.setNsi(message.readUnsignedByte());
+        message.skipBytes(padding);
+
+        OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+        augNxActionBuilder.setActionSetNsi(builder.build());
+        actionBuilder.addAugmentation(ExperimenterIdAction.class,
+                                      createExperimenterIdAction(NxmNxSetNsi.class));
+        actionBuilder.addAugmentation(OfjAugNxAction.class, augNxActionBuilder.build());
+        return actionBuilder.build();
+    }
+
+}
diff --git a/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/SetNspCodec.java b/of-extension/nx-ofjava/src/main/java/org/opendaylight/ovs/nx/ofjava/codec/action/SetNspCodec.java
new file mode 100644 (file)
index 0000000..168286a
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * 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.nx.codec.action.AbstractActionCodec;
+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.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.NxmNxSetNsp;
+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.set.nsp.grouping.ActionSetNsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.set.nsp.grouping.ActionSetNspBuilder;
+
+/**
+ * Codec for the NX_SetNsp and NX_SetNsp_TABLE
+ */
+public class SetNspCodec extends AbstractActionCodec {
+    public static final int LENGTH = 16;
+    public static final byte NXAST_SET_NSP_SUBTYPE = 32;
+    public static final NiciraActionSerializerKey SERIALIZER_KEY =
+            new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, NxmNxSetNsp.class);
+    public static final NiciraActionDeserializerKey DESERIALIZER_KEY =
+            new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NXAST_SET_NSP_SUBTYPE);
+    private static final int padding = 2; // nx_action_SetNsp : uint8_t pad[3];
+
+    @Override
+    public void serialize(Action input, ByteBuf outBuffer) {
+        ActionSetNsp action = input.getAugmentation(OfjAugNxAction.class).getActionSetNsp();
+        serializeHeader(LENGTH, NXAST_SET_NSP_SUBTYPE, outBuffer);
+        outBuffer.writeZero(padding);
+        outBuffer.writeInt(action.getNsp().intValue());
+    }
+
+    @Override
+    public Action deserialize(ByteBuf message) {
+        ActionBuilder actionBuilder = deserializeHeader(message);
+        ActionSetNspBuilder builder = new ActionSetNspBuilder();
+        message.skipBytes(padding);
+        builder.setNsp(message.readUnsignedInt());
+
+        OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+        augNxActionBuilder.setActionSetNsp(builder.build());
+        actionBuilder.addAugmentation(ExperimenterIdAction.class,
+                                      createExperimenterIdAction(NxmNxSetNsp.class));
+        actionBuilder.addAugmentation(OfjAugNxAction.class, augNxActionBuilder.build());
+        return actionBuilder.build();
+    }
+
+}
index bb1561f2a8b190ea3185a550bed1f7c5ec3636ea..1326b3ba9d8e1e16181cd94a7f1311a4e8ee55b3 100644 (file)
@@ -19,6 +19,14 @@ module ovs-nx-action {
         base ofaction:experimenter-action-sub-type;
     }
 
+    identity nxm-nx-set-nsp {
+        base ofaction:experimenter-action-sub-type;
+    }
+
+    identity nxm-nx-set-nsi {
+        base ofaction:experimenter-action-sub-type;
+    }
+
     grouping ofj-nx-action-resubmit-grouping {
         container action-resubmit {
             leaf in-port {
@@ -34,9 +42,26 @@ module ovs-nx-action {
         }
     }
 
+    grouping ofj-nx-action-set-nsp-grouping {
+        container action-set-nsp {
+            leaf nsp {
+                type uint32;
+            }
+        }
+    }
+
+    grouping ofj-nx-action-set-nsi-grouping {
+        container action-set-nsi {
+            leaf nsi {
+                type uint8;
+            }
+        }
+    }
+
     augment "/ofaction:actions-container/ofaction:action" {
         ext:augment-identifier "ofj-aug-nx-action";
         uses ofj-nx-action-resubmit-grouping;
+        uses ofj-nx-action-set-nsp-grouping;
+        uses ofj-nx-action-set-nsi-grouping;
     }
-
 }
index bf83858195373ce52f272bd6c5f256bbd954ef73..ec0218906d3d0b0b90fa7d67b700dbe560eed4b3 100644 (file)
@@ -14,7 +14,11 @@ 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.sal.convertor.action.SetNsiConvertor;
+import org.opendaylight.ovs.nx.sal.convertor.action.SetNspConvertor;
 import org.opendaylight.ovs.nx.ofjava.codec.action.ResubmitCodec;
+import org.opendaylight.ovs.nx.ofjava.codec.action.SetNsiCodec;
+import org.opendaylight.ovs.nx.ofjava.codec.action.SetNspCodec;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
 import org.opendaylight.openflowplugin.extension.api.ExtensionConverterRegistrator;
@@ -29,6 +33,25 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714
 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.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.flow.input.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNspRpcAddFlowApplyActionsCase;
+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.NxActionSetNspRpcAddFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionSetNspRpcAddGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionSetNspNodesNodeGroupBucketsBucketActionsCase;
+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.NxActionSetNspNodesNodeTableFlowApplyActionsCase;
+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.NxActionSetNspNodesNodeTableFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionSetNspRpcRemoveGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionSetNspRpcUpdateGroupOriginalCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionSetNspRpcUpdateGroupUpdatedCase;
+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.NxActionSetNsiRpcAddFlowApplyActionsCase;
+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.NxActionSetNsiRpcAddFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionSetNsiRpcAddGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionSetNsiNodesNodeGroupBucketsBucketActionsCase;
+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.NxActionSetNsiNodesNodeTableFlowApplyActionsCase;
+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.NxActionSetNsiNodesNodeTableFlowWriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.remove.group.input.buckets.bucket.action.action.NxActionSetNsiRpcRemoveGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.original.group.buckets.bucket.action.action.NxActionSetNsiRpcUpdateGroupOriginalCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.update.group.input.updated.group.buckets.bucket.action.action.NxActionSetNsiRpcUpdateGroupUpdatedCase;
+
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,6 +67,8 @@ public class NiciraExtensionProvider implements AutoCloseable {
     private Set<ObjectRegistration<?>> registrations;
 
     private final static ResubmitConvertor RESUBMIT_CONVERTOR = new ResubmitConvertor();
+    private final static SetNspConvertor SET_NSP_CONVERTOR = new SetNspConvertor();
+    private final static SetNsiConvertor SET_NSI_CONVERTOR = new SetNsiConvertor();
 
     @Override
     public void close() {
@@ -78,7 +103,33 @@ public class NiciraExtensionProvider implements AutoCloseable {
         registerAction13(NxActionResubmitRpcUpdateGroupOriginalCase.class, RESUBMIT_CONVERTOR);
         registerAction13(NxActionResubmitRpcUpdateGroupUpdatedCase.class, RESUBMIT_CONVERTOR);
 
+        registerAction13(NxActionSetNspNodesNodeTableFlowApplyActionsCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspNodesNodeTableFlowWriteActionsCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspNodesNodeGroupBucketsBucketActionsCase.class, SET_NSP_CONVERTOR);
+
+
+        registerAction13(NxActionSetNspRpcAddFlowApplyActionsCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspRpcAddFlowWriteActionsCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspRpcAddGroupCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspRpcRemoveGroupCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspRpcUpdateGroupOriginalCase.class, SET_NSP_CONVERTOR);
+        registerAction13(NxActionSetNspRpcUpdateGroupUpdatedCase.class, SET_NSP_CONVERTOR);
+
+        registerAction13(NxActionSetNsiNodesNodeTableFlowApplyActionsCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiNodesNodeTableFlowWriteActionsCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiNodesNodeGroupBucketsBucketActionsCase.class, SET_NSI_CONVERTOR);
+
+
+        registerAction13(NxActionSetNsiRpcAddFlowApplyActionsCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiRpcAddFlowWriteActionsCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiRpcAddGroupCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiRpcRemoveGroupCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiRpcUpdateGroupOriginalCase.class, SET_NSI_CONVERTOR);
+        registerAction13(NxActionSetNsiRpcUpdateGroupUpdatedCase.class, SET_NSI_CONVERTOR);
+
         registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(ResubmitCodec.SERIALIZER_KEY), RESUBMIT_CONVERTOR));
+        registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNspCodec.SERIALIZER_KEY), SET_NSP_CONVERTOR));
+        registrations.add(extensionConverterRegistrator.registerActionConvertor(NiciraUtil.createOfJavaKeyFrom(SetNsiCodec.SERIALIZER_KEY), SET_NSI_CONVERTOR));
     }
 
     private void registerAction13(
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/SetNsiConvertor.java b/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/SetNsiConvertor.java
new file mode 100644 (file)
index 0000000..f740a2c
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * 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.NxmNxSetNsi;
+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.set.nsi.grouping.ActionSetNsi;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.set.nsi.grouping.ActionSetNsiBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.NxActionSetNsiGrouping;
+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.NxActionSetNsiNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
+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.NxActionSetNsiNotifFlowsStatisticsUpdateWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionSetNsiNotifGroupDescStatsUpdatedCaseBuilder;
+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.NxActionSetNsiNodesNodeTableFlowWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsi.grouping.NxSetNsi;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsi.grouping.NxSetNsiBuilder;
+
+import com.google.common.base.Preconditions;
+
+public class SetNsiConvertor 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) {
+        ActionSetNsi action = input.getAugmentation(OfjAugNxAction.class).getActionSetNsi();
+        NxSetNsiBuilder builder = new NxSetNsiBuilder();
+        builder.setNsi(action.getNsi());
+        return resolveAction(builder.build(), path);
+    }
+
+    private static org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action resolveAction(NxSetNsi value, ActionPath path) {
+        switch (path) {
+        case NODES_NODE_TABLE_FLOW_INSTRUCTIONS_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION_EXTENSIONLIST_EXTENSION:
+            return new NxActionSetNsiNodesNodeTableFlowWriteActionsCaseBuilder().setNxSetNsi(value).build();
+        case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION:
+            return new NxActionSetNsiNotifFlowsStatisticsUpdateWriteActionsCaseBuilder().setNxSetNsi(value).build();
+        case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION:
+            return new NxActionSetNsiNotifFlowsStatisticsUpdateApplyActionsCaseBuilder().setNxSetNsi(value).build();
+        case GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION:
+            return new NxActionSetNsiNotifGroupDescStatsUpdatedCaseBuilder().setNxSetNsi(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 NxActionSetNsiGrouping);
+        NxActionSetNsiGrouping nxAction = (NxActionSetNsiGrouping) nxActionArg;
+        ActionSetNsiBuilder builder = new ActionSetNsiBuilder();
+        builder.setNsi(nxAction.getNxSetNsi().getNsi());
+        OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+        augNxActionBuilder.setActionSetNsi(builder.build());
+        return ActionUtil.createNiciraAction(augNxActionBuilder.build(), NxmNxSetNsi.class);
+    }
+
+}
\ No newline at end of file
diff --git a/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/SetNspConvertor.java b/of-extension/nx-sal/src/main/java/org/opendaylight/ovs/nx/sal/convertor/action/SetNspConvertor.java
new file mode 100644 (file)
index 0000000..2846f62
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * 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.NxmNxSetNsp;
+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.set.nsp.grouping.ActionSetNsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.ofj.nx.action.set.nsp.grouping.ActionSetNspBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.NxActionSetNspGrouping;
+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.NxActionSetNspNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
+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.NxActionSetNspNotifFlowsStatisticsUpdateWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionSetNspNotifGroupDescStatsUpdatedCaseBuilder;
+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.NxActionSetNspNodesNodeTableFlowWriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsp.grouping.NxSetNsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsp.grouping.NxSetNspBuilder;
+
+import com.google.common.base.Preconditions;
+
+public class SetNspConvertor 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) {
+        ActionSetNsp action = input.getAugmentation(OfjAugNxAction.class).getActionSetNsp();
+        NxSetNspBuilder builder = new NxSetNspBuilder();
+        builder.setNsp(action.getNsp());
+        return resolveAction(builder.build(), path);
+    }
+
+    private static org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action resolveAction(NxSetNsp value, ActionPath path) {
+        switch (path) {
+        case NODES_NODE_TABLE_FLOW_INSTRUCTIONS_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION_EXTENSIONLIST_EXTENSION:
+            return new NxActionSetNspNodesNodeTableFlowWriteActionsCaseBuilder().setNxSetNsp(value).build();
+        case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_WRITEACTIONSCASE_WRITEACTIONS_ACTION_ACTION:
+            return new NxActionSetNspNotifFlowsStatisticsUpdateWriteActionsCaseBuilder().setNxSetNsp(value).build();
+        case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION:
+            return new NxActionSetNspNotifFlowsStatisticsUpdateApplyActionsCaseBuilder().setNxSetNsp(value).build();
+        case GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION:
+            return new NxActionSetNspNotifGroupDescStatsUpdatedCaseBuilder().setNxSetNsp(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 NxActionSetNspGrouping);
+        NxActionSetNspGrouping nxAction = (NxActionSetNspGrouping) nxActionArg;
+        ActionSetNspBuilder builder = new ActionSetNspBuilder();
+        builder.setNsp(nxAction.getNxSetNsp().getNsp());
+        OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
+        augNxActionBuilder.setActionSetNsp(builder.build());
+        return ActionUtil.createNiciraAction(augNxActionBuilder.build(), NxmNxSetNsp.class);
+    }
+
+}
\ No newline at end of file
index 6c9998d116c3edd8ade35a90f06ed54b4ba306fc..2cc65c7b235ea532766caa11c93817bb2dc0cf75 100644 (file)
@@ -39,6 +39,24 @@ module ovs-nx-sal-action {
         }
     }
 
+    grouping nx-action-set-nsp-grouping {
+        container nx-set-nsp {
+            description "Sets NSP header";
+            leaf nsp {
+                type uint32;
+            }
+        }
+    }
+
+    grouping nx-action-set-nsi-grouping {
+        container nx-set-nsi {
+            description "Sets NSI header";
+            leaf nsi {
+                type uint8;
+            }
+        }
+    }
+
     // 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" {
@@ -139,4 +157,206 @@ module ovs-nx-sal-action {
             uses nx-action-resubmit-grouping;
         }
     }
+
+// NSP
+
+    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-set-nsp-rpc-add-flow-write-actions-case {
+            uses nx-action-set-nsp-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-set-nsp-rpc-add-flow-apply-actions-case {
+            uses nx-action-set-nsp-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-set-nsp-rpc-remove-flow-write-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-remove-flow-apply-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-update-flow-original-write-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-update-flow-original-apply-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-update-flow-updated-write-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-update-flow-updated-apply-actions-case" {
+            uses nx-action-set-nsp-grouping;
+        }
+    }
+    augment "/sal-group:add-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+        case "nx-action-set-nsp-rpc-add-group-case" {
+            uses nx-action-set-nsp-grouping;
+        }
+    }
+    augment "/sal-group:remove-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+        case "nx-action-set-nsp-rpc-remove-group-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-update-group-original-case" {
+            uses nx-action-set-nsp-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-set-nsp-rpc-update-group-updated-case" {
+            uses nx-action-set-nsp-grouping;
+        }
+    }
+    augment "/sal-packet:transmit-packet/sal-packet:input/sal-packet:action/sal-packet:action" {
+        case "nx-action-set-nsp-rpc-transmit-packet-case" {
+            uses nx-action-set-nsp-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-set-nsp-nodes-node-table-flow-write-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-nodes-node-table-flow-apply-actions-case" {
+            uses nx-action-set-nsp-grouping;
+        }
+    }
+    augment "/inv:nodes/inv:node/fni:group/fni:buckets/fni:bucket/fni:action/fni:action" {
+        case "nx-action-set-nsp-nodes-node-group-buckets-bucket-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-notif-flows-statistics-update-write-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-notif-flows-statistics-update-apply-actions-case" {
+            uses nx-action-set-nsp-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-set-nsp-notif-group-desc-stats-updated-case" {
+            uses nx-action-set-nsp-grouping;
+        }
+    }
+
+// NSI
+
+    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-set-nsi-rpc-add-flow-write-actions-case {
+            uses nx-action-set-nsi-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-set-nsi-rpc-add-flow-apply-actions-case {
+            uses nx-action-set-nsi-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-set-nsi-rpc-remove-flow-write-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-remove-flow-apply-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-update-flow-original-write-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-update-flow-original-apply-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-update-flow-updated-write-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-update-flow-updated-apply-actions-case" {
+            uses nx-action-set-nsi-grouping;
+        }
+    }
+    augment "/sal-group:add-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+        case "nx-action-set-nsi-rpc-add-group-case" {
+            uses nx-action-set-nsi-grouping;
+        }
+    }
+    augment "/sal-group:remove-group/sal-group:input/sal-group:buckets/sal-group:bucket/sal-group:action/sal-group:action" {
+        case "nx-action-set-nsi-rpc-remove-group-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-update-group-original-case" {
+            uses nx-action-set-nsi-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-set-nsi-rpc-update-group-updated-case" {
+            uses nx-action-set-nsi-grouping;
+        }
+    }
+    augment "/sal-packet:transmit-packet/sal-packet:input/sal-packet:action/sal-packet:action" {
+        case "nx-action-set-nsi-rpc-transmit-packet-case" {
+            uses nx-action-set-nsi-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-set-nsi-nodes-node-table-flow-write-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-nodes-node-table-flow-apply-actions-case" {
+            uses nx-action-set-nsi-grouping;
+        }
+    }
+    augment "/inv:nodes/inv:node/fni:group/fni:buckets/fni:bucket/fni:action/fni:action" {
+        case "nx-action-set-nsi-nodes-node-group-buckets-bucket-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-notif-flows-statistics-update-write-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-notif-flows-statistics-update-apply-actions-case" {
+            uses nx-action-set-nsi-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-set-nsi-notif-group-desc-stats-updated-case" {
+            uses nx-action-set-nsi-grouping;
+        }
+    }
 }