- all extension-capable-messages have their augmentations (experimenter message is defined - so no augment needed here)
- these augmentations will be used for vendor / experimenter differentiation
Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
}\r
}\r
augment "/oxm:oxm-container/oxm:match-entries" {\r
- ext:augment-identifier "experimenter-match-entry";\r
+ ext:augment-identifier "experimenter-id-match-entry";\r
leaf experimenter {\r
- type uint32;\r
+ type oft:experimenter-id;\r
}\r
}\r
augment "/oxm:oxm-container/oxm:match-entries" {\r
uses oxm:oxm-fields-grouping;\r
}\r
augment "/ofaction:actions-container/ofaction:action" {\r
- ext:augment-identifier "experimenter-action";\r
+ ext:augment-identifier "experimenter-id-action";\r
leaf experimenter {\r
- type uint32;\r
- }\r
- leaf data {\r
- type binary;\r
+ type oft:experimenter-id;\r
}\r
}\r
// OF1.0 structures\r
uses oxm:oxm-fields-grouping;\r
}\r
augment "/ofproto:table-features-properties-container/ofproto:table-feature-properties" {\r
- ext:augment-identifier "experimenter-related-table-feature-property";\r
+ ext:augment-identifier "experimenter-id-table-feature-property";\r
leaf experimenter {\r
- type uint32;\r
+ type oft:experimenter-id;\r
}\r
leaf exp-type {\r
type uint32;\r
}\r
- leaf data {\r
- type binary;\r
- }\r
}\r
\r
// OFP_INSTRUCTION AUGMENTS\r
}\r
}\r
augment "/ofinstruction:instruction-container/ofinstruction:instruction" {\r
- ext:augment-identifier "experimenter-instruction";\r
+ ext:augment-identifier "experimenter-id-instruction";\r
leaf experimenter {\r
- type uint32;\r
- }\r
- leaf data {\r
- type binary;\r
+ type oft:experimenter-id;\r
}\r
}\r
\r
}\r
}\r
augment "/ofproto:queue-prop-container/ofproto:queue-property" {\r
- ext:augment-identifier "experimenter-queue-property";\r
+ ext:augment-identifier "experimenter-id-queue-property";\r
leaf experimenter {\r
- type uint32;\r
- }\r
- leaf data {\r
- type binary;\r
+ type oft:experimenter-id;\r
}\r
}\r
\r
// OFP_ERROR_AUGMENTS (only experimenter till OpenFlow v1.3)\r
- augment "/ofproto:error-message" {\r
- ext:augment-identifier "experimenter-error";\r
- leaf exp_type {\r
- type uint16;\r
+ augment "/ofproto:error-message" {\r
+ ext:augment-identifier "experimenter-id-error";\r
+ leaf experimenter {\r
+ type oft:experimenter-id;\r
}\r
+ }\r
+\r
+// OFP_MULTIPART AUGMENTS\r
+ augment "/ofproto:multipart-request/input/ofproto:multipart-request-body/ofproto:multipart-request-experimenter-case/ofproto:multipart-request-experimenter" {\r
+ ext:augment-identifier "experimenter-id-multipart-request";\r
leaf experimenter {\r
+ type oft:experimenter-id;\r
+ }\r
+ leaf exp-type {\r
type uint32;\r
}\r
- leaf exp-data {\r
- type binary;\r
+ }\r
+ augment "/ofproto:multipart-reply-message/ofproto:multipart-reply-body/ofproto:multipart-reply-experimenter-case/ofproto:multipart-reply-experimenter" {\r
+ ext:augment-identifier "experimenter-id-multipart-reply";\r
+ leaf experimenter {\r
+ type oft:experimenter-id;\r
+ }\r
+ leaf exp-type {\r
+ type uint32;\r
}\r
}\r
\r
+// OFP_METER_BAND AUGMENTS\r
+ augment "/ofproto:meter-band-container/ofproto:meter-band/ofproto:meter-band-experimenter-case/ofproto:meter-band-experimenter" {\r
+ ext:augment-identifier "experimenter-id-meter-band";\r
+ leaf experimenter {\r
+ type oft:experimenter-id;\r
+ }\r
+ }\r
}
\ No newline at end of file
uses ofHeader;\r
\r
leaf experimenter {\r
- type uint32;\r
+ type oft:experimenter-id;\r
}\r
leaf exp_type {\r
type uint32;\r
}\r
- leaf data {\r
- type binary;\r
- }\r
}\r
/* Switch configuration messages. */\r
grouping features-request {\r
}\r
case multipart-request-experimenter-case {\r
container multipart-request-experimenter {\r
- leaf experimenter {\r
- type uint32;\r
- }\r
- leaf exp-type {\r
- type uint32;\r
- }\r
- leaf data {\r
- type binary;\r
- }\r
+ // empty body - used for experimenter augmentation\r
}\r
}\r
}\r
}\r
case multipart-reply-experimenter-case {\r
container multipart-reply-experimenter {\r
- leaf experimenter {\r
- type uint32;\r
- }\r
- leaf exp-type {\r
- type uint32;\r
- }\r
- leaf data {\r
- type binary;\r
- }\r
+ // empty body - used for experimenter augmentation\r
}\r
}\r
}\r
}\r
}\r
\r
+ container meter-band-container {\r
+ uses meter-band-header;\r
+ }\r
grouping meter-band-header {\r
choice meter-band {\r
case meter-band-drop-case {\r
case meter-band-experimenter-case {\r
container meter-band-experimenter {\r
uses meter-band-commons;\r
- leaf experimenter {\r
- type uint32;\r
- }\r
- leaf data {\r
- type binary;\r
- }\r
}\r
}\r
}\r
typedef ether-type {
type uint16;
}
-
+ typedef experimenter-id {
+ description "This type represents experimenter ID used in experimenter messages.
+ It also represents vendor ID - as it is the same for OF version 1.3+.
+ (VENDOR naming convention has been changed in OF v1.3 specification
+ to EXPERIMENTER)";
+ type uint32;
+ }
typedef error-type {
type enumeration {
enum HELLO_FAILED {
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.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterError;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdError;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadActionCode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadInstructionCode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadMatchCode;
ErrorType errorType = ErrorType.forValue(type);
if (ErrorType.EXPERIMENTER.equals(errorType)) {
builder.setType(errorType.getIntValue());
- OFDeserializer<ExperimenterError> deserializer = registry.getDeserializer(new MessageCodeKey(
+ OFDeserializer<ExperimenterIdError> deserializer = registry.getDeserializer(new MessageCodeKey(
EncodeConstants.OF13_VERSION_ID, EncodeConstants.EXPERIMENTER_VALUE, ErrorMessage.class));
- ExperimenterError error = deserializer.deserialize(rawMessage);
- builder.addAugmentation(ExperimenterError.class, error);
+ ExperimenterIdError error = deserializer.deserialize(rawMessage);
+ builder.addAugmentation(ExperimenterIdError.class, error);
} else {
decodeType(builder, errorType, type);
decodeCode(rawMessage, builder, errorType);
bandsBuilder.setMeterBand(bandDscpRemarkCaseBuilder.build());
break;
case 0xFFFF:
- MeterBandExperimenterCaseBuilder bandExperimenterCaseBuilder = new MeterBandExperimenterCaseBuilder();
+ MeterBandExperimenterCaseBuilder bandExperimenterCaseBuilder = new MeterBandExperimenterCaseBuilder();
MeterBandExperimenterBuilder bandExperimenterBuilder = new MeterBandExperimenterBuilder();
- bandExperimenterBuilder.setType(MeterBandType.forValue(bandType));
- actualLength += input.readUnsignedShort();
- bandExperimenterBuilder.setRate(input.readUnsignedInt());
- bandExperimenterBuilder.setBurstSize(input.readUnsignedInt());
- bandExperimenterBuilder.setExperimenter(input.readUnsignedInt());
- bandExperimenterCaseBuilder.setMeterBandExperimenter(bandExperimenterBuilder.build());
+ // TODO - implement lookup into registry
+// bandExperimenterBuilder.setType(MeterBandType.forValue(bandType));
+// actualLength += input.readUnsignedShort();
+// bandExperimenterBuilder.setRate(input.readUnsignedInt());
+// bandExperimenterBuilder.setBurstSize(input.readUnsignedInt());
+// bandExperimenterBuilder.setExperimenter(input.readUnsignedInt());
+// bandExperimenterCaseBuilder.setMeterBandExperimenter(bandExperimenterBuilder.build());
bandsBuilder.setMeterBand(bandExperimenterCaseBuilder.build());
break;
default:
}
private static MultipartReplyExperimenterCase setExperimenter(ByteBuf input) {
+ // TODO - implement lookup into registry
MultipartReplyExperimenterCaseBuilder caseBuilder = new MultipartReplyExperimenterCaseBuilder();
MultipartReplyExperimenterBuilder builder = new MultipartReplyExperimenterBuilder();
- builder.setExperimenter(input.readUnsignedInt());
- builder.setExpType(input.readUnsignedInt());
- byte[] data = new byte[input.readableBytes()];
- input.readBytes(data);
- builder.setData(data);
+// builder.setExperimenter(input.readUnsignedInt());
+// builder.setExpType(input.readUnsignedInt());
+// byte[] data = new byte[input.readableBytes()];
+// input.readBytes(data);
+// builder.setData(data);
caseBuilder.setMultipartReplyExperimenter(builder.build());
return caseBuilder.build();
}
}
private static MultipartReplyExperimenterCase setExperimenter(ByteBuf input) {
- MultipartReplyExperimenterCaseBuilder caseBuilder = new MultipartReplyExperimenterCaseBuilder();
+ // TODO - implement lookup into registry
+ MultipartReplyExperimenterCaseBuilder caseBuilder = new MultipartReplyExperimenterCaseBuilder();
MultipartReplyExperimenterBuilder builder = new MultipartReplyExperimenterBuilder();
- builder.setExperimenter(input.readUnsignedInt());
- byte[] data = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
- input.readBytes(data);
- builder.setData(data);
+// builder.setExperimenter(input.readUnsignedInt());
+// byte[] data = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
+// input.readBytes(data);
+// builder.setData(data);
caseBuilder.setMultipartReplyExperimenter(builder.build());
return caseBuilder.build();
}
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.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;\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
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
+ key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)\r
+ .getExperimenter().getValue());\r
} else {\r
key.setExperimenterId(null);\r
}\r
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.ExperimenterIdMatchEntry;
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;
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());
+ key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)
+ .getExperimenter().getValue());
} else {
key.setExperimenterId(null);
}
import org.opendaylight.openflowjava.protocol.api.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.augments.rev131002.ExperimenterIdMatchEntry;
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;
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());
+ key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)
+ .getExperimenter().getValue());
} else {
key.setExperimenterId(null);
}
import org.opendaylight.openflowjava.protocol.api.keys.ActionSerializerKey;\r
import org.opendaylight.openflowjava.protocol.api.keys.InstructionSerializerKey;\r
import org.opendaylight.openflowjava.protocol.api.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.augments.rev131002.ExperimenterIdAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;\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
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
+ key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)\r
+ .getExperimenter().getValue());\r
return key;\r
}\r
key.setExperimenterId(null);\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
+ return new ActionSerializerKey<>(getVersion(), entry.getType(),\r
+ entry.getAugmentation(ExperimenterIdAction.class).getExperimenter().getValue());\r
}\r
return new ActionSerializerKey<>(getVersion(), entry.getType(), null);\r
}\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
+ return new InstructionSerializerKey<>(getVersion(), entry.getType(),\r
+ entry.getAugmentation(ExperimenterIdInstruction.class)\r
+ .getExperimenter().getValue());\r
}\r
return new InstructionSerializerKey<>(getVersion(), entry.getType(), null);\r
}\r
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.MeterBandDropCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
-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.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenterCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregate;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.experimenter._case.MultipartReplyExperimenter;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
@Test
public void testMultipartReplyMeterConfigBody(){
ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
- "00 38 "+//len
+ "00 28 "+//len
"00 0A "+//flags
"00 00 00 09 "+//meterId
"00 01 "+//meterBandDrop.type
"00 00 00 11 "+//meterBandDscp.rate
"00 00 00 20 "+//meterBandDscp.burstSize
"04 "+//meterBandDscp.precLevel
- "00 00 00 "+//meterBandDscp.pad
- "FF FF "+//meterBandExperimenter.type
- "00 10 "+//meterBandExperimenter.len
- "00 00 00 11 "+//meterBandExperimenter.rate
- "00 00 00 20 "+//meterBandExperimenter.burstSize
- "00 00 00 04"//meterBandExperimenter.experimenter
- );
+ "00 00 00");//meterBandDscp.pad
MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());
Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
-
- MeterBandExperimenterCase experimenterCase = (MeterBandExperimenterCase) message.getMeterConfig().get(0).getBands().get(2).getMeterBand();
- MeterBandExperimenter meterBandExperimenter = experimenterCase.getMeterBandExperimenter();
- Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue());
- Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());
- Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());
- Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());
}
/**
@Test
public void testMultipartReplyMeterConfigBodyMulti(){
ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
- "00 38 "+//len
+ "00 28 "+//len
"00 06 "+//flags
"00 00 00 09 "+//meterId
"00 01 "+//meterBandDrop.type
"00 00 00 20 "+//meterBandDscp.burstSize
"04 "+//meterBandDscp.precLevel
"00 00 00 "+//meterBandDscp.pad
- "FF FF "+//meterBandExperimenter.type
- "00 10 "+//meterBandExperimenter.len
- "00 00 00 11 "+//meterBandExperimenter.rate
- "00 00 00 20 "+//meterBandExperimenter.burstSize
- "00 00 00 04 "+//meterBandExperimenter.experimenter
"00 18 "+//len01
"00 03 "+//flags01
Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
- MeterBandExperimenterCase experimenterCase = (MeterBandExperimenterCase) message.getMeterConfig().get(0).getBands().get(2).getMeterBand();
- MeterBandExperimenter meterBandExperimenter = experimenterCase.getMeterBandExperimenter();
- Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue());
- Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());
- Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());
- Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());
-
LOGGER.info(message.getMeterConfig().get(0).getFlags().toString());
Assert.assertEquals("Wrong flags01", new MeterFlags(false, true, true, false),
message.getMeterConfig().get(1).getFlags());
Assert.assertEquals("Wrong meterBandDscp01.precLevel", 4, meterBandDscp01.getPrecLevel().intValue());
}
-
- /**
- * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
- */
- @Test
- public void testMultipartReplyExperimenterBody(){
- ByteBuf bb = BufferHelper.buildBuffer("FF FF 00 01 00 00 00 00 "+
- "00 00 00 0F "+//experimenterId
- "00 00 00 FF "+//expType
- "00 00 01 01 00 00 01 01"
- );
-
- MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
-
- BufferHelper.checkHeaderV13(builtByFactory);
- Assert.assertEquals("Wrong type", 0xFFFF, builtByFactory.getType().getIntValue());
- Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
- MultipartReplyExperimenterCase messageCase = (MultipartReplyExperimenterCase) builtByFactory.getMultipartReplyBody();
- MultipartReplyExperimenter message = messageCase.getMultipartReplyExperimenter();
- Assert.assertEquals("Wrong experimenterId", 15, message.getExperimenter().intValue());
- Assert.assertEquals("Wrong expType", 255, message.getExpType().intValue());
- Assert.assertArrayEquals("Wrong data", new byte[]{0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01},
- message.getData());
- }
-
+
/**
* Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
*/