Example usage for io.netty.buffer ByteBuf readUnsignedInt

List of usage examples for io.netty.buffer ByteBuf readUnsignedInt

Introduction

In this page you can find the example usage for io.netty.buffer ByteBuf readUnsignedInt.

Prototype

public abstract long readUnsignedInt();

Source Link

Document

Gets an unsigned 32-bit integer at the current readerIndex and increases the readerIndex by 4 in this buffer.

Usage

From source file:org.opendaylight.openflowjava.protocol.impl.util.ActionsSerializerTest.java

License:Open Source License

/**
 * Testing correct serialization of actions
 *///from  w w w  . j a  v  a  2  s  .co  m
@Test
public void test() {
    List<Action> actions = new ArrayList<>();
    ActionBuilder actionBuilder = new ActionBuilder();
    actionBuilder.setType(Output.class);
    PortActionBuilder port = new PortActionBuilder();
    port.setPort(new PortNumber(42L));
    actionBuilder.addAugmentation(PortAction.class, port.build());
    MaxLengthActionBuilder maxLen = new MaxLengthActionBuilder();
    maxLen.setMaxLength(52);
    actionBuilder.addAugmentation(MaxLengthAction.class, maxLen.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(CopyTtlOut.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(CopyTtlIn.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetMplsTtl.class);
    MplsTtlActionBuilder mplsTtl = new MplsTtlActionBuilder();
    mplsTtl.setMplsTtl((short) 4);
    actionBuilder.addAugmentation(MplsTtlAction.class, mplsTtl.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(DecMplsTtl.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PushVlan.class);
    EthertypeActionBuilder etherType = new EthertypeActionBuilder();
    etherType.setEthertype(new EtherType(16));
    actionBuilder.addAugmentation(EthertypeAction.class, etherType.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PopVlan.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PushMpls.class);
    etherType = new EthertypeActionBuilder();
    etherType.setEthertype(new EtherType(17));
    actionBuilder.addAugmentation(EthertypeAction.class, etherType.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PopMpls.class);
    etherType = new EthertypeActionBuilder();
    etherType.setEthertype(new EtherType(18));
    actionBuilder.addAugmentation(EthertypeAction.class, etherType.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetQueue.class);
    QueueIdActionBuilder queueId = new QueueIdActionBuilder();
    queueId.setQueueId(1234L);
    actionBuilder.addAugmentation(QueueIdAction.class, queueId.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(Group.class);
    GroupIdActionBuilder group = new GroupIdActionBuilder();
    group.setGroupId(555L);
    actionBuilder.addAugmentation(GroupIdAction.class, group.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetNwTtl.class);
    NwTtlActionBuilder nwTtl = new NwTtlActionBuilder();
    nwTtl.setNwTtl((short) 8);
    actionBuilder.addAugmentation(NwTtlAction.class, nwTtl.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(DecNwTtl.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetField.class);
    OxmFieldsActionBuilder matchEntries = new OxmFieldsActionBuilder();
    List<MatchEntries> entries = new ArrayList<>();
    MatchEntriesBuilder matchBuilder = new MatchEntriesBuilder();
    matchBuilder.setOxmClass(OpenflowBasicClass.class);
    matchBuilder.setOxmMatchField(InPort.class);
    matchBuilder.setHasMask(false);
    PortNumberMatchEntryBuilder portBuilder = new PortNumberMatchEntryBuilder();
    portBuilder.setPortNumber(new PortNumber(1L));
    matchBuilder.addAugmentation(PortNumberMatchEntry.class, portBuilder.build());
    entries.add(matchBuilder.build());
    matchEntries.setMatchEntries(entries);
    actionBuilder.addAugmentation(OxmFieldsAction.class, matchEntries.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PushPbb.class);
    etherType = new EthertypeActionBuilder();
    etherType.setEthertype(new EtherType(19));
    actionBuilder.addAugmentation(EthertypeAction.class, etherType.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PopPbb.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(Experimenter.class);
    ExperimenterActionBuilder experimenter = new ExperimenterActionBuilder();
    experimenter.setExperimenter(4L);
    experimenter.setData(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 });
    actionBuilder.addAugmentation(ExperimenterAction.class, experimenter.build());
    actions.add(actionBuilder.build());

    ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
    ActionsSerializer.encodeActions(actions, out);

    Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    Assert.assertEquals("Wrong action port", 42, out.readUnsignedInt());
    Assert.assertEquals("Wrong action max-length", 52, out.readUnsignedShort());
    out.skipBytes(6);
    Assert.assertEquals("Wrong action type", 11, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 12, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 15, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action mpls-ttl", 4, out.readUnsignedByte());
    out.skipBytes(3);
    Assert.assertEquals("Wrong action type", 16, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 17, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action ethertype", 16, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 18, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 19, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action ethertype", 17, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 20, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action ethertype", 18, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 21, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action queue-id", 1234, out.readUnsignedInt());
    Assert.assertEquals("Wrong action type", 22, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action group", 555, out.readUnsignedInt());
    Assert.assertEquals("Wrong action type", 23, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action nw-ttl", 8, out.readUnsignedByte());
    out.skipBytes(3);
    Assert.assertEquals("Wrong action type", 24, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 25, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & mask", 0, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedInt());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 26, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action ethertype", 19, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 27, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 65535, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    Assert.assertEquals("Wrong experimenter", 4, out.readUnsignedInt());
    byte[] data = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
    out.readBytes(data);
    Assert.assertArrayEquals("Wrong data", new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }, data);
    Assert.assertTrue("Unread data", out.readableBytes() == 0);
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.InstructionsDeserializer.java

License:Open Source License

/**
 * Creates list of instructions/* ww w . j  av  a  2s .  c  o  m*/
 * @param input
 * @param length
 * @return list of ofp_instruction
 */
public static List<Instruction> createInstructions(ByteBuf input, int length) {
    List<Instruction> instructions = new ArrayList<>();
    if (input.readableBytes() != 0) {
        int lengthOfInstructions = length;
        while (lengthOfInstructions > 0) {
            InstructionBuilder builder = new InstructionBuilder();
            int type = input.readUnsignedShort();
            int instructionLength = input.readUnsignedShort();
            lengthOfInstructions -= instructionLength;
            switch (type) {
            case 1:
                createGotoTableInstruction(builder, input);
                break;
            case 2:
                createMetadataInstruction(builder, input);
                break;
            case 3:
                builder.setType(WriteActions.class);
                createActionRelatedInstruction(input, builder,
                        instructionLength - WRITE_APPLY_CLEAR_ACTION_LENGTH);
                break;
            case 4:
                builder.setType(ApplyActions.class);
                createActionRelatedInstruction(input, builder,
                        instructionLength - WRITE_APPLY_CLEAR_ACTION_LENGTH);
                break;
            case 5:
                builder.setType(ClearActions.class);
                createActionRelatedInstruction(input, builder,
                        instructionLength - WRITE_APPLY_CLEAR_ACTION_LENGTH);
                break;
            case 6:
                builder.setType(Meter.class);
                MeterIdInstructionBuilder meterBuilder = new MeterIdInstructionBuilder();
                meterBuilder.setMeterId(input.readUnsignedInt());
                builder.addAugmentation(MeterIdInstruction.class, meterBuilder.build());
                break;
            case 65535:
                builder.setType(Experimenter.class);
                ExperimenterInstructionBuilder expBuilder = new ExperimenterInstructionBuilder();
                expBuilder.setExperimenter(input.readUnsignedInt());
                int dataLength = instructionLength - EXPERIMENTER_HEADER_LENGTH;
                if (dataLength > 0) {
                    byte[] data = new byte[dataLength];
                    input.readBytes(data);
                    expBuilder.setData(data);
                }
                builder.addAugmentation(ExperimenterInstruction.class, expBuilder.build());
                break;
            default:
                break;
            }
            instructions.add(builder.build());
        }
    }
    return instructions;
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.InstructionsDeserializer.java

License:Open Source License

/**
 * Creates instruction ids (instructions without values)
 * @param input//  www .  j ava 2s.c om
 * @param length
 * @return list of ofp_instruction without values
 */
public static List<Instruction> createInstructionIds(ByteBuf input, int length) {
    List<Instruction> instructions = new ArrayList<>();
    if (input.readableBytes() != 0) {
        int lengthOfInstructions = length;
        while (lengthOfInstructions > 0) {
            InstructionBuilder builder = new InstructionBuilder();
            int type = input.readUnsignedShort();
            int instructionLength = input.readUnsignedShort();
            lengthOfInstructions -= instructionLength;
            switch (type) {
            case 1:
                builder.setType(GotoTable.class);
                break;
            case 2:
                builder.setType(WriteMetadata.class);
                break;
            case 3:
                builder.setType(WriteActions.class);
                break;
            case 4:
                builder.setType(ApplyActions.class);
                break;
            case 5:
                builder.setType(ClearActions.class);
                break;
            case 6:
                builder.setType(Meter.class);
                break;
            case 65535:
                builder.setType(Experimenter.class);
                ExperimenterInstructionBuilder expBuilder = new ExperimenterInstructionBuilder();
                expBuilder.setExperimenter(input.readUnsignedInt());
                builder.addAugmentation(ExperimenterInstruction.class, expBuilder.build());
                break;
            default:
                break;
            }
            instructions.add(builder.build());
        }
    }
    return instructions;
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.InstructionsSerializerTest.java

License:Open Source License

/**
 * Testing instructions translation/*  w  w w . j a v  a  2s . com*/
 */
@Test
public void test() {
    List<Instruction> instructions = new ArrayList<>();
    // Goto_table instruction
    InstructionBuilder builder = new InstructionBuilder();
    builder.setType(GotoTable.class);
    TableIdInstructionBuilder tableIdBuilder = new TableIdInstructionBuilder();
    tableIdBuilder.setTableId((short) 5);
    builder.addAugmentation(TableIdInstruction.class, tableIdBuilder.build());
    instructions.add(builder.build());
    builder = new InstructionBuilder();
    // Write_metadata instruction
    builder.setType(WriteMetadata.class);
    MetadataInstructionBuilder metaBuilder = new MetadataInstructionBuilder();
    metaBuilder.setMetadata(ByteBufUtils.hexStringToBytes("00 01 02 03 04 05 06 07"));
    metaBuilder.setMetadataMask(ByteBufUtils.hexStringToBytes("07 06 05 04 03 02 01 00"));
    builder.addAugmentation(MetadataInstruction.class, metaBuilder.build());
    instructions.add(builder.build());
    // Clear_actions instruction
    builder = new InstructionBuilder();
    builder.setType(ClearActions.class);
    instructions.add(builder.build());
    // Meter instruction
    builder = new InstructionBuilder();
    builder.setType(Meter.class);
    MeterIdInstructionBuilder meterBuilder = new MeterIdInstructionBuilder();
    meterBuilder.setMeterId(42L);
    builder.addAugmentation(MeterIdInstruction.class, meterBuilder.build());
    instructions.add(builder.build());
    // Write_actions instruction
    builder = new InstructionBuilder();
    builder.setType(WriteActions.class);
    ActionsInstructionBuilder actionsBuilder = new ActionsInstructionBuilder();
    List<Action> actions = new ArrayList<>();
    ActionBuilder actionBuilder = new ActionBuilder();
    actionBuilder.setType(Output.class);
    PortActionBuilder portBuilder = new PortActionBuilder();
    portBuilder.setPort(new PortNumber(45L));
    actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
    MaxLengthActionBuilder maxBuilder = new MaxLengthActionBuilder();
    maxBuilder.setMaxLength(55);
    actionBuilder.addAugmentation(MaxLengthAction.class, maxBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetNwTtl.class);
    NwTtlActionBuilder nwTtl = new NwTtlActionBuilder();
    nwTtl.setNwTtl((short) 64);
    actionBuilder.addAugmentation(NwTtlAction.class, nwTtl.build());
    actions.add(actionBuilder.build());
    actionsBuilder.setAction(actions);
    builder.addAugmentation(ActionsInstruction.class, actionsBuilder.build());
    instructions.add(builder.build());
    // Apply_actions instruction
    builder = new InstructionBuilder();
    builder.setType(ApplyActions.class);
    actionsBuilder = new ActionsInstructionBuilder();
    actions = new ArrayList<>();
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PushVlan.class);
    EthertypeActionBuilder ethertypeBuilder = new EthertypeActionBuilder();
    ethertypeBuilder.setEthertype(new EtherType(14));
    actionBuilder.addAugmentation(EthertypeAction.class, ethertypeBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(PopPbb.class);
    actions.add(actionBuilder.build());
    actionsBuilder.setAction(actions);
    builder.addAugmentation(ActionsInstruction.class, actionsBuilder.build());
    instructions.add(builder.build());

    ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
    InstructionsSerializer.encodeInstructions(instructions, out);

    Assert.assertEquals("Wrong instruction type", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction table-id", 5, out.readUnsignedByte());
    out.skipBytes(3);
    Assert.assertEquals("Wrong instruction type", 2, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction length", 24, out.readUnsignedShort());
    out.skipBytes(4);
    byte[] actual = new byte[8];
    out.readBytes(actual);
    Assert.assertEquals("Wrong instruction metadata", "00 01 02 03 04 05 06 07",
            ByteBufUtils.bytesToHexString(actual));
    actual = new byte[8];
    out.readBytes(actual);
    Assert.assertEquals("Wrong instruction metadata-mask", "07 06 05 04 03 02 01 00",
            ByteBufUtils.bytesToHexString(actual));
    Assert.assertEquals("Wrong instruction type", 5, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong instruction type", 6, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction meter-id", 42, out.readUnsignedInt());
    Assert.assertEquals("Wrong instruction type", 3, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction length", 32, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    Assert.assertEquals("Wrong action type", 45, out.readUnsignedInt());
    Assert.assertEquals("Wrong action type", 55, out.readUnsignedShort());
    out.skipBytes(6);
    Assert.assertEquals("Wrong action type", 23, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action type", 64, out.readUnsignedByte());
    out.skipBytes(3);
    Assert.assertEquals("Wrong instruction type", 4, out.readUnsignedShort());
    Assert.assertEquals("Wrong instruction length", 24, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 17, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action ethertype", 14, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 27, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertTrue("Not all data were read", out.readableBytes() == 0);
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer.java

License:Open Source License

private static List<MatchEntries> createMatchEntriesInternal(ByteBuf in, int matchLength, boolean oneEntry) {
    List<MatchEntries> matchEntriesList = new ArrayList<>();
    int currLength = 0;
    while (currLength < matchLength) {
        MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder();
        switch (in.readUnsignedShort()) {
        case 0x0000:
            matchEntriesBuilder.setOxmClass(Nxm0Class.class);
            break;
        case 0x0001:
            matchEntriesBuilder.setOxmClass(Nxm1Class.class);
            break;
        case 0x8000:
            matchEntriesBuilder.setOxmClass(OpenflowBasicClass.class);
            break;
        case 0xFFFF:
            matchEntriesBuilder.setOxmClass(ExperimenterClass.class);
            break;
        default:/*from   w w  w.  jav  a  2s. c  o  m*/
            break;
        }

        int fieldAndMask = in.readUnsignedByte();
        boolean hasMask = (fieldAndMask & 1) != 0;
        matchEntriesBuilder.setHasMask(hasMask);
        int matchField = fieldAndMask >> 1;
        int matchEntryLength = in.readUnsignedByte();
        currLength += EncodeConstants.SIZE_OF_SHORT_IN_BYTES + (2 * EncodeConstants.SIZE_OF_BYTE_IN_BYTES)
                + matchEntryLength;

        switch (matchField) {
        case 0:
            matchEntriesBuilder.setOxmMatchField(InPort.class);
            PortNumberMatchEntryBuilder port = new PortNumberMatchEntryBuilder();
            port.setPortNumber(new PortNumber(in.readUnsignedInt()));
            matchEntriesBuilder.addAugmentation(PortNumberMatchEntry.class, port.build());
            break;
        case 1:
            matchEntriesBuilder.setOxmMatchField(InPhyPort.class);
            PortNumberMatchEntryBuilder phyPort = new PortNumberMatchEntryBuilder();
            phyPort.setPortNumber(new PortNumber(in.readUnsignedInt()));
            matchEntriesBuilder.addAugmentation(PortNumberMatchEntry.class, phyPort.build());
            break;
        case 2:
            matchEntriesBuilder.setOxmMatchField(Metadata.class);
            addMetadataAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
            }
            break;
        case 3:
            matchEntriesBuilder.setOxmMatchField(EthDst.class);
            addMacAddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
            }
            break;
        case 4:
            matchEntriesBuilder.setOxmMatchField(EthSrc.class);
            addMacAddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
            }
            break;
        case 5:
            matchEntriesBuilder.setOxmMatchField(EthType.class);
            EthTypeMatchEntryBuilder ethertypeBuilder = new EthTypeMatchEntryBuilder();
            ethertypeBuilder.setEthType(new EtherType(in.readUnsignedShort()));
            matchEntriesBuilder.addAugmentation(EthTypeMatchEntry.class, ethertypeBuilder.build());
            break;
        case 6:
            matchEntriesBuilder.setOxmMatchField(VlanVid.class);
            VlanVidMatchEntryBuilder vlanVidBuilder = new VlanVidMatchEntryBuilder();
            int vidEntryValue = in.readUnsignedShort();
            vlanVidBuilder.setCfiBit((vidEntryValue & (1 << 12)) != 0); // cfi is 13-th bit
            vlanVidBuilder.setVlanVid(vidEntryValue & ((1 << 12) - 1)); // value without 13-th bit
            matchEntriesBuilder.addAugmentation(VlanVidMatchEntry.class, vlanVidBuilder.build());
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
            }
            break;
        case 7:
            matchEntriesBuilder.setOxmMatchField(VlanPcp.class);
            VlanPcpMatchEntryBuilder vlanPcpBuilder = new VlanPcpMatchEntryBuilder();
            vlanPcpBuilder.setVlanPcp(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(VlanPcpMatchEntry.class, vlanPcpBuilder.build());
            break;
        case 8:
            matchEntriesBuilder.setOxmMatchField(IpDscp.class);
            DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();
            dscpBuilder.setDscp(new Dscp(in.readUnsignedByte()));
            matchEntriesBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());
            break;
        case 9:
            matchEntriesBuilder.setOxmMatchField(IpEcn.class);
            EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();
            ecnBuilder.setEcn(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());
            break;
        case 10:
            matchEntriesBuilder.setOxmMatchField(IpProto.class);
            ProtocolNumberMatchEntryBuilder protoNumberBuilder = new ProtocolNumberMatchEntryBuilder();
            protoNumberBuilder.setProtocolNumber(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoNumberBuilder.build());
            break;
        case 11:
            matchEntriesBuilder.setOxmMatchField(Ipv4Src.class);
            addIpv4AddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
            }
            break;
        case 12:
            matchEntriesBuilder.setOxmMatchField(Ipv4Dst.class);
            addIpv4AddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
            }
            break;
        case 13:
            matchEntriesBuilder.setOxmMatchField(TcpSrc.class);
            addPortAugmentation(matchEntriesBuilder, in);
            break;
        case 14:
            matchEntriesBuilder.setOxmMatchField(TcpDst.class);
            addPortAugmentation(matchEntriesBuilder, in);
            break;
        case 15:
            matchEntriesBuilder.setOxmMatchField(UdpSrc.class);
            addPortAugmentation(matchEntriesBuilder, in);
            break;
        case 16:
            matchEntriesBuilder.setOxmMatchField(UdpDst.class);
            addPortAugmentation(matchEntriesBuilder, in);
            break;
        case 17:
            matchEntriesBuilder.setOxmMatchField(SctpSrc.class);
            addPortAugmentation(matchEntriesBuilder, in);
            break;
        case 18:
            matchEntriesBuilder.setOxmMatchField(SctpDst.class);
            addPortAugmentation(matchEntriesBuilder, in);
            break;
        case 19:
            matchEntriesBuilder.setOxmMatchField(Icmpv4Type.class);
            Icmpv4TypeMatchEntryBuilder icmpv4TypeBuilder = new Icmpv4TypeMatchEntryBuilder();
            icmpv4TypeBuilder.setIcmpv4Type(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4TypeBuilder.build());
            break;
        case 20:
            matchEntriesBuilder.setOxmMatchField(Icmpv4Code.class);
            Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();
            icmpv4CodeBuilder.setIcmpv4Code(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());
            break;
        case 21:
            matchEntriesBuilder.setOxmMatchField(ArpOp.class);
            OpCodeMatchEntryBuilder opcodeBuilder = new OpCodeMatchEntryBuilder();
            opcodeBuilder.setOpCode(in.readUnsignedShort());
            matchEntriesBuilder.addAugmentation(OpCodeMatchEntry.class, opcodeBuilder.build());
            break;
        case 22:
            matchEntriesBuilder.setOxmMatchField(ArpSpa.class);
            addIpv4AddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
            }
            break;
        case 23:
            matchEntriesBuilder.setOxmMatchField(ArpTpa.class);
            addIpv4AddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
            }
            break;
        case 24:
            matchEntriesBuilder.setOxmMatchField(ArpSha.class);
            addMacAddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
            }
            break;
        case 25:
            matchEntriesBuilder.setOxmMatchField(ArpTha.class);
            addMacAddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
            }
            break;
        case 26:
            matchEntriesBuilder.setOxmMatchField(Ipv6Src.class);
            addIpv6AddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);
            }
            break;
        case 27:
            matchEntriesBuilder.setOxmMatchField(Ipv6Dst.class);
            addIpv6AddressAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);
            }
            break;
        case 28:
            matchEntriesBuilder.setOxmMatchField(Ipv6Flabel.class);
            Ipv6FlabelMatchEntryBuilder ipv6FlabelBuilder = new Ipv6FlabelMatchEntryBuilder();
            ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(in.readUnsignedInt()));
            matchEntriesBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, ipv6FlabelBuilder.build());
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
            }
            break;
        case 29:
            matchEntriesBuilder.setOxmMatchField(Icmpv6Type.class);
            Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();
            icmpv6TypeBuilder.setIcmpv6Type(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());
            break;
        case 30:
            matchEntriesBuilder.setOxmMatchField(Icmpv6Code.class);
            Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();
            icmpv6CodeBuilder.setIcmpv6Code(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());
            break;
        case 31:
            matchEntriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
            addIpv6AddressAugmentation(matchEntriesBuilder, in);
            break;
        case 32:
            matchEntriesBuilder.setOxmMatchField(Ipv6NdSll.class);
            addMacAddressAugmentation(matchEntriesBuilder, in);
            break;
        case 33:
            matchEntriesBuilder.setOxmMatchField(Ipv6NdTll.class);
            addMacAddressAugmentation(matchEntriesBuilder, in);
            break;
        case 34:
            matchEntriesBuilder.setOxmMatchField(MplsLabel.class);
            MplsLabelMatchEntryBuilder mplsLabelBuilder = new MplsLabelMatchEntryBuilder();
            mplsLabelBuilder.setMplsLabel(in.readUnsignedInt());
            matchEntriesBuilder.addAugmentation(MplsLabelMatchEntry.class, mplsLabelBuilder.build());
            break;
        case 35:
            matchEntriesBuilder.setOxmMatchField(MplsTc.class);
            TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();
            tcBuilder.setTc(in.readUnsignedByte());
            matchEntriesBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());
            break;
        case 36:
            matchEntriesBuilder.setOxmMatchField(MplsBos.class);
            BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();
            if (in.readUnsignedByte() != 0) {
                bosBuilder.setBos(true);
            } else {
                bosBuilder.setBos(false);
            }
            matchEntriesBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());
            break;
        case 37:
            matchEntriesBuilder.setOxmMatchField(PbbIsid.class);
            IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
            Integer isid = in.readUnsignedMedium();
            isidBuilder.setIsid(isid.longValue());
            matchEntriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_3_BYTES);
            }
            break;
        case 38:
            matchEntriesBuilder.setOxmMatchField(TunnelId.class);
            addMetadataAugmentation(matchEntriesBuilder, in);
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
            }
            break;
        case 39:
            matchEntriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
            PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();
            int bitmap = in.readUnsignedShort();
            final Boolean NONEXT = ((bitmap) & (1 << 0)) != 0;
            final Boolean ESP = ((bitmap) & (1 << 1)) != 0;
            final Boolean AUTH = ((bitmap) & (1 << 2)) != 0;
            final Boolean DEST = ((bitmap) & (1 << 3)) != 0;
            final Boolean FRAG = ((bitmap) & (1 << 4)) != 0;
            final Boolean ROUTER = ((bitmap) & (1 << 5)) != 0;
            final Boolean HOP = ((bitmap) & (1 << 6)) != 0;
            final Boolean UNREP = ((bitmap) & (1 << 7)) != 0;
            final Boolean UNSEQ = ((bitmap) & (1 << 8)) != 0;
            pseudoBuilder.setPseudoField(
                    new Ipv6ExthdrFlags(AUTH, DEST, ESP, FRAG, HOP, NONEXT, ROUTER, UNREP, UNSEQ));
            matchEntriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
            if (hasMask) {
                addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
            }
            break;
        default:
            break;
        }
        matchEntriesList.add(matchEntriesBuilder.build());
        if (oneEntry) {
            break;
        }
    }
    if ((matchLength - currLength) > 0) {
        in.skipBytes(matchLength - currLength);
    }
    return matchEntriesList;
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.MatchSerializerTest2.java

License:Open Source License

/**
 * Testing serialization of match/*from   w  ww .  j  av a 2s .co  m*/
 */
@Test
public void test() {
    MatchBuilder builder = new MatchBuilder();
    builder.setType(OxmMatchType.class);
    List<MatchEntries> entries = new ArrayList<>();
    MatchEntriesBuilder entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(Nxm0Class.class);
    entryBuilder.setOxmMatchField(InPort.class);
    entryBuilder.setHasMask(false);
    PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();
    portNumberBuilder.setPortNumber(new PortNumber(42L));
    entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(Nxm1Class.class);
    entryBuilder.setOxmMatchField(InPhyPort.class);
    entryBuilder.setHasMask(false);
    portNumberBuilder = new PortNumberMatchEntryBuilder();
    portNumberBuilder.setPortNumber(new PortNumber(43L));
    entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Metadata.class);
    entryBuilder.setHasMask(true);
    MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();
    metadataBuilder.setMetadata(new byte[] { 0, 0, 0, 0, 0, 0, 0, 1 });
    entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
    MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 0, 0, 0, 0, 2 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(ExperimenterClass.class);
    entryBuilder.setOxmMatchField(EthDst.class);
    entryBuilder.setHasMask(true);
    MacAddressMatchEntryBuilder macBuilder = new MacAddressMatchEntryBuilder();
    macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
    entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 0, 0, 5 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(EthSrc.class);
    entryBuilder.setHasMask(true);
    macBuilder = new MacAddressMatchEntryBuilder();
    macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
    entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 0, 0, 2 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(EthType.class);
    entryBuilder.setHasMask(false);
    EthTypeMatchEntryBuilder ethBuilder = new EthTypeMatchEntryBuilder();
    ethBuilder.setEthType(new EtherType(46));
    entryBuilder.addAugmentation(EthTypeMatchEntry.class, ethBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(VlanVid.class);
    entryBuilder.setHasMask(true);
    VlanVidMatchEntryBuilder vidBuilder = new VlanVidMatchEntryBuilder();
    vidBuilder.setCfiBit(true);
    vidBuilder.setVlanVid(45);
    entryBuilder.addAugmentation(VlanVidMatchEntry.class, vidBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 9 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(VlanPcp.class);
    entryBuilder.setHasMask(true);
    VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();
    pcpBuilder.setVlanPcp((short) 14);
    entryBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(IpDscp.class);
    entryBuilder.setHasMask(false);
    DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();
    dscpBuilder.setDscp(new Dscp((short) 48));
    entryBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(IpEcn.class);
    entryBuilder.setHasMask(false);
    EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();
    ecnBuilder.setEcn((short) 49);
    entryBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(IpProto.class);
    entryBuilder.setHasMask(false);
    ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();
    protoBuilder.setProtocolNumber((short) 50);
    entryBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv4Src.class);
    entryBuilder.setHasMask(true);
    Ipv4AddressMatchEntryBuilder ipv4Builder = new Ipv4AddressMatchEntryBuilder();
    ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.1"));
    entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 14 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv4Dst.class);
    entryBuilder.setHasMask(true);
    ipv4Builder = new Ipv4AddressMatchEntryBuilder();
    ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.2"));
    entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 15 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(TcpSrc.class);
    entryBuilder.setHasMask(false);
    PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
    portBuilder.setPort(
            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(
                    6653));
    entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(TcpDst.class);
    entryBuilder.setHasMask(false);
    portBuilder = new PortMatchEntryBuilder();
    portBuilder.setPort(
            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(
                    6654));
    entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(UdpSrc.class);
    entryBuilder.setHasMask(false);
    portBuilder = new PortMatchEntryBuilder();
    portBuilder.setPort(
            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(
                    6655));
    entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(UdpDst.class);
    entryBuilder.setHasMask(false);
    portBuilder = new PortMatchEntryBuilder();
    portBuilder.setPort(
            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(
                    6656));
    entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(SctpSrc.class);
    entryBuilder.setHasMask(false);
    portBuilder = new PortMatchEntryBuilder();
    portBuilder.setPort(
            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(
                    6657));
    entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(SctpDst.class);
    entryBuilder.setHasMask(false);
    portBuilder = new PortMatchEntryBuilder();
    portBuilder.setPort(
            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(
                    6658));
    entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Icmpv4Type.class);
    entryBuilder.setHasMask(false);
    Icmpv4TypeMatchEntryBuilder icmpv4typeBuilder = new Icmpv4TypeMatchEntryBuilder();
    icmpv4typeBuilder.setIcmpv4Type((short) 51);
    entryBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4typeBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Icmpv4Code.class);
    entryBuilder.setHasMask(false);
    Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();
    icmpv4CodeBuilder.setIcmpv4Code((short) 52);
    entryBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(ArpOp.class);
    entryBuilder.setHasMask(false);
    OpCodeMatchEntryBuilder opBuilder = new OpCodeMatchEntryBuilder();
    opBuilder.setOpCode(53);
    entryBuilder.addAugmentation(OpCodeMatchEntry.class, opBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(ArpSpa.class);
    entryBuilder.setHasMask(true);
    ipv4Builder = new Ipv4AddressMatchEntryBuilder();
    ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.4"));
    entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 16 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(ArpTpa.class);
    entryBuilder.setHasMask(true);
    ipv4Builder = new Ipv4AddressMatchEntryBuilder();
    ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.5"));
    entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 17 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(ArpSha.class);
    entryBuilder.setHasMask(true);
    macBuilder = new MacAddressMatchEntryBuilder();
    macBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));
    entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 4, 0, 0, 6 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(ArpTha.class);
    entryBuilder.setHasMask(true);
    macBuilder = new MacAddressMatchEntryBuilder();
    macBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
    entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 6, 0, 0, 4 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv6Src.class);
    entryBuilder.setHasMask(true);
    Ipv6AddressMatchEntryBuilder ipv6Builder = new Ipv6AddressMatchEntryBuilder();
    ipv6Builder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));
    entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv6Dst.class);
    entryBuilder.setHasMask(true);
    ipv6Builder = new Ipv6AddressMatchEntryBuilder();
    ipv6Builder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));
    entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv6Flabel.class);
    entryBuilder.setHasMask(true);
    Ipv6FlabelMatchEntryBuilder flabelBuilder = new Ipv6FlabelMatchEntryBuilder();
    flabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));
    entryBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, flabelBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 1, 0, 2 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Icmpv6Type.class);
    entryBuilder.setHasMask(false);
    Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();
    icmpv6TypeBuilder.setIcmpv6Type((short) 59);
    entryBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Icmpv6Code.class);
    entryBuilder.setHasMask(false);
    Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();
    icmpv6CodeBuilder.setIcmpv6Code((short) 60);
    entryBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv6NdTarget.class);
    entryBuilder.setHasMask(false);
    ipv6Builder = new Ipv6AddressMatchEntryBuilder();
    ipv6Builder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));
    entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(ExperimenterClass.class);
    entryBuilder.setOxmMatchField(Ipv6NdSll.class);
    entryBuilder.setHasMask(false);
    macBuilder = new MacAddressMatchEntryBuilder();
    macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
    entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv6NdTll.class);
    entryBuilder.setHasMask(false);
    macBuilder = new MacAddressMatchEntryBuilder();
    macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
    entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(MplsLabel.class);
    entryBuilder.setHasMask(false);
    MplsLabelMatchEntryBuilder labelBuilder = new MplsLabelMatchEntryBuilder();
    labelBuilder.setMplsLabel(61L);
    entryBuilder.addAugmentation(MplsLabelMatchEntry.class, labelBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(MplsTc.class);
    entryBuilder.setHasMask(false);
    TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();
    tcBuilder.setTc((short) 62);
    entryBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());
    entries.add(entryBuilder.build());
    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(MplsBos.class);
    entryBuilder.setHasMask(false);
    BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();
    bosBuilder.setBos(true);
    entryBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());
    entries.add(entryBuilder.build());

    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(PbbIsid.class);
    entryBuilder.setHasMask(true);
    IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
    isidBuilder.setIsid(64L);
    entryBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 1, 2 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());

    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(TunnelId.class);
    entryBuilder.setHasMask(true);
    metadataBuilder = new MetadataMatchEntryBuilder();
    metadataBuilder.setMetadata(new byte[] { 0, 0, 0, 0, 0, 0, 0, 1 });
    entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 0, 0, 0, 0, 0, 0, 2 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());

    entryBuilder = new MatchEntriesBuilder();
    entryBuilder.setOxmClass(OpenflowBasicClass.class);
    entryBuilder.setOxmMatchField(Ipv6Exthdr.class);
    entryBuilder.setHasMask(true);
    PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();
    pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));
    entryBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
    maskBuilder = new MaskMatchEntryBuilder();
    maskBuilder.setMask(new byte[] { 0, 2 });
    entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
    entries.add(entryBuilder.build());

    builder.setMatchEntries(entries);
    Match match = builder.build();

    ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
    MatchSerializer.encodeMatch(match, out);

    Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong match length", 428, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());
    Assert.assertEquals("Wrong match entry class", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
    Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
    Assert.assertEquals("Wrong match entry class", 0xFFFF, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
    byte[] array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 1, 0, 3, 0, 0, 6 }, array);
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 0, 0, 0, 5 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 4, 0, 2, 0, 0, 8 }, array);
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 0, 0, 0, 2 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());
    array = new byte[2];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 9 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 10, 0, 0, 1 }, array);
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 0, 14 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 10, 0, 0, 2 }, array);
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 0, 15 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 10, 0, 0, 4 }, array);
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 0, 16 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 10, 0, 0, 5 }, array);
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 0, 17 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 0, 1, 2, 3, 4, 5 }, array);
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 4, 0, 0, 6 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 0, 0, 0, 0, 0, 3 }, array);
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 0, 6, 0, 0, 4 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
    array = new byte[16];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value",
            new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, array);
    array = new byte[16];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask",
            new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
    array = new byte[16];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value",
            new byte[] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1 }, array);
    array = new byte[16];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask",
            new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 57, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());
    array = new byte[4];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 1, 0, 2 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
    array = new byte[16];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value",
            new byte[] { 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, array);
    Assert.assertEquals("Wrong match entry class", 0xFFFF, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 1, 0, 3, 0, 0, 6 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
    array = new byte[6];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 4, 0, 2, 0, 0, 8 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());
    array = new byte[3];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry mask", new byte[] { 0, 1, 2 }, array);
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
    Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
    Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
    Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());
    array = new byte[2];
    out.readBytes(array);
    Assert.assertArrayEquals("Wrong match entry value", new byte[] { 0, 2 }, array);
    Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.OF10ActionsDeserializer.java

License:Open Source License

private static Action createEnqueueAction(ByteBuf input, ActionBuilder builder) {
    builder.setType(Enqueue.class);
    createPortAugmentation(input, builder);
    input.skipBytes(PADDING_IN_ENQUEUE_ACTION);
    QueueIdActionBuilder queueBuilder = new QueueIdActionBuilder();
    queueBuilder.setQueueId(input.readUnsignedInt());
    builder.addAugmentation(QueueIdAction.class, queueBuilder.build());
    return builder.build();
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.OF10ActionsDeserializer.java

License:Open Source License

private static Action createExperimenterAction(ByteBuf input, ActionBuilder builder) {
    builder.setType(Experimenter.class);
    ExperimenterActionBuilder expBuilder = new ExperimenterActionBuilder();
    expBuilder.setExperimenter(input.readUnsignedInt());
    builder.addAugmentation(ExperimenterAction.class, expBuilder.build());
    return builder.build();
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.OF10ActionsSerializerTest.java

License:Open Source License

/**
 * Testing correct serialization of actions (OF v1.0) 
 *///from ww w. j a v  a  2  s.co m
@Test
public void test() {
    List<Action> actions = new ArrayList<>();
    ActionBuilder actionBuilder = new ActionBuilder();
    actionBuilder.setType(Output.class);
    PortActionBuilder portBuilder = new PortActionBuilder();
    portBuilder.setPort(new PortNumber(42L));
    actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
    MaxLengthActionBuilder maxLen = new MaxLengthActionBuilder();
    maxLen.setMaxLength(32);
    actionBuilder.addAugmentation(MaxLengthAction.class, maxLen.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetVlanVid.class);
    VlanVidActionBuilder vlanBuilder = new VlanVidActionBuilder();
    vlanBuilder.setVlanVid(15);
    actionBuilder.addAugmentation(VlanVidAction.class, vlanBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetVlanPcp.class);
    VlanPcpActionBuilder pcpBuilder = new VlanPcpActionBuilder();
    pcpBuilder.setVlanPcp((short) 16);
    actionBuilder.addAugmentation(VlanPcpAction.class, pcpBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(StripVlan.class);
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetDlSrc.class);
    DlAddressActionBuilder dlBuilder = new DlAddressActionBuilder();
    dlBuilder.setDlAddress(new MacAddress("00:00:00:02:03:04"));
    actionBuilder.addAugmentation(DlAddressAction.class, dlBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetDlDst.class);
    dlBuilder = new DlAddressActionBuilder();
    dlBuilder.setDlAddress(new MacAddress("00:00:00:01:02:03"));
    actionBuilder.addAugmentation(DlAddressAction.class, dlBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetNwSrc.class);
    IpAddressActionBuilder ipBuilder = new IpAddressActionBuilder();
    ipBuilder.setIpAddress(new Ipv4Address("10.0.0.1"));
    actionBuilder.addAugmentation(IpAddressAction.class, ipBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetNwDst.class);
    ipBuilder = new IpAddressActionBuilder();
    ipBuilder.setIpAddress(new Ipv4Address("10.0.0.3"));
    actionBuilder.addAugmentation(IpAddressAction.class, ipBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetNwTos.class);
    NwTosActionBuilder tosBuilder = new NwTosActionBuilder();
    tosBuilder.setNwTos((short) 204);
    actionBuilder.addAugmentation(NwTosAction.class, tosBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetTpSrc.class);
    portBuilder = new PortActionBuilder();
    portBuilder.setPort(new PortNumber(6653L));
    actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(SetTpDst.class);
    portBuilder = new PortActionBuilder();
    portBuilder.setPort(new PortNumber(6633L));
    actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(Enqueue.class);
    portBuilder = new PortActionBuilder();
    portBuilder.setPort(new PortNumber(6613L));
    actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
    QueueIdActionBuilder queueBuilder = new QueueIdActionBuilder();
    queueBuilder.setQueueId(400L);
    actionBuilder.addAugmentation(QueueIdAction.class, queueBuilder.build());
    actions.add(actionBuilder.build());
    actionBuilder = new ActionBuilder();
    actionBuilder.setType(Experimenter.class);
    ExperimenterActionBuilder expBuilder = new ExperimenterActionBuilder();
    expBuilder.setExperimenter(500L);
    actionBuilder.addAugmentation(ExperimenterAction.class, expBuilder.build());
    actions.add(actionBuilder.build());

    ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
    OF10ActionsSerializer.encodeActionsV10(out, actions);

    Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong port", 42, out.readUnsignedShort());
    Assert.assertEquals("Wrong max-length", 32, out.readUnsignedShort());
    Assert.assertEquals("Wrong action type", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong vlan-vid", 15, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 2, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong vlan-pcp", 16, out.readUnsignedByte());
    out.skipBytes(3);
    Assert.assertEquals("Wrong action type", 3, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    out.skipBytes(4);
    Assert.assertEquals("Wrong action type", 4, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    byte[] data = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];
    out.readBytes(data);
    Assert.assertArrayEquals("Wrong dl-address", ByteBufUtils.macAddressToBytes("00:00:00:02:03:04"), data);
    out.skipBytes(6);
    Assert.assertEquals("Wrong action type", 5, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    data = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];
    out.readBytes(data);
    Assert.assertArrayEquals("Wrong dl-address", ByteBufUtils.macAddressToBytes("00:00:00:01:02:03"), data);
    out.skipBytes(6);
    Assert.assertEquals("Wrong action type", 6, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong ip-address(1)", 10, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip-address(2)", 0, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip-address(3)", 0, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip-address(4)", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong action type", 7, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong ip-address(1)", 10, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip-address(2)", 0, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip-address(3)", 0, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip-address(4)", 3, out.readUnsignedByte());
    Assert.assertEquals("Wrong action type", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong nw-tos", 204, out.readUnsignedByte());
    out.skipBytes(3);
    Assert.assertEquals("Wrong action type", 9, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong port", 6653, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 10, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong port", 6633, out.readUnsignedShort());
    out.skipBytes(2);
    Assert.assertEquals("Wrong action type", 11, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());
    Assert.assertEquals("Wrong port", 6613, out.readUnsignedShort());
    out.skipBytes(6);
    Assert.assertEquals("Wrong queue-id", 400, out.readUnsignedInt());
    Assert.assertEquals("Wrong action type", 65535, out.readUnsignedShort());
    Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong vendor-id", 500, out.readUnsignedInt());
    Assert.assertTrue("Written more bytes than needed", out.readableBytes() == 0);
}

From source file:org.opendaylight.openflowjava.protocol.impl.util.OF10MatchDeserializer.java

License:Open Source License

/**
 * Creates ofp_match (OpenFlow v1.0) structure
 * @param rawMessage ByteBuf with input data
 * @return ofp_match (OpenFlow v1.0)/*ww w .  ja  v a  2 s  .c o  m*/
 */
public static MatchV10 createMatchV10(ByteBuf rawMessage) {
    MatchV10Builder builder = new MatchV10Builder();
    long wildcards = rawMessage.readUnsignedInt();
    builder.setWildcards(createWildcards(wildcards));
    builder.setNwSrcMask(decodeNwSrcMask(wildcards));
    builder.setNwDstMask(decodeNwDstMask(wildcards));
    builder.setInPort(rawMessage.readUnsignedShort());
    byte[] dlSrc = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];
    rawMessage.readBytes(dlSrc);
    builder.setDlSrc(new MacAddress(ByteBufUtils.macAddressToString(dlSrc)));
    byte[] dlDst = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];
    rawMessage.readBytes(dlDst);
    builder.setDlDst(new MacAddress(ByteBufUtils.macAddressToString(dlDst)));

    builder.setDlVlan(rawMessage.readUnsignedShort());
    builder.setDlVlanPcp(rawMessage.readUnsignedByte());
    rawMessage.skipBytes(PADDING_IN_MATCH);
    builder.setDlType(rawMessage.readUnsignedShort());
    builder.setNwTos(rawMessage.readUnsignedByte());
    builder.setNwProto(rawMessage.readUnsignedByte());
    rawMessage.skipBytes(PADDING_IN_MATCH_2);
    List<String> srcGroups = new ArrayList<>();
    for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
        srcGroups.add(Short.toString(rawMessage.readUnsignedByte()));
    }
    Joiner joiner = Joiner.on(".");
    builder.setNwSrc(new Ipv4Address(joiner.join(srcGroups)));
    List<String> dstGroups = new ArrayList<>();
    for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
        dstGroups.add(Short.toString(rawMessage.readUnsignedByte()));
    }
    builder.setNwDst(new Ipv4Address(joiner.join(dstGroups)));
    builder.setTpSrc(rawMessage.readUnsignedShort());
    builder.setTpDst(rawMessage.readUnsignedShort());
    return builder.build();
}