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