Example usage for io.netty.buffer ByteBuf readUnsignedByte

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

Introduction

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

Prototype

public abstract short readUnsignedByte();

Source Link

Document

Gets an unsigned byte at the current readerIndex and increases the readerIndex by 1 in this buffer.

Usage

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

License:Open Source License

private static void addIpv4AddressAugmentation(MatchEntriesBuilder builder, ByteBuf in) {
    Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
    List<String> groups = new ArrayList<>();
    for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
        groups.add(Short.toString(in.readUnsignedByte()));
    }//  ww w.  j a v  a2s . co m
    Joiner joiner = Joiner.on(".");
    ipv4AddressBuilder.setIpv4Address(new Ipv4Address(joiner.join(groups)));
    builder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
}

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

License:Open Source License

/** Decodes oxm ids
 * @param in input ByteBuf//w  w w.j a v a2s . c  o  m
 * @param matchLength match entries length
 * @return list of match ids
 */
public static List<MatchEntries> createOxmIds(ByteBuf in, int matchLength) {
    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:
            break;
        }

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

        switch (matchField) {
        case 0:
            matchEntriesBuilder.setOxmMatchField(InPort.class);
            break;
        case 1:
            matchEntriesBuilder.setOxmMatchField(InPhyPort.class);
            break;
        case 2:
            matchEntriesBuilder.setOxmMatchField(Metadata.class);
            break;
        case 3:
            matchEntriesBuilder.setOxmMatchField(EthDst.class);
            break;
        case 4:
            matchEntriesBuilder.setOxmMatchField(EthSrc.class);
            break;
        case 5:
            matchEntriesBuilder.setOxmMatchField(EthType.class);
            break;
        case 6:
            matchEntriesBuilder.setOxmMatchField(VlanVid.class);
            break;
        case 7:
            matchEntriesBuilder.setOxmMatchField(VlanPcp.class);
            break;
        case 8:
            matchEntriesBuilder.setOxmMatchField(IpDscp.class);
            break;
        case 9:
            matchEntriesBuilder.setOxmMatchField(IpEcn.class);
            break;
        case 10:
            matchEntriesBuilder.setOxmMatchField(IpProto.class);
            break;
        case 11:
            matchEntriesBuilder.setOxmMatchField(Ipv4Src.class);
            break;
        case 12:
            matchEntriesBuilder.setOxmMatchField(Ipv4Dst.class);
            break;
        case 13:
            matchEntriesBuilder.setOxmMatchField(TcpSrc.class);
            break;
        case 14:
            matchEntriesBuilder.setOxmMatchField(TcpDst.class);
            break;
        case 15:
            matchEntriesBuilder.setOxmMatchField(UdpSrc.class);
            break;
        case 16:
            matchEntriesBuilder.setOxmMatchField(UdpDst.class);
            break;
        case 17:
            matchEntriesBuilder.setOxmMatchField(SctpSrc.class);
            break;
        case 18:
            matchEntriesBuilder.setOxmMatchField(SctpDst.class);
            break;
        case 19:
            matchEntriesBuilder.setOxmMatchField(Icmpv4Type.class);
            break;
        case 20:
            matchEntriesBuilder.setOxmMatchField(Icmpv4Code.class);
            break;
        case 21:
            matchEntriesBuilder.setOxmMatchField(ArpOp.class);
            break;
        case 22:
            matchEntriesBuilder.setOxmMatchField(ArpSpa.class);
            break;
        case 23:
            matchEntriesBuilder.setOxmMatchField(ArpTpa.class);
            break;
        case 24:
            matchEntriesBuilder.setOxmMatchField(ArpSha.class);
            break;
        case 25:
            matchEntriesBuilder.setOxmMatchField(ArpTha.class);
            break;
        case 26:
            matchEntriesBuilder.setOxmMatchField(Ipv6Src.class);
            break;
        case 27:
            matchEntriesBuilder.setOxmMatchField(Ipv6Dst.class);
            break;
        case 28:
            matchEntriesBuilder.setOxmMatchField(Ipv6Flabel.class);
            break;
        case 29:
            matchEntriesBuilder.setOxmMatchField(Icmpv6Type.class);
            break;
        case 30:
            matchEntriesBuilder.setOxmMatchField(Icmpv6Code.class);
            break;
        case 31:
            matchEntriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
            break;
        case 32:
            matchEntriesBuilder.setOxmMatchField(Ipv6NdSll.class);
            break;
        case 33:
            matchEntriesBuilder.setOxmMatchField(Ipv6NdTll.class);
            break;
        case 34:
            matchEntriesBuilder.setOxmMatchField(MplsLabel.class);
            break;
        case 35:
            matchEntriesBuilder.setOxmMatchField(MplsTc.class);
            break;
        case 36:
            matchEntriesBuilder.setOxmMatchField(MplsBos.class);
            break;
        case 37:
            matchEntriesBuilder.setOxmMatchField(PbbIsid.class);
            break;
        case 38:
            matchEntriesBuilder.setOxmMatchField(TunnelId.class);
            break;
        case 39:
            matchEntriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
            break;
        default:
            break;
        }
        matchEntriesList.add(matchEntriesBuilder.build());
    }
    return matchEntriesList;
}

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

License:Open Source License

/**
 * Test for correct serialization of Ipv4Address match entry
 *//*  w  w  w.  j  a v a  2 s . c  o  m*/
@Test
public void testIpv4Src() {
    MatchBuilder builder = new MatchBuilder();
    builder.setType(OxmMatchType.class);
    List<MatchEntries> entries = new ArrayList<>();
    MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(OpenflowBasicClass.class);
    entriesBuilder.setOxmMatchField(Ipv4Src.class);
    entriesBuilder.setHasMask(false);
    Ipv4AddressMatchEntryBuilder addressBuilder = new Ipv4AddressMatchEntryBuilder();
    addressBuilder.setIpv4Address(new Ipv4Address("1.2.3.4"));
    entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    builder.setMatchEntries(entries);
    Match match = builder.build();

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

    Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());
    out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
    Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 22, out.readUnsignedByte());
    out.skipBytes(EncodeConstants.SIZE_OF_BYTE_IN_BYTES);
    Assert.assertEquals("Wrong ip address (first number)", 1, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip address (second number)", 2, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip address (third number)", 3, out.readUnsignedByte());
    Assert.assertEquals("Wrong ip address (fourth number)", 4, out.readUnsignedByte());
}

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

License:Open Source License

/**
 * Test for correct serialization of Ipv6Address match entry
 *//*w  w w . j  a  va 2s  . co m*/
@Test
public void testIpv6Various() {
    MatchBuilder builder = new MatchBuilder();
    builder.setType(OxmMatchType.class);
    List<MatchEntries> entries = new ArrayList<>();
    // ipv6 match entry with correct Ipv6 address
    MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(OpenflowBasicClass.class);
    entriesBuilder.setOxmMatchField(Ipv6Src.class);
    entriesBuilder.setHasMask(false);
    Ipv6AddressMatchEntryBuilder addressBuilder = new Ipv6AddressMatchEntryBuilder();
    addressBuilder.setIpv6Address(new Ipv6Address("1:2:3:4:5:6:7:8"));
    entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    // ipv6 match entry with abbreviated Ipv6 address
    entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(OpenflowBasicClass.class);
    entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
    entriesBuilder.setHasMask(false);
    addressBuilder = new Ipv6AddressMatchEntryBuilder();
    addressBuilder.setIpv6Address(new Ipv6Address("1:2::6:7:8"));
    entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    // ipv6 match entry with abbreviated Ipv6 address
    entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(Nxm1Class.class);
    entriesBuilder.setOxmMatchField(Ipv6Dst.class);
    entriesBuilder.setHasMask(false);
    addressBuilder = new Ipv6AddressMatchEntryBuilder();
    addressBuilder.setIpv6Address(new Ipv6Address("1::8"));
    entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    // ipv6 match entry with abbreviated Ipv6 address
    entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(Nxm1Class.class);
    entriesBuilder.setOxmMatchField(Ipv6Dst.class);
    entriesBuilder.setHasMask(false);
    addressBuilder = new Ipv6AddressMatchEntryBuilder();
    addressBuilder.setIpv6Address(new Ipv6Address("::1"));
    entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    // ipv6 match entry with abbreviated Ipv6 address
    entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(Nxm0Class.class);
    entriesBuilder.setOxmMatchField(Ipv6Dst.class);
    entriesBuilder.setHasMask(false);
    addressBuilder = new Ipv6AddressMatchEntryBuilder();
    addressBuilder.setIpv6Address(new Ipv6Address("::"));
    entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    // ipv6 match entry with incorrect Ipv6 address (longer)
    entriesBuilder = new MatchEntriesBuilder();
    entriesBuilder.setOxmClass(OpenflowBasicClass.class);
    entriesBuilder.setOxmMatchField(Ipv6Dst.class);
    entriesBuilder.setHasMask(false);
    addressBuilder = new Ipv6AddressMatchEntryBuilder();
    addressBuilder.setIpv6Address(new Ipv6Address("1:2:3:4:5:6:7:8:9"));
    entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
    entries.add(entriesBuilder.build());
    builder.setMatchEntries(entries);
    Match match = builder.build();
    ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
    MatchSerializer.encodeMatch(match, out);

    Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());
    out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
    Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 52, out.readUnsignedByte());
    Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 2, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 3, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 4, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 5, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 6, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 7, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 62, out.readUnsignedByte());
    Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 2, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 6, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 7, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong class", 0x0001, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
    Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
    Assert.assertEquals("Wrong class", 0x0001, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
    Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong class", 0x0000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
    Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
    Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
    Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
    Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 2, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 3, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 4, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 5, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 6, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 7, out.readUnsignedShort());
    Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
}

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

License:Open Source License

/**
 * Test for correct serialization of Ipv4Address match entry
 *//* w ww  .  ja va2  s. c o m*/
@Test
public void testIpv6Flabel() {
    Match match = buildIpv6FLabelMatch(0x0f9e8dL, false, null);

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

    Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());
    out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
    Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 28 << 1, out.readUnsignedByte());
    out.skipBytes(EncodeConstants.SIZE_OF_BYTE_IN_BYTES);
    byte[] label = new byte[4];
    out.readBytes(label);

    LOG.debug("label: " + ByteBufUtils.bytesToHexString(label));
    Assert.assertArrayEquals("Wrong ipv6FLabel", new byte[] { 0, 0x0f, (byte) 0x9e, (byte) 0x8d }, label);
}

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

License:Open Source License

/**
 * Test for correct serialization of Ipv4Address match entry with mask
 *///w  w w  . ja v  a2 s. c  o  m
@Test
public void testIpv6FlabelWithMask() {
    Match match = buildIpv6FLabelMatch(0x0f9e8dL, true, new byte[] { 0, 0x0c, 0x7b, 0x6a });

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

    Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());
    out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
    Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
    Assert.assertEquals("Wrong field and mask", 28 << 1 | 1, out.readUnsignedByte());
    out.skipBytes(EncodeConstants.SIZE_OF_BYTE_IN_BYTES);
    byte[] labelAndMask = new byte[8];
    out.readBytes(labelAndMask);

    LOG.debug("label: " + ByteBufUtils.bytesToHexString(labelAndMask));
    Assert.assertArrayEquals("Wrong ipv6FLabel",
            new byte[] { 0, 0x0f, (byte) 0x9e, (byte) 0x8d, 0, 0x0c, 0x7b, 0x6a }, labelAndMask);
}

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

License:Open Source License

/**
 * Testing serialization of match//from  w ww.j av  a2s . com
 */
@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 createVlanPcpAction(ByteBuf input, ActionBuilder builder) {
    builder.setType(SetVlanPcp.class);
    VlanPcpActionBuilder vlanBuilder = new VlanPcpActionBuilder();
    vlanBuilder.setVlanPcp(input.readUnsignedByte());
    input.skipBytes(PADDING_IN_SET_VLAN_PCP_ACTION);
    builder.addAugmentation(VlanPcpAction.class, vlanBuilder.build());
    return builder.build();
}

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

License:Open Source License

private static Action createSetNwTosAction(ByteBuf input, ActionBuilder builder) {
    builder.setType(SetNwTos.class);
    NwTosActionBuilder tosBuilder = new NwTosActionBuilder();
    tosBuilder.setNwTos(input.readUnsignedByte());
    builder.addAugmentation(NwTosAction.class, tosBuilder.build());
    input.skipBytes(PADDING_IN_NW_TOS_ACTION);
    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) 
 *///w  w  w .j  a v  a2s .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);
}