Factory tests back to stable
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / util / ActionsSerializer.java
index 3f92f9900f8e9dcfe73fa75f8fb3f6a5d0c8dba3..5746ea0ee3980ad8751775c52ac18ddf2ce2d3cd 100644 (file)
@@ -34,8 +34,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;\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.actions.list.Action;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.MatchEntries;\r
 \r
 /**\r
  * Class for easy serialization of actions\r
@@ -45,8 +44,6 @@ import org.slf4j.LoggerFactory;
  */\r
 public abstract class ActionsSerializer {\r
 \r
-    private static final Logger LOGGER = LoggerFactory.getLogger(ActionsSerializer.class);\r
-\r
     /**\r
      * Encodes actions to ByteBuf\r
      * @param actionsList list of actions to be encoded\r
@@ -199,11 +196,9 @@ public abstract class ActionsSerializer {
     \r
     private static void encodeSetFieldAction(Action action, ByteBuf outBuffer) {\r
         final int SET_FIELD_CODE = 25;\r
-        final byte SET_FIELD_FIELDS_LENGTH = 4; // only type and length\r
-        // TODO - figure out definition from testing + check length\r
+        final byte SET_FIELD_HEADER_LENGTH = 4; // only type and length\r
         OxmFieldsAction oxmField = action.getAugmentation(OxmFieldsAction.class);\r
-        int length = MatchSerializer.computeMatchEntriesLength(oxmField.getMatchEntries()) + SET_FIELD_FIELDS_LENGTH;\r
-        LOGGER.warn("Received set-field action - possible wrong or no implementation");\r
+        int length = MatchSerializer.computeMatchEntriesLength(oxmField.getMatchEntries()) + SET_FIELD_HEADER_LENGTH;\r
         outBuffer.writeShort(SET_FIELD_CODE);\r
         int paddingRemainder = length % EncodeConstants.PADDING;\r
         if (paddingRemainder != 0) {\r
@@ -257,12 +252,21 @@ public abstract class ActionsSerializer {
     public static int computeLengthOfActions(List<ActionsList> actionsList) {\r
         final byte OUTPUT_LENGTH = 16;\r
         final byte LENGTH_OF_OTHER_ACTIONS = 8;\r
+        final byte ACTION_HEADER_LENGTH = 4;\r
         int lengthOfActions = 0;\r
         if (actionsList != null) {\r
             for (ActionsList list : actionsList) {\r
                 Action action = list.getAction();\r
                 if (action.getType().equals(Output.class)) {\r
                     lengthOfActions += OUTPUT_LENGTH;\r
+                } else if (action.getType().equals(SetField.class)){\r
+                    List<MatchEntries> entries = action.getAugmentation(OxmFieldsAction.class).getMatchEntries();\r
+                    int actionLength = ACTION_HEADER_LENGTH + MatchSerializer.computeMatchEntriesLength(entries);\r
+                    lengthOfActions += actionLength;\r
+                    int paddingRemainder = actionLength % EncodeConstants.PADDING;\r
+                    if ((paddingRemainder) != 0) {\r
+                        lengthOfActions += EncodeConstants.PADDING - paddingRemainder;\r
+                    }\r
                 } else {\r
                     lengthOfActions += LENGTH_OF_OTHER_ACTIONS;\r
                 }\r