2 * Copyright (c) 2014 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
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
\r
11 import java.math.BigInteger;
\r
12 import java.util.ArrayList;
\r
13 import java.util.List;
\r
15 import org.junit.Assert;
\r
16 import org.junit.Before;
\r
17 import org.junit.Test;
\r
18 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
\r
19 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;
\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;
\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;
\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;
\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;
\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;
\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;
\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;
\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;
\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;
\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;
\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;
\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;
\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;
\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;
\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;
\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;
\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;
\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;
\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;
\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;
\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;
\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;
\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;
\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;
\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;
\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;
\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;
\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;
\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;
\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;
\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;
\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;
\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;
\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;
\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;
\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;
\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;
\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;
\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;
\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;
\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;
\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;
\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;
\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;
\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;
\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;
\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;
\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;
\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;
\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;
\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;
\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;
\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;
\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;
\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;
\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;
\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;
\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;
\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;
\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;
\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;
\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;
\r
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
\r
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
\r
130 * @author michal.polkorab
\r
133 public class MatchConvertorImplV13Test {
\r
136 * Initializes OpenflowPortsUtil
\r
139 public void startUp() {
\r
140 OpenflowPortsUtil.init();
\r
144 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
146 @Test(expected=NullPointerException.class)
\r
147 public void testEmptyMatch() {
\r
148 MatchBuilder builder = new MatchBuilder();
\r
149 Match match = builder.build();
\r
151 MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
155 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
158 public void testEmptyMatchEntries() {
\r
159 MatchBuilder builder = new MatchBuilder();
\r
160 builder.setType(OxmMatchType.class);
\r
161 List<MatchEntries> entries = new ArrayList<>();
\r
162 builder.setMatchEntries(entries);
\r
163 Match match = builder.build();
\r
165 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
166 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
167 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
169 Assert.assertEquals("Wrong match entries", null, builtMatch.getEthernetMatch());
\r
170 Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv4Match());
\r
171 Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv6Match());
\r
172 Assert.assertEquals("Wrong match entries", null, builtMatch.getInPhyPort());
\r
173 Assert.assertEquals("Wrong match entries", null, builtMatch.getInPort());
\r
174 Assert.assertEquals("Wrong match entries", null, builtMatch.getIpMatch());
\r
175 Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer3Match());
\r
176 Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer4Match());
\r
177 Assert.assertEquals("Wrong match entries", null, builtMatch.getMetadata());
\r
178 Assert.assertEquals("Wrong match entries", null, builtMatch.getProtocolMatchFields());
\r
179 Assert.assertEquals("Wrong match entries", null, builtMatch.getVlanMatch());
\r
180 Assert.assertEquals("Wrong match entries", null, builtMatch.getTunnel());
\r
184 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
187 public void testWithMatchEntriesNoMasks() {
\r
188 MatchBuilder builder = new MatchBuilder();
\r
189 builder.setType(OxmMatchType.class);
\r
190 List<MatchEntries> entries = new ArrayList<>();
\r
191 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
192 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
193 entriesBuilder.setOxmMatchField(InPort.class);
\r
194 entriesBuilder.setHasMask(false);
\r
195 PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();
\r
196 portNumberBuilder.setPortNumber(new PortNumber(1L));
\r
197 entriesBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
\r
198 entries.add(entriesBuilder.build());
\r
199 entriesBuilder = new MatchEntriesBuilder();
\r
200 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
201 entriesBuilder.setOxmMatchField(InPhyPort.class);
\r
202 entriesBuilder.setHasMask(false);
\r
203 portNumberBuilder = new PortNumberMatchEntryBuilder();
\r
204 portNumberBuilder.setPortNumber(new PortNumber(2L));
\r
205 entriesBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
\r
206 entries.add(entriesBuilder.build());
\r
207 entriesBuilder = new MatchEntriesBuilder();
\r
208 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
209 entriesBuilder.setOxmMatchField(Metadata.class);
\r
210 entriesBuilder.setHasMask(false);
\r
211 MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();
\r
212 metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
\r
213 entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
\r
214 entries.add(entriesBuilder.build());
\r
215 entriesBuilder = new MatchEntriesBuilder();
\r
216 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
217 entriesBuilder.setOxmMatchField(EthDst.class);
\r
218 entriesBuilder.setHasMask(false);
\r
219 MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
220 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));
\r
221 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
222 entries.add(entriesBuilder.build());
\r
223 entriesBuilder = new MatchEntriesBuilder();
\r
224 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
225 entriesBuilder.setOxmMatchField(EthSrc.class);
\r
226 entriesBuilder.setHasMask(false);
\r
227 macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
228 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));
\r
229 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
230 entries.add(entriesBuilder.build());
\r
231 entriesBuilder = new MatchEntriesBuilder();
\r
232 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
233 entriesBuilder.setOxmMatchField(EthType.class);
\r
234 entriesBuilder.setHasMask(false);
\r
235 EthTypeMatchEntryBuilder ethTypeBuilder = new EthTypeMatchEntryBuilder();
\r
236 ethTypeBuilder.setEthType(new EtherType(3));
\r
237 entriesBuilder.addAugmentation(EthTypeMatchEntry.class, ethTypeBuilder.build());
\r
238 entries.add(entriesBuilder.build());
\r
239 entriesBuilder = new MatchEntriesBuilder();
\r
240 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
241 entriesBuilder.setOxmMatchField(VlanVid.class);
\r
242 entriesBuilder.setHasMask(false);
\r
243 VlanVidMatchEntryBuilder vlanVidBuilder = new VlanVidMatchEntryBuilder();
\r
244 vlanVidBuilder.setVlanVid(4);
\r
245 vlanVidBuilder.setCfiBit(true);
\r
246 entriesBuilder.addAugmentation(VlanVidMatchEntry.class, vlanVidBuilder.build());
\r
247 entries.add(entriesBuilder.build());
\r
248 entriesBuilder = new MatchEntriesBuilder();
\r
249 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
250 entriesBuilder.setOxmMatchField(VlanPcp.class);
\r
251 entriesBuilder.setHasMask(false);
\r
252 VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();
\r
253 pcpBuilder.setVlanPcp((short) 5);
\r
254 entriesBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());
\r
255 entries.add(entriesBuilder.build());
\r
256 entriesBuilder = new MatchEntriesBuilder();
\r
257 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
258 entriesBuilder.setOxmMatchField(IpDscp.class);
\r
259 entriesBuilder.setHasMask(false);
\r
260 DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();
\r
261 dscpBuilder.setDscp(new Dscp((short) 6));
\r
262 entriesBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());
\r
263 entries.add(entriesBuilder.build());
\r
264 entriesBuilder = new MatchEntriesBuilder();
\r
265 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
266 entriesBuilder.setOxmMatchField(IpEcn.class);
\r
267 entriesBuilder.setHasMask(false);
\r
268 EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();
\r
269 ecnBuilder.setEcn((short) 7);
\r
270 entriesBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());
\r
271 entries.add(entriesBuilder.build());
\r
272 entriesBuilder = new MatchEntriesBuilder();
\r
273 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
274 entriesBuilder.setOxmMatchField(IpProto.class);
\r
275 entriesBuilder.setHasMask(false);
\r
276 ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();
\r
277 protoBuilder.setProtocolNumber((short) 8);
\r
278 entriesBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());
\r
279 entries.add(entriesBuilder.build());
\r
280 entriesBuilder = new MatchEntriesBuilder();
\r
281 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
282 entriesBuilder.setOxmMatchField(Ipv4Src.class);
\r
283 entriesBuilder.setHasMask(false);
\r
284 Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
285 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));
\r
286 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
287 entries.add(entriesBuilder.build());
\r
288 entriesBuilder = new MatchEntriesBuilder();
\r
289 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
290 entriesBuilder.setOxmMatchField(Ipv4Dst.class);
\r
291 entriesBuilder.setHasMask(false);
\r
292 ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
293 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));
\r
294 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
295 entries.add(entriesBuilder.build());
\r
296 entriesBuilder = new MatchEntriesBuilder();
\r
297 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
298 entriesBuilder.setOxmMatchField(TcpSrc.class);
\r
299 entriesBuilder.setHasMask(false);
\r
300 PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
\r
301 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
302 .inet.types.rev100924.PortNumber(9));
\r
303 entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
304 entries.add(entriesBuilder.build());
\r
305 entriesBuilder = new MatchEntriesBuilder();
\r
306 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
307 entriesBuilder.setOxmMatchField(TcpDst.class);
\r
308 entriesBuilder.setHasMask(false);
\r
309 portBuilder = new PortMatchEntryBuilder();
\r
310 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
311 .inet.types.rev100924.PortNumber(10));
\r
312 entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
313 entries.add(entriesBuilder.build());
\r
314 entriesBuilder = new MatchEntriesBuilder();
\r
315 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
316 entriesBuilder.setOxmMatchField(Icmpv4Type.class);
\r
317 entriesBuilder.setHasMask(false);
\r
318 Icmpv4TypeMatchEntryBuilder icmpv4TypeBuilder = new Icmpv4TypeMatchEntryBuilder();
\r
319 icmpv4TypeBuilder.setIcmpv4Type((short) 15);
\r
320 entriesBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4TypeBuilder.build());
\r
321 entries.add(entriesBuilder.build());
\r
322 entriesBuilder = new MatchEntriesBuilder();
\r
323 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
324 entriesBuilder.setOxmMatchField(Icmpv4Code.class);
\r
325 entriesBuilder.setHasMask(false);
\r
326 Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();
\r
327 icmpv4CodeBuilder.setIcmpv4Code((short) 16);
\r
328 entriesBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());
\r
329 entries.add(entriesBuilder.build());
\r
330 entriesBuilder = new MatchEntriesBuilder();
\r
331 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
332 entriesBuilder.setOxmMatchField(Icmpv6Type.class);
\r
333 entriesBuilder.setHasMask(false);
\r
334 Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();
\r
335 icmpv6TypeBuilder.setIcmpv6Type((short) 19);
\r
336 entriesBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());
\r
337 entries.add(entriesBuilder.build());
\r
338 entriesBuilder = new MatchEntriesBuilder();
\r
339 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
340 entriesBuilder.setOxmMatchField(Icmpv6Code.class);
\r
341 entriesBuilder.setHasMask(false);
\r
342 Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();
\r
343 icmpv6CodeBuilder.setIcmpv6Code((short) 20);
\r
344 entriesBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());
\r
345 entries.add(entriesBuilder.build());
\r
346 entriesBuilder = new MatchEntriesBuilder();
\r
347 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
348 entriesBuilder.setOxmMatchField(MplsLabel.class);
\r
349 entriesBuilder.setHasMask(false);
\r
350 MplsLabelMatchEntryBuilder mplsLabelBuilder = new MplsLabelMatchEntryBuilder();
\r
351 mplsLabelBuilder.setMplsLabel(21L);
\r
352 entriesBuilder.addAugmentation(MplsLabelMatchEntry.class, mplsLabelBuilder.build());
\r
353 entries.add(entriesBuilder.build());
\r
354 entriesBuilder = new MatchEntriesBuilder();
\r
355 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
356 entriesBuilder.setOxmMatchField(MplsTc.class);
\r
357 entriesBuilder.setHasMask(false);
\r
358 TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();
\r
359 tcBuilder.setTc((short) 22);
\r
360 entriesBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());
\r
361 entries.add(entriesBuilder.build());
\r
362 entriesBuilder = new MatchEntriesBuilder();
\r
363 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
364 entriesBuilder.setOxmMatchField(MplsBos.class);
\r
365 entriesBuilder.setHasMask(false);
\r
366 BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();
\r
367 bosBuilder.setBos(true);
\r
368 entriesBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());
\r
369 entries.add(entriesBuilder.build());
\r
370 entriesBuilder = new MatchEntriesBuilder();
\r
371 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
372 entriesBuilder.setOxmMatchField(PbbIsid.class);
\r
373 entriesBuilder.setHasMask(false);
\r
374 IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
\r
375 isidBuilder.setIsid(23L);
\r
376 entriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
\r
377 entries.add(entriesBuilder.build());
\r
378 entriesBuilder = new MatchEntriesBuilder();
\r
379 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
380 entriesBuilder.setOxmMatchField(TunnelId.class);
\r
381 entriesBuilder.setHasMask(false);
\r
382 metadataBuilder = new MetadataMatchEntryBuilder();
\r
383 metadataBuilder.setMetadata(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});
\r
384 entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
\r
385 entries.add(entriesBuilder.build());
\r
386 builder.setMatchEntries(entries);
\r
387 Match match = builder.build();
\r
389 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
390 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
391 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
393 Assert.assertEquals("Wrong in port", "openflow:42:1", builtMatch.getInPort().getValue());
\r
394 Assert.assertEquals("Wrong in phy port", "openflow:42:2", builtMatch.getInPhyPort().getValue());
\r
395 Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());
\r
396 Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());
\r
397 Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());
\r
398 Assert.assertEquals("Wrong eth type", 3, builtMatch.getEthernetMatch().getEthernetType().getType().getValue().intValue());
\r
399 Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());
\r
400 Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());
\r
401 Assert.assertEquals("Wrong vlan pcp", 5, builtMatch.getVlanMatch().getVlanPcp().getValue().intValue());
\r
402 Assert.assertEquals("Wrong ip dscp", 6, builtMatch.getIpMatch().getIpDscp().getValue().intValue());
\r
403 Assert.assertEquals("Wrong ip ecn", 7, builtMatch.getIpMatch().getIpEcn().intValue());
\r
404 Assert.assertEquals("Wrong ip proto", null, builtMatch.getIpMatch().getIpProto());
\r
405 Assert.assertEquals("Wrong ip protocol", 8, builtMatch.getIpMatch().getIpProtocol().intValue());
\r
406 TcpMatch tcpMatch = (TcpMatch) builtMatch.getLayer4Match();
\r
407 Assert.assertEquals("Wrong tcp src port", 9, tcpMatch.getTcpSourcePort().getValue().intValue());
\r
408 Assert.assertEquals("Wrong tcp dst port", 10, tcpMatch.getTcpDestinationPort().getValue().intValue());
\r
409 Assert.assertEquals("Wrong icmpv4 type", 15, builtMatch.getIcmpv4Match().getIcmpv4Type().intValue());
\r
410 Assert.assertEquals("Wrong icmpv4 code", 16, builtMatch.getIcmpv4Match().getIcmpv4Code().intValue());
\r
411 Assert.assertEquals("Wrong icmpv6 type", 19, builtMatch.getIcmpv6Match().getIcmpv6Type().intValue());
\r
412 Assert.assertEquals("Wrong icmpv6 code", 20, builtMatch.getIcmpv6Match().getIcmpv6Code().intValue());
\r
413 Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();
\r
414 Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/32", ipv4Match.getIpv4Source().getValue());
\r
415 Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/32", ipv4Match.getIpv4Destination().getValue());
\r
416 Assert.assertEquals("Wrong mpls label", 21, builtMatch.getProtocolMatchFields().getMplsLabel().intValue());
\r
417 Assert.assertEquals("Wrong mpls bos", 1, builtMatch.getProtocolMatchFields().getMplsBos().intValue());
\r
418 Assert.assertEquals("Wrong mpls tc", 22, builtMatch.getProtocolMatchFields().getMplsTc().intValue());
\r
419 Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());
\r
420 Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),
\r
421 builtMatch.getTunnel().getTunnelId());
\r
425 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
428 public void testWithMatchEntriesWithMasks() {
\r
429 MatchBuilder builder = new MatchBuilder();
\r
430 builder.setType(OxmMatchType.class);
\r
431 List<MatchEntries> entries = new ArrayList<>();
\r
432 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
433 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
434 entriesBuilder.setOxmMatchField(Metadata.class);
\r
435 entriesBuilder.setHasMask(true);
\r
436 MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();
\r
437 metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
\r
438 entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
\r
439 MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
\r
440 maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 1});
\r
441 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
442 entries.add(entriesBuilder.build());
\r
443 entriesBuilder = new MatchEntriesBuilder();
\r
444 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
445 entriesBuilder.setOxmMatchField(EthDst.class);
\r
446 entriesBuilder.setHasMask(true);
\r
447 MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
448 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));
\r
449 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
450 maskBuilder = new MaskMatchEntryBuilder();
\r
451 maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 2});
\r
452 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
453 entries.add(entriesBuilder.build());
\r
454 entriesBuilder = new MatchEntriesBuilder();
\r
455 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
456 entriesBuilder.setOxmMatchField(EthSrc.class);
\r
457 entriesBuilder.setHasMask(true);
\r
458 macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
459 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));
\r
460 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
461 maskBuilder = new MaskMatchEntryBuilder();
\r
462 maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 3});
\r
463 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
464 entries.add(entriesBuilder.build());
\r
465 entriesBuilder = new MatchEntriesBuilder();
\r
466 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
467 entriesBuilder.setOxmMatchField(VlanVid.class);
\r
468 entriesBuilder.setHasMask(true);
\r
469 VlanVidMatchEntryBuilder vlanVidBuilder = new VlanVidMatchEntryBuilder();
\r
470 vlanVidBuilder.setVlanVid(4);
\r
471 vlanVidBuilder.setCfiBit(true);
\r
472 entriesBuilder.addAugmentation(VlanVidMatchEntry.class, vlanVidBuilder.build());
\r
473 maskBuilder = new MaskMatchEntryBuilder();
\r
474 maskBuilder.setMask(new byte[]{0, 4});
\r
475 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
476 entries.add(entriesBuilder.build());
\r
477 entriesBuilder = new MatchEntriesBuilder();
\r
478 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
479 entriesBuilder.setOxmMatchField(Ipv4Src.class);
\r
480 entriesBuilder.setHasMask(true);
\r
481 Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
482 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));
\r
483 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
484 maskBuilder = new MaskMatchEntryBuilder();
\r
485 maskBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});
\r
486 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
487 entries.add(entriesBuilder.build());
\r
488 entriesBuilder = new MatchEntriesBuilder();
\r
489 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
490 entriesBuilder.setOxmMatchField(Ipv4Dst.class);
\r
491 entriesBuilder.setHasMask(true);
\r
492 ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
493 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));
\r
494 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
495 maskBuilder = new MaskMatchEntryBuilder();
\r
496 maskBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});
\r
497 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
498 entries.add(entriesBuilder.build());
\r
499 entriesBuilder = new MatchEntriesBuilder();
\r
500 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
501 entriesBuilder.setOxmMatchField(PbbIsid.class);
\r
502 entriesBuilder.setHasMask(true);
\r
503 IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
\r
504 isidBuilder.setIsid(23L);
\r
505 entriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
\r
506 maskBuilder = new MaskMatchEntryBuilder();
\r
507 maskBuilder.setMask(new byte[]{0, 0, 7});
\r
508 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
509 entries.add(entriesBuilder.build());
\r
510 entriesBuilder = new MatchEntriesBuilder();
\r
511 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
512 entriesBuilder.setOxmMatchField(TunnelId.class);
\r
513 entriesBuilder.setHasMask(true);
\r
514 metadataBuilder = new MetadataMatchEntryBuilder();
\r
515 metadataBuilder.setMetadata(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});
\r
516 entriesBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
\r
517 maskBuilder = new MaskMatchEntryBuilder();
\r
518 maskBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 8});
\r
519 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
520 entries.add(entriesBuilder.build());
\r
521 builder.setMatchEntries(entries);
\r
522 Match match = builder.build();
\r
524 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
525 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
526 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
528 Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());
\r
529 Assert.assertEquals("Wrong metadata mask", new BigInteger(1, new byte[]{0, 0, 0, 0, 0, 0, 0, 1}),
\r
530 builtMatch.getMetadata().getMetadataMask());
\r
531 Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());
\r
532 // Assert.assertEquals("Wrong eth dst mask", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getMask());
\r
533 Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());
\r
534 // Assert.assertEquals("Wrong eth src mask", new MacAddress("00:00:00:00:00:03"), builtMatch.getEthernetMatch().getEthernetSource().getMask());
\r
535 Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());
\r
536 Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());
\r
537 Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();
\r
538 Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/24", ipv4Match.getIpv4Source().getValue());
\r
539 Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/20", ipv4Match.getIpv4Destination().getValue());
\r
540 Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());
\r
541 Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),
\r
542 builtMatch.getTunnel().getTunnelId());
\r
546 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
549 public void testLayer4MatchUdp() {
\r
550 MatchBuilder builder = new MatchBuilder();
\r
551 builder.setType(OxmMatchType.class);
\r
552 List<MatchEntries> entries = new ArrayList<>();
\r
553 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
554 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
555 entriesBuilder.setOxmMatchField(UdpSrc.class);
\r
556 entriesBuilder.setHasMask(false);
\r
557 PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
\r
558 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
559 .inet.types.rev100924.PortNumber(11));
\r
560 entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
561 entries.add(entriesBuilder.build());
\r
562 entriesBuilder = new MatchEntriesBuilder();
\r
563 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
564 entriesBuilder.setOxmMatchField(UdpDst.class);
\r
565 entriesBuilder.setHasMask(false);
\r
566 portBuilder = new PortMatchEntryBuilder();
\r
567 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
568 .inet.types.rev100924.PortNumber(12));
\r
569 entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
570 entries.add(entriesBuilder.build());
\r
571 builder.setMatchEntries(entries);
\r
573 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
574 .MatchBuilder builtMatch = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
576 UdpMatch udpMatch = (UdpMatch) builtMatch.getLayer4Match();
\r
577 Assert.assertEquals("Wrong udp src port", 11, udpMatch.getUdpSourcePort().getValue().intValue());
\r
578 Assert.assertEquals("Wrong udp dst port", 12, udpMatch.getUdpDestinationPort().getValue().intValue());
\r
582 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
585 public void testLayer4MatchSctp() {
\r
586 MatchBuilder builder = new MatchBuilder();
\r
587 builder.setType(OxmMatchType.class);
\r
588 List<MatchEntries> entries = new ArrayList<>();
\r
589 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
590 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
591 entriesBuilder.setOxmMatchField(SctpSrc.class);
\r
592 entriesBuilder.setHasMask(false);
\r
593 PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
\r
594 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
595 .inet.types.rev100924.PortNumber(13));
\r
596 entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
597 entries.add(entriesBuilder.build());
\r
598 entriesBuilder = new MatchEntriesBuilder();
\r
599 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
600 entriesBuilder.setOxmMatchField(SctpDst.class);
\r
601 entriesBuilder.setHasMask(false);
\r
602 portBuilder = new PortMatchEntryBuilder();
\r
603 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
604 .inet.types.rev100924.PortNumber(14));
\r
605 entriesBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
\r
606 entries.add(entriesBuilder.build());
\r
607 entries.add(entriesBuilder.build());
\r
608 builder.setMatchEntries(entries);
\r
610 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
611 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
612 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
614 SctpMatch udpMatch = (SctpMatch) builtMatch.getLayer4Match();
\r
615 Assert.assertEquals("Wrong sctp src port", 13, udpMatch.getSctpSourcePort().getValue().intValue());
\r
616 Assert.assertEquals("Wrong sctp dst port", 14, udpMatch.getSctpDestinationPort().getValue().intValue());
\r
620 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
623 public void testLayer3MatchIpv6() {
\r
624 MatchBuilder builder = new MatchBuilder();
\r
625 builder.setType(OxmMatchType.class);
\r
626 List<MatchEntries> entries = new ArrayList<>();
\r
627 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
628 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
629 entriesBuilder.setOxmMatchField(Ipv6Src.class);
\r
630 entriesBuilder.setHasMask(false);
\r
631 Ipv6AddressMatchEntryBuilder ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();
\r
632 ipv6AddressBuilder.setIpv6Address(new Ipv6Address("0000:0001:0002:0003:0004:0005:0006:0007"));
\r
633 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());
\r
634 entries.add(entriesBuilder.build());
\r
635 entriesBuilder = new MatchEntriesBuilder();
\r
636 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
637 entriesBuilder.setOxmMatchField(Ipv6Dst.class);
\r
638 entriesBuilder.setHasMask(false);
\r
639 ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();
\r
640 ipv6AddressBuilder.setIpv6Address(new Ipv6Address("0001:0002:0003:0004:0005:0006:0007:0008"));
\r
641 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());
\r
642 entries.add(entriesBuilder.build());
\r
643 entriesBuilder = new MatchEntriesBuilder();
\r
644 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
645 entriesBuilder.setOxmMatchField(Ipv6Flabel.class);
\r
646 entriesBuilder.setHasMask(false);
\r
647 Ipv6FlabelMatchEntryBuilder ipv6FlabelBuilder = new Ipv6FlabelMatchEntryBuilder();
\r
648 ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(18L));
\r
649 entriesBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, ipv6FlabelBuilder.build());
\r
650 entries.add(entriesBuilder.build());
\r
651 entriesBuilder = new MatchEntriesBuilder();
\r
652 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
653 entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
\r
654 entriesBuilder.setHasMask(false);
\r
655 ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();
\r
656 ipv6AddressBuilder.setIpv6Address(new Ipv6Address("0002:0003:0004:0005:0006:0007:0008:0009"));
\r
657 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());
\r
658 entries.add(entriesBuilder.build());
\r
659 entriesBuilder = new MatchEntriesBuilder();
\r
660 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
661 entriesBuilder.setOxmMatchField(Ipv6NdSll.class);
\r
662 entriesBuilder.setHasMask(false);
\r
663 MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
664 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:05"));
\r
665 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
666 entries.add(entriesBuilder.build());
\r
667 entriesBuilder = new MatchEntriesBuilder();
\r
668 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
669 entriesBuilder.setOxmMatchField(Ipv6NdTll.class);
\r
670 entriesBuilder.setHasMask(false);
\r
671 macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
672 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:06"));
\r
673 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
674 entries.add(entriesBuilder.build());
\r
675 entriesBuilder = new MatchEntriesBuilder();
\r
676 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
677 entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
\r
678 entriesBuilder.setHasMask(false);
\r
679 PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();
\r
680 pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));
\r
681 entriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
\r
682 builder.setMatchEntries(entries);
\r
683 entries.add(entriesBuilder.build());
\r
685 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
686 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
687 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
689 Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();
\r
690 Assert.assertEquals("Wrong ipv6 src address", "0000:0001:0002:0003:0004:0005:0006:0007",
\r
691 ipv6Match.getIpv6Source().getValue());
\r
692 Assert.assertEquals("Wrong ipv6 dst address", "0001:0002:0003:0004:0005:0006:0007:0008",
\r
693 ipv6Match.getIpv6Destination().getValue());
\r
694 Assert.assertEquals("Wrong ipv6 nd target", "0002:0003:0004:0005:0006:0007:0008:0009",
\r
695 ipv6Match.getIpv6NdTarget().getValue());
\r
696 Assert.assertEquals("Wrong ipv6 flabel", 18, ipv6Match.getIpv6Label().getIpv6Flabel().getValue().intValue());
\r
697 Assert.assertEquals("Wrong ipv6 nd sll", new MacAddress("00:00:00:00:00:05"), ipv6Match.getIpv6NdSll());
\r
698 Assert.assertEquals("Wrong ipv6 nd tll", new MacAddress("00:00:00:00:00:06"), ipv6Match.getIpv6NdTll());
\r
699 Assert.assertEquals("Wrong ipv6 ext header", 358, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());
\r
703 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
706 public void testLayer3MatchIpv6ExtHeader2() {
\r
707 MatchBuilder builder = new MatchBuilder();
\r
708 builder.setType(OxmMatchType.class);
\r
709 List<MatchEntries> entries = new ArrayList<>();
\r
710 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
711 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
712 entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
\r
713 entriesBuilder.setHasMask(true);
\r
714 PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();
\r
715 pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(false, true, false, true, false, true, false, true, false));
\r
716 entriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
\r
717 MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
\r
718 maskBuilder.setMask(new byte[]{1, 2});
\r
719 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
720 entries.add(entriesBuilder.build());
\r
721 builder.setMatchEntries(entries);
\r
723 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
724 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
725 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
727 Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();
\r
728 Assert.assertEquals("Wrong ipv6 ext header", 153, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());
\r
729 Assert.assertEquals("Wrong ipv6 ext header mask", 258, ipv6Match.getIpv6ExtHeader().getIpv6ExthdrMask().intValue());
\r
733 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
736 public void testLayer3MatchArp() {
\r
737 MatchBuilder builder = new MatchBuilder();
\r
738 builder.setType(OxmMatchType.class);
\r
739 List<MatchEntries> entries = new ArrayList<>();
\r
740 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
741 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
742 entriesBuilder.setOxmMatchField(ArpOp.class);
\r
743 entriesBuilder.setHasMask(false);
\r
744 OpCodeMatchEntryBuilder opCodeBuilder = new OpCodeMatchEntryBuilder();
\r
745 opCodeBuilder.setOpCode(17);
\r
746 entriesBuilder.addAugmentation(OpCodeMatchEntry.class, opCodeBuilder.build());
\r
747 entries.add(entriesBuilder.build());
\r
748 entriesBuilder = new MatchEntriesBuilder();
\r
749 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
750 entriesBuilder.setOxmMatchField(ArpSpa.class);
\r
751 entriesBuilder.setHasMask(false);
\r
752 Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
753 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));
\r
754 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
755 entries.add(entriesBuilder.build());
\r
756 entriesBuilder = new MatchEntriesBuilder();
\r
757 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
758 entriesBuilder.setOxmMatchField(ArpTpa.class);
\r
759 entriesBuilder.setHasMask(false);
\r
760 ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
761 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));
\r
762 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
763 entries.add(entriesBuilder.build());
\r
764 entriesBuilder = new MatchEntriesBuilder();
\r
765 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
766 entriesBuilder.setOxmMatchField(ArpSha.class);
\r
767 entriesBuilder.setHasMask(false);
\r
768 MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
769 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
\r
770 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
771 entries.add(entriesBuilder.build());
\r
772 entriesBuilder = new MatchEntriesBuilder();
\r
773 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
774 entriesBuilder.setOxmMatchField(ArpTha.class);
\r
775 entriesBuilder.setHasMask(false);
\r
776 macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
777 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));
\r
778 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
779 entries.add(entriesBuilder.build());
\r
780 builder.setMatchEntries(entries);
\r
782 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
783 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
784 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
786 ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();
\r
787 Assert.assertEquals("Wrong arp op", 17, arpMatch.getArpOp().intValue());
\r
788 Assert.assertEquals("Wrong arp spa", "10.0.0.3/32", arpMatch.getArpSourceTransportAddress().getValue());
\r
789 Assert.assertEquals("Wrong arp tpa", "10.0.0.4/32", arpMatch.getArpTargetTransportAddress().getValue());
\r
790 Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());
\r
791 Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());
\r
795 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(Match, BigInteger, OpenflowVersion)}
\r
798 public void testLayer3MatchArpWithMasks() {
\r
799 MatchBuilder builder = new MatchBuilder();
\r
800 builder.setType(OxmMatchType.class);
\r
801 List<MatchEntries> entries = new ArrayList<>();
\r
802 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
\r
803 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
804 entriesBuilder.setOxmMatchField(ArpSpa.class);
\r
805 entriesBuilder.setHasMask(true);
\r
806 Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
807 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));
\r
808 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
809 MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
\r
810 maskBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});
\r
811 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
812 entries.add(entriesBuilder.build());
\r
813 entriesBuilder = new MatchEntriesBuilder();
\r
814 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
815 entriesBuilder.setOxmMatchField(ArpTpa.class);
\r
816 entriesBuilder.setHasMask(true);
\r
817 ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();
\r
818 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));
\r
819 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());
\r
820 maskBuilder = new MaskMatchEntryBuilder();
\r
821 maskBuilder.setMask(new byte[]{(byte) 255, (byte) 128, 0, 0});
\r
822 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
823 entries.add(entriesBuilder.build());
\r
824 entriesBuilder = new MatchEntriesBuilder();
\r
825 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
826 entriesBuilder.setOxmMatchField(ArpSha.class);
\r
827 entriesBuilder.setHasMask(true);
\r
828 MacAddressMatchEntryBuilder macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
829 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
\r
830 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
831 maskBuilder = new MaskMatchEntryBuilder();
\r
832 maskBuilder.setMask(new byte[]{0, 0, 1, 0, 4, 0});
\r
833 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
834 entries.add(entriesBuilder.build());
\r
835 entriesBuilder = new MatchEntriesBuilder();
\r
836 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
837 entriesBuilder.setOxmMatchField(ArpTha.class);
\r
838 entriesBuilder.setHasMask(true);
\r
839 macAddressBuilder = new MacAddressMatchEntryBuilder();
\r
840 macAddressBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));
\r
841 entriesBuilder.addAugmentation(MacAddressMatchEntry.class, macAddressBuilder.build());
\r
842 maskBuilder = new MaskMatchEntryBuilder();
\r
843 maskBuilder.setMask(new byte[]{1, 1, 1, 2, 2, 2});
\r
844 entriesBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
\r
845 entries.add(entriesBuilder.build());
\r
846 builder.setMatchEntries(entries);
\r
848 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
849 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
850 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
852 ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();
\r
853 Assert.assertEquals("Wrong arp spa", "10.0.0.3/24", arpMatch.getArpSourceTransportAddress().getValue());
\r
854 Assert.assertEquals("Wrong arp tpa", "10.0.0.4/9", arpMatch.getArpTargetTransportAddress().getValue());
\r
855 Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());
\r
856 Assert.assertEquals("Wrong arp sha mask", "00:00:01:00:04:00", arpMatch.getArpSourceHardwareAddress().getMask().getValue());
\r
857 Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());
\r
858 Assert.assertEquals("Wrong arp tha mask", "01:01:01:02:02:02", arpMatch.getArpTargetHardwareAddress().getMask().getValue());
\r