2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowjava.protocol.impl.util;
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.UnpooledByteBufAllocator;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
18 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
19 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
20 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
21 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Dscp;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6FlowLabel;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PacketType;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCaseBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCaseBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCaseBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCaseBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCaseBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCaseBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCaseBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCaseBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCaseBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCaseBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCaseBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCaseBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCaseBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCaseBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCaseBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCaseBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCaseBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCaseBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCaseBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCaseBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCaseBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCaseBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCaseBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PacketTypeCaseBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCaseBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCaseBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.op._case.ArpOpBuilder;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.sha._case.ArpShaBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.spa._case.ArpSpaBuilder;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tha._case.ArpThaBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tpa._case.ArpTpaBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.dst._case.EthDstBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.src._case.EthSrcBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.type._case.EthTypeBuilder;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.code._case.Icmpv4CodeBuilder;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.type._case.Icmpv4TypeBuilder;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.code._case.Icmpv6CodeBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.type._case.Icmpv6TypeBuilder;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.phy.port._case.InPhyPortBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.dscp._case.IpDscpBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.ecn._case.IpEcnBuilder;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.proto._case.IpProtoBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.src._case.Ipv4SrcBuilder;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.exthdr._case.Ipv6ExthdrBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.flabel._case.Ipv6FlabelBuilder;
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.sll._case.Ipv6NdSllBuilder;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.target._case.Ipv6NdTargetBuilder;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.tll._case.Ipv6NdTllBuilder;
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.packet.type._case.PacketTypeBuilder;
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder;
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder;
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.dst._case.TcpDstBuilder;
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.src._case.TcpSrcBuilder;
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.dst._case.UdpDstBuilder;
154 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.src._case.UdpSrcBuilder;
155 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;
156 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;
157 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
158 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;
161 * Unit tests for OF13MatchSerializer02.
163 * @author michal.polkorab
165 public class OF13MatchSerializer02Test {
167 private SerializerRegistry registry;
168 private OFSerializer<Match> matchSerializer;
171 * Initializes serializer table and stores correct factory in field.
174 public void startUp() {
175 registry = new SerializerRegistryImpl();
177 matchSerializer = registry.getSerializer(
178 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));
182 * Testing serialization of match.
185 public void testEmptyMatch() {
186 MatchBuilder builder = new MatchBuilder();
187 builder.setType(OxmMatchType.class);
188 Match match = builder.build();
190 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
191 matchSerializer.serialize(match, out);
193 Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
194 Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());
195 Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
199 * Testing serialization of match.
203 MatchBuilder builder = new MatchBuilder();
204 builder.setType(OxmMatchType.class);
205 final List<MatchEntry> entries = new ArrayList<>();
206 MatchEntryBuilder entryBuilder = new MatchEntryBuilder();
207 entryBuilder.setOxmClass(OpenflowBasicClass.class);
208 entryBuilder.setOxmMatchField(InPort.class);
209 entryBuilder.setHasMask(false);
210 InPortCaseBuilder inPortCaseBuilder = new InPortCaseBuilder();
211 InPortBuilder inPortBuilder = new InPortBuilder();
212 inPortBuilder.setPortNumber(new PortNumber(42L));
213 inPortCaseBuilder.setInPort(inPortBuilder.build());
214 entryBuilder.setMatchEntryValue(inPortCaseBuilder.build());
215 entries.add(entryBuilder.build());
216 entryBuilder = new MatchEntryBuilder();
217 entryBuilder.setOxmClass(OpenflowBasicClass.class);
218 entryBuilder.setOxmMatchField(InPhyPort.class);
219 entryBuilder.setHasMask(false);
220 InPhyPortCaseBuilder inPhyPortCaseBuilder = new InPhyPortCaseBuilder();
221 InPhyPortBuilder inPhyPortBuilder = new InPhyPortBuilder();
222 inPhyPortBuilder.setPortNumber(new PortNumber(43L));
223 inPhyPortCaseBuilder.setInPhyPort(inPhyPortBuilder.build());
224 entryBuilder.setMatchEntryValue(inPhyPortCaseBuilder.build());
225 entries.add(entryBuilder.build());
226 entryBuilder = new MatchEntryBuilder();
227 entryBuilder.setOxmClass(OpenflowBasicClass.class);
228 entryBuilder.setOxmMatchField(Metadata.class);
229 entryBuilder.setHasMask(true);
230 MetadataCaseBuilder metaCaseBuilder = new MetadataCaseBuilder();
231 MetadataBuilder metadataBuilder = new MetadataBuilder();
232 metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
233 metadataBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
234 metaCaseBuilder.setMetadata(metadataBuilder.build());
235 entryBuilder.setMatchEntryValue(metaCaseBuilder.build());
236 entries.add(entryBuilder.build());
237 entryBuilder = new MatchEntryBuilder();
238 entryBuilder.setOxmClass(OpenflowBasicClass.class);
239 entryBuilder.setOxmMatchField(EthDst.class);
240 entryBuilder.setHasMask(true);
241 EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();
242 EthDstBuilder ethDstBuilder = new EthDstBuilder();
243 ethDstBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
244 ethDstBuilder.setMask(new byte[]{0,0,0,0,0,5});
245 ethDstCaseBuilder.setEthDst(ethDstBuilder.build());
246 entryBuilder.setMatchEntryValue(ethDstCaseBuilder.build());
247 entries.add(entryBuilder.build());
248 entryBuilder = new MatchEntryBuilder();
249 entryBuilder.setOxmClass(OpenflowBasicClass.class);
250 entryBuilder.setOxmMatchField(EthSrc.class);
251 entryBuilder.setHasMask(true);
252 EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();
253 EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();
254 ethSrcBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
255 ethSrcBuilder.setMask(new byte[]{0,0,0,0,0,2});
256 ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());
257 entryBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());
258 entries.add(entryBuilder.build());
259 entryBuilder = new MatchEntryBuilder();
260 entryBuilder.setOxmClass(OpenflowBasicClass.class);
261 entryBuilder.setOxmMatchField(EthType.class);
262 entryBuilder.setHasMask(false);
263 EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();
264 EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();
265 ethTypeBuilder.setEthType(new EtherType(46));
266 ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());
267 entryBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());
268 entries.add(entryBuilder.build());
269 entryBuilder = new MatchEntryBuilder();
270 entryBuilder.setOxmClass(OpenflowBasicClass.class);
271 entryBuilder.setOxmMatchField(VlanVid.class);
272 entryBuilder.setHasMask(true);
273 final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
274 VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
275 vlanVidBuilder.setVlanVid(45);
276 vlanVidBuilder.setCfiBit(true);
277 vlanVidBuilder.setMask(new byte[]{0,9});
278 vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
279 entryBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
280 entries.add(entryBuilder.build());
281 entryBuilder = new MatchEntryBuilder();
282 entryBuilder.setOxmClass(OpenflowBasicClass.class);
283 entryBuilder.setOxmMatchField(VlanPcp.class);
284 entryBuilder.setHasMask(false);
285 VlanPcpCaseBuilder vlanPcpCaseBuilder = new VlanPcpCaseBuilder();
286 VlanPcpBuilder vlanPcpBuilder = new VlanPcpBuilder();
287 vlanPcpBuilder.setVlanPcp((short) 14);
288 vlanPcpCaseBuilder.setVlanPcp(vlanPcpBuilder.build());
289 entryBuilder.setMatchEntryValue(vlanPcpCaseBuilder.build());
290 entries.add(entryBuilder.build());
291 entryBuilder = new MatchEntryBuilder();
292 entryBuilder.setOxmClass(OpenflowBasicClass.class);
293 entryBuilder.setOxmMatchField(IpDscp.class);
294 entryBuilder.setHasMask(false);
295 IpDscpCaseBuilder ipDscpCaseBuilder = new IpDscpCaseBuilder();
296 IpDscpBuilder ipDscpBuilder = new IpDscpBuilder();
297 ipDscpBuilder.setDscp(new Dscp((short) 48));
298 ipDscpCaseBuilder.setIpDscp(ipDscpBuilder.build());
299 entryBuilder.setMatchEntryValue(ipDscpCaseBuilder.build());
300 entries.add(entryBuilder.build());
301 entryBuilder = new MatchEntryBuilder();
302 entryBuilder.setOxmClass(OpenflowBasicClass.class);
303 entryBuilder.setOxmMatchField(IpEcn.class);
304 entryBuilder.setHasMask(false);
305 IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();
306 IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();
307 ipEcnBuilder.setEcn((short) 49);
308 ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());
309 entryBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());
310 entries.add(entryBuilder.build());
311 entryBuilder = new MatchEntryBuilder();
312 entryBuilder.setOxmClass(OpenflowBasicClass.class);
313 entryBuilder.setOxmMatchField(IpProto.class);
314 entryBuilder.setHasMask(false);
315 IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();
316 IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();
317 ipProtoBuilder.setProtocolNumber((short) 50);
318 ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());
319 entryBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());
320 entries.add(entryBuilder.build());
321 entryBuilder = new MatchEntryBuilder();
322 entryBuilder.setOxmClass(OpenflowBasicClass.class);
323 entryBuilder.setOxmMatchField(Ipv4Src.class);
324 entryBuilder.setHasMask(true);
325 Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();
326 Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();
327 ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));
328 ipv4SrcBuilder.setMask(new byte[]{0,0,0,14});
329 ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());
330 entryBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());
331 entries.add(entryBuilder.build());
332 entryBuilder = new MatchEntryBuilder();
333 entryBuilder.setOxmClass(OpenflowBasicClass.class);
334 entryBuilder.setOxmMatchField(Ipv4Dst.class);
335 entryBuilder.setHasMask(true);
336 Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
337 Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();
338 ipv4DstBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));
339 ipv4DstBuilder.setMask(new byte[]{0,0,0,15});
340 ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());
341 entryBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
342 entries.add(entryBuilder.build());
343 entryBuilder = new MatchEntryBuilder();
344 entryBuilder.setOxmClass(OpenflowBasicClass.class);
345 entryBuilder.setOxmMatchField(TcpSrc.class);
346 entryBuilder.setHasMask(false);
347 TcpSrcCaseBuilder tcpSrcCaseBuilder = new TcpSrcCaseBuilder();
348 TcpSrcBuilder tcpSrcBuilder = new TcpSrcBuilder();
349 tcpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
350 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6653));
351 tcpSrcCaseBuilder.setTcpSrc(tcpSrcBuilder.build());
352 entryBuilder.setMatchEntryValue(tcpSrcCaseBuilder.build());
353 entries.add(entryBuilder.build());
354 entryBuilder = new MatchEntryBuilder();
355 entryBuilder.setOxmClass(OpenflowBasicClass.class);
356 entryBuilder.setOxmMatchField(TcpDst.class);
357 entryBuilder.setHasMask(false);
358 TcpDstCaseBuilder tcpDstCaseBuilder = new TcpDstCaseBuilder();
359 TcpDstBuilder tcpDstBuilder = new TcpDstBuilder();
360 tcpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
361 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6654));
362 tcpDstCaseBuilder.setTcpDst(tcpDstBuilder.build());
363 entryBuilder.setMatchEntryValue(tcpDstCaseBuilder.build());
364 entries.add(entryBuilder.build());
365 entryBuilder = new MatchEntryBuilder();
366 entryBuilder.setOxmClass(OpenflowBasicClass.class);
367 entryBuilder.setOxmMatchField(UdpSrc.class);
368 entryBuilder.setHasMask(false);
369 UdpSrcCaseBuilder udpSrcCaseBuilder = new UdpSrcCaseBuilder();
370 UdpSrcBuilder udpSrcBuilder = new UdpSrcBuilder();
371 udpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
372 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6655));
373 udpSrcCaseBuilder.setUdpSrc(udpSrcBuilder.build());
374 entryBuilder.setMatchEntryValue(udpSrcCaseBuilder.build());
375 entries.add(entryBuilder.build());
376 entryBuilder = new MatchEntryBuilder();
377 entryBuilder.setOxmClass(OpenflowBasicClass.class);
378 entryBuilder.setOxmMatchField(UdpDst.class);
379 entryBuilder.setHasMask(false);
380 UdpDstCaseBuilder udpDstCaseBuilder = new UdpDstCaseBuilder();
381 UdpDstBuilder udpDstBuilder = new UdpDstBuilder();
382 udpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
383 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6656));
384 udpDstCaseBuilder.setUdpDst(udpDstBuilder.build());
385 entryBuilder.setMatchEntryValue(udpDstCaseBuilder.build());
386 entries.add(entryBuilder.build());
387 entryBuilder = new MatchEntryBuilder();
388 entryBuilder.setOxmClass(OpenflowBasicClass.class);
389 entryBuilder.setOxmMatchField(SctpSrc.class);
390 entryBuilder.setHasMask(false);
391 SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();
392 SctpSrcBuilder sctpSrcBuilder = new SctpSrcBuilder();
393 sctpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
394 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6657));
395 sctpSrcCaseBuilder.setSctpSrc(sctpSrcBuilder.build());
396 entryBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());
397 entries.add(entryBuilder.build());
398 entryBuilder = new MatchEntryBuilder();
399 entryBuilder.setOxmClass(OpenflowBasicClass.class);
400 entryBuilder.setOxmMatchField(SctpDst.class);
401 entryBuilder.setHasMask(false);
402 SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();
403 SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();
404 sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
405 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6658));
406 sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());
407 entryBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());
408 entries.add(entryBuilder.build());
409 entryBuilder = new MatchEntryBuilder();
410 entryBuilder.setOxmClass(OpenflowBasicClass.class);
411 entryBuilder.setOxmMatchField(Icmpv4Type.class);
412 entryBuilder.setHasMask(false);
413 Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();
414 Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();
415 icmpv4TypeBuilder.setIcmpv4Type((short) 51);
416 icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());
417 entryBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());
418 entries.add(entryBuilder.build());
419 entryBuilder = new MatchEntryBuilder();
420 entryBuilder.setOxmClass(OpenflowBasicClass.class);
421 entryBuilder.setOxmMatchField(Icmpv4Code.class);
422 entryBuilder.setHasMask(false);
423 Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();
424 Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();
425 icmpv4CodeBuilder.setIcmpv4Code((short) 52);
426 icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());
427 entryBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());
428 entries.add(entryBuilder.build());
429 entryBuilder = new MatchEntryBuilder();
430 entryBuilder.setOxmClass(OpenflowBasicClass.class);
431 entryBuilder.setOxmMatchField(ArpOp.class);
432 entryBuilder.setHasMask(false);
433 ArpOpCaseBuilder arpOpCaseBuilder = new ArpOpCaseBuilder();
434 ArpOpBuilder arpOpBuilder = new ArpOpBuilder();
435 arpOpBuilder.setOpCode(53);
436 arpOpCaseBuilder.setArpOp(arpOpBuilder.build());
437 entryBuilder.setMatchEntryValue(arpOpCaseBuilder.build());
438 entries.add(entryBuilder.build());
439 entryBuilder = new MatchEntryBuilder();
440 entryBuilder.setOxmClass(OpenflowBasicClass.class);
441 entryBuilder.setOxmMatchField(ArpSpa.class);
442 entryBuilder.setHasMask(true);
443 ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();
444 ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();
445 arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));
446 arpSpaBuilder.setMask(new byte[]{0,0,0,16});
447 arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());
448 entryBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());
449 entries.add(entryBuilder.build());
450 entryBuilder = new MatchEntryBuilder();
451 entryBuilder.setOxmClass(OpenflowBasicClass.class);
452 entryBuilder.setOxmMatchField(ArpTpa.class);
453 entryBuilder.setHasMask(true);
454 ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();
455 ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();
456 arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.5"));
457 arpTpaBuilder.setMask(new byte[]{0,0,0,17});
458 arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());
459 entryBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());
460 entries.add(entryBuilder.build());
461 entryBuilder = new MatchEntryBuilder();
462 entryBuilder.setOxmClass(OpenflowBasicClass.class);
463 entryBuilder.setOxmMatchField(ArpSha.class);
464 entryBuilder.setHasMask(true);
465 ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();
466 ArpShaBuilder arpShaBuilder = new ArpShaBuilder();
467 arpShaBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));
468 arpShaBuilder.setMask(new byte[]{0,0,4,0,0,6});
469 arpShaCaseBuilder.setArpSha(arpShaBuilder.build());
470 entryBuilder.setMatchEntryValue(arpShaCaseBuilder.build());
471 entries.add(entryBuilder.build());
472 entryBuilder = new MatchEntryBuilder();
473 entryBuilder.setOxmClass(OpenflowBasicClass.class);
474 entryBuilder.setOxmMatchField(ArpTha.class);
475 entryBuilder.setHasMask(true);
476 ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();
477 ArpThaBuilder arpThaBuilder = new ArpThaBuilder();
478 arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
479 arpThaBuilder.setMask(new byte[]{0,0,6,0,0,4});
480 arpThaCaseBuilder.setArpTha(arpThaBuilder.build());
481 entryBuilder.setMatchEntryValue(arpThaCaseBuilder.build());
482 entries.add(entryBuilder.build());
483 entryBuilder = new MatchEntryBuilder();
484 entryBuilder.setOxmClass(OpenflowBasicClass.class);
485 entryBuilder.setOxmMatchField(Ipv6Src.class);
486 entryBuilder.setHasMask(true);
487 Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();
488 Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();
489 ipv6SrcBuilder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));
490 ipv6SrcBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});
491 ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());
492 entryBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());
493 entries.add(entryBuilder.build());
494 entryBuilder = new MatchEntryBuilder();
495 entryBuilder.setOxmClass(OpenflowBasicClass.class);
496 entryBuilder.setOxmMatchField(Ipv6Dst.class);
497 entryBuilder.setHasMask(true);
498 Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();
499 Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();
500 ipv6DstBuilder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));
501 ipv6DstBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});
502 ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());
503 entryBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());
504 entries.add(entryBuilder.build());
505 entryBuilder = new MatchEntryBuilder();
506 entryBuilder.setOxmClass(OpenflowBasicClass.class);
507 entryBuilder.setOxmMatchField(Ipv6Flabel.class);
508 entryBuilder.setHasMask(false);
509 Ipv6FlabelCaseBuilder ipv6FlabelCaseBuilder = new Ipv6FlabelCaseBuilder();
510 Ipv6FlabelBuilder ipv6FlabelBuilder = new Ipv6FlabelBuilder();
511 ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));
512 ipv6FlabelCaseBuilder.setIpv6Flabel(ipv6FlabelBuilder.build());
513 entryBuilder.setMatchEntryValue(ipv6FlabelCaseBuilder.build());
514 entries.add(entryBuilder.build());
515 entryBuilder = new MatchEntryBuilder();
516 entryBuilder.setOxmClass(OpenflowBasicClass.class);
517 entryBuilder.setOxmMatchField(Icmpv6Type.class);
518 entryBuilder.setHasMask(false);
519 Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();
520 Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();
521 icmpv6TypeBuilder.setIcmpv6Type((short) 59);
522 icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());
523 entryBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());
524 entries.add(entryBuilder.build());
525 entryBuilder = new MatchEntryBuilder();
526 entryBuilder.setOxmClass(OpenflowBasicClass.class);
527 entryBuilder.setOxmMatchField(Icmpv6Code.class);
528 entryBuilder.setHasMask(false);
529 Icmpv6CodeCaseBuilder icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();
530 Icmpv6CodeBuilder icmpv6CodeBuilder = new Icmpv6CodeBuilder();
531 icmpv6CodeBuilder.setIcmpv6Code((short) 60);
532 icmpv6CodeCaseBuilder.setIcmpv6Code(icmpv6CodeBuilder.build());
533 entryBuilder.setMatchEntryValue(icmpv6CodeCaseBuilder.build());
534 entries.add(entryBuilder.build());
535 entryBuilder.setOxmClass(OpenflowBasicClass.class);
536 entryBuilder.setOxmMatchField(Ipv6NdTarget.class);
537 entryBuilder.setHasMask(false);
538 Ipv6NdTargetCaseBuilder ipv6NdTargetCaseBuilder = new Ipv6NdTargetCaseBuilder();
539 Ipv6NdTargetBuilder ipv6NdTargetBuilder = new Ipv6NdTargetBuilder();
540 ipv6NdTargetBuilder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));
541 ipv6NdTargetCaseBuilder.setIpv6NdTarget(ipv6NdTargetBuilder.build());
542 entryBuilder.setMatchEntryValue(ipv6NdTargetCaseBuilder.build());
543 entries.add(entryBuilder.build());
544 entryBuilder = new MatchEntryBuilder();
545 entryBuilder.setOxmClass(OpenflowBasicClass.class);
546 entryBuilder.setOxmMatchField(Ipv6NdSll.class);
547 entryBuilder.setHasMask(false);
548 Ipv6NdSllCaseBuilder ipv6NdSllCaseBuilder = new Ipv6NdSllCaseBuilder();
549 Ipv6NdSllBuilder ipv6NdSllBuilder = new Ipv6NdSllBuilder();
550 ipv6NdSllBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
551 ipv6NdSllCaseBuilder.setIpv6NdSll(ipv6NdSllBuilder.build());
552 entryBuilder.setMatchEntryValue(ipv6NdSllCaseBuilder.build());
553 entries.add(entryBuilder.build());
554 entryBuilder = new MatchEntryBuilder();
555 entryBuilder.setOxmClass(OpenflowBasicClass.class);
556 entryBuilder.setOxmMatchField(Ipv6NdTll.class);
557 entryBuilder.setHasMask(false);
558 Ipv6NdTllCaseBuilder ipv6NdTllCaseBuilder = new Ipv6NdTllCaseBuilder();
559 Ipv6NdTllBuilder ipv6NdTllBuilder = new Ipv6NdTllBuilder();
560 ipv6NdTllBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
561 ipv6NdTllCaseBuilder.setIpv6NdTll(ipv6NdTllBuilder.build());
562 entryBuilder.setMatchEntryValue(ipv6NdTllCaseBuilder.build());
563 entries.add(entryBuilder.build());
564 entryBuilder = new MatchEntryBuilder();
565 entryBuilder.setOxmClass(OpenflowBasicClass.class);
566 entryBuilder.setOxmMatchField(MplsLabel.class);
567 entryBuilder.setHasMask(false);
568 MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();
569 MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();
570 mplsLabelBuilder.setMplsLabel(61L);
571 mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());
572 entryBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());
573 entries.add(entryBuilder.build());
574 entryBuilder = new MatchEntryBuilder();
575 entryBuilder.setOxmClass(OpenflowBasicClass.class);
576 entryBuilder.setOxmMatchField(MplsTc.class);
577 entryBuilder.setHasMask(false);
578 MplsTcCaseBuilder mplsTcCaseBuilder = new MplsTcCaseBuilder();
579 MplsTcBuilder mplsTcBuilder = new MplsTcBuilder();
580 mplsTcBuilder.setTc((short) 62);
581 mplsTcCaseBuilder.setMplsTc(mplsTcBuilder.build());
582 entryBuilder.setMatchEntryValue(mplsTcCaseBuilder.build());
583 entries.add(entryBuilder.build());
584 entryBuilder = new MatchEntryBuilder();
585 entryBuilder.setOxmClass(OpenflowBasicClass.class);
586 entryBuilder.setOxmMatchField(MplsBos.class);
587 entryBuilder.setHasMask(false);
588 MplsBosCaseBuilder mplsBosCaseBuilder = new MplsBosCaseBuilder();
589 MplsBosBuilder mplsBosBuilder = new MplsBosBuilder();
590 mplsBosBuilder.setBos(true);
591 mplsBosCaseBuilder.setMplsBos(mplsBosBuilder.build());
592 entryBuilder.setMatchEntryValue(mplsBosCaseBuilder.build());
593 entries.add(entryBuilder.build());
594 entryBuilder = new MatchEntryBuilder();
595 entryBuilder.setOxmClass(OpenflowBasicClass.class);
596 entryBuilder.setOxmMatchField(PbbIsid.class);
597 entryBuilder.setHasMask(true);
598 PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
599 PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();
600 pbbIsidBuilder.setIsid(64L);
601 pbbIsidBuilder.setMask(new byte[]{0,1,2});
602 pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());
603 entryBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());
604 entries.add(entryBuilder.build());
605 entryBuilder = new MatchEntryBuilder();
606 entryBuilder.setOxmClass(OpenflowBasicClass.class);
607 entryBuilder.setOxmMatchField(TunnelId.class);
608 entryBuilder.setHasMask(true);
609 TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
610 TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
611 tunnelIdBuilder.setTunnelId(new byte[]{0,0,0,0,0,0,0,1});
612 tunnelIdBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
613 tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
614 entryBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
615 entries.add(entryBuilder.build());
616 entryBuilder = new MatchEntryBuilder();
617 entryBuilder.setOxmClass(OpenflowBasicClass.class);
618 entryBuilder.setOxmMatchField(Ipv6Exthdr.class);
619 entryBuilder.setHasMask(true);
620 Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();
621 Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();
622 ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true,
623 false, true, false, true, false, true));
624 ipv6ExthdrBuilder.setMask(new byte[]{0,2});
625 ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());
626 entryBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());
627 entries.add(entryBuilder.build());
628 entryBuilder = new MatchEntryBuilder();
629 entryBuilder.setOxmClass(OpenflowBasicClass.class);
630 entryBuilder.setOxmMatchField(PacketType.class);
631 entryBuilder.setHasMask(false);
632 PacketTypeCaseBuilder packetTypeCaseBuilder = new PacketTypeCaseBuilder();
633 PacketTypeBuilder packetTypeBuilder = new PacketTypeBuilder();
634 packetTypeBuilder.setPacketType(0x1894fL);
635 packetTypeCaseBuilder.setPacketType(packetTypeBuilder.build());
636 entryBuilder.setMatchEntryValue(packetTypeCaseBuilder.build());
637 entries.add(entryBuilder.build());
640 builder.setMatchEntry(entries);
641 Match match = builder.build();
643 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
644 matchSerializer.serialize(match, out);
646 Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
647 Assert.assertEquals("Wrong match length", 432, out.readUnsignedShort());
648 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
649 Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());
650 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
651 Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());
652 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
653 Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());
654 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
655 Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());
656 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
657 Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());
658 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
659 Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
660 Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
661 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
662 Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());
663 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
664 byte[] array = new byte[6];
665 out.readBytes(array);
666 Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
668 out.readBytes(array);
669 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);
670 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
671 Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());
672 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
674 out.readBytes(array);
675 Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
677 out.readBytes(array);
678 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);
679 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
680 Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());
681 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
682 Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());
683 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
684 Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());
685 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
686 Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());
688 out.readBytes(array);
689 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);
690 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
691 Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());
692 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
693 Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());
694 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
695 Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());
696 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
697 Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());
698 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
699 Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());
700 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
701 Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());
702 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
703 Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());
704 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
705 Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());
706 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
707 Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());
708 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
710 out.readBytes(array);
711 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);
713 out.readBytes(array);
714 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);
715 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
716 Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());
717 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
719 out.readBytes(array);
720 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);
722 out.readBytes(array);
723 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);
724 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
725 Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());
726 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
727 Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());
728 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
729 Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());
730 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
731 Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());
732 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
733 Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());
734 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
735 Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());
736 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
737 Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());
738 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
739 Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());
740 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
741 Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());
742 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
743 Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());
744 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
745 Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());
746 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
747 Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());
748 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
749 Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());
750 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
751 Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());
752 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
753 Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());
754 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
755 Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());
756 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
757 Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());
758 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
759 Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());
760 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
761 Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());
762 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
764 out.readBytes(array);
765 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);
767 out.readBytes(array);
768 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);
769 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
770 Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());
771 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
773 out.readBytes(array);
774 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);
776 out.readBytes(array);
777 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);
778 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
779 Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());
780 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
782 out.readBytes(array);
783 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);
785 out.readBytes(array);
786 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);
787 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
788 Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());
789 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
791 out.readBytes(array);
792 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);
794 out.readBytes(array);
795 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);
796 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
797 Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());
798 Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
799 array = new byte[16];
800 out.readBytes(array);
801 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);
802 array = new byte[16];
803 out.readBytes(array);
804 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);
805 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
806 Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());
807 Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
808 array = new byte[16];
809 out.readBytes(array);
810 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);
811 array = new byte[16];
812 out.readBytes(array);
813 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);
814 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
815 Assert.assertEquals("Wrong match entry field & hasMask", 56, out.readUnsignedByte());
816 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte()); //8, out.readUnsignedByte());
817 Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());
818 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
819 Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());
820 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
821 Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());
822 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
823 Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());
824 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
825 Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());
826 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
827 Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());
828 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
829 array = new byte[16];
830 out.readBytes(array);
831 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);
832 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
833 Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());
834 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
836 out.readBytes(array);
837 Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
838 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
839 Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());
840 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
842 out.readBytes(array);
843 Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
844 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
845 Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());
846 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
847 Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());
848 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
849 Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());
850 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
851 Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());
852 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
853 Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());
854 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
855 Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());
856 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
857 Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());
858 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
859 Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());
861 out.readBytes(array);
862 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);
863 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
864 Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());
865 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
866 Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
867 Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
868 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
869 Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());
870 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
871 Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());
873 out.readBytes(array);
874 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);
875 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
876 Assert.assertEquals("Wrong match entry field & hasMask", 0x58, out.readUnsignedByte());
877 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
878 Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedShort());
879 Assert.assertEquals("Wrong match entry mask", 0x894f, out.readUnsignedShort());
880 Assert.assertTrue("Wrong padding", out.readableBytes() == 0);