Copyright update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / util / OF10ActionsDeserializer.java
index bef27a1c17152541cee6276d7fc7a519ad5739ec..96d74567d6e12fc6aeb1dd8678f97e42519c2032 100644 (file)
-/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
-package org.opendaylight.openflowjava.protocol.impl.util;\r
-\r
-import io.netty.buffer.ByteBuf;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Enqueue;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTos;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanPcp;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanVid;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.StripVlan;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsListBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.ActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
-import org.opendaylight.yangtools.yang.binding.Augmentation;\r
-\r
-import com.google.common.base.Joiner;\r
-\r
-/**\r
- * Deserializes ofp_action (OpenFlow v1.0) structures\r
- * @author michal.polkorab\r
- */\r
-public class OF10ActionsDeserializer {\r
-    \r
-    private static final byte PADDING_IN_SET_VLAN_VID_ACTION = 2;\r
-    private static final byte PADDING_IN_SET_VLAN_PCP_ACTION = 3;\r
-    private static final byte PADDING_IN_STRIP_VLAN_ACTION = 4;\r
-    private static final byte PADDING_IN_SET_DL_ACTION = 6;\r
-    private static final byte PADDING_IN_NW_TOS_ACTION = 3;\r
-    private static final byte PADDING_IN_TP_ACTION = 2;\r
-    private static final byte PADDING_IN_ENQUEUE_ACTION = 6;\r
-\r
-    /**\r
-     * Creates list of actions (OpenFlow v1.0) from ofp_action structures\r
-     * @param input input ByteBuf\r
-     * @return ActionsList list of actions\r
-     */\r
-    public static List<ActionsList> createActionsList(ByteBuf input) {\r
-        List<ActionsList> actions = new ArrayList<>();\r
-        while (input.readableBytes() > 0) {\r
-            ActionsListBuilder actionsBuilder = new ActionsListBuilder();\r
-            int type = input.readUnsignedShort();\r
-            input.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
-            switch(type) {\r
-            case 0:  \r
-                actions.add(createOutputAction(input, actionsBuilder));\r
-                break;\r
-            case 1: \r
-                actions.add(createSetVlanVidAction(input, actionsBuilder));\r
-                break;\r
-            case 2: \r
-                actions.add(createVlanPcpAction(input, actionsBuilder));\r
-                break;\r
-            case 3: \r
-                actions.add(createStripVlanAction(input, actionsBuilder));\r
-                break;\r
-            case 4:                              \r
-                actions.add(createSetDlSrcAction(input, actionsBuilder));\r
-                break;\r
-            case 5: \r
-                actions.add(createSetDlDstAction(input, actionsBuilder));\r
-                break;\r
-            case 6:                              \r
-                actions.add(createSetNwSrcAction(input, actionsBuilder));\r
-                break;\r
-            case 7: \r
-                actions.add(createSetNwDstAction(input, actionsBuilder));\r
-                break;\r
-            case 8: \r
-                actions.add(createSetNwTosAction(input, actionsBuilder));\r
-                break;\r
-            case 9: \r
-                actions.add(createSetTpSrcAction(input, actionsBuilder));\r
-                break;\r
-            case 10: \r
-                actions.add(createSetTpDstAction(input, actionsBuilder));\r
-                break;\r
-            case 11: \r
-                actions.add(createEnqueueAction(input, actionsBuilder));\r
-                break;\r
-            case 0xFFFF:\r
-                actions.add(createExperimenterAction(input, actionsBuilder));\r
-                break;\r
-            default: \r
-                break;\r
-            }\r
-        } \r
-        return actions;\r
-    }\r
-\r
-    /**\r
-     * @param in input ByteBuf\r
-     * @param builder \r
-     * @return ActionList\r
-     */\r
-    public static ActionsList createOutputAction(ByteBuf in, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(Output.class);\r
-        createPortAugmentation(in, actionBuilder);\r
-        MaxLengthActionBuilder maxLen = new MaxLengthActionBuilder();\r
-        maxLen.setMaxLength(in.readUnsignedShort());\r
-        actionBuilder.addAugmentation(MaxLengthAction.class, maxLen.build());\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createSetVlanVidAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetVlanVid.class);\r
-        VlanVidActionBuilder vlanBuilder = new VlanVidActionBuilder();\r
-        vlanBuilder.setVlanVid(input.readUnsignedShort());\r
-        input.skipBytes(PADDING_IN_SET_VLAN_VID_ACTION);\r
-        actionBuilder.addAugmentation(VlanVidAction.class, vlanBuilder.build());\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createVlanPcpAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetVlanPcp.class);\r
-        VlanPcpActionBuilder vlanBuilder = new VlanPcpActionBuilder();\r
-        vlanBuilder.setVlanPcp(input.readUnsignedByte());\r
-        input.skipBytes(PADDING_IN_SET_VLAN_PCP_ACTION);\r
-        actionBuilder.addAugmentation(VlanVidAction.class, vlanBuilder.build());\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createStripVlanAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(StripVlan.class);\r
-        input.skipBytes(PADDING_IN_STRIP_VLAN_ACTION);\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createSetDlSrcAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetDlSrc.class);\r
-        actionBuilder.addAugmentation(DlAddressAction.class, createDlAugmentationAndPad(input));\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createSetDlDstAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetDlDst.class);\r
-        actionBuilder.addAugmentation(DlAddressAction.class, createDlAugmentationAndPad(input));\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-    \r
-    private static DlAddressAction createDlAugmentationAndPad(ByteBuf input) {\r
-        DlAddressActionBuilder dlBuilder = new DlAddressActionBuilder();\r
-        byte[] address = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];\r
-        input.readBytes(address);\r
-        dlBuilder.setDlAddress(new MacAddress(ByteBufUtils.macAddressToString(address)));\r
-        input.skipBytes(PADDING_IN_SET_DL_ACTION);\r
-        return dlBuilder.build();\r
-    }\r
-\r
-    private static ActionsList createSetNwSrcAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetNwSrc.class);\r
-        actionBuilder.addAugmentation(IpAddressAction.class, createNwAddressAugmentationAndPad(input));\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createSetNwDstAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetNwDst.class);\r
-        actionBuilder.addAugmentation(IpAddressAction.class, createNwAddressAugmentationAndPad(input));\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-    \r
-    private static Augmentation<Action> createNwAddressAugmentationAndPad(ByteBuf input) {\r
-        IpAddressActionBuilder ipBuilder = new IpAddressActionBuilder();\r
-        List<String> groups = new ArrayList<>();\r
-        for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {\r
-            groups.add(Short.toString(input.readUnsignedByte()));\r
-        }\r
-        Joiner joiner = Joiner.on(".");\r
-        ipBuilder.setIpAddress(new Ipv4Address(joiner.join(groups)));\r
-        return ipBuilder.build();\r
-    }\r
-\r
-    private static ActionsList createSetNwTosAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetNwTos.class);\r
-        NwTosActionBuilder tosBuilder = new NwTosActionBuilder();\r
-        tosBuilder.setNwTos(input.readUnsignedByte());\r
-        actionBuilder.addAugmentation(NwTosAction.class, tosBuilder.build());\r
-        input.skipBytes(PADDING_IN_NW_TOS_ACTION);\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createSetTpSrcAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetTpSrc.class);\r
-        createPortAugmentation(input, actionBuilder);\r
-        input.skipBytes(PADDING_IN_TP_ACTION);\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createSetTpDstAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(SetTpDst.class);\r
-        createPortAugmentation(input, actionBuilder);\r
-        input.skipBytes(PADDING_IN_TP_ACTION);\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-    \r
-    private static void createPortAugmentation(ByteBuf input, ActionBuilder actionBuilder) {\r
-        PortActionBuilder portBuilder = new PortActionBuilder();\r
-        portBuilder.setPort(new PortNumber((long) input.readUnsignedShort()));\r
-        actionBuilder.addAugmentation(PortAction.class, portBuilder.build());\r
-    }\r
-\r
-    private static ActionsList createEnqueueAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(Enqueue.class);\r
-        createPortAugmentation(input, actionBuilder);\r
-        input.skipBytes(PADDING_IN_ENQUEUE_ACTION);\r
-        QueueIdActionBuilder queueBuilder = new QueueIdActionBuilder();\r
-        queueBuilder.setQueueId(input.readUnsignedInt());\r
-        actionBuilder.addAugmentation(QueueIdAction.class, queueBuilder.build());\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-\r
-    private static ActionsList createExperimenterAction(ByteBuf input, ActionsListBuilder builder) {\r
-        ActionBuilder actionBuilder = new ActionBuilder();\r
-        actionBuilder.setType(Enqueue.class);\r
-        ExperimenterActionBuilder expBuilder = new ExperimenterActionBuilder();\r
-        expBuilder.setExperimenter(input.readUnsignedInt());\r
-        actionBuilder.addAugmentation(QueueIdAction.class, expBuilder.build());\r
-        builder.setAction(actionBuilder.build());\r
-        return builder.build();\r
-    }\r
-    \r
-    \r
-}\r
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. 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
+ */
+
+package org.opendaylight.openflowjava.protocol.impl.util;
+
+import io.netty.buffer.ByteBuf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Enqueue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTos;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanPcp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanVid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.StripVlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+
+import com.google.common.base.Joiner;
+
+/**
+ * Deserializes ofp_action (OpenFlow v1.0) structures
+ * @author michal.polkorab
+ */
+public class OF10ActionsDeserializer {
+    
+    private static final byte PADDING_IN_SET_VLAN_VID_ACTION = 2;
+    private static final byte PADDING_IN_SET_VLAN_PCP_ACTION = 3;
+    private static final byte PADDING_IN_STRIP_VLAN_ACTION = 4;
+    private static final byte PADDING_IN_SET_DL_ACTION = 6;
+    private static final byte PADDING_IN_NW_TOS_ACTION = 3;
+    private static final byte PADDING_IN_TP_ACTION = 2;
+    private static final byte PADDING_IN_ENQUEUE_ACTION = 6;
+
+    /**
+     * Creates list of actions (OpenFlow v1.0) from ofp_action structures
+     * @param input input ByteBuf
+     * @return ActionsList list of actions
+     */
+    public static List<ActionsList> createActionsList(ByteBuf input) {
+        List<ActionsList> actions = new ArrayList<>();
+        while (input.readableBytes() > 0) {
+            ActionsListBuilder actionsBuilder = new ActionsListBuilder();
+            int type = input.readUnsignedShort();
+            input.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
+            switch(type) {
+            case 0:  
+                actions.add(createOutputAction(input, actionsBuilder));
+                break;
+            case 1: 
+                actions.add(createSetVlanVidAction(input, actionsBuilder));
+                break;
+            case 2: 
+                actions.add(createVlanPcpAction(input, actionsBuilder));
+                break;
+            case 3: 
+                actions.add(createStripVlanAction(input, actionsBuilder));
+                break;
+            case 4:                              
+                actions.add(createSetDlSrcAction(input, actionsBuilder));
+                break;
+            case 5: 
+                actions.add(createSetDlDstAction(input, actionsBuilder));
+                break;
+            case 6:                              
+                actions.add(createSetNwSrcAction(input, actionsBuilder));
+                break;
+            case 7: 
+                actions.add(createSetNwDstAction(input, actionsBuilder));
+                break;
+            case 8: 
+                actions.add(createSetNwTosAction(input, actionsBuilder));
+                break;
+            case 9: 
+                actions.add(createSetTpSrcAction(input, actionsBuilder));
+                break;
+            case 10: 
+                actions.add(createSetTpDstAction(input, actionsBuilder));
+                break;
+            case 11: 
+                actions.add(createEnqueueAction(input, actionsBuilder));
+                break;
+            case 0xFFFF:
+                actions.add(createExperimenterAction(input, actionsBuilder));
+                break;
+            default: 
+                break;
+            }
+        } 
+        return actions;
+    }
+
+    /**
+     * @param in input ByteBuf
+     * @param builder 
+     * @return ActionList
+     */
+    public static ActionsList createOutputAction(ByteBuf in, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(Output.class);
+        createPortAugmentation(in, actionBuilder);
+        MaxLengthActionBuilder maxLen = new MaxLengthActionBuilder();
+        maxLen.setMaxLength(in.readUnsignedShort());
+        actionBuilder.addAugmentation(MaxLengthAction.class, maxLen.build());
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createSetVlanVidAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetVlanVid.class);
+        VlanVidActionBuilder vlanBuilder = new VlanVidActionBuilder();
+        vlanBuilder.setVlanVid(input.readUnsignedShort());
+        input.skipBytes(PADDING_IN_SET_VLAN_VID_ACTION);
+        actionBuilder.addAugmentation(VlanVidAction.class, vlanBuilder.build());
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createVlanPcpAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetVlanPcp.class);
+        VlanPcpActionBuilder vlanBuilder = new VlanPcpActionBuilder();
+        vlanBuilder.setVlanPcp(input.readUnsignedByte());
+        input.skipBytes(PADDING_IN_SET_VLAN_PCP_ACTION);
+        actionBuilder.addAugmentation(VlanVidAction.class, vlanBuilder.build());
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createStripVlanAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(StripVlan.class);
+        input.skipBytes(PADDING_IN_STRIP_VLAN_ACTION);
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createSetDlSrcAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetDlSrc.class);
+        actionBuilder.addAugmentation(DlAddressAction.class, createDlAugmentationAndPad(input));
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createSetDlDstAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetDlDst.class);
+        actionBuilder.addAugmentation(DlAddressAction.class, createDlAugmentationAndPad(input));
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+    
+    private static DlAddressAction createDlAugmentationAndPad(ByteBuf input) {
+        DlAddressActionBuilder dlBuilder = new DlAddressActionBuilder();
+        byte[] address = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];
+        input.readBytes(address);
+        dlBuilder.setDlAddress(new MacAddress(ByteBufUtils.macAddressToString(address)));
+        input.skipBytes(PADDING_IN_SET_DL_ACTION);
+        return dlBuilder.build();
+    }
+
+    private static ActionsList createSetNwSrcAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetNwSrc.class);
+        actionBuilder.addAugmentation(IpAddressAction.class, createNwAddressAugmentationAndPad(input));
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createSetNwDstAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetNwDst.class);
+        actionBuilder.addAugmentation(IpAddressAction.class, createNwAddressAugmentationAndPad(input));
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+    
+    private static Augmentation<Action> createNwAddressAugmentationAndPad(ByteBuf input) {
+        IpAddressActionBuilder ipBuilder = new IpAddressActionBuilder();
+        List<String> groups = new ArrayList<>();
+        for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
+            groups.add(Short.toString(input.readUnsignedByte()));
+        }
+        Joiner joiner = Joiner.on(".");
+        ipBuilder.setIpAddress(new Ipv4Address(joiner.join(groups)));
+        return ipBuilder.build();
+    }
+
+    private static ActionsList createSetNwTosAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetNwTos.class);
+        NwTosActionBuilder tosBuilder = new NwTosActionBuilder();
+        tosBuilder.setNwTos(input.readUnsignedByte());
+        actionBuilder.addAugmentation(NwTosAction.class, tosBuilder.build());
+        input.skipBytes(PADDING_IN_NW_TOS_ACTION);
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createSetTpSrcAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetTpSrc.class);
+        createPortAugmentation(input, actionBuilder);
+        input.skipBytes(PADDING_IN_TP_ACTION);
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createSetTpDstAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(SetTpDst.class);
+        createPortAugmentation(input, actionBuilder);
+        input.skipBytes(PADDING_IN_TP_ACTION);
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+    
+    private static void createPortAugmentation(ByteBuf input, ActionBuilder actionBuilder) {
+        PortActionBuilder portBuilder = new PortActionBuilder();
+        portBuilder.setPort(new PortNumber((long) input.readUnsignedShort()));
+        actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
+    }
+
+    private static ActionsList createEnqueueAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(Enqueue.class);
+        createPortAugmentation(input, actionBuilder);
+        input.skipBytes(PADDING_IN_ENQUEUE_ACTION);
+        QueueIdActionBuilder queueBuilder = new QueueIdActionBuilder();
+        queueBuilder.setQueueId(input.readUnsignedInt());
+        actionBuilder.addAugmentation(QueueIdAction.class, queueBuilder.build());
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+
+    private static ActionsList createExperimenterAction(ByteBuf input, ActionsListBuilder builder) {
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setType(Enqueue.class);
+        ExperimenterActionBuilder expBuilder = new ExperimenterActionBuilder();
+        expBuilder.setExperimenter(input.readUnsignedInt());
+        actionBuilder.addAugmentation(QueueIdAction.class, expBuilder.build());
+        builder.setAction(actionBuilder.build());
+        return builder.build();
+    }
+    
+    
+}