2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.openflowjava.protocol.impl.util;
\r
10 import io.netty.buffer.ByteBuf;
\r
11 import io.netty.buffer.UnpooledByteBufAllocator;
\r
13 import java.util.ArrayList;
\r
14 import java.util.List;
\r
16 import org.junit.Assert;
\r
17 import org.junit.Before;
\r
18 import org.junit.Test;
\r
19 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
\r
20 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
\r
21 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
\r
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
\r
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
\r
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
\r
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;
\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;
\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;
\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;
\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;
\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;
\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;
\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;
\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;
\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;
\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;
\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;
\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;
\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;
\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;
\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;
\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;
\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;
\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;
\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;
\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;
\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;
\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;
\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;
\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;
\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;
\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;
\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;
\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;
\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;
\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;
\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;
\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;
\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;
\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;
\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;
\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;
\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;
\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;
\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;
\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;
\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;
\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;
\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;
\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;
\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;
\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;
\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;
\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;
\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;
\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;
\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;
\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;
\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;
\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;
\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;
\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;
\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;
\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;
\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;
\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;
\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;
\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
\r
128 * @author michal.polkorab
\r
131 public class OF13MatchSerializerTest2 {
\r
133 private SerializerRegistry registry;
\r
134 private OFSerializer<Match> matchSerializer;
\r
137 * Initializes serializer table and stores correct factory in field
\r
140 public void startUp() {
\r
141 registry = new SerializerRegistryImpl();
\r
143 matchSerializer = registry.getSerializer(
\r
144 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));
\r
148 * Testing serialization of match
\r
151 public void testEmptyMatch() {
\r
152 MatchBuilder builder = new MatchBuilder();
\r
153 builder.setType(OxmMatchType.class);
\r
154 Match match = builder.build();
\r
156 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
157 matchSerializer.serialize(match, out);
\r
159 Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
\r
160 Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());
\r
161 Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
\r
165 * Testing serialization of match
\r
168 public void test() {
\r
169 MatchBuilder builder = new MatchBuilder();
\r
170 builder.setType(OxmMatchType.class);
\r
171 List<MatchEntries> entries = new ArrayList<>();
\r
172 MatchEntriesBuilder entryBuilder = new MatchEntriesBuilder();
\r
173 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
174 entryBuilder.setOxmMatchField(InPort.class);
\r
175 entryBuilder.setHasMask(false);
\r
176 PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();
\r
177 portNumberBuilder.setPortNumber(new PortNumber(42L));
\r
178 entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
\r
179 entries.add(entryBuilder.build());
\r
180 entryBuilder = new MatchEntriesBuilder();
\r
181 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
182 entryBuilder.setOxmMatchField(InPhyPort.class);
\r
183 entryBuilder.setHasMask(false);
\r
184 portNumberBuilder = new PortNumberMatchEntryBuilder();
\r
185 portNumberBuilder.setPortNumber(new PortNumber(43L));
\r
186 entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
\r
187 entries.add(entryBuilder.build());
\r
188 entryBuilder = new MatchEntriesBuilder();
\r
189 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
190 entryBuilder.setOxmMatchField(Metadata.class);
\r
191 entryBuilder.setHasMask(true);
\r
192 MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();
\r
193 metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
\r
194 entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
\r
195 MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
\r
196 maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
\r
197 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
198 entries.add(entryBuilder.build());
\r
199 entryBuilder = new MatchEntriesBuilder();
\r
200 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
201 entryBuilder.setOxmMatchField(EthDst.class);
\r
202 entryBuilder.setHasMask(true);
\r
203 MacAddressMatchEntryBuilder macBuilder = new MacAddressMatchEntryBuilder();
\r
204 macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
\r
205 entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
\r
206 maskBuilder = new MaskMatchEntryBuilder();
\r
207 maskBuilder.setMask(new byte[]{0,0,0,0,0,5});
\r
208 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
209 entries.add(entryBuilder.build());
\r
210 entryBuilder = new MatchEntriesBuilder();
\r
211 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
212 entryBuilder.setOxmMatchField(EthSrc.class);
\r
213 entryBuilder.setHasMask(true);
\r
214 macBuilder = new MacAddressMatchEntryBuilder();
\r
215 macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
\r
216 entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
\r
217 maskBuilder = new MaskMatchEntryBuilder();
\r
218 maskBuilder.setMask(new byte[]{0,0,0,0,0,2});
\r
219 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
220 entries.add(entryBuilder.build());
\r
221 entryBuilder = new MatchEntriesBuilder();
\r
222 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
223 entryBuilder.setOxmMatchField(EthType.class);
\r
224 entryBuilder.setHasMask(false);
\r
225 EthTypeMatchEntryBuilder ethBuilder = new EthTypeMatchEntryBuilder();
\r
226 ethBuilder.setEthType(new EtherType(46));
\r
227 entryBuilder.addAugmentation(EthTypeMatchEntry.class, ethBuilder.build());
\r
228 entries.add(entryBuilder.build());
\r
229 entryBuilder = new MatchEntriesBuilder();
\r
230 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
231 entryBuilder.setOxmMatchField(VlanVid.class);
\r
232 entryBuilder.setHasMask(true);
\r
233 VlanVidMatchEntryBuilder vidBuilder = new VlanVidMatchEntryBuilder();
\r
234 vidBuilder.setCfiBit(true);
\r
235 vidBuilder.setVlanVid(45);
\r
236 entryBuilder.addAugmentation(VlanVidMatchEntry.class, vidBuilder.build());
\r
237 maskBuilder = new MaskMatchEntryBuilder();
\r
238 maskBuilder.setMask(new byte[]{0,9});
\r
239 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
240 entries.add(entryBuilder.build());
\r
241 entryBuilder = new MatchEntriesBuilder();
\r
242 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
243 entryBuilder.setOxmMatchField(VlanPcp.class);
\r
244 entryBuilder.setHasMask(false);
\r
245 VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();
\r
246 pcpBuilder.setVlanPcp((short) 14);
\r
247 entryBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());
\r
248 entries.add(entryBuilder.build());
\r
249 entryBuilder = new MatchEntriesBuilder();
\r
250 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
251 entryBuilder.setOxmMatchField(IpDscp.class);
\r
252 entryBuilder.setHasMask(false);
\r
253 DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();
\r
254 dscpBuilder.setDscp(new Dscp((short) 48));
\r
255 entryBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());
\r
256 entries.add(entryBuilder.build());
\r
257 entryBuilder = new MatchEntriesBuilder();
\r
258 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
259 entryBuilder.setOxmMatchField(IpEcn.class);
\r
260 entryBuilder.setHasMask(false);
\r
261 EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();
\r
262 ecnBuilder.setEcn((short) 49);
\r
263 entryBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());
\r
264 entries.add(entryBuilder.build());
\r
265 entryBuilder = new MatchEntriesBuilder();
\r
266 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
267 entryBuilder.setOxmMatchField(IpProto.class);
\r
268 entryBuilder.setHasMask(false);
\r
269 ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();
\r
270 protoBuilder.setProtocolNumber((short) 50);
\r
271 entryBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());
\r
272 entries.add(entryBuilder.build());
\r
273 entryBuilder = new MatchEntriesBuilder();
\r
274 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
275 entryBuilder.setOxmMatchField(Ipv4Src.class);
\r
276 entryBuilder.setHasMask(true);
\r
277 Ipv4AddressMatchEntryBuilder ipv4Builder = new Ipv4AddressMatchEntryBuilder();
\r
278 ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.1"));
\r
279 entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
\r
280 maskBuilder = new MaskMatchEntryBuilder();
\r
281 maskBuilder.setMask(new byte[]{0,0,0,14});
\r
282 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
283 entries.add(entryBuilder.build());
\r
284 entryBuilder = new MatchEntriesBuilder();
\r
285 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
286 entryBuilder.setOxmMatchField(Ipv4Dst.class);
\r
287 entryBuilder.setHasMask(true);
\r
288 ipv4Builder = new Ipv4AddressMatchEntryBuilder();
\r
289 ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.2"));
\r
290 entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
\r
291 maskBuilder = new MaskMatchEntryBuilder();
\r
292 maskBuilder.setMask(new byte[]{0,0,0,15});
\r
293 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
294 entries.add(entryBuilder.build());
\r
295 entryBuilder = new MatchEntriesBuilder();
\r
296 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
297 entryBuilder.setOxmMatchField(TcpSrc.class);
\r
298 entryBuilder.setHasMask(false);
\r
299 PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
\r
300 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
\r
301 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6653));
\r
302 entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
303 entries.add(entryBuilder.build());
\r
304 entryBuilder = new MatchEntriesBuilder();
\r
305 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
306 entryBuilder.setOxmMatchField(TcpDst.class);
\r
307 entryBuilder.setHasMask(false);
\r
308 portBuilder = new PortMatchEntryBuilder();
\r
309 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
\r
310 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6654));
\r
311 entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
312 entries.add(entryBuilder.build());
\r
313 entryBuilder = new MatchEntriesBuilder();
\r
314 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
315 entryBuilder.setOxmMatchField(UdpSrc.class);
\r
316 entryBuilder.setHasMask(false);
\r
317 portBuilder = new PortMatchEntryBuilder();
\r
318 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
\r
319 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6655));
\r
320 entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
321 entries.add(entryBuilder.build());
\r
322 entryBuilder = new MatchEntriesBuilder();
\r
323 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
324 entryBuilder.setOxmMatchField(UdpDst.class);
\r
325 entryBuilder.setHasMask(false);
\r
326 portBuilder = new PortMatchEntryBuilder();
\r
327 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
\r
328 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6656));
\r
329 entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
330 entries.add(entryBuilder.build());
\r
331 entryBuilder = new MatchEntriesBuilder();
\r
332 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
333 entryBuilder.setOxmMatchField(SctpSrc.class);
\r
334 entryBuilder.setHasMask(false);
\r
335 portBuilder = new PortMatchEntryBuilder();
\r
336 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
\r
337 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6657));
\r
338 entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
339 entries.add(entryBuilder.build());
\r
340 entryBuilder = new MatchEntriesBuilder();
\r
341 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
342 entryBuilder.setOxmMatchField(SctpDst.class);
\r
343 entryBuilder.setHasMask(false);
\r
344 portBuilder = new PortMatchEntryBuilder();
\r
345 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
\r
346 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6658));
\r
347 entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
348 entries.add(entryBuilder.build());
\r
349 entryBuilder = new MatchEntriesBuilder();
\r
350 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
351 entryBuilder.setOxmMatchField(Icmpv4Type.class);
\r
352 entryBuilder.setHasMask(false);
\r
353 Icmpv4TypeMatchEntryBuilder icmpv4typeBuilder = new Icmpv4TypeMatchEntryBuilder();
\r
354 icmpv4typeBuilder.setIcmpv4Type((short) 51);
\r
355 entryBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4typeBuilder.build());
\r
356 entries.add(entryBuilder.build());
\r
357 entryBuilder = new MatchEntriesBuilder();
\r
358 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
359 entryBuilder.setOxmMatchField(Icmpv4Code.class);
\r
360 entryBuilder.setHasMask(false);
\r
361 Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();
\r
362 icmpv4CodeBuilder.setIcmpv4Code((short) 52);
\r
363 entryBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());
\r
364 entries.add(entryBuilder.build());
\r
365 entryBuilder = new MatchEntriesBuilder();
\r
366 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
367 entryBuilder.setOxmMatchField(ArpOp.class);
\r
368 entryBuilder.setHasMask(false);
\r
369 OpCodeMatchEntryBuilder opBuilder = new OpCodeMatchEntryBuilder();
\r
370 opBuilder.setOpCode(53);
\r
371 entryBuilder.addAugmentation(OpCodeMatchEntry.class, opBuilder.build());
\r
372 entries.add(entryBuilder.build());
\r
373 entryBuilder = new MatchEntriesBuilder();
\r
374 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
375 entryBuilder.setOxmMatchField(ArpSpa.class);
\r
376 entryBuilder.setHasMask(true);
\r
377 ipv4Builder = new Ipv4AddressMatchEntryBuilder();
\r
378 ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.4"));
\r
379 entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
\r
380 maskBuilder = new MaskMatchEntryBuilder();
\r
381 maskBuilder.setMask(new byte[]{0,0,0,16});
\r
382 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
383 entries.add(entryBuilder.build());
\r
384 entryBuilder = new MatchEntriesBuilder();
\r
385 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
386 entryBuilder.setOxmMatchField(ArpTpa.class);
\r
387 entryBuilder.setHasMask(true);
\r
388 ipv4Builder = new Ipv4AddressMatchEntryBuilder();
\r
389 ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.5"));
\r
390 entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
\r
391 maskBuilder = new MaskMatchEntryBuilder();
\r
392 maskBuilder.setMask(new byte[]{0,0,0,17});
\r
393 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
394 entries.add(entryBuilder.build());
\r
395 entryBuilder = new MatchEntriesBuilder();
\r
396 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
397 entryBuilder.setOxmMatchField(ArpSha.class);
\r
398 entryBuilder.setHasMask(true);
\r
399 macBuilder = new MacAddressMatchEntryBuilder();
\r
400 macBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));
\r
401 entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
\r
402 maskBuilder = new MaskMatchEntryBuilder();
\r
403 maskBuilder.setMask(new byte[]{0,0,4,0,0,6});
\r
404 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
405 entries.add(entryBuilder.build());
\r
406 entryBuilder = new MatchEntriesBuilder();
\r
407 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
408 entryBuilder.setOxmMatchField(ArpTha.class);
\r
409 entryBuilder.setHasMask(true);
\r
410 macBuilder = new MacAddressMatchEntryBuilder();
\r
411 macBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
\r
412 entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
\r
413 maskBuilder = new MaskMatchEntryBuilder();
\r
414 maskBuilder.setMask(new byte[]{0,0,6,0,0,4});
\r
415 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
416 entries.add(entryBuilder.build());
\r
417 entryBuilder = new MatchEntriesBuilder();
\r
418 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
419 entryBuilder.setOxmMatchField(Ipv6Src.class);
\r
420 entryBuilder.setHasMask(true);
\r
421 Ipv6AddressMatchEntryBuilder ipv6Builder = new Ipv6AddressMatchEntryBuilder();
\r
422 ipv6Builder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));
\r
423 entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
\r
424 maskBuilder = new MaskMatchEntryBuilder();
\r
425 maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});
\r
426 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
427 entries.add(entryBuilder.build());
\r
428 entryBuilder = new MatchEntriesBuilder();
\r
429 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
430 entryBuilder.setOxmMatchField(Ipv6Dst.class);
\r
431 entryBuilder.setHasMask(true);
\r
432 ipv6Builder = new Ipv6AddressMatchEntryBuilder();
\r
433 ipv6Builder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));
\r
434 entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
\r
435 maskBuilder = new MaskMatchEntryBuilder();
\r
436 maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});
\r
437 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
438 entries.add(entryBuilder.build());
\r
439 entryBuilder = new MatchEntriesBuilder();
\r
440 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
441 entryBuilder.setOxmMatchField(Ipv6Flabel.class);
\r
442 entryBuilder.setHasMask(true);
\r
443 Ipv6FlabelMatchEntryBuilder flabelBuilder = new Ipv6FlabelMatchEntryBuilder();
\r
444 flabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));
\r
445 entryBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, flabelBuilder.build());
\r
446 maskBuilder = new MaskMatchEntryBuilder();
\r
447 maskBuilder.setMask(new byte[]{0,1,0,2});
\r
448 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
449 entries.add(entryBuilder.build());
\r
450 entryBuilder = new MatchEntriesBuilder();
\r
451 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
452 entryBuilder.setOxmMatchField(Icmpv6Type.class);
\r
453 entryBuilder.setHasMask(false);
\r
454 Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();
\r
455 icmpv6TypeBuilder.setIcmpv6Type((short) 59);
\r
456 entryBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());
\r
457 entries.add(entryBuilder.build());
\r
458 entryBuilder = new MatchEntriesBuilder();
\r
459 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
460 entryBuilder.setOxmMatchField(Icmpv6Code.class);
\r
461 entryBuilder.setHasMask(false);
\r
462 Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();
\r
463 icmpv6CodeBuilder.setIcmpv6Code((short) 60);
\r
464 entryBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());
\r
465 entries.add(entryBuilder.build());
\r
466 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
467 entryBuilder.setOxmMatchField(Ipv6NdTarget.class);
\r
468 entryBuilder.setHasMask(false);
\r
469 ipv6Builder = new Ipv6AddressMatchEntryBuilder();
\r
470 ipv6Builder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));
\r
471 entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
\r
472 entries.add(entryBuilder.build());
\r
473 entryBuilder = new MatchEntriesBuilder();
\r
474 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
475 entryBuilder.setOxmMatchField(Ipv6NdSll.class);
\r
476 entryBuilder.setHasMask(false);
\r
477 macBuilder = new MacAddressMatchEntryBuilder();
\r
478 macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
\r
479 entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
\r
480 entries.add(entryBuilder.build());
\r
481 entryBuilder = new MatchEntriesBuilder();
\r
482 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
483 entryBuilder.setOxmMatchField(Ipv6NdTll.class);
\r
484 entryBuilder.setHasMask(false);
\r
485 macBuilder = new MacAddressMatchEntryBuilder();
\r
486 macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
\r
487 entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
\r
488 entries.add(entryBuilder.build());
\r
489 entryBuilder = new MatchEntriesBuilder();
\r
490 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
491 entryBuilder.setOxmMatchField(MplsLabel.class);
\r
492 entryBuilder.setHasMask(false);
\r
493 MplsLabelMatchEntryBuilder labelBuilder = new MplsLabelMatchEntryBuilder();
\r
494 labelBuilder.setMplsLabel(61L);
\r
495 entryBuilder.addAugmentation(MplsLabelMatchEntry.class, labelBuilder.build());
\r
496 entries.add(entryBuilder.build());
\r
497 entryBuilder = new MatchEntriesBuilder();
\r
498 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
499 entryBuilder.setOxmMatchField(MplsTc.class);
\r
500 entryBuilder.setHasMask(false);
\r
501 TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();
\r
502 tcBuilder.setTc((short) 62);
\r
503 entryBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());
\r
504 entries.add(entryBuilder.build());
\r
505 entryBuilder = new MatchEntriesBuilder();
\r
506 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
507 entryBuilder.setOxmMatchField(MplsBos.class);
\r
508 entryBuilder.setHasMask(false);
\r
509 BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();
\r
510 bosBuilder.setBos(true);
\r
511 entryBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());
\r
512 entries.add(entryBuilder.build());
\r
514 entryBuilder = new MatchEntriesBuilder();
\r
515 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
516 entryBuilder.setOxmMatchField(PbbIsid.class);
\r
517 entryBuilder.setHasMask(true);
\r
518 IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
\r
519 isidBuilder.setIsid(64L);
\r
520 entryBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
\r
521 maskBuilder = new MaskMatchEntryBuilder();
\r
522 maskBuilder.setMask(new byte[]{0,1,2});
\r
523 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
524 entries.add(entryBuilder.build());
\r
526 entryBuilder = new MatchEntriesBuilder();
\r
527 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
528 entryBuilder.setOxmMatchField(TunnelId.class);
\r
529 entryBuilder.setHasMask(true);
\r
530 metadataBuilder = new MetadataMatchEntryBuilder();
\r
531 metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
\r
532 entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
\r
533 maskBuilder = new MaskMatchEntryBuilder();
\r
534 maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
\r
535 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
536 entries.add(entryBuilder.build());
\r
538 entryBuilder = new MatchEntriesBuilder();
\r
539 entryBuilder.setOxmClass(OpenflowBasicClass.class);
\r
540 entryBuilder.setOxmMatchField(Ipv6Exthdr.class);
\r
541 entryBuilder.setHasMask(true);
\r
542 PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();
\r
543 pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));
\r
544 entryBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
\r
545 maskBuilder = new MaskMatchEntryBuilder();
\r
546 maskBuilder.setMask(new byte[]{0,2});
\r
547 entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
548 entries.add(entryBuilder.build());
\r
552 builder.setMatchEntries(entries);
\r
553 Match match = builder.build();
\r
555 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
556 matchSerializer.serialize(match, out);
\r
558 Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
\r
559 Assert.assertEquals("Wrong match length", 428, out.readUnsignedShort());
\r
560 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
561 Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());
\r
562 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
\r
563 Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());
\r
564 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
565 Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());
\r
566 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
\r
567 Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());
\r
568 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
569 Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());
\r
570 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
\r
571 Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
\r
572 Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
\r
573 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
574 Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());
\r
575 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
\r
576 byte[] array = new byte[6];
\r
577 out.readBytes(array);
\r
578 Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
\r
579 array = new byte[6];
\r
580 out.readBytes(array);
\r
581 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);
\r
582 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
583 Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());
\r
584 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
\r
585 array = new byte[6];
\r
586 out.readBytes(array);
\r
587 Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
\r
588 array = new byte[6];
\r
589 out.readBytes(array);
\r
590 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);
\r
591 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
592 Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());
\r
593 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
594 Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());
\r
595 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
596 Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());
\r
597 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
\r
598 Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());
\r
599 array = new byte[2];
\r
600 out.readBytes(array);
\r
601 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);
\r
602 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
603 Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());
\r
604 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
605 Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());
\r
606 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
607 Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());
\r
608 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
609 Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());
\r
610 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
611 Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());
\r
612 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
613 Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());
\r
614 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
615 Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());
\r
616 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
617 Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());
\r
618 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
619 Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());
\r
620 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
\r
621 array = new byte[4];
\r
622 out.readBytes(array);
\r
623 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);
\r
624 array = new byte[4];
\r
625 out.readBytes(array);
\r
626 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);
\r
627 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
628 Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());
\r
629 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
\r
630 array = new byte[4];
\r
631 out.readBytes(array);
\r
632 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);
\r
633 array = new byte[4];
\r
634 out.readBytes(array);
\r
635 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);
\r
636 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
637 Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());
\r
638 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
639 Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());
\r
640 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
641 Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());
\r
642 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
643 Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());
\r
644 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
645 Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());
\r
646 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
647 Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());
\r
648 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
649 Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());
\r
650 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
651 Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());
\r
652 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
653 Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());
\r
654 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
655 Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());
\r
656 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
657 Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());
\r
658 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
659 Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());
\r
660 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
661 Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());
\r
662 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
663 Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());
\r
664 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
665 Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());
\r
666 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
667 Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());
\r
668 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
669 Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());
\r
670 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
\r
671 Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());
\r
672 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
673 Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());
\r
674 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
\r
675 array = new byte[4];
\r
676 out.readBytes(array);
\r
677 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);
\r
678 array = new byte[4];
\r
679 out.readBytes(array);
\r
680 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);
\r
681 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
682 Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());
\r
683 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
\r
684 array = new byte[4];
\r
685 out.readBytes(array);
\r
686 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);
\r
687 array = new byte[4];
\r
688 out.readBytes(array);
\r
689 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);
\r
690 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
691 Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());
\r
692 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
\r
693 array = new byte[6];
\r
694 out.readBytes(array);
\r
695 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);
\r
696 array = new byte[6];
\r
697 out.readBytes(array);
\r
698 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);
\r
699 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
700 Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());
\r
701 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
\r
702 array = new byte[6];
\r
703 out.readBytes(array);
\r
704 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);
\r
705 array = new byte[6];
\r
706 out.readBytes(array);
\r
707 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);
\r
708 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
709 Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());
\r
710 Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
\r
711 array = new byte[16];
\r
712 out.readBytes(array);
\r
713 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);
\r
714 array = new byte[16];
\r
715 out.readBytes(array);
\r
716 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);
\r
717 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
718 Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());
\r
719 Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
\r
720 array = new byte[16];
\r
721 out.readBytes(array);
\r
722 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);
\r
723 array = new byte[16];
\r
724 out.readBytes(array);
\r
725 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);
\r
726 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
727 Assert.assertEquals("Wrong match entry field & hasMask", 57, out.readUnsignedByte());
\r
728 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
\r
729 Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());
\r
730 array = new byte[4];
\r
731 out.readBytes(array);
\r
732 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,0,2}, array);
\r
733 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
734 Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());
\r
735 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
736 Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());
\r
737 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
738 Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());
\r
739 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
740 Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());
\r
741 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
742 Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());
\r
743 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
\r
744 array = new byte[16];
\r
745 out.readBytes(array);
\r
746 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);
\r
747 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
748 Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());
\r
749 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
\r
750 array = new byte[6];
\r
751 out.readBytes(array);
\r
752 Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
\r
753 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
754 Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());
\r
755 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
\r
756 array = new byte[6];
\r
757 out.readBytes(array);
\r
758 Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
\r
759 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
760 Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());
\r
761 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
\r
762 Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());
\r
763 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
764 Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());
\r
765 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
766 Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());
\r
767 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
768 Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());
\r
769 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
\r
770 Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());
\r
771 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
772 Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());
\r
773 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
\r
774 Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());
\r
775 array = new byte[3];
\r
776 out.readBytes(array);
\r
777 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);
\r
778 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
779 Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());
\r
780 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
\r
781 Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
\r
782 Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
\r
783 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
\r
784 Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());
\r
785 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
\r
786 Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());
\r
787 array = new byte[2];
\r
788 out.readBytes(array);
\r
789 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);
\r
790 Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
\r