X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowjava%2Fopenflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fdeserialization%2Ffactories%2FMeterModInputMessageFactory.java;h=3b24c92f27bebe287099e51b104e4318174eb93a;hb=919b5daac8e0037ad1ce056befc4a1520486d5dc;hp=0196b4b42a412c3ac38347c32168c76ba1016100;hpb=34a07eabaeccb03d834359b99694f79b89e37583;p=openflowplugin.git diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MeterModInputMessageFactory.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MeterModInputMessageFactory.java index 0196b4b42a..3b24c92f27 100644 --- a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MeterModInputMessageFactory.java +++ b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MeterModInputMessageFactory.java @@ -7,6 +7,10 @@ */ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories; +import static java.util.Objects.requireNonNull; +import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32; +import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8; + import io.netty.buffer.ByteBuf; import java.util.ArrayList; import java.util.List; @@ -30,79 +34,81 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder; /** - * @author giuseppex.petralia@intel.com + * Translates MeterModInput messages. * + * @author giuseppex.petralia@intel.com */ public class MeterModInputMessageFactory implements OFDeserializer, DeserializerRegistryInjector { - - private DeserializerRegistry registry; private static final byte PADDING_IN_METER_BAND_DROP_HEADER = 4; private static final byte PADDING_IN_METER_BAND_DSCP_HEADER = 3; + private DeserializerRegistry registry = null; + @Override - public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) { - registry = deserializerRegistry; + public void injectDeserializerRegistry(final DeserializerRegistry deserializerRegistry) { + registry = requireNonNull(deserializerRegistry); } @Override - public MeterModInput deserialize(ByteBuf rawMessage) { - MeterModInputBuilder builder = new MeterModInputBuilder(); - builder.setVersion((short) EncodeConstants.OF13_VERSION_ID); - builder.setXid(rawMessage.readUnsignedInt()); - builder.setCommand(MeterModCommand.forValue(rawMessage.readUnsignedShort())); - builder.setFlags(createMeterFlags(rawMessage.readUnsignedShort())); - builder.setMeterId(new MeterId(rawMessage.readUnsignedInt())); + public MeterModInput deserialize(final ByteBuf rawMessage) { + MeterModInputBuilder builder = new MeterModInputBuilder() + .setVersion(EncodeConstants.OF_VERSION_1_3) + .setXid(readUint32(rawMessage)) + .setCommand(MeterModCommand.forValue(rawMessage.readUnsignedShort())) + .setFlags(createMeterFlags(rawMessage.readUnsignedShort())) + .setMeterId(new MeterId(readUint32(rawMessage))); List bandsList = new ArrayList<>(); while (rawMessage.readableBytes() > 0) { BandsBuilder bandsBuilder = new BandsBuilder(); int bandStartIndex = rawMessage.readerIndex(); int bandType = rawMessage.readUnsignedShort(); switch (bandType) { - case 1: - MeterBandDropCaseBuilder bandDropCaseBuilder = new MeterBandDropCaseBuilder(); - MeterBandDropBuilder bandDropBuilder = new MeterBandDropBuilder(); - bandDropBuilder.setType(MeterBandType.forValue(bandType)); - rawMessage.readUnsignedShort(); - bandDropBuilder.setRate(rawMessage.readUnsignedInt()); - bandDropBuilder.setBurstSize(rawMessage.readUnsignedInt()); - rawMessage.skipBytes(PADDING_IN_METER_BAND_DROP_HEADER); - bandDropCaseBuilder.setMeterBandDrop(bandDropBuilder.build()); - bandsBuilder.setMeterBand(bandDropCaseBuilder.build()); - break; - case 2: - MeterBandDscpRemarkCaseBuilder bandDscpRemarkCaseBuilder = new MeterBandDscpRemarkCaseBuilder(); - MeterBandDscpRemarkBuilder bandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder(); - bandDscpRemarkBuilder.setType(MeterBandType.forValue(bandType)); - rawMessage.readUnsignedShort(); - bandDscpRemarkBuilder.setRate(rawMessage.readUnsignedInt()); - bandDscpRemarkBuilder.setBurstSize(rawMessage.readUnsignedInt()); - bandDscpRemarkBuilder.setPrecLevel(rawMessage.readUnsignedByte()); - rawMessage.skipBytes(PADDING_IN_METER_BAND_DSCP_HEADER); - bandDscpRemarkCaseBuilder.setMeterBandDscpRemark(bandDscpRemarkBuilder.build()); - bandsBuilder.setMeterBand(bandDscpRemarkCaseBuilder.build()); - break; - case 0xFFFF: - long expId = rawMessage - .getUnsignedInt(rawMessage.readerIndex() + 2 * EncodeConstants.SIZE_OF_INT_IN_BYTES); - rawMessage.readerIndex(bandStartIndex); - OFDeserializer deserializer = registry - .getDeserializer(ExperimenterDeserializerKeyFactory - .createMeterBandDeserializerKey(EncodeConstants.OF13_VERSION_ID, expId)); - bandsBuilder.setMeterBand(deserializer.deserialize(rawMessage)); - break; + case 1: + rawMessage.readUnsignedShort(); + MeterBandDropBuilder bandDropBuilder = new MeterBandDropBuilder() + .setType(MeterBandType.forValue(bandType)) + .setRate(readUint32(rawMessage)) + .setBurstSize(readUint32(rawMessage)); + rawMessage.skipBytes(PADDING_IN_METER_BAND_DROP_HEADER); + + bandsBuilder.setMeterBand(new MeterBandDropCaseBuilder() + .setMeterBandDrop(bandDropBuilder.build()) + .build()); + break; + case 2: + rawMessage.readUnsignedShort(); + MeterBandDscpRemarkBuilder bandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder() + .setType(MeterBandType.forValue(bandType)) + .setRate(readUint32(rawMessage)) + .setBurstSize(readUint32(rawMessage)) + .setPrecLevel(readUint8(rawMessage)); + rawMessage.skipBytes(PADDING_IN_METER_BAND_DSCP_HEADER); + bandsBuilder.setMeterBand(new MeterBandDscpRemarkCaseBuilder() + .setMeterBandDscpRemark(bandDscpRemarkBuilder.build()) + .build()); + break; + case 0xFFFF: + long expId = rawMessage.getUnsignedInt(rawMessage.readerIndex() + 2 * Integer.BYTES); + rawMessage.readerIndex(bandStartIndex); + OFDeserializer deserializer = registry + .getDeserializer(ExperimenterDeserializerKeyFactory + .createMeterBandDeserializerKey(EncodeConstants.OF13_VERSION_ID, expId)); + bandsBuilder.setMeterBand(deserializer.deserialize(rawMessage)); + break; + default: + break; } bandsList.add(bandsBuilder.build()); } - builder.setBands(bandsList); - return builder.build(); + return builder.setBands(bandsList).build(); } - private static MeterFlags createMeterFlags(int input) { - final Boolean mfKBPS = (input & (1 << 0)) != 0; - final Boolean mfPKTPS = (input & (1 << 1)) != 0; - final Boolean mfBURST = (input & (1 << 2)) != 0; - final Boolean mfSTATS = (input & (1 << 3)) != 0; + @SuppressWarnings("checkstyle:AbbreviationAsWordInName") + private static MeterFlags createMeterFlags(final int input) { + final Boolean mfKBPS = (input & 1 << 0) != 0; + final Boolean mfPKTPS = (input & 1 << 1) != 0; + final Boolean mfBURST = (input & 1 << 2) != 0; + final Boolean mfSTATS = (input & 1 << 3) != 0; return new MeterFlags(mfBURST, mfKBPS, mfPKTPS, mfSTATS); } - }