<groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
<artifactId>openflow-protocol-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-common-netty</artifactId>
+ </dependency>
</dependencies>
</project>
* 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.openflowplugin.extension.onf;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
+import org.opendaylight.yangtools.yang.common.Uint32;
+
/**
* Stores common constants for ONF approved extensions.
*/
public interface OnfConstants {
+ /**
+ * Experimenter ID of ONF approved extensions.
+ */
+ long ONF_EXPERIMENTER_ID_LONG = 0x4F4E4600;
- /** Experimenter ID of ONF approved extensions. */
- long ONF_EXPERIMENTER_ID = 0x4F4E4600;
+ /**
+ * Experimenter ID of ONF approved extensions.
+ */
+ ExperimenterId ONF_EXPERIMENTER_ID = new ExperimenterId(Uint32.valueOf(ONF_EXPERIMENTER_ID_LONG).intern());
- /** ONF_ET_BUNDLE_CONTROL message type. */
+ /**
+ * ONF_ET_BUNDLE_CONTROL message type.
+ */
int ONF_ET_BUNDLE_CONTROL = 2300;
- /** ONF_ET_BUNDLE_ADD_MESSAGE message type. */
+ /**
+ * ONF_ET_BUNDLE_ADD_MESSAGE message type.
+ */
int ONF_ET_BUNDLE_ADD_MESSAGE = 2301;
}
private void registerSerializers() {
switchConnectionProvider.registerExperimenterMessageSerializer(
new ExperimenterIdTypeSerializerKey<>(OFConstants.OFP_VERSION_1_3,
- OnfConstants.ONF_EXPERIMENTER_ID,
+ OnfConstants.ONF_EXPERIMENTER_ID_LONG,
OnfConstants.ONF_ET_BUNDLE_CONTROL,
ExperimenterDataOfChoice.class),
new BundleControlFactory());
switchConnectionProvider.registerExperimenterMessageSerializer(
new ExperimenterIdTypeSerializerKey<>(OFConstants.OFP_VERSION_1_3,
- OnfConstants.ONF_EXPERIMENTER_ID,
+ OnfConstants.ONF_EXPERIMENTER_ID_LONG,
OnfConstants.ONF_ET_BUNDLE_ADD_MESSAGE,
ExperimenterDataOfChoice.class),
new BundleAddMessageFactory());
private void registerDeserializers() {
switchConnectionProvider.registerExperimenterMessageDeserializer(
new ExperimenterIdTypeDeserializerKey(OFConstants.OFP_VERSION_1_3,
- OnfConstants.ONF_EXPERIMENTER_ID,
+ OnfConstants.ONF_EXPERIMENTER_ID_LONG,
OnfConstants.ONF_ET_BUNDLE_CONTROL,
ExperimenterDataOfChoice.class),
new org.opendaylight.openflowplugin.extension.onf.deserializer.BundleControlFactory());
switchConnectionProvider.registerErrorDeserializer(
new ExperimenterIdDeserializerKey(OFConstants.OFP_VERSION_1_3,
- OnfConstants.ONF_EXPERIMENTER_ID,
+ OnfConstants.ONF_EXPERIMENTER_ID_LONG,
ErrorMessage.class),
new OnfExperimenterErrorFactory());
}
private static final ConvertorExecutor CONVERTER_EXECUTOR = ConvertorManagerFactory.createDefaultManager();
@Override
- public BundleAddMessageOnf convert(BundleAddMessageSal experimenterMessageCase,
- ExtensionConvertorData extensionData) throws ConversionException {
+ public BundleAddMessageOnf convert(final BundleAddMessageSal experimenterMessageCase,
+ final ExtensionConvertorData extensionData) throws ConversionException {
final OnfAddMessageGroupingDataBuilder dataBuilder = new OnfAddMessageGroupingDataBuilder();
dataBuilder.setBundleId(experimenterMessageCase.getSalAddMessageData().getBundleId());
dataBuilder.setFlags(experimenterMessageCase.getSalAddMessageData().getFlags());
@Override
public ExperimenterId getExperimenterId() {
- return new ExperimenterId(OnfConstants.ONF_EXPERIMENTER_ID);
+ return OnfConstants.ONF_EXPERIMENTER_ID;
}
@Override
* 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.openflowplugin.extension.onf.converter;
import org.opendaylight.openflowplugin.extension.api.ConverterMessageToOFJava;
public class BundleControlConverter implements
ConverterMessageToOFJava<BundleControlSal, BundleControlOnf, ExtensionConvertorData>,
ConvertorMessageFromOFJava<BundleControlOnf, MessagePath> {
-
private static final Logger LOG = LoggerFactory.getLogger(BundleControlConverter.class);
@Override
public BundleControlOnf convert(final BundleControlSal experimenterMessageCase, final ExtensionConvertorData data) {
LOG.trace("Converting the bundle control message for device {} with xid {} and type {}",
- data.getDatapathId(), data.getXid(), experimenterMessageCase.getSalControlData().getType());
+ data.getDatapathId(), data.getXid(), experimenterMessageCase.getSalControlData().getType());
return new BundleControlOnfBuilder().setOnfControlGroupingData(
- new OnfControlGroupingDataBuilder(experimenterMessageCase.getSalControlData()).build()).build();
+ new OnfControlGroupingDataBuilder(experimenterMessageCase.getSalControlData()).build()).build();
}
@Override
- public BundleControlSal convert(BundleControlOnf input, MessagePath path) {
+ public BundleControlSal convert(final BundleControlOnf input, final MessagePath path) {
return new BundleControlSalBuilder()
- .setSalControlData(
- new SalControlDataBuilder(input.getOnfControlGroupingData()).build()
- )
- .build();
+ .setSalControlData(new SalControlDataBuilder(input.getOnfControlGroupingData()).build())
+ .build();
}
@Override
public ExperimenterId getExperimenterId() {
- return new ExperimenterId(OnfConstants.ONF_EXPERIMENTER_ID);
+ return OnfConstants.ONF_EXPERIMENTER_ID;
}
@Override
* 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.openflowplugin.extension.onf.deserializer;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.BundleControlOnf;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.BundleControlOnfBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.bundle.control.onf.OnfControlGroupingDataBuilder;
+import org.opendaylight.yangtools.yang.common.Uint32;
/**
* Translates BundleControl messages (OpenFlow v1.3 extension #230).
private DeserializerRegistry deserializerRegistry;
@Override
- public BundleControlOnf deserialize(ByteBuf message) {
- BundleId bundleId = new BundleId(message.readUnsignedInt());
+ public BundleControlOnf deserialize(final ByteBuf message) {
+ BundleId bundleId = new BundleId(readUint32(message));
BundleControlType type = BundleControlType.forValue(message.readUnsignedShort());
BundleFlags flags = createBundleFlags(message.readUnsignedShort());
OnfControlGroupingDataBuilder builder = new OnfControlGroupingDataBuilder();
private BundleProperty createExperimenterBundleProperty(final int length, final ByteBuf message) {
Objects.requireNonNull(deserializerRegistry);
- BundlePropertyExperimenterBuilder experimenterProperty = new BundlePropertyExperimenterBuilder();
- long experimenterId = message.readUnsignedInt();
- long expType = message.readUnsignedInt();
- experimenterProperty.setExperimenter(new ExperimenterId(experimenterId));
- experimenterProperty.setExpType(expType);
+ final Uint32 experimenterId = readUint32(message);
+ final Uint32 expType = readUint32(message);
+
+ final BundlePropertyExperimenterBuilder experimenterProperty = new BundlePropertyExperimenterBuilder()
+ .setExperimenter(new ExperimenterId(experimenterId))
+ .setExpType(expType);
OFDeserializer<BundlePropertyExperimenterData> deserializer = deserializerRegistry.getDeserializer(
- new ExperimenterIdTypeDeserializerKey(EncodeConstants.OF13_VERSION_ID, experimenterId, expType,
- BundlePropertyExperimenterData.class));
+ new ExperimenterIdTypeDeserializerKey(EncodeConstants.OF13_VERSION_ID, experimenterId.toJava(),
+ expType.toJava(), BundlePropertyExperimenterData.class));
experimenterProperty.setBundlePropertyExperimenterData(
deserializer.deserialize(message.readBytes(length - 12)));
}
@Override
- public void injectDeserializerRegistry(DeserializerRegistry registry) {
+ public void injectDeserializerRegistry(final DeserializerRegistry registry) {
this.deserializerRegistry = registry;
}
*/
package org.opendaylight.openflowplugin.extension.onf.deserializer;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import io.netty.buffer.ByteBuf;
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.protocol.rev130731.ErrorMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.OnfExperimenterErrorCode;
+import org.opendaylight.yangtools.yang.common.Uint16;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final String UNKNOWN_CODE = "UNKNOWN_CODE";
@Override
- public ErrorMessage deserialize(ByteBuf message) {
+ public ErrorMessage deserialize(final ByteBuf message) {
ErrorMessageBuilder builder = new ErrorMessageBuilder();
builder.setVersion(EncodeConstants.OF_VERSION_1_3);
- builder.setXid(message.readUnsignedInt());
+ builder.setXid(readUint32(message));
- int type = message.readUnsignedShort();
- ErrorType errorType = ErrorType.forValue(type);
+ final Uint16 type = readUint16(message);
+ ErrorType errorType = ErrorType.forValue(type.toJava());
if (errorType != null && errorType.equals(ErrorType.EXPERIMENTER)) {
- builder.setType(errorType.getIntValue());
+ builder.setType(type);
builder.setTypeString(errorType.getName());
} else {
LOG.warn("Deserializing other than {} error message with {}", ErrorType.EXPERIMENTER.getName(),
builder.setTypeString(UNKNOWN_TYPE);
}
- int code = message.readUnsignedShort();
- OnfExperimenterErrorCode errorCode = OnfExperimenterErrorCode.forValue(code);
+ final Uint16 code = readUint16(message);
+ OnfExperimenterErrorCode errorCode = OnfExperimenterErrorCode.forValue(code.toJava());
if (errorCode != null) {
- builder.setCode(errorCode.getIntValue());
+ builder.setCode(code);
builder.setCodeString(errorCode.getName());
} else {
builder.setCode(code);
}
builder.addAugmentation(new ExperimenterIdErrorBuilder()
- .setExperimenter(new ExperimenterId(message.readUnsignedInt()))
+ .setExperimenter(new ExperimenterId(readUint32(message)))
.build());
if (message.readableBytes() > 0) {
import static org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil.extractDatapathId;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import org.junit.Assert;
import org.junit.Before;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.BundleAddMessageOnf;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
import org.opendaylight.yangtools.yang.common.Uint32;
/**
@Test
public void testConvertUpdatePortCase() throws Exception {
testConvert(new BundleUpdatePortCaseBuilder()
- .setUpdatePortCaseData(new UpdatePortCaseDataBuilder()
+ .setUpdatePortCaseData(new UpdatePortCaseDataBuilder()
.setPort(new PortBuilder()
- .setPort(Collections.singletonList(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow
- .types.port.rev130925.port.mod.port.PortBuilder()
- .setConfiguration(Mockito.mock(PortConfig.class))
- .setAdvertisedFeatures(Mockito.mock(PortFeatures.class))
- .setPortNumber(new PortNumberUni(Uint32.ZERO))
- .setHardwareAddress(Mockito.mock(MacAddress.class))
- .withKey(new PortKey(Uint32.ZERO))
- .build()))
- .build()).build())
- .build(), BundlePortModCase.class);
+ .setPort(BindingMap.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925
+ .port.mod.port.PortBuilder()
+ .setConfiguration(Mockito.mock(PortConfig.class))
+ .setAdvertisedFeatures(Mockito.mock(PortFeatures.class))
+ .setPortNumber(new PortNumberUni(Uint32.ZERO))
+ .setHardwareAddress(Mockito.mock(MacAddress.class))
+ .withKey(new PortKey(Uint32.ZERO))
+ .build()))
+ .build()).build())
+ .build(), BundlePortModCase.class);
}
private void testConvert(final BundleInnerMessage message, final Class<? extends DataObject> clazz)
return new BundleAddMessageSalBuilder().setSalAddMessageData(dataBuilder.build()).build();
}
-
}
* 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.openflowplugin.impl.protocol.deserialization.messages;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import io.netty.buffer.ByteBuf;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
public class AsyncConfigMessageDeserializer implements OFDeserializer<AsyncConfigMessage> {
@Override
- public AsyncConfigMessage deserialize(ByteBuf message) {
+ public AsyncConfigMessage deserialize(final ByteBuf message) {
return new AsyncConfigMessageBuilder()
- .setVersion(EncodeConstants.OF_VERSION_1_3)
- .setXid(message.readUnsignedInt())
- .setPacketInMask(new PacketInMaskBuilder()
- .setMasterMask(deserializePacketInMask(message))
- .setSlaveMask(deserializePacketInMask(message))
- .build())
- .setPortStatusMask(new PortStatusMaskBuilder()
- .setMasterMask(deserializePortStatusMask(message))
- .setSlaveMask(deserializePortStatusMask(message))
- .build())
- .setFlowRemovedMask(new FlowRemovedMaskBuilder()
- .setMasterMask(deserializeFlowRemovedMask(message))
- .setSlaveMask(deserializeFlowRemovedMask(message))
- .build())
- .build();
+ .setVersion(EncodeConstants.OF_VERSION_1_3)
+ .setXid(readUint32(message))
+ .setPacketInMask(new PacketInMaskBuilder()
+ .setMasterMask(deserializePacketInMask(message))
+ .setSlaveMask(deserializePacketInMask(message))
+ .build())
+ .setPortStatusMask(new PortStatusMaskBuilder()
+ .setMasterMask(deserializePortStatusMask(message))
+ .setSlaveMask(deserializePortStatusMask(message))
+ .build())
+ .setFlowRemovedMask(new FlowRemovedMaskBuilder()
+ .setMasterMask(deserializeFlowRemovedMask(message))
+ .setSlaveMask(deserializeFlowRemovedMask(message))
+ .build())
+ .build();
}
private static PacketInMask deserializePacketInMask(final ByteBuf byteBuf) {
final long mask = byteBuf.readUnsignedInt();
- final boolean isNoMatch = (mask & (1)) != 0;
- final boolean isAction = (mask & (1 << 1)) != 0;
- final boolean isInvalidTtl = (mask & (1 << 2)) != 0;
+ final boolean isNoMatch = (mask & 1) != 0;
+ final boolean isAction = (mask & 1 << 1) != 0;
+ final boolean isInvalidTtl = (mask & 1 << 2) != 0;
return new PacketInMask(isAction, isInvalidTtl, isNoMatch);
}
private static PortStatusMask deserializePortStatusMask(final ByteBuf byteBuf) {
final long mask = byteBuf.readUnsignedInt();
- final boolean isAdd = (mask & (1)) != 0;
- final boolean isDelete = (mask & (1 << 1)) != 0;
- final boolean isModify = (mask & (1 << 2)) != 0;
+ final boolean isAdd = (mask & 1) != 0;
+ final boolean isDelete = (mask & 1 << 1) != 0;
+ final boolean isModify = (mask & 1 << 2) != 0;
return new PortStatusMask(isAdd, isDelete, isModify);
}
private static FlowRemovedMask deserializeFlowRemovedMask(final ByteBuf byteBuf) {
final long mask = byteBuf.readUnsignedInt();
- final boolean isIdleTimeout = (mask & (1)) != 0;
- final boolean isHardTimeout = (mask & (1 << 1)) != 0;
- final boolean isDelete = (mask & (1 << 2)) != 0;
- final boolean isGroupDelete = (mask & (1 << 3)) != 0;
+ final boolean isIdleTimeout = (mask & 1) != 0;
+ final boolean isHardTimeout = (mask & 1 << 1) != 0;
+ final boolean isDelete = (mask & 1 << 2) != 0;
+ final boolean isGroupDelete = (mask & 1 << 3) != 0;
return new FlowRemovedMask(isDelete, isGroupDelete, isHardTimeout, isIdleTimeout);
}
}
\ No newline at end of file
private DeserializerRegistry registry;
@Override
- @SuppressWarnings("checkstyle:LineLength")
- public FlowMessage deserialize(ByteBuf message) {
+ public FlowMessage deserialize(final ByteBuf message) {
final FlowMessageBuilder builder = new FlowMessageBuilder()
.setVersion(EncodeConstants.OF_VERSION_1_3)
.setXid(readUint32(message))
.setHardTimeout(readUint16(message))
.setPriority(readUint16(message))
.setBufferId(readUint32(message))
- .setOutPort(BigInteger.valueOf(message.readUnsignedInt()))
+ .setOutPort(readUint32(message).toUint64())
.setOutGroup(readUint32(message))
.setFlags(createFlowModFlagsFromBitmap(message.readUnsignedShort()));
return builder.build();
}
- private static FlowModFlags createFlowModFlagsFromBitmap(int input) {
+ private static FlowModFlags createFlowModFlagsFromBitmap(final int input) {
final Boolean ofp_FF_SendFlowRem = (input & 1 << 0) != 0;
final Boolean ofp_FF_CheckOverlap = (input & 1 << 1) != 0;
final Boolean ofp_FF_ResetCounts = (input & 1 << 2) != 0;
}
@Override
- public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) {
+ public void injectDeserializerRegistry(final DeserializerRegistry deserializerRegistry) {
registry = deserializerRegistry;
}
-
}
* 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.openflowplugin.impl.protocol.deserialization.messages;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.Comparator;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
import org.opendaylight.yangtools.yang.common.Uint32;
public class GroupMessageDeserializer implements OFDeserializer<GroupMessage>, DeserializerRegistryInjector {
public GroupMessage deserialize(final ByteBuf message) {
final GroupMessageBuilder builder = new GroupMessageBuilder()
.setVersion(EncodeConstants.OF_VERSION_1_3)
- .setXid(message.readUnsignedInt())
+ .setXid(readUint32(message))
.setCommand(GroupModCommand.forValue(message.readUnsignedShort()));
builder.setGroupType(GroupTypes.forValue(message.readUnsignedByte()));
message.skipBytes(PADDING);
- builder.setGroupId(new GroupId(message.readUnsignedInt()));
+ builder.setGroupId(new GroupId(readUint32(message)));
final List<Bucket> buckets = new ArrayList<>();
final int length = message.readUnsignedShort();
final BucketBuilder bucket = new BucketBuilder()
- .setWeight(message.readUnsignedShort())
- .setWatchPort(message.readUnsignedInt())
- .setWatchGroup(message.readUnsignedInt());
+ .setWeight(readUint16(message))
+ .setWatchPort(readUint32(message))
+ .setWatchGroup(readUint32(message));
message.skipBytes(PADDING_IN_BUCKETS_HEADER);
if (message.readableBytes() > 0) {
- final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list
- .Action> actions = new ArrayList<>();
+ final var actions = BindingMap.<
+ org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey,
+ org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>
+ orderedBuilder();
final int startIndex = message.readerIndex();
final int bucketLength = length - BUCKETS_HEADER_LENGTH;
int offset = 0;
offset++;
}
- bucket.setAction(actions);
+ bucket.setAction(actions.build());
}
buckets.add(bucket.setBucketId(new BucketId(Uint32.valueOf(buckets.size()))).build());
buckets.sort(COMPARATOR);
return builder
.setBuckets(new BucketsBuilder()
- .setBucket(buckets)
+ .setBucket(BindingMap.ordered(buckets))
.build())
.build();
}
* 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.openflowplugin.impl.protocol.deserialization.messages;
+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;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap.Builder;
public class MeterMessageDeserializer implements OFDeserializer<MeterMessage>, DeserializerRegistryInjector {
- private static final Logger LOG = LoggerFactory.getLogger(MeterMessageDeserializer.class);
private static final int OFPMBTDROP = 1;
private static final int OFPMBTDSCP = 2;
private static final int OFPMBTEXPERIMENTER = 0xFFFF;
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;
+
+ private DeserializerRegistry registry = null;
@Override
- public MeterMessage deserialize(ByteBuf message) {
+ public MeterMessage deserialize(final ByteBuf message) {
final MeterMessageBuilder builder = new MeterMessageBuilder()
.setVersion(EncodeConstants.OF_VERSION_1_3)
- .setXid(message.readUnsignedInt())
+ .setXid(readUint32(message))
.setCommand(MeterModCommand.forValue(message.readUnsignedShort()))
.setFlags(readMeterFlags(message))
- .setMeterId(new MeterId(message.readUnsignedInt()));
+ .setMeterId(new MeterId(readUint32(message)));
- final List<MeterBandHeader> bands = new ArrayList<>();
+ final Builder<MeterBandHeaderKey, MeterBandHeader> bands = BindingMap.orderedBuilder();
long key = 0;
while (message.readableBytes() > 0) {
.setFlags(new MeterBandType(true, false, false))
.build())
.setBandType(new DropBuilder()
- .setDropRate(message.readUnsignedInt())
- .setDropBurstSize(message.readUnsignedInt())
+ .setDropRate(readUint32(message))
+ .setDropBurstSize(readUint32(message))
.build());
message.skipBytes(PADDING_IN_METER_BAND_DROP_HEADER);
break;
.setFlags(new MeterBandType(false, true, false))
.build())
.setBandType(new DscpRemarkBuilder()
- .setDscpRemarkRate(message.readUnsignedInt())
- .setDscpRemarkBurstSize(message.readUnsignedInt())
- .setPrecLevel(message.readUnsignedByte())
+ .setDscpRemarkRate(readUint32(message))
+ .setDscpRemarkBurstSize(readUint32(message))
+ .setPrecLevel(readUint8(message))
.build());
message.skipBytes(PADDING_IN_METER_BAND_DSCP_HEADER);
break;
// no operation
}
- bands.add(bandBuilder.withKey(new MeterBandHeaderKey(new BandId(key++))).build());
+ bands.add(bandBuilder.setBandId(new BandId(key++)).build());
}
return builder
.setMeterBandHeaders(new MeterBandHeadersBuilder()
- .setMeterBandHeader(bands)
+ .setMeterBandHeader(bands.build())
.build())
.build();
}
@Override
- public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) {
- registry = deserializerRegistry;
+ public void injectDeserializerRegistry(final DeserializerRegistry deserializerRegistry) {
+ registry = requireNonNull(deserializerRegistry);
}
- private static MeterFlags readMeterFlags(ByteBuf message) {
+ private static MeterFlags readMeterFlags(final ByteBuf message) {
int input = message.readUnsignedShort();
- final Boolean mfKbps = (input & (1)) != 0;
- final Boolean mfPktps = (input & (1 << 1)) != 0;
- final Boolean mfBurst = (input & (1 << 2)) != 0;
- final Boolean mfStats = (input & (1 << 3)) != 0;
+ final Boolean mfKbps = (input & 1) != 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);
}
-
}
* 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.openflowplugin.impl.protocol.deserialization.messages;
-import com.google.common.base.Preconditions;
+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.readUint64;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
+
import io.netty.buffer.ByteBuf;
-import java.math.BigInteger;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@Override
public PacketInMessage deserialize(final ByteBuf message) {
final PacketInMessageBuilder packetInMessageBuilder = new PacketInMessageBuilder()
- .setVersion(EncodeConstants.OF_VERSION_1_3)
- .setXid(message.readUnsignedInt());
+ .setVersion(EncodeConstants.OF_VERSION_1_3)
+ .setXid(readUint32(message));
// We are ignoring buffer id and total len as it is not specified in OpenFlowPlugin models
message.readUnsignedInt();
message.readUnsignedShort();
packetInMessageBuilder
- .setPacketInReason(PacketInUtil
- .getMdSalPacketInReason(PacketInReason
- .forValue(message.readUnsignedByte())))
- .setTableId(new TableId(message.readUnsignedByte()));
-
- final byte[] cookie = new byte[Long.BYTES];
- message.readBytes(cookie);
-
- packetInMessageBuilder
- .setFlowCookie(new FlowCookie(new BigInteger(1, cookie)));
+ .setPacketInReason(PacketInUtil.getMdSalPacketInReason(PacketInReason.forValue(message.readUnsignedByte())))
+ .setTableId(new TableId(readUint8(message)))
+ .setFlowCookie(new FlowCookie(readUint64(message)));
- final OFDeserializer<Match> matchDeserializer = Preconditions.checkNotNull(registry).getDeserializer(MATCH_KEY);
+ final OFDeserializer<Match> matchDeserializer = requireNonNull(registry).getDeserializer(MATCH_KEY);
packetInMessageBuilder.setMatch(MatchUtil.transformMatch(matchDeserializer.deserialize(message),
- org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.in.message
- .Match.class));
+ org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.in.message.Match.class));
message.skipBytes(PADDING_IN_PACKET_IN_HEADER);
final byte[] data = new byte[message.readableBytes()];
*/
package org.opendaylight.openflowplugin.impl.protocol.deserialization.messages;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import io.netty.buffer.ByteBuf;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortNumberUni;
-import org.opendaylight.yangtools.yang.common.Uint32;
public class PortMessageDeserializer implements OFDeserializer<PortMessage> {
public PortMessage deserialize(final ByteBuf message) {
final PortMessageBuilder builder = new PortMessageBuilder()
.setVersion(EncodeConstants.OF_VERSION_1_3)
- .setXid(message.readUnsignedInt())
- .setPortNumber(new PortNumberUni(Uint32.valueOf(message.readUnsignedInt())));
+ .setXid(readUint32(message))
+ .setPortNumber(new PortNumberUni(readUint32(message)));
message.skipBytes(PADDING_IN_PORT_MOD_MESSAGE_1);
builder.setHardwareAddress(ByteBufUtils.readIetfMacAddress(message));
*/
package org.opendaylight.openflowplugin.impl.protocol.deserialization.multipart;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.List;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectLiveness;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight;
import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
-import org.opendaylight.yangtools.yang.common.Uint32;
public class MultipartReplyGroupFeaturesDeserializer implements OFDeserializer<MultipartReplyBody> {
-
private static final int GROUP_TYPES = 4;
@Override
return builder
.setGroupTypesSupported(readGroupTypes(message))
.setGroupCapabilitiesSupported(readGroupCapabilities(message))
- .setMaxGroups(IntStream
- .range(0, GROUP_TYPES)
- .mapToObj(i -> Uint32.valueOf(message.readUnsignedInt()))
- .collect(Collectors.toList()))
- .setActions(IntStream
- .range(0, GROUP_TYPES)
- .mapToObj(i -> Uint32.valueOf(message.readUnsignedInt()))
- .collect(Collectors.toList()))
+ .setMaxGroups(IntStream.range(0, GROUP_TYPES)
+ .mapToObj(i -> readUint32(message))
+ .collect(Collectors.toList()))
+ .setActions(IntStream.range(0, GROUP_TYPES)
+ .mapToObj(i -> readUint32(message))
+ .collect(Collectors.toList()))
.build();
}
return groupTypes;
}
-
}
* 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.openflowplugin.impl.protocol.deserialization.multipart;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.List;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.multipart.reply.multipart.reply.body.multipart.reply.port.desc.Ports;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.multipart.reply.multipart.reply.body.multipart.reply.port.desc.PortsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
-import org.opendaylight.yangtools.yang.common.Uint32;
public class MultipartReplyPortDescDeserializer implements OFDeserializer<MultipartReplyBody> {
while (message.readableBytes() > 0) {
final PortsBuilder itemBuilder = new PortsBuilder();
- itemBuilder.setPortNumber(new PortNumberUni(Uint32.valueOf(message.readUnsignedInt())));
+ itemBuilder.setPortNumber(new PortNumberUni(readUint32(message)));
message.skipBytes(PADDING_IN_PORT_DESC_HEADER_01);
itemBuilder.setHardwareAddress(ByteBufUtils.readIetfMacAddress(message));
message.skipBytes(PADDING_IN_PORT_DESC_HEADER_02);
.setAdvertisedFeatures(readPortFeatures(message))
.setSupported(readPortFeatures(message))
.setPeerFeatures(readPortFeatures(message))
- .setCurrentSpeed(message.readUnsignedInt())
- .setMaximumSpeed(message.readUnsignedInt())
+ .setCurrentSpeed(readUint32(message))
+ .setMaximumSpeed(readUint32(message))
.build());
}
int nextTableLength = length;
while (nextTableLength > 0) {
- tableIds.add(Uint8.valueOf(message.readUnsignedByte()));
+ tableIds.add(readUint8(message));
nextTableLength -= 1;
}