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
*/\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
\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
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