X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fserialization%2Ffactories%2FMeterModInputMessageFactory.java;h=770c0cfd18fb7e226e9d248fdc12e4dfaf7bae43;hb=29a2a074c78708f6d18583779ece96bb6573f0c6;hp=53fae7bf8889cdcc52553fd2a0574b16dce9653a;hpb=ebf47cd0d6d631abe330c431c083627a5d579add;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MeterModInputMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MeterModInputMessageFactory.java index 53fae7bf..770c0cfd 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MeterModInputMessageFactory.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MeterModInputMessageFactory.java @@ -10,16 +10,15 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories; import io.netty.buffer.ByteBuf; -import java.util.HashMap; import java.util.List; -import java.util.Map; -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.impl.util.ByteBufUtils; -import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants; +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.rev150225.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; @@ -38,16 +37,16 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 * @author michal.polkorab */ public class MeterModInputMessageFactory implements OFSerializer, - SerializerRegistryInjector { - + SerializerRegistryInjector { + private static final byte MESSAGE_TYPE = 29; private static final short LENGTH_OF_METER_BANDS = 16; private static final short PADDING_IN_METER_BAND_DROP = 4; private static final short PADDING_IN_METER_BAND_DSCP_REMARK = 3; - private SerializerRegistry registry; + private SerializerRegistry registry; @Override - public void serialize(MeterModInput message, ByteBuf outBuffer) { + public void serialize(final MeterModInput message, final ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeShort(message.getCommand().getIntValue()); outBuffer.writeShort(createMeterFlagsBitmask(message.getFlags())); @@ -56,19 +55,15 @@ public class MeterModInputMessageFactory implements OFSerializer, ByteBufUtils.updateOFHeaderLength(outBuffer); } - private static int createMeterFlagsBitmask(MeterFlags flags) { - int meterFlagBitmask = 0; - Map meterModFlagsMap = new HashMap<>(); - meterModFlagsMap.put(0, flags.isOFPMFKBPS()); - meterModFlagsMap.put(1, flags.isOFPMFPKTPS()); - meterModFlagsMap.put(2, flags.isOFPMFBURST()); - meterModFlagsMap.put(3, flags.isOFPMFSTATS()); - - meterFlagBitmask = ByteBufUtils.fillBitMaskFromMap(meterModFlagsMap); - return meterFlagBitmask; + private static int createMeterFlagsBitmask(final MeterFlags flags) { + return ByteBufUtils.fillBitMask(0, + flags.isOFPMFKBPS(), + flags.isOFPMFPKTPS(), + flags.isOFPMFBURST(), + flags.isOFPMFSTATS()); } - - private void serializeBands(List bands, ByteBuf outBuffer) { + + private void serializeBands(final List bands, final ByteBuf outBuffer) { if (bands != null) { for (Bands currentBand : bands) { MeterBand meterBand = currentBand.getMeterBand(); @@ -76,34 +71,36 @@ public class MeterModInputMessageFactory implements OFSerializer, MeterBandDropCase dropBandCase = (MeterBandDropCase) meterBand; MeterBandDrop dropBand = dropBandCase.getMeterBandDrop(); writeBandCommonFields(dropBand, outBuffer); - ByteBufUtils.padBuffer(PADDING_IN_METER_BAND_DROP, outBuffer); + outBuffer.writeZero(PADDING_IN_METER_BAND_DROP); } else if (meterBand instanceof MeterBandDscpRemarkCase) { MeterBandDscpRemarkCase dscpRemarkBandCase = (MeterBandDscpRemarkCase) meterBand; MeterBandDscpRemark dscpRemarkBand = dscpRemarkBandCase.getMeterBandDscpRemark(); writeBandCommonFields(dscpRemarkBand, outBuffer); outBuffer.writeByte(dscpRemarkBand.getPrecLevel()); - ByteBufUtils.padBuffer(PADDING_IN_METER_BAND_DSCP_REMARK, outBuffer); + outBuffer.writeZero(PADDING_IN_METER_BAND_DSCP_REMARK); } else if (meterBand instanceof MeterBandExperimenterCase) { - OFSerializer 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 serializer = registry.getSerializer( + ExperimenterSerializerKeyFactory.createMeterBandSerializerKey( + EncodeConstants.OF13_VERSION_ID, expId)); + serializer.serialize(experimenterBandCase, outBuffer); } } } } - - private static void writeBandCommonFields(MeterBandCommons meterBand, ByteBuf outBuffer) { + + private static void writeBandCommonFields(final MeterBandCommons meterBand, final ByteBuf outBuffer) { outBuffer.writeShort(meterBand.getType().getIntValue()); outBuffer.writeShort(LENGTH_OF_METER_BANDS); outBuffer.writeInt(meterBand.getRate().intValue()); outBuffer.writeInt(meterBand.getBurstSize().intValue()); } - @Override - public void injectSerializerRegistry(SerializerRegistry serializerRegistry) { - registry = serializerRegistry; - } - -} + @Override + public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) { + registry = serializerRegistry; + } +} \ No newline at end of file