use of org.opendaylight.openflowplugin.impl.protocol.deserialization.key.MessageCodeActionExperimenterKey in project openflowplugin by opendaylight.
the class FlowMessageDeserializer method deserialize.
@Override
@SuppressWarnings("checkstyle:LineLength")
public FlowMessage deserialize(ByteBuf message) {
final FlowMessageBuilder builder = new FlowMessageBuilder().setVersion((short) EncodeConstants.OF13_VERSION_ID).setXid(message.readUnsignedInt()).setCookie(new FlowCookie(BigInteger.valueOf(message.readLong()))).setCookieMask(new FlowCookie(BigInteger.valueOf(message.readLong()))).setTableId(message.readUnsignedByte()).setCommand(FlowModCommand.forValue(message.readUnsignedByte())).setIdleTimeout(message.readUnsignedShort()).setHardTimeout(message.readUnsignedShort()).setPriority(message.readUnsignedShort()).setBufferId(message.readUnsignedInt()).setOutPort(BigInteger.valueOf(message.readUnsignedInt())).setOutGroup(message.readUnsignedInt()).setFlags(createFlowModFlagsFromBitmap(message.readUnsignedShort()));
message.skipBytes(PADDING);
final OFDeserializer<Match> matchDeserializer = Preconditions.checkNotNull(registry).getDeserializer(MATCH_KEY);
builder.setMatch(new MatchBuilder(matchDeserializer.deserialize(message)).build());
final int length = message.readableBytes();
if (length > 0) {
final List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> instructions = new ArrayList<>();
final int startIndex = message.readerIndex();
int offset = 0;
while (message.readerIndex() - startIndex < length) {
final int type = message.getUnsignedShort(message.readerIndex());
OFDeserializer<Instruction> deserializer = null;
if (InstructionConstants.APPLY_ACTIONS_TYPE == type) {
deserializer = Preconditions.checkNotNull(registry).getDeserializer(new MessageCodeActionExperimenterKey(EncodeConstants.OF13_VERSION_ID, type, Instruction.class, ActionPath.INVENTORY_FLOWNODE_TABLE_APPLY_ACTIONS, null));
} else if (InstructionConstants.WRITE_ACTIONS_TYPE == type) {
deserializer = Preconditions.checkNotNull(registry).getDeserializer(new MessageCodeActionExperimenterKey(EncodeConstants.OF13_VERSION_ID, type, Instruction.class, ActionPath.INVENTORY_FLOWNODE_TABLE_WRITE_ACTIONS, null));
} else {
Long expId = null;
if (EncodeConstants.EXPERIMENTER_VALUE == type) {
expId = message.getUnsignedInt(message.readerIndex() + 2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
}
deserializer = Preconditions.checkNotNull(registry).getDeserializer(new MessageCodeExperimenterKey(EncodeConstants.OF13_VERSION_ID, type, Instruction.class, expId));
}
instructions.add(new InstructionBuilder().setKey(new InstructionKey(offset)).setOrder(offset).setInstruction(deserializer.deserialize(message)).build());
offset++;
}
builder.setInstructions(new InstructionsBuilder().setInstruction(instructions).build());
}
return builder.build();
}
use of org.opendaylight.openflowplugin.impl.protocol.deserialization.key.MessageCodeActionExperimenterKey in project openflowplugin by opendaylight.
the class InstructionUtil method readInstructionHeader.
/**
* Deserialize OpenFlow instruction header.
*
* @param version OpenFlow version
* @param message OpenFlow buffered message
* @param registry deserializer registry
*/
@SuppressWarnings("checkstyle:LineLength")
public static Instruction readInstructionHeader(final short version, final ByteBuf message, final DeserializerRegistry registry) {
final int type = message.getUnsignedShort(message.readerIndex());
final HeaderDeserializer<Instruction> deserializer;
if (InstructionConstants.APPLY_ACTIONS_TYPE == type) {
deserializer = registry.getDeserializer(new MessageCodeActionExperimenterKey(version, type, Instruction.class, ActionPath.INVENTORY_FLOWNODE_TABLE_APPLY_ACTIONS, null));
} else if (InstructionConstants.WRITE_ACTIONS_TYPE == type) {
deserializer = registry.getDeserializer(new MessageCodeActionExperimenterKey(version, type, Instruction.class, ActionPath.INVENTORY_FLOWNODE_TABLE_WRITE_ACTIONS, null));
} else {
Long expId = null;
if (EncodeConstants.EXPERIMENTER_VALUE == type) {
expId = message.getUnsignedInt(message.readerIndex() + 2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
}
deserializer = registry.getDeserializer(new MessageCodeExperimenterKey(version, type, Instruction.class, expId));
}
return deserializer.deserializeHeader(message);
}
use of org.opendaylight.openflowplugin.impl.protocol.deserialization.key.MessageCodeActionExperimenterKey in project openflowplugin by opendaylight.
the class InstructionUtil method readInstruction.
/**
* Deserialize OpenFlow instruction.
*
* @param version OpenFlow version
* @param message OpenFlow buffered message
* @param registry deserializer registry
*/
@SuppressWarnings("checkstyle:LineLength")
public static Instruction readInstruction(final short version, final ByteBuf message, final DeserializerRegistry registry) {
final int type = message.getUnsignedShort(message.readerIndex());
final OFDeserializer<Instruction> deserializer;
if (InstructionConstants.APPLY_ACTIONS_TYPE == type) {
deserializer = registry.getDeserializer(new MessageCodeActionExperimenterKey(version, type, Instruction.class, ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS, null));
} else if (InstructionConstants.WRITE_ACTIONS_TYPE == type) {
deserializer = registry.getDeserializer(new MessageCodeActionExperimenterKey(version, type, Instruction.class, ActionPath.FLOWS_STATISTICS_UPDATE_WRITE_ACTIONS, null));
} else {
Long expId = null;
if (EncodeConstants.EXPERIMENTER_VALUE == type) {
expId = message.getUnsignedInt(message.readerIndex() + 2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
}
deserializer = registry.getDeserializer(new MessageCodeExperimenterKey(version, type, Instruction.class, expId));
}
return deserializer.deserialize(message);
}
Aggregations