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