- keys now properly use experimenter ID to distinguish between experimenter messages
- also updated initialization and registry helper classes
Change-Id: I6177c72397aa7b534cffdf0a9b729fbec2effa50
Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
/**\r
* Constructor\r
* @param version wire protocol version\r
- * @param value used as distinguisher\r
+ * @param value used as distinguisher (read from binary data / buffer)\r
* @param clazz class of object that is going to be deserialized\r
*/\r
public MessageCodeKey(short version, int value, Class<?> clazz) {\r
\r
@Override\r
public String toString() {\r
- return "msgVersion: " + msgVersion + " class: " + clazz.getName() + " msgType: " + msgType;\r
+ return "msgVersion: " + msgVersion + " objectClass: " + clazz.getName() + " msgType: " + msgType;\r
}\r
-}\r
+}
\ No newline at end of file
*/
public class MessageTypeKey<E> {
- private final Class<E> msgType;
+ private final Class<? extends E> msgType;
private final short msgVersion;
/**
* @param msgVersion protocol version
- * @param msgType type of message
+ * @param msgType type of message - class of serialized object
*/
- public MessageTypeKey(short msgVersion, Class<E> msgType) {
- super();
+ public MessageTypeKey(short msgVersion, Class<? extends E> msgType) {
this.msgType = msgType;
this.msgVersion = msgVersion;
}
@Override
public String toString() {
- return "msgVersion: " + msgVersion + " msgType: " + msgType.getName();
+ return "msgVersion: " + msgVersion + " objectType: " + msgType.getName();
}
@Override
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.api.extensibility.keys;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class ActionDeserializerKey extends MessageCodeKey {\r
+\r
+ private Long experimenterId;\r
+ /**\r
+ * @param version protocol wire version\r
+ * @param type action type\r
+ * @param experimenterId experimenter / vendor ID\r
+ */\r
+ public ActionDeserializerKey(short version,\r
+ int type, Long experimenterId) {\r
+ super(version, type, Action.class);\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ ActionDeserializerKey other = (ActionDeserializerKey) obj;\r
+ if (experimenterId == null) {\r
+ if (other.experimenterId != null)\r
+ return false;\r
+ } else if (!experimenterId.equals(other.experimenterId))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + " experimenterID: " + experimenterId;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.api.extensibility.keys;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionBase;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <TYPE> action type\r
+ */\r
+public class ActionSerializerKey<TYPE extends ActionBase> extends MessageTypeKey<Action> {\r
+\r
+ private Class<TYPE> actionType;\r
+ private Long experimenterId;\r
+\r
+ /**\r
+ * @param msgVersion protocol wire version\r
+ * @param actionType type of action\r
+ * @param experimenterId experimenter / vendor ID\r
+ */\r
+ public ActionSerializerKey(short msgVersion, Class<TYPE> actionType,\r
+ Long experimenterId) {\r
+ super(msgVersion, Action.class);\r
+ this.actionType = actionType;\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ @SuppressWarnings("rawtypes")\r
+ ActionSerializerKey other = (ActionSerializerKey) obj;\r
+ if (actionType == null) {\r
+ if (other.actionType != null)\r
+ return false;\r
+ } else if (!actionType.equals(other.actionType))\r
+ return false;\r
+ if (experimenterId == null) {\r
+ if (other.experimenterId != null)\r
+ return false;\r
+ } else if (!experimenterId.equals(other.experimenterId))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + " action type: " + actionType.getName() + " experimenterID: " + experimenterId;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.api.extensibility.keys;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class InstructionDeserializerKey extends MessageCodeKey {\r
+\r
+ private Long experimenterId;\r
+ /**\r
+ * @param version protocol wire version\r
+ * @param type instruction type\r
+ * @param experimenterId \r
+ */\r
+ public InstructionDeserializerKey(short version, int type,\r
+ Long experimenterId) {\r
+ super(version, type, Instruction.class);\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ InstructionDeserializerKey other = (InstructionDeserializerKey) obj;\r
+ if (experimenterId == null) {\r
+ if (other.experimenterId != null)\r
+ return false;\r
+ } else if (!experimenterId.equals(other.experimenterId))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + " experimenterID: " + experimenterId;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.api.extensibility.keys;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.InstructionBase;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <TYPE> action type\r
+ */\r
+public class InstructionSerializerKey<TYPE extends InstructionBase>\r
+ extends MessageTypeKey<Instruction>{\r
+\r
+ private Class<TYPE> instructionType;\r
+ private Long experimenterId;\r
+\r
+ /**\r
+ * @param msgVersion protocol wire version\r
+ * @param objectType class of serialized object (Instruction.class)\r
+ * @param instructionType type of instruction\r
+ * @param experimenterId experimenter / vendor ID\r
+ */\r
+ public InstructionSerializerKey(short msgVersion, Class<TYPE> instructionType,\r
+ Long experimenterId) {\r
+ super(msgVersion, Instruction.class);\r
+ this.instructionType = instructionType;\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ @SuppressWarnings("rawtypes")\r
+ InstructionSerializerKey other = (InstructionSerializerKey) obj;\r
+ if (instructionType == null) {\r
+ if (other.instructionType != null)\r
+ return false;\r
+ } else if (!instructionType.equals(other.instructionType))\r
+ return false;\r
+ if (experimenterId == null) {\r
+ if (other.experimenterId != null)\r
+ return false;\r
+ } else if (!experimenterId.equals(other.experimenterId))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + " instructionType type: " + instructionType.getName()\r
+ + " vendorID: " + experimenterId;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.api.extensibility.keys;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MatchEntryDeserializerKey extends MessageCodeKey {\r
+\r
+ private int oxmField;\r
+ private Long experimenterId;\r
+\r
+ /**\r
+ * @param version protocol wire version\r
+ * @param oxmClass oxm_class (see specification)\r
+ * @param oxmField oxm_field (see specification)\r
+ */\r
+ public MatchEntryDeserializerKey(short version,\r
+ int oxmClass, int oxmField) {\r
+ super(version, oxmClass, MatchEntries.class);\r
+ this.oxmField = oxmField;\r
+ }\r
+\r
+ /**\r
+ * @param experimenterId experimenter / vendor ID\r
+ */\r
+ public void setExperimenterId(Long experimenterId) {\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ MatchEntryDeserializerKey other = (MatchEntryDeserializerKey) obj;\r
+ if (experimenterId == null) {\r
+ if (other.experimenterId != null)\r
+ return false;\r
+ } else if (!experimenterId.equals(other.experimenterId))\r
+ return false;\r
+ if (oxmField != other.oxmField)\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + " oxm_field: " + oxmField + " experimenterID: " + experimenterId;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.api.extensibility.keys;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Clazz;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <OXM_CLASS> oxm_class (see specification)\r
+ * @param <OXM_FIELD> oxm_field (see specification)\r
+ */\r
+public class MatchEntrySerializerKey<OXM_CLASS extends Clazz,\r
+ OXM_FIELD extends MatchField> extends MessageTypeKey<MatchEntries>{\r
+\r
+ private Class<OXM_CLASS> oxmClass;\r
+ private Class<OXM_FIELD> oxmField;\r
+ private Long experimenterId;\r
+\r
+ /**\r
+ * @param msgVersion protocol wire version\r
+ * @param objectType class of serialized object\r
+ * @param oxmClass oxm_class (see specification)\r
+ * @param oxmField oxm_field (see specification)\r
+ */\r
+ public MatchEntrySerializerKey(short msgVersion, Class<OXM_CLASS> oxmClass,\r
+ Class<OXM_FIELD> oxmField) {\r
+ super(msgVersion, MatchEntries.class);\r
+ this.oxmClass = oxmClass;\r
+ this.oxmField = oxmField;\r
+ }\r
+\r
+ /**\r
+ * @param experimenterId experimenter / vendor ID\r
+ */\r
+ public void setExperimenterId(Long experimenterId) {\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ @SuppressWarnings("rawtypes")\r
+ MatchEntrySerializerKey other = (MatchEntrySerializerKey) obj;\r
+ if (experimenterId == null) {\r
+ if (other.experimenterId != null)\r
+ return false;\r
+ } else if (!experimenterId.equals(other.experimenterId))\r
+ return false;\r
+ if (oxmClass == null) {\r
+ if (other.oxmClass != null)\r
+ return false;\r
+ } else if (!oxmClass.equals(other.oxmClass))\r
+ return false;\r
+ if (oxmField == null) {\r
+ if (other.oxmField != null)\r
+ return false;\r
+ } else if (!oxmField.equals(other.oxmField))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + " oxm_class: " + oxmClass.getName() + " oxm_field: "\r
+ + oxmField.getName() + " experimenterID: " + experimenterId;\r
+ }\r
+}
\ No newline at end of file
type oft:ipv6-exthdr-flags;\r
}\r
}\r
+ augment "/oxm:oxm-container/oxm:match-entries" {\r
+ ext:augment-identifier "experimenter-match-entry";\r
+ leaf experimenter {\r
+ type uint32;\r
+ }\r
+ }\r
augment "/oxm:oxm-container/oxm:match-entries" {\r
ext:augment-identifier "tcp-flag-match-entry";\r
leaf tcp-flag {\r
package org.opendaylight.openflowjava.protocol.impl.deserialization;\r
\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.action.OF10EnqueueActionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.action.OF10OutputActionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.action.OF10SetDlDstActionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.action.OF13SetMplsTtlActionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.action.OF13SetNwTtlActionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.action.OF13SetQueueActionDeserializer;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowjava.protocol.impl.util.SimpleDeserializerRegistryHelper;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ActionDeserializerRegistryHelper;\r
\r
/**\r
* @author michal.polkorab\r
*/\r
public static void registerDeserializers(DeserializerRegistry registry) {\r
// register OF v1.0 action deserializers\r
- SimpleDeserializerRegistryHelper helper =\r
- new SimpleDeserializerRegistryHelper(EncodeConstants.OF10_VERSION_ID, registry);\r
- helper.registerDeserializer(0, Action.class, new OF10OutputActionDeserializer());\r
- helper.registerDeserializer(1, Action.class, new OF10SetVlanVidActionDeserializer());\r
- helper.registerDeserializer(2, Action.class, new OF10SetVlanPcpActionDeserializer());\r
- helper.registerDeserializer(3, Action.class, new OF10StripVlanActionDeserializer());\r
- helper.registerDeserializer(4, Action.class, new OF10SetDlSrcActionDeserializer());\r
- helper.registerDeserializer(5, Action.class, new OF10SetDlDstActionDeserializer());\r
- helper.registerDeserializer(6, Action.class, new OF10SetNwSrcActionDeserializer());\r
- helper.registerDeserializer(7, Action.class, new OF10SetNwDstActionDeserializer());\r
- helper.registerDeserializer(8, Action.class, new OF10SetNwTosActionDeserializer());\r
- helper.registerDeserializer(9, Action.class, new OF10SetTpSrcActionDeserializer());\r
- helper.registerDeserializer(10, Action.class, new OF10SetTpDstActionDeserializer());\r
- helper.registerDeserializer(11, Action.class, new OF10EnqueueActionDeserializer());\r
+ ActionDeserializerRegistryHelper helper = \r
+ new ActionDeserializerRegistryHelper(EncodeConstants.OF10_VERSION_ID, registry);\r
+ helper.registerDeserializer(0, new OF10OutputActionDeserializer());\r
+ helper.registerDeserializer(1, new OF10SetVlanVidActionDeserializer());\r
+ helper.registerDeserializer(2, new OF10SetVlanPcpActionDeserializer());\r
+ helper.registerDeserializer(3, new OF10StripVlanActionDeserializer());\r
+ helper.registerDeserializer(4, new OF10SetDlSrcActionDeserializer());\r
+ helper.registerDeserializer(5, new OF10SetDlDstActionDeserializer());\r
+ helper.registerDeserializer(6, new OF10SetNwSrcActionDeserializer());\r
+ helper.registerDeserializer(7, new OF10SetNwDstActionDeserializer());\r
+ helper.registerDeserializer(8, new OF10SetNwTosActionDeserializer());\r
+ helper.registerDeserializer(9, new OF10SetTpSrcActionDeserializer());\r
+ helper.registerDeserializer(10, new OF10SetTpDstActionDeserializer());\r
+ helper.registerDeserializer(11, new OF10EnqueueActionDeserializer());\r
// register OF v1.3 action deserializers\r
- helper = new SimpleDeserializerRegistryHelper(EncodeConstants.OF13_VERSION_ID, registry);\r
- helper.registerDeserializer(0, Action.class, new OF13OutputActionDeserializer());\r
- helper.registerDeserializer(11, Action.class, new OF13CopyTtlOutActionDeserializer());\r
- helper.registerDeserializer(12, Action.class, new OF13CopyTtlInActionDeserializer());\r
- helper.registerDeserializer(15, Action.class, new OF13SetMplsTtlActionDeserializer());\r
- helper.registerDeserializer(16, Action.class, new OF13DecMplsTtlActionDeserializer());\r
- helper.registerDeserializer(17, Action.class, new OF13PushVlanActionDeserializer());\r
- helper.registerDeserializer(18, Action.class, new OF13PopVlanActionDeserializer());\r
- helper.registerDeserializer(19, Action.class, new OF13PushMplsActionDeserializer());\r
- helper.registerDeserializer(20, Action.class, new OF13PopMplsActionDeserializer());\r
- helper.registerDeserializer(21, Action.class, new OF13SetQueueActionDeserializer());\r
- helper.registerDeserializer(22, Action.class, new OF13GroupActionDeserializer());\r
- helper.registerDeserializer(23, Action.class, new OF13SetNwTtlActionDeserializer());\r
- helper.registerDeserializer(24, Action.class, new OF13DecNwTtlActionDeserializer());\r
- helper.registerDeserializer(25, Action.class, new OF13SetFieldActionDeserializer());\r
- helper.registerDeserializer(26, Action.class, new OF13PushPbbActionDeserializer());\r
- helper.registerDeserializer(27, Action.class, new OF13PopPbbActionDeserializer());\r
+ helper = new ActionDeserializerRegistryHelper(EncodeConstants.OF13_VERSION_ID, registry);\r
+ helper.registerDeserializer(0, new OF13OutputActionDeserializer());\r
+ helper.registerDeserializer(11, new OF13CopyTtlOutActionDeserializer());\r
+ helper.registerDeserializer(12, new OF13CopyTtlInActionDeserializer());\r
+ helper.registerDeserializer(15, new OF13SetMplsTtlActionDeserializer());\r
+ helper.registerDeserializer(16, new OF13DecMplsTtlActionDeserializer());\r
+ helper.registerDeserializer(17, new OF13PushVlanActionDeserializer());\r
+ helper.registerDeserializer(18, new OF13PopVlanActionDeserializer());\r
+ helper.registerDeserializer(19, new OF13PushMplsActionDeserializer());\r
+ helper.registerDeserializer(20, new OF13PopMplsActionDeserializer());\r
+ helper.registerDeserializer(21, new OF13SetQueueActionDeserializer());\r
+ helper.registerDeserializer(22, new OF13GroupActionDeserializer());\r
+ helper.registerDeserializer(23, new OF13SetNwTtlActionDeserializer());\r
+ helper.registerDeserializer(24, new OF13DecNwTtlActionDeserializer());\r
+ helper.registerDeserializer(25, new OF13SetFieldActionDeserializer());\r
+ helper.registerDeserializer(26, new OF13PushPbbActionDeserializer());\r
+ helper.registerDeserializer(27, new OF13PopPbbActionDeserializer());\r
}\r
-}\r
+}
\ No newline at end of file
package org.opendaylight.openflowjava.protocol.impl.deserialization;\r
\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.ApplyActionsInstructionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.ClearActionsInstructionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.GoToTableInstructionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.MeterInstructionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.WriteActionsInstructionDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.WriteMetadataInstructionDeserializer;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowjava.protocol.impl.util.SimpleDeserializerRegistryHelper;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionDeserializerRegistryHelper;\r
\r
/**\r
* @author michal.polkorab\r
*/\r
public static void registerDeserializers(DeserializerRegistry registry) {\r
// register OF v1.3 instruction deserializers\r
- SimpleDeserializerRegistryHelper helper =\r
- new SimpleDeserializerRegistryHelper(EncodeConstants.OF13_VERSION_ID, registry);\r
- helper.registerDeserializer(1, Instruction.class, new GoToTableInstructionDeserializer());\r
- helper.registerDeserializer(2, Instruction.class, new WriteMetadataInstructionDeserializer());\r
- helper.registerDeserializer(3, Instruction.class, new WriteActionsInstructionDeserializer());\r
- helper.registerDeserializer(4, Instruction.class, new ApplyActionsInstructionDeserializer());\r
- helper.registerDeserializer(5, Instruction.class, new ClearActionsInstructionDeserializer());\r
- helper.registerDeserializer(6, Instruction.class, new MeterInstructionDeserializer());\r
+ InstructionDeserializerRegistryHelper helper =\r
+ new InstructionDeserializerRegistryHelper(EncodeConstants.OF13_VERSION_ID, registry);\r
+ helper.registerDeserializer(1, new GoToTableInstructionDeserializer());\r
+ helper.registerDeserializer(2, new WriteMetadataInstructionDeserializer());\r
+ helper.registerDeserializer(3, new WriteActionsInstructionDeserializer());\r
+ helper.registerDeserializer(4, new ApplyActionsInstructionDeserializer());\r
+ helper.registerDeserializer(5, new ClearActionsInstructionDeserializer());\r
+ helper.registerDeserializer(6, new MeterInstructionDeserializer());\r
}\r
-}\r
+}
\ No newline at end of file
// register OF v1.0 message deserializers\r
SimpleDeserializerRegistryHelper helper =\r
new SimpleDeserializerRegistryHelper(EncodeConstants.OF10_VERSION_ID, registry);\r
- helper.registerDeserializer(0, HelloMessage.class, new OF10HelloMessageFactory());\r
- helper.registerDeserializer(1, ErrorMessage.class, new OF10ErrorMessageFactory());\r
- helper.registerDeserializer(2, EchoRequestMessage.class, new OF10EchoRequestMessageFactory());\r
- helper.registerDeserializer(3, EchoOutput.class, new OF10EchoReplyMessageFactory());\r
- helper.registerDeserializer(6, GetFeaturesOutput.class, new OF10FeaturesReplyMessageFactory());\r
- helper.registerDeserializer(8, GetConfigOutput.class, new OF10GetConfigReplyMessageFactory());\r
- helper.registerDeserializer(10, PacketInMessage.class, new OF10PacketInMessageFactory());\r
- helper.registerDeserializer(11, FlowRemovedMessage.class, new OF10FlowRemovedMessageFactory());\r
- helper.registerDeserializer(12, PortStatusMessage.class, new OF10PortStatusMessageFactory());\r
- helper.registerDeserializer(17, MultipartReplyMessage.class, new OF10StatsReplyMessageFactory());\r
- helper.registerDeserializer(19, BarrierOutput.class, new OF10BarrierReplyMessageFactory());\r
- helper.registerDeserializer(21, GetQueueConfigOutput.class, new OF10QueueGetConfigReplyMessageFactory());\r
+ helper.registerDeserializer(0, null, HelloMessage.class, new OF10HelloMessageFactory());\r
+ helper.registerDeserializer(1, null, ErrorMessage.class, new OF10ErrorMessageFactory());\r
+ helper.registerDeserializer(2, null, EchoRequestMessage.class, new OF10EchoRequestMessageFactory());\r
+ helper.registerDeserializer(3, null, EchoOutput.class, new OF10EchoReplyMessageFactory());\r
+ helper.registerDeserializer(6, null, GetFeaturesOutput.class, new OF10FeaturesReplyMessageFactory());\r
+ helper.registerDeserializer(8, null, GetConfigOutput.class, new OF10GetConfigReplyMessageFactory());\r
+ helper.registerDeserializer(10, null, PacketInMessage.class, new OF10PacketInMessageFactory());\r
+ helper.registerDeserializer(11, null, FlowRemovedMessage.class, new OF10FlowRemovedMessageFactory());\r
+ helper.registerDeserializer(12, null, PortStatusMessage.class, new OF10PortStatusMessageFactory());\r
+ helper.registerDeserializer(17, null, MultipartReplyMessage.class, new OF10StatsReplyMessageFactory());\r
+ helper.registerDeserializer(19, null, BarrierOutput.class, new OF10BarrierReplyMessageFactory());\r
+ helper.registerDeserializer(21, null, GetQueueConfigOutput.class, new OF10QueueGetConfigReplyMessageFactory());\r
// register Of v1.3 message deserializers\r
helper = new SimpleDeserializerRegistryHelper(EncodeConstants.OF13_VERSION_ID, registry);\r
- helper.registerDeserializer(0, HelloMessage.class, new HelloMessageFactory());\r
- helper.registerDeserializer(1, ErrorMessage.class, new ErrorMessageFactory());\r
- helper.registerDeserializer(2, EchoRequestMessage.class, new EchoRequestMessageFactory());\r
- helper.registerDeserializer(3, EchoOutput.class, new EchoReplyMessageFactory());\r
- helper.registerDeserializer(6, GetFeaturesOutput.class, new FeaturesReplyMessageFactory());\r
- helper.registerDeserializer(8, GetConfigOutput.class, new GetConfigReplyMessageFactory());\r
- helper.registerDeserializer(10, PacketInMessage.class, new PacketInMessageFactory());\r
- helper.registerDeserializer(11, FlowRemovedMessage.class, new FlowRemovedMessageFactory());\r
- helper.registerDeserializer(12, PortStatusMessage.class, new PortStatusMessageFactory());\r
- helper.registerDeserializer(19, MultipartReplyMessage.class, new MultipartReplyMessageFactory());\r
- helper.registerDeserializer(21, BarrierOutput.class, new BarrierReplyMessageFactory());\r
- helper.registerDeserializer(23, GetQueueConfigOutput.class, new QueueGetConfigReplyMessageFactory());\r
- helper.registerDeserializer(25, RoleRequestOutput.class, new RoleReplyMessageFactory());\r
- helper.registerDeserializer(27, GetAsyncOutput.class, new GetAsyncReplyMessageFactory());\r
+ helper.registerDeserializer(0, null, HelloMessage.class, new HelloMessageFactory());\r
+ helper.registerDeserializer(1, null, ErrorMessage.class, new ErrorMessageFactory());\r
+ helper.registerDeserializer(2, null, EchoRequestMessage.class, new EchoRequestMessageFactory());\r
+ helper.registerDeserializer(3, null, EchoOutput.class, new EchoReplyMessageFactory());\r
+ helper.registerDeserializer(6, null, GetFeaturesOutput.class, new FeaturesReplyMessageFactory());\r
+ helper.registerDeserializer(8, null, GetConfigOutput.class, new GetConfigReplyMessageFactory());\r
+ helper.registerDeserializer(10, null, PacketInMessage.class, new PacketInMessageFactory());\r
+ helper.registerDeserializer(11, null, FlowRemovedMessage.class, new FlowRemovedMessageFactory());\r
+ helper.registerDeserializer(12, null, PortStatusMessage.class, new PortStatusMessageFactory());\r
+ helper.registerDeserializer(19, null, MultipartReplyMessage.class, new MultipartReplyMessageFactory());\r
+ helper.registerDeserializer(21, null, BarrierOutput.class, new BarrierReplyMessageFactory());\r
+ helper.registerDeserializer(23, null, GetQueueConfigOutput.class, new QueueGetConfigReplyMessageFactory());\r
+ helper.registerDeserializer(25, null, RoleRequestOutput.class, new RoleReplyMessageFactory());\r
+ helper.registerDeserializer(27, null, GetAsyncOutput.class, new GetAsyncReplyMessageFactory());\r
}\r
}\r
\r
package org.opendaylight.openflowjava.protocol.impl.deserialization.action;\r
\r
+import io.netty.buffer.ByteBuf;\r
+\r
import java.util.ArrayList;\r
import java.util.List;\r
\r
-import io.netty.buffer.ByteBuf;\r
-\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageCodeKey;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntryDeserializerKey;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsActionBuilder;\r
// get oxm_field & hasMask byte and extract the field value\r
int oxmField = input.getUnsignedByte(input.readerIndex()\r
+ EncodeConstants.SIZE_OF_SHORT_IN_BYTES) >>> 1;\r
- OFDeserializer<MatchEntries> matchDeserializer = registry.getDeserializer(\r
- new EnhancedMessageCodeKey(EncodeConstants.OF13_VERSION_ID, oxmClass,\r
- oxmField, MatchEntries.class));\r
+ MatchEntryDeserializerKey key = new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID,\r
+ oxmClass, oxmField);\r
+ if (oxmClass == EncodeConstants.EXPERIMENTER_VALUE) {\r
+ long expId = input.getUnsignedInt(input.readerIndex() + EncodeConstants.SIZE_OF_SHORT_IN_BYTES\r
+ + 2 * EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
+ key.setExperimenterId(expId);\r
+ }\r
+ OFDeserializer<MatchEntries> matchDeserializer = registry.getDeserializer(key);\r
List<MatchEntries> entry = new ArrayList<>();\r
entry.add(matchDeserializer.deserialize(input));\r
matchEntries.setMatchEntries(entry);\r
package org.opendaylight.openflowjava.protocol.impl.serialization;\r
\r
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF10EnqueueActionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF10OutputActionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF10SetDlDstActionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetMplsTtlActionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetNwTtlActionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetQueueActionSerializer;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedKeyRegistryHelper;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ActionSerializerRegistryHelper;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl;\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.grouping.Action;\r
\r
/**\r
* Initializes serializer registry with action serializers\r
* @param serializerRegistry registry to be initialized with action serializers\r
*/\r
public static void registerActionSerializers(SerializerRegistry serializerRegistry) {\r
- Class<Action> actionClass = Action.class;\r
// register OF v1.0 action serializers\r
- EnhancedKeyRegistryHelper<Action> helper =\r
- new EnhancedKeyRegistryHelper<>(EncodeConstants.OF10_VERSION_ID, actionClass, serializerRegistry);\r
+ ActionSerializerRegistryHelper helper = new ActionSerializerRegistryHelper(\r
+ EncodeConstants.OF10_VERSION_ID, serializerRegistry);\r
helper.registerSerializer(Output.class, new OF10OutputActionSerializer());\r
helper.registerSerializer(SetVlanVid.class, new OF10SetVlanVidActionSerializer());\r
helper.registerSerializer(SetVlanPcp.class, new OF10SetVlanPcpActionSerializer());\r
helper.registerSerializer(SetTpDst.class, new OF10SetTpDstActionSerializer());\r
helper.registerSerializer(Enqueue.class, new OF10EnqueueActionSerializer());\r
// register OF v1.0 action serializers\r
- helper = new EnhancedKeyRegistryHelper<>(\r
- EncodeConstants.OF13_VERSION_ID, actionClass, serializerRegistry);\r
+ helper = new ActionSerializerRegistryHelper(\r
+ EncodeConstants.OF13_VERSION_ID, serializerRegistry);\r
helper.registerSerializer(Output.class, new OF13OutputActionSerializer());\r
helper.registerSerializer(CopyTtlOut.class, new OF13CopyTtlOutActionSerializer());\r
helper.registerSerializer(CopyTtlIn.class, new OF13CopyTtlInActionSerializer());\r
helper.registerSerializer(PushPbb.class, new OF13PushPbbActionSerializer());\r
helper.registerSerializer(PopPbb.class, new OF13PopPbbActionSerializer());\r
}\r
-}\r
+}
\ No newline at end of file
* and is available at http://www.eclipse.org/legal/epl-v10.html\r
*/\r
\r
-package org.opendaylight.openflowjava.protocol.impl.util;\r
+package org.opendaylight.openflowjava.protocol.impl.serialization;\r
\r
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.MeterInstructionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.WriteActionsInstructionSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.WriteMetadataInstructionSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionSerializerRegistryHelper;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ClearActions;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.GotoTable;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.Meter;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteMetadata;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
\r
/**\r
* @author michal.polkorab\r
* @param serializerRegistry registry to be initialized with instruction serializers\r
*/\r
public static void registerInstructionSerializers(SerializerRegistry serializerRegistry) {\r
- Class<Instruction> instructionClass = Instruction.class;\r
// register OF v1.3 instruction serializers\r
- EnhancedKeyRegistryHelper<Instruction> helper =\r
- new EnhancedKeyRegistryHelper<>(EncodeConstants.OF13_VERSION_ID,\r
- instructionClass, serializerRegistry);\r
+ InstructionSerializerRegistryHelper helper= new InstructionSerializerRegistryHelper(\r
+ EncodeConstants.OF13_VERSION_ID, serializerRegistry);\r
helper.registerSerializer(GotoTable.class, new GoToTableInstructionSerializer());\r
helper.registerSerializer(WriteMetadata.class, new WriteMetadataInstructionSerializer());\r
helper.registerSerializer(WriteActions.class, new WriteActionsInstructionSerializer());\r
import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmVlanVidSerializer;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.util.EnhancedKeyRegistryHelper;\r
+import org.opendaylight.openflowjava.protocol.impl.util.MatchEntrySerializerRegistryHelper;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;\r
public static void registerMatchEntrySerializers(SerializerRegistry serializerRegistry) {\r
// register OF v1.3 OpenflowBasicClass match entry serializers\r
Class<OpenflowBasicClass> oxmClass = OpenflowBasicClass.class;\r
- EnhancedKeyRegistryHelper<OpenflowBasicClass> registryHelper =\r
- new EnhancedKeyRegistryHelper<>(EncodeConstants.OF13_VERSION_ID, oxmClass, serializerRegistry);\r
- registryHelper.registerSerializer(InPort.class, new OxmInPortSerializer());\r
- registryHelper.registerSerializer(InPhyPort.class, new OxmInPhyPortSerializer());\r
- registryHelper.registerSerializer(Metadata.class, new OxmMetadataSerializer());\r
- registryHelper.registerSerializer(EthDst.class, new OxmEthDstSerializer());\r
- registryHelper.registerSerializer(EthSrc.class, new OxmEthSrcSerializer());\r
- registryHelper.registerSerializer(EthType.class, new OxmEthTypeSerializer());\r
- registryHelper.registerSerializer(VlanVid.class, new OxmVlanVidSerializer());\r
- registryHelper.registerSerializer(VlanPcp.class, new OxmVlanPcpSerializer());\r
- registryHelper.registerSerializer(IpDscp.class, new OxmIpDscpSerializer());\r
- registryHelper.registerSerializer(IpEcn.class, new OxmIpEcnSerializer());\r
- registryHelper.registerSerializer(IpProto.class, new OxmIpProtoSerializer());\r
- registryHelper.registerSerializer(Ipv4Src.class, new OxmIpv4SrcSerializer());\r
- registryHelper.registerSerializer(Ipv4Dst.class, new OxmIpv4DstSerializer());\r
- registryHelper.registerSerializer(TcpSrc.class, new OxmTcpSrcSerializer());\r
- registryHelper.registerSerializer(TcpDst.class, new OxmTcpDstSerializer());\r
- registryHelper.registerSerializer(UdpSrc.class, new OxmUdpSrcSerializer());\r
- registryHelper.registerSerializer(UdpDst.class, new OxmUdpDstSerializer());\r
- registryHelper.registerSerializer(SctpSrc.class, new OxmSctpSrcSerializer());\r
- registryHelper.registerSerializer(SctpDst.class, new OxmSctpDstSerializer());\r
- registryHelper.registerSerializer(Icmpv4Type.class, new OxmIcmpv4TypeSerializer());\r
- registryHelper.registerSerializer(Icmpv4Code.class, new OxmIcmpv4CodeSerializer());\r
- registryHelper.registerSerializer(ArpOp.class, new OxmArpOpSerializer());\r
- registryHelper.registerSerializer(ArpSpa.class, new OxmArpSpaSerializer());\r
- registryHelper.registerSerializer(ArpTpa.class, new OxmArpTpaSerializer());\r
- registryHelper.registerSerializer(ArpSha.class, new OxmArpShaSerializer());\r
- registryHelper.registerSerializer(ArpTha.class, new OxmArpThaSerializer());\r
- registryHelper.registerSerializer(Ipv6Src.class, new OxmIpv6SrcSerializer());\r
- registryHelper.registerSerializer(Ipv6Dst.class, new OxmIpv6DstSerializer());\r
- registryHelper.registerSerializer(Ipv6Flabel.class, new OxmIpv6FlabelSerializer());\r
- registryHelper.registerSerializer(Icmpv6Type.class, new OxmIcmpv6TypeSerializer());\r
- registryHelper.registerSerializer(Icmpv6Code.class, new OxmIcmpv6CodeSerializer());\r
- registryHelper.registerSerializer(Ipv6NdTarget.class, new OxmIpv6NdTargetSerializer());\r
- registryHelper.registerSerializer(Ipv6NdSll.class, new OxmIpv6NdSllSerializer());\r
- registryHelper.registerSerializer(Ipv6NdTll.class, new OxmIpv6NdTllSerializer());\r
- registryHelper.registerSerializer(MplsLabel.class, new OxmMplsLabelSerializer());\r
- registryHelper.registerSerializer(MplsTc.class, new OxmMplsTcSerializer());\r
- registryHelper.registerSerializer(MplsBos.class, new OxmMplsBosSerializer());\r
- registryHelper.registerSerializer(PbbIsid.class, new OxmPbbIsidSerializer());\r
- registryHelper.registerSerializer(TunnelId.class, new OxmTunnelIdSerializer());\r
- registryHelper.registerSerializer(Ipv6Exthdr.class, new OxmIpv6ExtHdrSerializer());\r
+ MatchEntrySerializerRegistryHelper<OpenflowBasicClass> helper =\r
+ new MatchEntrySerializerRegistryHelper<>(EncodeConstants.OF13_VERSION_ID,\r
+ oxmClass, serializerRegistry);\r
+ helper.registerSerializer(InPort.class, new OxmInPortSerializer());\r
+ helper.registerSerializer(InPhyPort.class, new OxmInPhyPortSerializer());\r
+ helper.registerSerializer(Metadata.class, new OxmMetadataSerializer());\r
+ helper.registerSerializer(EthDst.class, new OxmEthDstSerializer());\r
+ helper.registerSerializer(EthSrc.class, new OxmEthSrcSerializer());\r
+ helper.registerSerializer(EthType.class, new OxmEthTypeSerializer());\r
+ helper.registerSerializer(VlanVid.class, new OxmVlanVidSerializer());\r
+ helper.registerSerializer(VlanPcp.class, new OxmVlanPcpSerializer());\r
+ helper.registerSerializer(IpDscp.class, new OxmIpDscpSerializer());\r
+ helper.registerSerializer(IpEcn.class, new OxmIpEcnSerializer());\r
+ helper.registerSerializer(IpProto.class, new OxmIpProtoSerializer());\r
+ helper.registerSerializer(Ipv4Src.class, new OxmIpv4SrcSerializer());\r
+ helper.registerSerializer(Ipv4Dst.class, new OxmIpv4DstSerializer());\r
+ helper.registerSerializer(TcpSrc.class, new OxmTcpSrcSerializer());\r
+ helper.registerSerializer(TcpDst.class, new OxmTcpDstSerializer());\r
+ helper.registerSerializer(UdpSrc.class, new OxmUdpSrcSerializer());\r
+ helper.registerSerializer(UdpDst.class, new OxmUdpDstSerializer());\r
+ helper.registerSerializer(SctpSrc.class, new OxmSctpSrcSerializer());\r
+ helper.registerSerializer(SctpDst.class, new OxmSctpDstSerializer());\r
+ helper.registerSerializer(Icmpv4Type.class, new OxmIcmpv4TypeSerializer());\r
+ helper.registerSerializer(Icmpv4Code.class, new OxmIcmpv4CodeSerializer());\r
+ helper.registerSerializer(ArpOp.class, new OxmArpOpSerializer());\r
+ helper.registerSerializer(ArpSpa.class, new OxmArpSpaSerializer());\r
+ helper.registerSerializer(ArpTpa.class, new OxmArpTpaSerializer());\r
+ helper.registerSerializer(ArpSha.class, new OxmArpShaSerializer());\r
+ helper.registerSerializer(ArpTha.class, new OxmArpThaSerializer());\r
+ helper.registerSerializer(Ipv6Src.class, new OxmIpv6SrcSerializer());\r
+ helper.registerSerializer(Ipv6Dst.class, new OxmIpv6DstSerializer());\r
+ helper.registerSerializer(Ipv6Flabel.class, new OxmIpv6FlabelSerializer());\r
+ helper.registerSerializer(Icmpv6Type.class, new OxmIcmpv6TypeSerializer());\r
+ helper.registerSerializer(Icmpv6Code.class, new OxmIcmpv6CodeSerializer());\r
+ helper.registerSerializer(Ipv6NdTarget.class, new OxmIpv6NdTargetSerializer());\r
+ helper.registerSerializer(Ipv6NdSll.class, new OxmIpv6NdSllSerializer());\r
+ helper.registerSerializer(Ipv6NdTll.class, new OxmIpv6NdTllSerializer());\r
+ helper.registerSerializer(MplsLabel.class, new OxmMplsLabelSerializer());\r
+ helper.registerSerializer(MplsTc.class, new OxmMplsTcSerializer());\r
+ helper.registerSerializer(MplsBos.class, new OxmMplsBosSerializer());\r
+ helper.registerSerializer(PbbIsid.class, new OxmPbbIsidSerializer());\r
+ helper.registerSerializer(TunnelId.class, new OxmTunnelIdSerializer());\r
+ helper.registerSerializer(Ipv6Exthdr.class, new OxmIpv6ExtHdrSerializer());\r
\r
// Register OpenFlow NXM1Class match entry serializer\r
Class<Nxm1Class> nxm1Class = Nxm1Class.class;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.InstructionsInitializer;
import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchSerializer;
import org.opendaylight.openflowjava.protocol.impl.util.OF13MatchSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
\r
import io.netty.buffer.ByteBuf;\r
\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntrySerializerKey;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;\r
import org.opendaylight.openflowjava.util.ByteBufUtils;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
\r
/**\r
outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
OxmFieldsAction oxmField = action.getAugmentation(OxmFieldsAction.class);\r
MatchEntries entry = oxmField.getMatchEntries().get(0);\r
- OFSerializer<MatchEntries> serializer = registry.getSerializer(new EnhancedMessageTypeKey<>(\r
- EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField()));\r
+ MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(\r
+ EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());\r
+ if (entry.getOxmClass().equals(ExperimenterClass.class)) {\r
+ key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class).getExperimenter());\r
+ } else {\r
+ key.setExperimenterId(null);\r
+ }\r
+ OFSerializer<MatchEntries> serializer = registry.getSerializer(key);\r
serializer.serialize(entry, outBuffer);\r
int paddingRemainder = (outBuffer.writerIndex() - startIndex) % EncodeConstants.PADDING;\r
if (paddingRemainder != 0) {\r
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMaker;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMaker;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
public class FlowModInputMessageFactory implements OFSerializer<FlowModInput>, SerializerRegistryInjector {
private static final byte MESSAGE_TYPE = 14;
private static final byte PADDING_IN_FLOW_MOD_MESSAGE = 2;
- private static final EnhancedTypeKeyMaker<Instruction> INSTRUCTION_KEY_MAKER =
- EnhancedTypeKeyMakerFactory.createInstructionKeyMaker(EncodeConstants.OF13_VERSION_ID);
+ private static final TypeKeyMaker<Instruction> INSTRUCTION_KEY_MAKER =
+ TypeKeyMakerFactory.createInstructionKeyMaker(EncodeConstants.OF13_VERSION_ID);
private SerializerRegistry registry;
@Override
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
outBuffer.writeInt(currentBucket.getWatchPort().getValue().intValue());
outBuffer.writeInt(currentBucket.getWatchGroup().intValue());
ByteBufUtils.padBuffer(PADDING_IN_BUCKET, outBuffer);
- ListSerializer.serializeList(currentBucket.getAction(), EnhancedTypeKeyMakerFactory
+ ListSerializer.serializeList(currentBucket.getAction(), TypeKeyMakerFactory
.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID), registry, outBuffer);
outBuffer.setShort(bucketLengthIndex, outBuffer.writerIndex() - bucketLengthIndex);
}
import java.util.List;
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;
import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntrySerializerKey;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMaker;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMaker;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
+import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionRelatedTableFeatureProperty;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeatureProperty;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NextTableRelatedTableFeatureProperty;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmRelatedTableFeatureProperty;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesPropType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
}
padding = paddingNeeded(length);
output.writeShort(length);
- EnhancedTypeKeyMaker<Instruction> keyMaker = EnhancedTypeKeyMakerFactory
+ TypeKeyMaker<Instruction> keyMaker = TypeKeyMakerFactory
.createInstructionKeyMaker(EncodeConstants.OF13_VERSION_ID);
ListSerializer.serializeHeaderList(instructions, keyMaker, registry, output);
} else {
length += actions.size() * STRUCTURE_HEADER_LENGTH;
padding += paddingNeeded(length);
output.writeShort(length);
- EnhancedTypeKeyMaker<Action> keyMaker = EnhancedTypeKeyMakerFactory
+ TypeKeyMaker<Action> keyMaker = TypeKeyMakerFactory
.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID);
ListSerializer.serializeHeaderList(actions, keyMaker, registry, output);
} else {
output.writeShort(length);
for (MatchEntries entry : entries) {
- HeaderSerializer<MatchEntries> entrySerializer = registry.getSerializer(
- new EnhancedMessageTypeKey<>(EncodeConstants.OF13_VERSION_ID,
- entry.getOxmClass(), entry.getOxmMatchField()));
+ MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
+ EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());
+ if (entry.getOxmClass().equals(ExperimenterClass.class)) {
+ key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class).getExperimenter());
+ } else {
+ key.setExperimenterId(null);
+ }
+ HeaderSerializer<MatchEntries> entrySerializer = registry.getSerializer(key);
entrySerializer.serializeHeader(entry, output);
}
} else {
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMaker;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMaker;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
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.types.rev130731.FlowModFlagsV10;
public class OF10FlowModInputMessageFactory implements OFSerializer<FlowModInput>, SerializerRegistryInjector {
private static final byte MESSAGE_TYPE = 14;
- private static final EnhancedTypeKeyMaker<Action> ACTION_KEY_MAKER =
- EnhancedTypeKeyMakerFactory.createActionKeyMaker(EncodeConstants.OF10_VERSION_ID);
+ private static final TypeKeyMaker<Action> ACTION_KEY_MAKER =
+ TypeKeyMakerFactory.createActionKeyMaker(EncodeConstants.OF10_VERSION_ID);
private SerializerRegistry registry;
@Override
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
int actionsLengthIndex = outBuffer.writerIndex();
outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);
int actionsStartIndex = outBuffer.writerIndex();
- ListSerializer.serializeList(message.getAction(), EnhancedTypeKeyMakerFactory
+ ListSerializer.serializeList(message.getAction(), TypeKeyMakerFactory
.createActionKeyMaker(EncodeConstants.OF10_VERSION_ID), registry, outBuffer);
outBuffer.setShort(actionsLengthIndex, outBuffer.writerIndex() - actionsStartIndex);
byte[] data = message.getData();
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.util.ByteBufUtils;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);
ByteBufUtils.padBuffer(PADDING_IN_PACKET_OUT_MESSAGE, outBuffer);
int actionsStartIndex = outBuffer.writerIndex();
- ListSerializer.serializeList(message.getAction(), EnhancedTypeKeyMakerFactory
+ ListSerializer.serializeList(message.getAction(), TypeKeyMakerFactory
.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID), registry, outBuffer);
outBuffer.setShort(actionsLengthIndex, outBuffer.writerIndex() - actionsStartIndex);
byte[] data = message.getData();
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;\r
import org.opendaylight.openflowjava.util.ByteBufUtils;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMaker;\r
-import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMaker;\r
+import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;\r
import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;\r
public abstract class AbstractActionInstructionSerializer extends AbstractInstructionSerializer\r
implements SerializerRegistryInjector {\r
\r
- private static final EnhancedTypeKeyMaker<Action> ACTION_KEY_MAKER =\r
- EnhancedTypeKeyMakerFactory.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID);\r
+ private static final TypeKeyMaker<Action> ACTION_KEY_MAKER =\r
+ TypeKeyMakerFactory.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID);\r
\r
private SerializerRegistry registry;\r
\r
* @author michal.polkorab\r
* @param <T> type the key maker is based on \r
*/\r
-public abstract class AbstractEnhancedTypeKeyMaker<T> implements EnhancedTypeKeyMaker<T> {\r
+public abstract class AbstractTypeKeyMaker<T> implements TypeKeyMaker<T> {\r
\r
private short version;\r
\r
/**\r
* @param version openflow wire version\r
*/\r
- public AbstractEnhancedTypeKeyMaker(short version) {\r
+ public AbstractTypeKeyMaker(short version) {\r
this.version = version;\r
\r
}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.ActionDeserializerKey;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class ActionDeserializerRegistryHelper {\r
+\r
+ private short version;\r
+ private DeserializerRegistry registry;\r
+\r
+ /**\r
+ * @param version wire protocol version\r
+ * @param deserializerRegistry registry to be filled with message deserializers\r
+ */\r
+ public ActionDeserializerRegistryHelper(short version, DeserializerRegistry deserializerRegistry) {\r
+ this.version = version;\r
+ this.registry = deserializerRegistry;\r
+ }\r
+\r
+ /**\r
+ * @param code code / value to distinguish between deserializers\r
+ * @param deserializer deserializer instance\r
+ * @param deserializedObjectClass class of object that will be deserialized\r
+ * by given deserializer\r
+ */\r
+ public void registerDeserializer(int code, OFGeneralDeserializer deserializer) {\r
+ registry.registerDeserializer(new ActionDeserializerKey(version, code,\r
+ null), deserializer);\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.ActionSerializerKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionBase;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ */\r
+public class ActionSerializerRegistryHelper {\r
+\r
+ private short version;\r
+ private SerializerRegistry serializerRegistry;\r
+\r
+ /**\r
+ * @param version Openflow wire version\r
+ * @param objectType\r
+ * @param serializerRegistry\r
+ */\r
+ public ActionSerializerRegistryHelper(short version, SerializerRegistry serializerRegistry) {\r
+ this.version = version;\r
+ this.serializerRegistry = serializerRegistry;\r
+ }\r
+\r
+ /**\r
+ * Registers given serializer\r
+ * @param actionType\r
+ * @param serializer\r
+ */\r
+ public <TYPE extends ActionBase> void registerSerializer(Class<TYPE> actionType,\r
+ OFGeneralSerializer serializer) {\r
+ serializerRegistry.registerSerializer(new ActionSerializerKey<>(version,\r
+ actionType, null), serializer);\r
+ }\r
+}
\ No newline at end of file
\r
import io.netty.buffer.ByteBuf;\r
\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageCodeKey;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.ActionDeserializerKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.InstructionDeserializerKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntryDeserializerKey;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
\r
/**\r
* @author michal.polkorab\r
int oxmClass = input.getUnsignedShort(input.readerIndex());\r
int oxmField = input.getUnsignedByte(input.readerIndex()\r
+ EncodeConstants.SIZE_OF_SHORT_IN_BYTES) >>> 1;\r
- return new EnhancedMessageCodeKey(getVersion(), oxmClass,\r
- oxmField, MatchEntries.class);\r
+ MatchEntryDeserializerKey key = new MatchEntryDeserializerKey(getVersion(),\r
+ oxmClass, oxmField);\r
+ if (oxmClass == EncodeConstants.EXPERIMENTER_VALUE) {\r
+ long expId = input.getUnsignedInt(input.readerIndex() + EncodeConstants.SIZE_OF_SHORT_IN_BYTES\r
+ + 2 * EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
+ key.setExperimenterId(expId);\r
+ return key;\r
+ }\r
+ key.setExperimenterId(null);\r
+ return key;\r
}\r
};\r
}\r
@Override\r
public MessageCodeKey make(ByteBuf input) {\r
int type = input.getUnsignedShort(input.readerIndex());\r
- return new MessageCodeKey(getVersion(), type, Action.class);\r
+ if (type == EncodeConstants.EXPERIMENTER_VALUE) {\r
+ Long expId = input.getUnsignedInt(input.readerIndex()\r
+ + 2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
+ return new ActionDeserializerKey(getVersion(), type, expId);\r
+ }\r
+ ActionDeserializerKey actionDeserializerKey = new ActionDeserializerKey(getVersion(), type, null);\r
+ return actionDeserializerKey;\r
}\r
};\r
}\r
@Override\r
public MessageCodeKey make(ByteBuf input) {\r
int type = input.getUnsignedShort(input.readerIndex());\r
- return new MessageCodeKey(getVersion(), type, Instruction.class);\r
+ if (type == EncodeConstants.EXPERIMENTER_VALUE) {\r
+ Long expId = input.getUnsignedInt(input.readerIndex()\r
+ + 2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
+ return new InstructionDeserializerKey(getVersion(), type, expId);\r
+ }\r
+ return new InstructionDeserializerKey(getVersion(), type, null);\r
}\r
};\r
}\r
+++ /dev/null
-/*\r
- * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-package org.opendaylight.openflowjava.protocol.impl.util;\r
-\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
-\r
-/**\r
- * Creates KeyMakers\r
- * @author michal.polkorab\r
- */\r
-public abstract class EnhancedTypeKeyMakerFactory {\r
-\r
- /**\r
- * @param version openflow wire version that shall be used\r
- * in lookup key\r
- * @return lookup key\r
- */\r
- public static EnhancedTypeKeyMaker<MatchEntries> createMatchEntriesKeyMaker(short version) {\r
- return new AbstractEnhancedTypeKeyMaker<MatchEntries>(version) {\r
- @Override\r
- public EnhancedMessageTypeKey<?, ?> make(MatchEntries entry) {\r
- return new EnhancedMessageTypeKey<>(\r
- getVersion(), entry.getOxmClass(), entry.getOxmMatchField());\r
- }\r
- };\r
- }\r
-\r
- /**\r
- * @param version openflow wire version that shall be used\r
- * in lookup key\r
- * @return lookup key\r
- */\r
- public static EnhancedTypeKeyMaker<Action> createActionKeyMaker(short version) {\r
- return new AbstractEnhancedTypeKeyMaker<Action>(version) {\r
- @Override\r
- public EnhancedMessageTypeKey<?, ?> make(Action entry) {\r
- return new EnhancedMessageTypeKey<>(getVersion(), Action.class, entry.getType());\r
- }\r
- };\r
- }\r
-\r
- /**\r
- * @param version openflow wire version that shall be used\r
- * in lookup key\r
- * @return lookup key\r
- */\r
- public static EnhancedTypeKeyMaker<Instruction> createInstructionKeyMaker(short version) {\r
- return new AbstractEnhancedTypeKeyMaker<Instruction>(version) {\r
- @Override\r
- public EnhancedMessageTypeKey<?, ?> make(Instruction entry) {\r
- return new EnhancedMessageTypeKey<>(getVersion(), Instruction.class, entry.getType());\r
- }\r
- };\r
- }\r
-}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.InstructionDeserializerKey;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class InstructionDeserializerRegistryHelper {\r
+\r
+ private short version;\r
+ private DeserializerRegistry registry;\r
+\r
+ /**\r
+ * @param version wire protocol version\r
+ * @param deserializerRegistry registry to be filled with message deserializers\r
+ */\r
+ public InstructionDeserializerRegistryHelper(short version, DeserializerRegistry deserializerRegistry) {\r
+ this.version = version;\r
+ this.registry = deserializerRegistry;\r
+ }\r
+\r
+ /**\r
+ * @param code code / value to distinguish between deserializers\r
+ * @param deserializer deserializer instance\r
+ * @param deserializedObjectClass class of object that will be deserialized\r
+ * by given deserializer\r
+ */\r
+ public void registerDeserializer(int code, OFGeneralDeserializer deserializer) {\r
+ registry.registerDeserializer(new InstructionDeserializerKey(version, code,\r
+ null), deserializer);\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.InstructionSerializerKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.InstructionBase;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ */\r
+public class InstructionSerializerRegistryHelper {\r
+\r
+ private short version;\r
+ private SerializerRegistry serializerRegistry;\r
+\r
+ /**\r
+ * @param version Openflow wire version\r
+ * @param serializerRegistry\r
+ */\r
+ public InstructionSerializerRegistryHelper(short version, SerializerRegistry serializerRegistry) {\r
+ this.version = version;\r
+ this.serializerRegistry = serializerRegistry;\r
+ }\r
+\r
+ /**\r
+ * Registers given serializer\r
+ * @param instructionType \r
+ * @param serializer\r
+ */\r
+ public <TYPE extends InstructionBase> void registerSerializer(Class<TYPE> instructionType,\r
+ OFGeneralSerializer serializer) {\r
+ serializerRegistry.registerSerializer(new InstructionSerializerKey<>(version,\r
+ instructionType, null), serializer);\r
+ }\r
+}
\ No newline at end of file
* @param outBuffer output buffer\r
*/\r
public static <E extends DataObject> void serializeList(List<E> list,\r
- EnhancedTypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) {\r
+ TypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) {\r
if (list != null) {\r
for (E item : list) {\r
OFSerializer<E> serializer = registry.getSerializer(keyMaker.make(item));\r
* @param outBuffer output buffer\r
*/\r
public static <E extends DataObject> void serializeHeaderList(List<E> list,\r
- EnhancedTypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) {\r
+ TypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) {\r
if (list != null) {\r
for (E item : list) {\r
HeaderSerializer<E> serializer = registry.getSerializer(keyMaker.make(item));\r
package org.opendaylight.openflowjava.protocol.impl.util;\r
\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageCodeKey;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntryDeserializerKey;\r
\r
/**\r
* @author michal.polkorab\r
* @param deserializer deserializer instance\r
*/\r
public void register(int oxmField, OFGeneralDeserializer deserializer) {\r
- registry.registerDeserializer(new EnhancedMessageCodeKey(version, oxmClass,\r
- oxmField, MatchEntries.class), deserializer);\r
+ MatchEntryDeserializerKey key = new MatchEntryDeserializerKey(version, oxmClass, oxmField);\r
+ key.setExperimenterId(null);\r
+ registry.registerDeserializer(key, deserializer);\r
}\r
-}\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntrySerializerKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Clazz;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <OXM_CLASS> OXM class\r
+ */\r
+public class MatchEntrySerializerRegistryHelper<OXM_CLASS extends Clazz> {\r
+\r
+ private short version;\r
+ private Class<OXM_CLASS> generalClass;\r
+ private SerializerRegistry serializerRegistry;\r
+\r
+ /**\r
+ * @param version Openflow wire version\r
+ * @param generalClass\r
+ * @param serializerRegistry\r
+ */\r
+ public MatchEntrySerializerRegistryHelper(short version, Class<OXM_CLASS> generalClass,\r
+ SerializerRegistry serializerRegistry) {\r
+ this.version = version;\r
+ this.generalClass = generalClass;\r
+ this.serializerRegistry = serializerRegistry;\r
+ }\r
+\r
+ /**\r
+ * Registers given serializer\r
+ * @param specificClass \r
+ * @param serializer \r
+ */\r
+ public <OXM_FIELD extends MatchField> void registerSerializer(\r
+ Class<OXM_FIELD> specificClass, OFGeneralSerializer serializer) {\r
+ MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(version, generalClass, specificClass);\r
+ key.setExperimenterId(null);\r
+ serializerRegistry.registerSerializer(key, serializer);\r
+ }\r
+}\r
import java.util.List;
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
-import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntrySerializerKey;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.StandardMatchType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
return;
}
for (MatchEntries entry : matchEntries) {
- OFSerializer<MatchEntries> entrySerializer = registry.getSerializer(
- new EnhancedMessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(),
- entry.getOxmMatchField()));
+
+ MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
+ EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());
+ if (entry.getOxmClass().equals(ExperimenterClass.class)) {
+ key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class).getExperimenter());
+ } else {
+ key.setExperimenterId(null);
+ }
+ OFSerializer<MatchEntries> entrySerializer = registry.getSerializer(key);
entrySerializer.serialize(entry, out);
}
}
\r
/**\r
* @param code code / value to distinguish between deserializers\r
+ * @param experimenterID TODO\r
* @param deserializedObjectClass class of object that will be deserialized\r
* by given deserializer\r
* @param deserializer deserializer instance\r
*/\r
public void registerDeserializer(int code,\r
- Class<?> deserializedObjectClass, OFGeneralDeserializer deserializer) {\r
+ Long experimenterID, Class<?> deserializedObjectClass, OFGeneralDeserializer deserializer) {\r
registry.registerDeserializer(new MessageCodeKey(version, code,\r
deserializedObjectClass), deserializer);\r
}\r
\r
package org.opendaylight.openflowjava.protocol.impl.util;\r
\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
\r
/**\r
* @author michal.polkorab\r
* @param <T> \r
*/\r
-public interface EnhancedTypeKeyMaker<T> {\r
+public interface TypeKeyMaker<T> {\r
\r
/**\r
* @param entry\r
* @return key that will be used for serializer lookup in \r
* the serializer registry\r
*/\r
- public abstract EnhancedMessageTypeKey<?,?> make(T entry);\r
+ public abstract MessageTypeKey<?> make(T entry);\r
\r
}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.ActionSerializerKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.InstructionSerializerKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntrySerializerKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+\r
+/**\r
+ * Creates KeyMakers\r
+ * @author michal.polkorab\r
+ */\r
+public abstract class TypeKeyMakerFactory {\r
+\r
+ /**\r
+ * @param version openflow wire version that shall be used\r
+ * in lookup key\r
+ * @return lookup key\r
+ */\r
+ public static TypeKeyMaker<MatchEntries> createMatchEntriesKeyMaker(short version) {\r
+ return new AbstractTypeKeyMaker<MatchEntries>(version) {\r
+ @Override\r
+ public MatchEntrySerializerKey<?, ?> make(MatchEntries entry) {\r
+ MatchEntrySerializerKey<?, ?> key;\r
+ key = new MatchEntrySerializerKey<>(getVersion(), entry.getOxmClass(),\r
+ entry.getOxmMatchField());\r
+ if (entry.getOxmClass().equals(ExperimenterClass.class)) {\r
+ key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class)\r
+ .getExperimenter());\r
+ return key;\r
+ }\r
+ key.setExperimenterId(null);\r
+ return key;\r
+ }\r
+ };\r
+ }\r
+\r
+ /**\r
+ * @param version openflow wire version that shall be used\r
+ * in lookup key\r
+ * @return lookup key\r
+ */\r
+ public static TypeKeyMaker<Action> createActionKeyMaker(short version) {\r
+ return new AbstractTypeKeyMaker<Action>(version) {\r
+ @Override\r
+ public ActionSerializerKey<?> make(Action entry) {\r
+ if (entry.getType().equals(Experimenter.class)) {\r
+ return new ActionSerializerKey<>(getVersion(), entry.getType(), entry.getAugmentation(ExperimenterAction.class).getExperimenter());\r
+ }\r
+ return new ActionSerializerKey<>(getVersion(), entry.getType(), null);\r
+ }\r
+ };\r
+ }\r
+\r
+ /**\r
+ * @param version openflow wire version that shall be used\r
+ * in lookup key\r
+ * @return lookup key\r
+ */\r
+ public static TypeKeyMaker<Instruction> createInstructionKeyMaker(short version) {\r
+ return new AbstractTypeKeyMaker<Instruction>(version) {\r
+ @Override\r
+ public InstructionSerializerKey<?> make(Instruction entry) {\r
+ if (entry.getType().equals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common\r
+ .instruction.rev130731.Experimenter.class)) {\r
+ return new InstructionSerializerKey<>(getVersion(), entry.getType(), entry.getAugmentation(ExperimenterInstruction.class).getExperimenter());\r
+ }\r
+ return new InstructionSerializerKey<>(getVersion(), entry.getType(), null);\r
+ }\r
+ };\r
+ }\r
+}\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
import org.opendaylight.openflowjava.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
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.EthertypeAction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
import org.junit.Before;\r
import org.junit.Test;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageCodeKey;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.keys.MatchEntryDeserializerKey;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;\r
import org.opendaylight.openflowjava.util.ByteBufUtils;\r
public void testIpv4Address() {\r
ByteBuf buffer = ByteBufUtils.hexStringToByteBuf("80 00 18 04 00 01 02 03");\r
\r
- OFDeserializer<MatchEntries> entryDeserializer = registry.getDeserializer(\r
- new EnhancedMessageCodeKey(EncodeConstants.OF13_VERSION_ID, 0x8000, 12, MatchEntries.class));\r
+ MatchEntryDeserializerKey key = new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID,\r
+ 0x8000, 12);\r
+ key.setExperimenterId(null);\r
+ OFDeserializer<MatchEntries> entryDeserializer = registry.getDeserializer(key);\r
MatchEntries entry = entryDeserializer.deserialize(buffer);\r
Assert.assertEquals("Wrong Ipv4 address format", new Ipv4Address("0.1.2.3"),\r
entry.getAugmentation(Ipv4AddressMatchEntry.class).getIpv4Address());\r
public void testIpv6Address() {\r
ByteBuf buffer = ByteBufUtils.hexStringToByteBuf("80 00 34 10 00 00 00 01 00 02 00 03 00 04 00 05 00 06 0F 07");\r
\r
- OFDeserializer<MatchEntries> entryDeserializer = registry.getDeserializer(\r
- new EnhancedMessageCodeKey(EncodeConstants.OF13_VERSION_ID, 0x8000, 26, MatchEntries.class));\r
+ MatchEntryDeserializerKey key = new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID,\r
+ 0x8000, 26);\r
+ key.setExperimenterId(null);\r
+ OFDeserializer<MatchEntries> entryDeserializer = registry.getDeserializer(key);\r
MatchEntries entry = entryDeserializer.deserialize(buffer);\r
Assert.assertEquals("Wrong Ipv6 address format", new Ipv6Address("0000:0001:0002:0003:0004:0005:0006:0F07"),\r
entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address());\r
actions.add(actionBuilder.build());\r
\r
ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- ListSerializer.serializeList(actions, EnhancedTypeKeyMakerFactory\r
+ ListSerializer.serializeList(actions, TypeKeyMakerFactory\r
.createActionKeyMaker(EncodeConstants.OF10_VERSION_ID), registry, out);\r
\r
Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());\r
actions.add(actionBuilder.build());\r
\r
ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- ListSerializer.serializeList(actions, EnhancedTypeKeyMakerFactory\r
+ ListSerializer.serializeList(actions, TypeKeyMakerFactory\r
.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID), registry, out);\r
\r
Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());\r
instructions.add(builder.build());\r
\r
ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- ListSerializer.serializeList(instructions, EnhancedTypeKeyMakerFactory\r
+ ListSerializer.serializeList(instructions, TypeKeyMakerFactory\r
.createInstructionKeyMaker(EncodeConstants.OF13_VERSION_ID), registry, out);\r
\r
Assert.assertEquals("Wrong instruction type", 1, out.readUnsignedShort());\r