\r
import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;\r
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;\r
+import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdSerializerKey;\r
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionSerializerKey;\r
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterSerializerKey;\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.OxmClassBase;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;\r
\r
\r
/**\r
*/\r
public <OXM_CLASS extends OxmClassBase, OXM_TYPE extends MatchField> void registerMatchEntrySerializer(\r
MatchEntrySerializerKey<OXM_CLASS, OXM_TYPE> key,OFGeneralSerializer serializer);\r
+\r
+ /**\r
+ * Registers experimenter (vendor) message serializer\r
+ * @param key used for serializer lookup\r
+ * @param serializer serializer implementation\r
+ */\r
+ public void registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<ExperimenterInput> key,\r
+ OFSerializer<ExperimenterInput> serializer);\r
+\r
+ /**\r
+ * Registers multipart-request (stats-request) serializer\r
+ * @param key used for serializer lookup\r
+ * @param serializer serializer implementation\r
+ */\r
+ public void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<MultipartRequestExperimenterCase> key,\r
+ OFSerializer<MultipartRequestExperimenterCase> serializer);\r
+\r
+ /**\r
+ * Registers multipart-request table-features serializer\r
+ * @param key used for serializer lookup\r
+ * @param serializer serializer implementation\r
+ */\r
+ public void registerMultipartRequestTFSerializer(ExperimenterIdSerializerKey<TableFeatureProperties> key,\r
+ OFGeneralSerializer serializer);\r
+\r
+ /**\r
+ * Registers meter band serializer (used in meter-mod messages)\r
+ * @param key used for serializer lookup\r
+ * @param serializer serializer implementation\r
+ */\r
+ public void registerMeterBandSerializer(ExperimenterIdSerializerKey<MeterBandExperimenterCase> key,\r
+ OFSerializer<MeterBandExperimenterCase> serializer);\r
}
\ No newline at end of file
\r
import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
\r
/**\r
* @author michal.polkorab\r
* @param experimenterId experimenter / vendor ID\r
* @param objectClass class of created object\r
*/\r
- public ExperimenterIdDeserializerKey(short version, Long experimenterId, Class<?> objectClass) {\r
+ public <E extends DataObject> ExperimenterIdDeserializerKey(short version,\r
+ Long experimenterId, Class<E> objectClass) {\r
super(version, EncodeConstants.EXPERIMENTER_VALUE, objectClass);\r
this.experimenterId = experimenterId;\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
+\r
+package org.opendaylight.openflowjava.protocol.api.keys.experimenter;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <TYPE> class of object to be serialized\r
+ */\r
+public class ExperimenterIdSerializerKey<TYPE extends DataObject> extends MessageTypeKey<TYPE> {\r
+\r
+ private Long experimenterId;\r
+\r
+ /**\r
+ * @param msgVersion protocol wire version\r
+ * @param experimenterId experimenter / vendor ID\r
+ * @param objectClass class of object to be serialized\r
+ */\r
+ public ExperimenterIdSerializerKey(short msgVersion,\r
+ Long experimenterId, Class<TYPE> objectClass) {\r
+ super(msgVersion, objectClass);\r
+ this.experimenterId = experimenterId;\r
+ }\r
+\r
+ @Override\r
+ public int hashCode() {\r
+ final int prime = 31;\r
+ int result = super.hashCode();\r
+ result = prime * result + ((experimenterId == null) ? 0 : experimenterId.hashCode());\r
+ return result;\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 (!(obj instanceof ExperimenterIdSerializerKey))\r
+ return false;\r
+ ExperimenterIdSerializerKey<?> other = (ExperimenterIdSerializerKey<?>) 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
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterDeserializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdSerializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionDeserializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionSerializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterSerializerKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
OFDeserializer<MeterBandExperimenterCase> deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
+
+ @Override
+ public void registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<ExperimenterInput> key,
+ OFSerializer<ExperimenterInput> serializer) {
+ serializerRegistry.registerSerializer(key, serializer);
+ }
+
+ @Override
+ public void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<MultipartRequestExperimenterCase> key,
+ OFSerializer<MultipartRequestExperimenterCase> serializer) {
+ serializerRegistry.registerSerializer(key, serializer);
+ }
+
+ @Override
+ public void registerMultipartRequestTFSerializer(ExperimenterIdSerializerKey<TableFeatureProperties> key,
+ OFGeneralSerializer serializer) {
+ serializerRegistry.registerSerializer(key, serializer);
+ }
+
+ @Override
+ public void registerMeterBandSerializer(ExperimenterIdSerializerKey<MeterBandExperimenterCase> key,
+ OFSerializer<MeterBandExperimenterCase> serializer) {
+ serializerRegistry.registerSerializer(key, serializer);
+ }
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+
+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.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.util.ExperimenterSerializerKeyFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
+
+/**
+ * Translates Experimenter messages
+ * @author michal.polkorab
+ */
+public class ExperimenterInputMessageFactory implements OFSerializer<ExperimenterInput>,
+ SerializerRegistryInjector {
+
+ private SerializerRegistry registry;
+
+ @Override
+ public void serialize(ExperimenterInput message, ByteBuf outBuffer) {
+ long expId = message.getExperimenter().getValue();
+ OFSerializer<ExperimenterInput> serializer = registry.getSerializer(
+ ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey(
+ EncodeConstants.OF10_VERSION_ID, expId));
+ serializer.serialize(message, outBuffer);
+ }
+
+ @Override
+ public void injectSerializerRegistry(SerializerRegistry serializerRegistry) {
+ this.registry = serializerRegistry;
+ }
+}
\ No newline at end of file
import java.util.List;
-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.protocol.api.util.EncodeConstants;
import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.openflowjava.util.ExperimenterSerializerKeyFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMeterBand;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterBandCommons;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
outBuffer.writeByte(dscpRemarkBand.getPrecLevel());
outBuffer.writeZero(PADDING_IN_METER_BAND_DSCP_REMARK);
} else if (meterBand instanceof MeterBandExperimenterCase) {
- OFSerializer<MeterBandExperimenter> serializer = registry.getSerializer(
- new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MeterBandExperimenter.class));
MeterBandExperimenterCase experimenterBandCase = (MeterBandExperimenterCase) meterBand;
MeterBandExperimenter experimenterBand = experimenterBandCase.getMeterBandExperimenter();
- serializer.serialize(experimenterBand, outBuffer);
+ long expId = experimenterBand.getAugmentation(ExperimenterIdMeterBand.class)
+ .getExperimenter().getValue();
+ OFSerializer<MeterBandExperimenterCase> serializer = registry.getSerializer(
+ ExperimenterSerializerKeyFactory.createMeterBandSerializerKey(
+ EncodeConstants.OF13_VERSION_ID, expId));
+ serializer.serialize(experimenterBandCase, outBuffer);
}
}
}
public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) {
registry = serializerRegistry;
}
-
-}
+}
\ No newline at end of file
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.openflowjava.util.ExperimenterSerializerKeyFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionRelatedTableFeatureProperty;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMultipartRequest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdTableFeatureProperty;
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;
private static final byte WRITE_SETFIELD_MISS_CODE = 13;
private static final byte APPLY_SETFIELD_CODE = 14;
private static final byte APPLY_SETFIELD_MISS_CODE = 15;
- private static final byte STRUCTURE_HEADER_LENGTH = 4;
private static final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
private static final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
private static final byte PADDING_IN_MULTIPART_REQUEST_AGREGGATE_BODY_01 = 3;
MultipartRequestExperimenterCase expCase =
(MultipartRequestExperimenterCase) message.getMultipartRequestBody();
MultipartRequestExperimenter experimenter = expCase.getMultipartRequestExperimenter();
- OFSerializer<MultipartRequestExperimenter> serializer = registry.getSerializer(
- new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MultipartRequestExperimenter.class));
- serializer.serialize(experimenter, outBuffer);
+ long expId = experimenter.getAugmentation(ExperimenterIdMultipartRequest.class).getExperimenter().getValue();
+ OFSerializer<MultipartRequestExperimenterCase> serializer = registry.getSerializer(
+ ExperimenterSerializerKeyFactory.createMultipartRequestSerializerKey(
+ EncodeConstants.OF13_VERSION_ID, expId));
+ serializer.serialize(expCase, outBuffer);
}
private static int createMultipartRequestFlagsBitmask(final MultipartRequestFlags flags) {
private void writeExperimenterRelatedTableProperty(final ByteBuf output,
final TableFeatureProperties property) {
+ long expId = property.getAugmentation(ExperimenterIdTableFeatureProperty.class).getExperimenter().getValue();
OFSerializer<TableFeatureProperties> serializer = registry.getSerializer(
- new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, TableFeatureProperties.class));
+ ExperimenterSerializerKeyFactory.createMultipartRequestTFSerializerKey(
+ EncodeConstants.OF13_VERSION_ID, expId));
serializer.serialize(property, output);
}
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.util.EncodeConstants;
+import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.openflowjava.util.ExperimenterSerializerKeyFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMultipartRequest;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
}
private void serializeExperimenterBody(final MultipartRequestBody multipartRequestBody, final ByteBuf output) {
- MultipartRequestExperimenterCase experimenterCase = (MultipartRequestExperimenterCase) multipartRequestBody;
- MultipartRequestExperimenter experimenter = experimenterCase.getMultipartRequestExperimenter();
- OFSerializer<MultipartRequestExperimenter> expSerializer = registry.getSerializer(
- new MessageTypeKey<>(EncodeConstants.OF10_VERSION_ID, MultipartRequestExperimenter.class));
- expSerializer.serialize(experimenter, output);
+ MultipartRequestExperimenterCase expCase = (MultipartRequestExperimenterCase) multipartRequestBody;
+ MultipartRequestExperimenter experimenter = expCase.getMultipartRequestExperimenter();
+ long expId = experimenter.getAugmentation(ExperimenterIdMultipartRequest.class).getExperimenter().getValue();
+ OFSerializer<MultipartRequestExperimenterCase> serializer = registry.getSerializer(
+ ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey(
+ EncodeConstants.OF10_VERSION_ID, expId));
+ serializer.serialize(expCase, output);
}
@Override
public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) {
this.registry = serializerRegistry;
}
-
-}
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+
+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.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.util.ExperimenterSerializerKeyFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
+
+/**
+ * Translates Vendor messages
+ * @author michal.polkorab
+ */
+public class VendorInputMessageFactory implements OFSerializer<ExperimenterInput>,
+ SerializerRegistryInjector {
+
+ private SerializerRegistry registry;
+
+ @Override
+ public void serialize(ExperimenterInput message, ByteBuf outBuffer) {
+ long expId = message.getExperimenter().getValue();
+ OFSerializer<ExperimenterInput> serializer = registry.getSerializer(
+ ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey(
+ EncodeConstants.OF10_VERSION_ID, expId));
+ serializer.serialize(message, outBuffer);
+ }
+
+ @Override
+ public void injectSerializerRegistry(SerializerRegistry serializerRegistry) {
+ this.registry = serializerRegistry;
+ }
+}
\ 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.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdSerializerKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class ExperimenterSerializerKeyFactory {\r
+\r
+ /**\r
+ * @param msgVersion openflow wire version\r
+ * @param experimenterId experimenter / vendor ID\r
+ * @return key instance\r
+ */\r
+ public static ExperimenterIdSerializerKey<ExperimenterInput> createExperimenterMessageSerializerKey(\r
+ short msgVersion, Long experimenterId) {\r
+ return new ExperimenterIdSerializerKey<>(msgVersion, experimenterId, ExperimenterInput.class);\r
+ }\r
+\r
+ /**\r
+ * @param msgVersion openflow wire version\r
+ * @param experimenterId experimenter / vendor ID\r
+ * @return key instance\r
+ */\r
+ public static ExperimenterIdSerializerKey<MultipartRequestExperimenterCase> createMultipartRequestSerializerKey(\r
+ short msgVersion, Long experimenterId) {\r
+ return new ExperimenterIdSerializerKey<>(msgVersion, experimenterId, MultipartRequestExperimenterCase.class);\r
+ }\r
+\r
+ /**\r
+ * @param msgVersion openflow wire version\r
+ * @param experimenterId experimenter / vendor ID\r
+ * @return key instance\r
+ */\r
+ public static ExperimenterIdSerializerKey<TableFeatureProperties> createMultipartRequestTFSerializerKey(\r
+ short msgVersion, Long experimenterId) {\r
+ return new ExperimenterIdSerializerKey<>(msgVersion, experimenterId, TableFeatureProperties.class);\r
+ }\r
+\r
+ /**\r
+ * @param msgVersion openflow wire version\r
+ * @param experimenterId experimenter / vendor ID\r
+ * @return key instance\r
+ */\r
+ public static ExperimenterIdSerializerKey<MeterBandExperimenterCase> createMeterBandSerializerKey(\r
+ short msgVersion, Long experimenterId) {\r
+ return new ExperimenterIdSerializerKey<>(msgVersion, experimenterId, MeterBandExperimenterCase.class);\r
+ }\r
+}
\ No newline at end of file