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.List;
\r
13 import org.junit.Assert;
\r
14 import org.junit.Before;
\r
15 import org.junit.Test;
\r
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
\r
17 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
\r
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Dscp;
\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6FlowLabel;
\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6LabelBuilder;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4MatchBuilder;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv6MatchBuilder;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMaskBuilder;
\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchArbitraryBitMaskBuilder;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.TunnelIpv4MatchBuilder;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;
\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;
\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.opendaylight.ipv6.arbitrary.bitmask.fields.rev160224.Ipv6ArbitraryMask;
\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;
\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;
\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;
\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha;
\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;
\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;
\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;
\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;
\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;
\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;
\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;
\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;
\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;
\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;
\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;
\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;
\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata;
\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;
\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;
\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;
\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;
\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCase;
\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCase;
\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCase;
\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCase;
\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCase;
\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCase;
\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCase;
\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCase;
\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCase;
\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCase;
\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCase;
\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCase;
\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCase;
\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCase;
\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCase;
\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCase;
\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCase;
\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCase;
\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCase;
\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCase;
\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCase;
\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCase;
\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCase;
\r
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCase;
\r
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCase;
\r
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCase;
\r
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCase;
\r
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCase;
\r
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCase;
\r
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCase;
\r
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCase;
\r
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCase;
\r
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCase;
\r
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCase;
\r
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCase;
\r
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCase;
\r
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCase;
\r
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCase;
\r
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCase;
\r
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCase;
\r
145 * @author michal.polkorab
\r
147 public class MatchConvertorImpl2Test {
\r
149 private static final MatchConvertorImpl convertor = new MatchConvertorImpl();
\r
152 * Initializes OpenflowPortsUtil
\r
155 public void startUp() {
\r
156 OpenflowPortsUtil.init();
\r
160 * Test {@link Convertor#convert(Object)}
\r
163 public void testEmptyAndNullInput() {
\r
164 MatchBuilder builder = new MatchBuilder();
\r
165 Match match = builder.build();
\r
167 List<MatchEntry> entries = convertor.convert(null);
\r
168 Assert.assertEquals("Wrong entries size", 0, entries.size());
\r
170 entries = convertor.convert(match);
\r
171 Assert.assertEquals("Wrong entries size", 0, entries.size());
\r
175 * Test {@link Convertor#convert(Object)}
\r
178 public void testConversion() {
\r
179 MatchBuilder builder = new MatchBuilder();
\r
180 builder.setInPort(new NodeConnectorId("openflow:42:1"));
\r
181 builder.setInPhyPort(new NodeConnectorId("openflow:42:2"));
\r
182 MetadataBuilder metadataBuilder = new MetadataBuilder();
\r
183 metadataBuilder.setMetadata(new BigInteger("3"));
\r
184 builder.setMetadata(metadataBuilder.build());
\r
185 EthernetMatchBuilder ethernetBuilder = new EthernetMatchBuilder();
\r
186 EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
\r
187 ethTypeBuilder.setType(new EtherType(4L));
\r
188 ethernetBuilder.setEthernetType(ethTypeBuilder.build());
\r
189 EthernetSourceBuilder ethSrcBuilder = new EthernetSourceBuilder();
\r
190 ethSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));
\r
191 ethernetBuilder.setEthernetSource(ethSrcBuilder.build());
\r
192 EthernetDestinationBuilder ethDstBuilder = new EthernetDestinationBuilder();
\r
193 ethDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));
\r
194 ethernetBuilder.setEthernetDestination(ethDstBuilder.build());
\r
195 builder.setEthernetMatch(ethernetBuilder.build());
\r
196 VlanMatchBuilder vlanBuilder = new VlanMatchBuilder();
\r
197 VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();
\r
198 vlanIdBuilder.setVlanId(new VlanId(7));
\r
199 vlanIdBuilder.setVlanIdPresent(true);
\r
200 vlanBuilder.setVlanId(vlanIdBuilder.build());
\r
201 vlanBuilder.setVlanPcp(new VlanPcp((short) 7));
\r
202 builder.setVlanMatch(vlanBuilder.build());
\r
203 IpMatchBuilder ipMatchBuilder = new IpMatchBuilder();
\r
204 ipMatchBuilder.setIpDscp(new Dscp((short) 8));
\r
205 ipMatchBuilder.setIpEcn((short) 9);
\r
206 ipMatchBuilder.setIpProtocol((short) 10);
\r
207 builder.setIpMatch(ipMatchBuilder.build());
\r
208 TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder();
\r
209 tcpMatchBuilder.setTcpSourcePort(new PortNumber(11));
\r
210 tcpMatchBuilder.setTcpDestinationPort(new PortNumber(12));
\r
211 builder.setLayer4Match(tcpMatchBuilder.build());
\r
212 Icmpv4MatchBuilder icmpv4Builder = new Icmpv4MatchBuilder();
\r
213 icmpv4Builder.setIcmpv4Type((short) 13);
\r
214 icmpv4Builder.setIcmpv4Code((short) 14);
\r
215 builder.setIcmpv4Match(icmpv4Builder.build());
\r
216 Icmpv6MatchBuilder icmpv6Builder = new Icmpv6MatchBuilder();
\r
217 icmpv6Builder.setIcmpv6Type((short) 15);
\r
218 icmpv6Builder.setIcmpv6Code((short) 16);
\r
219 builder.setIcmpv6Match(icmpv6Builder.build());
\r
220 ProtocolMatchFieldsBuilder protoBuilder = new ProtocolMatchFieldsBuilder();
\r
221 protoBuilder.setMplsLabel(17L);
\r
222 protoBuilder.setMplsTc((short) 18);
\r
223 protoBuilder.setMplsBos((short) 19);
\r
224 PbbBuilder pbbBuilder = new PbbBuilder();
\r
225 pbbBuilder.setPbbIsid(20L);
\r
226 protoBuilder.setPbb(pbbBuilder.build());
\r
227 builder.setProtocolMatchFields(protoBuilder.build());
\r
228 TunnelBuilder tunnelBuilder = new TunnelBuilder();
\r
229 tunnelBuilder.setTunnelId(new BigInteger("21"));
\r
230 builder.setTunnel(tunnelBuilder.build());
\r
231 Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();
\r
232 ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("10.0.0.1/32"));
\r
233 ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("10.0.0.2/32"));
\r
234 builder.setLayer3Match(ipv4MatchBuilder.build());
\r
235 Match match = builder.build();
\r
237 List<MatchEntry> entries = convertor.convert(match);
\r
238 Assert.assertEquals("Wrong entries size", 24, entries.size());
\r
239 MatchEntry entry = entries.get(0);
\r
240 checkEntryHeader(entry, InPort.class, false);
\r
241 Assert.assertEquals("Wrong in port", 1, ((InPortCase) entry.getMatchEntryValue()).getInPort()
\r
242 .getPortNumber().getValue().intValue());
\r
244 entry = entries.get(1);
\r
245 checkEntryHeader(entry, InPhyPort.class, false);
\r
246 Assert.assertEquals("Wrong in phy port", 2, ((InPhyPortCase) entry.getMatchEntryValue()).
\r
247 getInPhyPort().getPortNumber().getValue().intValue());
\r
249 entry = entries.get(2);
\r
250 checkEntryHeader(entry, Metadata.class, false);
\r
251 Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},
\r
252 ((MetadataCase) entry.getMatchEntryValue()).getMetadata().getMetadata());
\r
253 entry = entries.get(3);
\r
254 checkEntryHeader(entry, EthDst.class, false);
\r
255 Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:06"),
\r
256 ((EthDstCase) entry.getMatchEntryValue()).getEthDst().getMacAddress());
\r
257 entry = entries.get(4);
\r
258 checkEntryHeader(entry, EthSrc.class, false);
\r
259 Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:05"),
\r
260 ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc().getMacAddress());
\r
261 entry = entries.get(5);
\r
262 checkEntryHeader(entry, EthType.class, false);
\r
263 Assert.assertEquals("Wrong eth type", 4, ((EthTypeCase) entry.getMatchEntryValue())
\r
264 .getEthType().getEthType().getValue().intValue());
\r
265 entry = entries.get(6);
\r
266 checkEntryHeader(entry, VlanVid.class, false);
\r
267 Assert.assertEquals("Wrong vlan id", 7, ((VlanVidCase) entry.getMatchEntryValue())
\r
268 .getVlanVid().getVlanVid().intValue());
\r
269 Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue())
\r
270 .getVlanVid().isCfiBit());
\r
271 entry = entries.get(7);
\r
272 checkEntryHeader(entry, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp.class, false);
\r
273 Assert.assertEquals("Wrong vlan pcp", 7, ((VlanPcpCase) entry.getMatchEntryValue())
\r
274 .getVlanPcp().getVlanPcp().intValue());
\r
275 entry = entries.get(8);
\r
276 checkEntryHeader(entry, IpDscp.class, false);
\r
277 Assert.assertEquals("Wrong ip dscp", 8, ((IpDscpCase) entry.getMatchEntryValue())
\r
278 .getIpDscp().getDscp().getValue().intValue());
\r
279 entry = entries.get(9);
\r
280 checkEntryHeader(entry, IpEcn.class, false);
\r
281 Assert.assertEquals("Wrong ip ecn", 9, ((IpEcnCase) entry.getMatchEntryValue())
\r
282 .getIpEcn().getEcn().intValue());
\r
283 entry = entries.get(10);
\r
284 checkEntryHeader(entry, IpProto.class, false);
\r
285 Assert.assertEquals("Wrong ip proto", 10, ((IpProtoCase) entry.getMatchEntryValue())
\r
286 .getIpProto().getProtocolNumber().intValue());
\r
287 entry = entries.get(11);
\r
288 checkEntryHeader(entry, TcpSrc.class, false);
\r
289 Assert.assertEquals("Wrong tcp src", 11, ((TcpSrcCase) entry.getMatchEntryValue())
\r
290 .getTcpSrc().getPort().getValue().intValue());
\r
291 entry = entries.get(12);
\r
292 checkEntryHeader(entry, TcpDst.class, false);
\r
293 Assert.assertEquals("Wrong tcp dst", 12, ((TcpDstCase) entry.getMatchEntryValue())
\r
294 .getTcpDst().getPort().getValue().intValue());
\r
295 entry = entries.get(13);
\r
296 checkEntryHeader(entry, Icmpv4Type.class, false);
\r
297 Assert.assertEquals("Wrong icmpv4 type", 13, ((Icmpv4TypeCase) entry.getMatchEntryValue())
\r
298 .getIcmpv4Type().getIcmpv4Type().intValue());
\r
299 entry = entries.get(14);
\r
300 checkEntryHeader(entry, Icmpv4Code.class, false);
\r
301 Assert.assertEquals("Wrong icmpv4 code", 14, ((Icmpv4CodeCase) entry.getMatchEntryValue())
\r
302 .getIcmpv4Code().getIcmpv4Code().intValue());
\r
303 entry = entries.get(15);
\r
304 checkEntryHeader(entry, Icmpv6Type.class, false);
\r
305 Assert.assertEquals("Wrong icmpv6 type", 15, ((Icmpv6TypeCase) entry.getMatchEntryValue())
\r
306 .getIcmpv6Type().getIcmpv6Type().intValue());
\r
307 entry = entries.get(16);
\r
308 checkEntryHeader(entry, Icmpv6Code.class, false);
\r
309 Assert.assertEquals("Wrong icmpv6 code", 16, ((Icmpv6CodeCase) entry.getMatchEntryValue())
\r
310 .getIcmpv6Code().getIcmpv6Code().intValue());
\r
311 entry = entries.get(17);
\r
312 checkEntryHeader(entry, Ipv4Src.class, false);
\r
313 Assert.assertEquals("Wrong ipv4 src", "10.0.0.1", ((Ipv4SrcCase) entry.getMatchEntryValue())
\r
314 .getIpv4Src().getIpv4Address().getValue());
\r
315 entry = entries.get(18);
\r
316 checkEntryHeader(entry, Ipv4Dst.class, false);
\r
317 Assert.assertEquals("Wrong ipv4 dst", "10.0.0.2", ((Ipv4DstCase) entry.getMatchEntryValue())
\r
318 .getIpv4Dst().getIpv4Address().getValue());
\r
319 entry = entries.get(19);
\r
320 checkEntryHeader(entry, MplsLabel.class, false);
\r
321 Assert.assertEquals("Wrong mpls label", 17, ((MplsLabelCase) entry.getMatchEntryValue())
\r
322 .getMplsLabel().getMplsLabel().intValue());
\r
323 entry = entries.get(20);
\r
324 checkEntryHeader(entry, MplsBos.class, false);
\r
325 Assert.assertEquals("Wrong mpls bos", true, ((MplsBosCase) entry.getMatchEntryValue()).getMplsBos().isBos());
\r
326 entry = entries.get(21);
\r
327 checkEntryHeader(entry, MplsTc.class, false);
\r
328 Assert.assertEquals("Wrong mpls tc", 18, ((MplsTcCase) entry.getMatchEntryValue())
\r
329 .getMplsTc().getTc().intValue());
\r
330 entry = entries.get(22);
\r
331 checkEntryHeader(entry, PbbIsid.class, false);
\r
332 Assert.assertEquals("Wrong pbb isid", 20, ((PbbIsidCase) entry.getMatchEntryValue())
\r
333 .getPbbIsid().getIsid().intValue());
\r
334 entry = entries.get(23);
\r
335 checkEntryHeader(entry, TunnelId.class, false);
\r
336 Assert.assertArrayEquals("Wrong tunnel id", new byte[]{0, 0, 0, 0, 0, 0, 0, 21},
\r
337 ((TunnelIdCase) entry.getMatchEntryValue()).getTunnelId().getTunnelId());
\r
340 private static void checkEntryHeader(MatchEntry entry, Class<? extends MatchField> field, boolean hasMask) {
\r
341 Assert.assertEquals("Wrong oxm class", OpenflowBasicClass.class, entry.getOxmClass());
\r
342 Assert.assertEquals("Wrong oxm field", field, entry.getOxmMatchField());
\r
343 Assert.assertEquals("Wrong hasMask", hasMask, entry.isHasMask());
\r
347 * Test {@link Convertor#convert(Object)}
\r
350 public void testIpv4MatchArbitraryBitMaskwithNoMask(){
\r
351 MatchBuilder builder = new MatchBuilder();
\r
352 Ipv4MatchArbitraryBitMaskBuilder ipv4MatchArbitraryBitMaskBuilder= new Ipv4MatchArbitraryBitMaskBuilder();
\r
353 ipv4MatchArbitraryBitMaskBuilder.setIpv4SourceAddressNoMask( new Ipv4Address("10.2.2.2"));
\r
354 ipv4MatchArbitraryBitMaskBuilder.setIpv4DestinationAddressNoMask( new Ipv4Address("10.1.1.1"));
\r
355 builder.setLayer3Match(ipv4MatchArbitraryBitMaskBuilder.build());
\r
356 Match match = builder.build();
\r
358 List<MatchEntry> entries = convertor.convert(match);
\r
359 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
361 MatchEntry entry = entries.get(0);
\r
362 checkEntryHeader(entry,Ipv4Src.class,false);
\r
363 Assert.assertEquals("wrong Ipv4Address source", "10.2.2.2",((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src().getIpv4Address().getValue());
\r
364 entry = entries.get(1);
\r
365 checkEntryHeader(entry,Ipv4Dst.class,false);
\r
366 Assert.assertEquals("wrong Ipv4Address destination", "10.1.1.1",((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst().getIpv4Address().getValue());
\r
370 * Test {@link Convertor#convert(Object)}
\r
373 public void testIpv4MatchArbitraryBitMaskwithMask(){
\r
374 MatchBuilder builder = new MatchBuilder();
\r
375 Ipv4MatchArbitraryBitMaskBuilder ipv4MatchArbitraryBitMaskBuilder= new Ipv4MatchArbitraryBitMaskBuilder();
\r
376 ipv4MatchArbitraryBitMaskBuilder.setIpv4SourceAddressNoMask( new Ipv4Address("10.2.2.2"));
\r
377 ipv4MatchArbitraryBitMaskBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("0.0.255.0"));
\r
378 ipv4MatchArbitraryBitMaskBuilder.setIpv4DestinationAddressNoMask( new Ipv4Address("10.1.1.1"));
\r
379 ipv4MatchArbitraryBitMaskBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("0.240.0.0"));
\r
380 builder.setLayer3Match(ipv4MatchArbitraryBitMaskBuilder.build());
\r
381 Match match = builder.build();
\r
383 List<MatchEntry> entries = convertor.convert(match);
\r
384 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
386 MatchEntry entry = entries.get(0);
\r
387 checkEntryHeader(entry,Ipv4Src.class,true);
\r
388 Assert.assertEquals("wrong Ipv4Address source", "10.2.2.2",((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src().getIpv4Address().getValue());
\r
389 entry = entries.get(1);
\r
390 checkEntryHeader(entry,Ipv4Dst.class,true);
\r
391 Assert.assertEquals("wrong Ipv4Adress destination", "10.1.1.1",((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst().getIpv4Address().getValue());
\r
395 * Test {@link Convertor#convert(Object)}
\r
398 public void testUdpMatchConversion() {
\r
399 MatchBuilder builder = new MatchBuilder();
\r
400 UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder();
\r
401 udpMatchBuilder.setUdpSourcePort(new PortNumber(11));
\r
402 udpMatchBuilder.setUdpDestinationPort(new PortNumber(12));
\r
403 builder.setLayer4Match(udpMatchBuilder.build());
\r
404 Match match = builder.build();
\r
406 List<MatchEntry> entries = convertor.convert(match);
\r
407 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
408 MatchEntry entry = entries.get(0);
\r
409 checkEntryHeader(entry, UdpSrc.class, false);
\r
410 Assert.assertEquals("Wrong udp src", 11, ((UdpSrcCase) entry.getMatchEntryValue()).getUdpSrc()
\r
411 .getPort().getValue().intValue());
\r
412 entry = entries.get(1);
\r
413 checkEntryHeader(entry, UdpDst.class, false);
\r
414 Assert.assertEquals("Wrong udp dst", 12, ((UdpDstCase) entry.getMatchEntryValue())
\r
415 .getUdpDst().getPort().getValue().intValue());
\r
419 * Test {@link Convertor#convert(Object)}
\r
422 public void testTunnelIpv4MatchConversion() {
\r
423 MatchBuilder builder = new MatchBuilder();
\r
424 TunnelIpv4MatchBuilder tunnelIpv4MatchBuilder = new TunnelIpv4MatchBuilder();
\r
425 tunnelIpv4MatchBuilder.setTunnelIpv4Source(new Ipv4Prefix("10.0.0.1/32"));
\r
426 tunnelIpv4MatchBuilder.setTunnelIpv4Destination(new Ipv4Prefix("10.0.0.2/32"));
\r
427 builder.setLayer3Match(tunnelIpv4MatchBuilder.build());
\r
428 Match match = builder.build();
\r
430 List<MatchEntry> entries = convertor.convert(match);
\r
431 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
432 MatchEntry entry = entries.get(0);
\r
433 checkEntryHeader(entry, Ipv4Src.class, false);
\r
434 Assert.assertEquals("Wrong ipv4 tunnel src", "10.0.0.1", ((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src()
\r
435 .getIpv4Address().getValue());
\r
436 entry = entries.get(1);
\r
437 checkEntryHeader(entry, Ipv4Dst.class, false);
\r
438 Assert.assertEquals("Wrong ipv4 tunnel dst", "10.0.0.2", ((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst()
\r
439 .getIpv4Address().getValue());
\r
443 * Test {@link Convertor#convert(Object)}
\r
446 public void testSctpMatchConversion() {
\r
447 MatchBuilder builder = new MatchBuilder();
\r
448 SctpMatchBuilder sctpMatchBuilder = new SctpMatchBuilder();
\r
449 sctpMatchBuilder.setSctpSourcePort(new PortNumber(11));
\r
450 sctpMatchBuilder.setSctpDestinationPort(new PortNumber(12));
\r
451 builder.setLayer4Match(sctpMatchBuilder.build());
\r
452 Match match = builder.build();
\r
454 List<MatchEntry> entries = convertor.convert(match);
\r
455 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
456 MatchEntry entry = entries.get(0);
\r
457 checkEntryHeader(entry, SctpSrc.class, false);
\r
458 Assert.assertEquals("Wrong sctp src", 11, ((SctpSrcCase) entry.getMatchEntryValue()).getSctpSrc()
\r
459 .getPort().getValue().intValue());
\r
460 entry = entries.get(1);
\r
461 checkEntryHeader(entry, SctpDst.class, false);
\r
462 Assert.assertEquals("Wrong sctp dst", 12, ((SctpDstCase) entry.getMatchEntryValue())
\r
463 .getSctpDst().getPort().getValue().intValue());
\r
467 * Test {@link Convertor#convert(Object)}
\r
470 public void testArpMatchConversion() {
\r
471 MatchBuilder builder = new MatchBuilder();
\r
472 ArpMatchBuilder arpBuilder = new ArpMatchBuilder();
\r
473 arpBuilder.setArpOp(5);
\r
474 arpBuilder.setArpSourceTransportAddress(new Ipv4Prefix("10.0.0.3/32"));
\r
475 arpBuilder.setArpTargetTransportAddress(new Ipv4Prefix("10.0.0.4/32"));
\r
476 ArpSourceHardwareAddressBuilder srcHwBuilder = new ArpSourceHardwareAddressBuilder();
\r
477 srcHwBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));
\r
478 arpBuilder.setArpSourceHardwareAddress(srcHwBuilder.build());
\r
479 ArpTargetHardwareAddressBuilder dstHwBuilder = new ArpTargetHardwareAddressBuilder();
\r
480 dstHwBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));
\r
481 arpBuilder.setArpTargetHardwareAddress(dstHwBuilder.build());
\r
482 builder.setLayer3Match(arpBuilder.build());
\r
483 Match match = builder.build();
\r
485 List<MatchEntry> entries = convertor.convert(match);
\r
486 Assert.assertEquals("Wrong entries size", 5, entries.size());
\r
487 MatchEntry entry = entries.get(0);
\r
488 checkEntryHeader(entry, ArpOp.class, false);
\r
489 Assert.assertEquals("Wrong arp op", 5, ((ArpOpCase) entry.getMatchEntryValue())
\r
490 .getArpOp().getOpCode().intValue());
\r
491 entry = entries.get(1);
\r
492 checkEntryHeader(entry, ArpSpa.class, false);
\r
493 Assert.assertEquals("Wrong arp spa", "10.0.0.3", ((ArpSpaCase) entry.getMatchEntryValue())
\r
494 .getArpSpa().getIpv4Address().getValue());
\r
495 entry = entries.get(2);
\r
496 checkEntryHeader(entry, ArpTpa.class, false);
\r
497 Assert.assertEquals("Wrong arp tpa", "10.0.0.4", ((ArpTpaCase) entry.getMatchEntryValue())
\r
498 .getArpTpa().getIpv4Address().getValue());
\r
499 entry = entries.get(3);
\r
500 checkEntryHeader(entry, ArpSha.class, false);
\r
501 Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:05", ((ArpShaCase) entry.getMatchEntryValue())
\r
502 .getArpSha().getMacAddress().getValue());
\r
503 entry = entries.get(4);
\r
504 checkEntryHeader(entry, ArpTha.class, false);
\r
505 Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:06", ((ArpThaCase) entry.getMatchEntryValue())
\r
506 .getArpTha().getMacAddress().getValue());
\r
510 * Test {@link Convertor#convert(Object)}
\r
513 public void testArpMatchConversionWithMasks() {
\r
514 MatchBuilder builder = new MatchBuilder();
\r
515 ArpMatchBuilder arpBuilder = new ArpMatchBuilder();
\r
516 /* Use canonnical prefixes !!! */
\r
517 arpBuilder.setArpSourceTransportAddress(new Ipv4Prefix("10.0.0.0/8"));
\r
518 arpBuilder.setArpTargetTransportAddress(new Ipv4Prefix("10.0.0.4/31"));
\r
519 ArpSourceHardwareAddressBuilder srcHwBuilder = new ArpSourceHardwareAddressBuilder();
\r
520 srcHwBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));
\r
521 srcHwBuilder.setMask(new MacAddress("00:00:00:00:00:08"));
\r
522 arpBuilder.setArpSourceHardwareAddress(srcHwBuilder.build());
\r
523 ArpTargetHardwareAddressBuilder dstHwBuilder = new ArpTargetHardwareAddressBuilder();
\r
524 dstHwBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));
\r
525 dstHwBuilder.setMask(new MacAddress("00:00:00:00:00:09"));
\r
526 arpBuilder.setArpTargetHardwareAddress(dstHwBuilder.build());
\r
527 builder.setLayer3Match(arpBuilder.build());
\r
528 Match match = builder.build();
\r
530 List<MatchEntry> entries = convertor.convert(match);
\r
531 Assert.assertEquals("Wrong entries size", 4, entries.size());
\r
532 MatchEntry entry = entries.get(0);
\r
533 entry = entries.get(0);
\r
534 checkEntryHeader(entry, ArpSpa.class, true);
\r
535 Assert.assertEquals("Wrong arp spa", "10.0.0.0", ((ArpSpaCase) entry.getMatchEntryValue())
\r
536 .getArpSpa().getIpv4Address().getValue());
\r
537 Assert.assertArrayEquals("Wrong arp spa mask", new byte[]{(byte) 255, 0, 0, 0},
\r
538 ((ArpSpaCase) entry.getMatchEntryValue()).getArpSpa().getMask());
\r
539 entry = entries.get(1);
\r
540 checkEntryHeader(entry, ArpTpa.class, true);
\r
541 Assert.assertEquals("Wrong arp tpa", "10.0.0.4", ((ArpTpaCase) entry.getMatchEntryValue()).getArpTpa()
\r
542 .getIpv4Address().getValue());
\r
543 Assert.assertArrayEquals("Wrong arp tpa mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 254},
\r
544 ((ArpTpaCase) entry.getMatchEntryValue()).getArpTpa().getMask());
\r
545 entry = entries.get(2);
\r
546 checkEntryHeader(entry, ArpSha.class, true);
\r
547 Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:05", ((ArpShaCase) entry.getMatchEntryValue())
\r
548 .getArpSha().getMacAddress().getValue());
\r
549 Assert.assertArrayEquals("Wrong arp sha mask", new byte[]{0, 0, 0, 0, 0, 8},
\r
550 ((ArpShaCase) entry.getMatchEntryValue()).getArpSha().getMask());
\r
551 entry = entries.get(3);
\r
552 checkEntryHeader(entry, ArpTha.class, true);
\r
553 Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:06", ((ArpThaCase) entry.getMatchEntryValue()).getArpTha()
\r
554 .getMacAddress().getValue());
\r
555 Assert.assertArrayEquals("Wrong arp tha mask", new byte[]{0, 0, 0, 0, 0, 9},
\r
556 ((ArpThaCase) entry.getMatchEntryValue()).getArpTha().getMask());
\r
560 * Test {@link Convertor#convert(Object)}
\r
563 public void testIpv6MatchConversion() {
\r
564 MatchBuilder builder = new MatchBuilder();
\r
565 Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
\r
566 ipv6Builder.setIpv6Source(new Ipv6Prefix("::1/128"));
\r
567 ipv6Builder.setIpv6Destination(new Ipv6Prefix("::2/128"));
\r
568 Ipv6LabelBuilder ipv6LabelBuilder = new Ipv6LabelBuilder();
\r
569 ipv6LabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(3L));
\r
570 ipv6Builder.setIpv6Label(ipv6LabelBuilder.build());
\r
571 ipv6Builder.setIpv6NdTarget(new Ipv6Address("::4"));
\r
572 ipv6Builder.setIpv6NdSll(new MacAddress("00:00:00:00:00:05"));
\r
573 ipv6Builder.setIpv6NdTll(new MacAddress("00:00:00:00:00:06"));
\r
574 Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();
\r
575 extHdrBuilder.setIpv6Exthdr(153);
\r
576 ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());
\r
577 builder.setLayer3Match(ipv6Builder.build());
\r
578 Match match = builder.build();
\r
580 List<MatchEntry> entries = convertor.convert(match);
\r
581 Assert.assertEquals("Wrong entries size", 7, entries.size());
\r
582 MatchEntry entry = entries.get(0);
\r
583 /* Due to conversion ambiguities, we always get "has mask" because
\r
584 * an ip with no mask and prefix with /128 (or 32 in v4) cannot
\r
585 * be distinguished */
\r
586 checkEntryHeader(entry, Ipv6Src.class, true);
\r
587 Assert.assertEquals("Wrong ipv6 src", "::1",
\r
588 ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());
\r
589 entry = entries.get(1);
\r
590 checkEntryHeader(entry, Ipv6Dst.class, true);
\r
591 Assert.assertEquals("Wrong ipv6 dst", "::2",
\r
592 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());
\r
593 entry = entries.get(2);
\r
594 checkEntryHeader(entry, Ipv6Flabel.class, false);
\r
595 Assert.assertEquals("Wrong ipv6 flabel", 3,
\r
596 ((Ipv6FlabelCase) entry.getMatchEntryValue()).getIpv6Flabel().getIpv6Flabel().getValue().intValue());
\r
597 entry = entries.get(3);
\r
598 checkEntryHeader(entry, Ipv6NdTarget.class, false);
\r
599 Assert.assertEquals("Wrong ipv6 nd target", "::4",
\r
600 ((Ipv6NdTargetCase) entry.getMatchEntryValue()).getIpv6NdTarget().getIpv6Address().getValue());
\r
601 entry = entries.get(4);
\r
602 checkEntryHeader(entry, Ipv6NdSll.class, false);
\r
603 Assert.assertEquals("Wrong ipv6 nd sll", "00:00:00:00:00:05",
\r
604 ((Ipv6NdSllCase) entry.getMatchEntryValue()).getIpv6NdSll().getMacAddress().getValue());
\r
605 entry = entries.get(5);
\r
606 checkEntryHeader(entry, Ipv6NdTll.class, false);
\r
607 Assert.assertEquals("Wrong ipv6 nd tll", "00:00:00:00:00:06",
\r
608 ((Ipv6NdTllCase) entry.getMatchEntryValue()).getIpv6NdTll().getMacAddress().getValue());
\r
609 entry = entries.get(6);
\r
610 checkEntryHeader(entry, Ipv6Exthdr.class, false);
\r
611 Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(false, true, false, true, false,
\r
612 true, false, true, false), ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getPseudoField());
\r
616 * Test {@link Convertor#convert(Object)}
\r
619 public void testIpv6MatchConversionWithMasks() {
\r
620 MatchBuilder builder = new MatchBuilder();
\r
621 Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
\r
622 ipv6Builder.setIpv6Source(new Ipv6Prefix("::/24"));
\r
623 ipv6Builder.setIpv6Destination(new Ipv6Prefix("::/64"));
\r
624 builder.setLayer3Match(ipv6Builder.build());
\r
625 Match match = builder.build();
\r
627 List<MatchEntry> entries = convertor.convert(match);
\r
628 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
629 MatchEntry entry = entries.get(0);
\r
630 checkEntryHeader(entry, Ipv6Src.class, true);
\r
631 Assert.assertEquals("Wrong ipv6 src", "::",
\r
632 ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());
\r
633 Assert.assertArrayEquals("Wrong ipv6 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, 0, 0, 0, 0,
\r
634 0, 0, 0, 0, 0, 0, 0, 0, 0}, ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getMask());
\r
635 entry = entries.get(1);
\r
636 checkEntryHeader(entry, Ipv6Dst.class, true);
\r
637 Assert.assertEquals("Wrong ipv6 dst", "::",
\r
638 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());
\r
639 Assert.assertArrayEquals("Wrong ipv6 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255,
\r
640 (byte) 255, (byte) 255, (byte) 255, (byte) 255, 0, 0, 0, 0, 0, 0, 0, 0},
\r
641 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getMask());
\r
645 * Test {@link Convertor#convert(Object)}
\r
648 public void testIpv6ExtHeaderConversion() {
\r
649 MatchBuilder builder = new MatchBuilder();
\r
650 Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
\r
651 Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();
\r
652 extHdrBuilder.setIpv6Exthdr(358);
\r
653 extHdrBuilder.setIpv6ExthdrMask(258);
\r
654 ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());
\r
655 builder.setLayer3Match(ipv6Builder.build());
\r
656 Match match = builder.build();
\r
658 List<MatchEntry> entries = convertor.convert(match);
\r
659 Assert.assertEquals("Wrong entries size", 1, entries.size());
\r
660 MatchEntry entry = entries.get(0);
\r
661 checkEntryHeader(entry, Ipv6Exthdr.class, true);
\r
662 Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(true, false, true, false, true, false,
\r
663 true, false, true), ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getPseudoField());
\r
664 Assert.assertArrayEquals("Wrong ipv6 ext hdr mask", new byte[]{1, 2},
\r
665 ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getMask());
\r
669 * Test {@link Convertor#convert(Object)}
\r
672 public void testConversionWithMasks() {
\r
673 MatchBuilder builder = new MatchBuilder();
\r
674 MetadataBuilder metadataBuilder = new MetadataBuilder();
\r
675 metadataBuilder.setMetadata(new BigInteger("3"));
\r
676 metadataBuilder.setMetadataMask(new BigInteger("15"));
\r
677 builder.setMetadata(metadataBuilder.build());
\r
678 EthernetMatchBuilder ethernetBuilder = new EthernetMatchBuilder();
\r
679 EthernetSourceBuilder ethSrcBuilder = new EthernetSourceBuilder();
\r
680 ethSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));
\r
681 ethSrcBuilder.setMask(new MacAddress("00:00:00:00:00:08"));
\r
682 ethernetBuilder.setEthernetSource(ethSrcBuilder.build());
\r
683 EthernetDestinationBuilder ethDstBuilder = new EthernetDestinationBuilder();
\r
684 ethDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));
\r
685 ethDstBuilder.setMask(new MacAddress("00:00:00:00:00:09"));
\r
686 ethernetBuilder.setEthernetDestination(ethDstBuilder.build());
\r
687 builder.setEthernetMatch(ethernetBuilder.build());
\r
688 VlanMatchBuilder vlanBuilder = new VlanMatchBuilder();
\r
689 VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();
\r
690 vlanIdBuilder.setVlanId(new VlanId(0));
\r
691 vlanIdBuilder.setVlanIdPresent(true);
\r
692 vlanBuilder.setVlanId(vlanIdBuilder.build());
\r
693 builder.setVlanMatch(vlanBuilder.build());
\r
694 ProtocolMatchFieldsBuilder protoBuilder = new ProtocolMatchFieldsBuilder();
\r
695 PbbBuilder pbbBuilder = new PbbBuilder();
\r
696 pbbBuilder.setPbbIsid(20L);
\r
697 pbbBuilder.setPbbMask(8L);
\r
698 protoBuilder.setPbb(pbbBuilder.build());
\r
699 builder.setProtocolMatchFields(protoBuilder.build());
\r
700 TunnelBuilder tunnelBuilder = new TunnelBuilder();
\r
701 tunnelBuilder.setTunnelId(new BigInteger("21"));
\r
702 tunnelBuilder.setTunnelMask(new BigInteger("14"));
\r
703 builder.setTunnel(tunnelBuilder.build());
\r
704 Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();
\r
705 ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("10.0.0.0/24"));
\r
706 ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("10.0.0.0/8"));
\r
707 builder.setLayer3Match(ipv4MatchBuilder.build());
\r
708 Match match = builder.build();
\r
710 List<MatchEntry> entries = convertor.convert(match);
\r
711 Assert.assertEquals("Wrong entries size", 8, entries.size());
\r
712 MatchEntry entry = entries.get(0);
\r
713 checkEntryHeader(entry, Metadata.class, true);
\r
714 Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},
\r
715 ((MetadataCase) entry.getMatchEntryValue()).getMetadata().getMetadata());
\r
716 Assert.assertArrayEquals("Wrong metadata mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 15},
\r
717 ((MetadataCase) entry.getMatchEntryValue()).getMetadata().getMask());
\r
718 entry = entries.get(1);
\r
719 checkEntryHeader(entry, EthDst.class, true);
\r
720 Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:06"),
\r
721 ((EthDstCase) entry.getMatchEntryValue()).getEthDst().getMacAddress());
\r
722 Assert.assertArrayEquals("Wrong eth dst mask", new byte[]{0, 0, 0, 0, 0, 9},
\r
723 ((EthDstCase) entry.getMatchEntryValue()).getEthDst().getMask());
\r
724 entry = entries.get(2);
\r
725 checkEntryHeader(entry, EthSrc.class, true);
\r
726 Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:05"),
\r
727 ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc().getMacAddress());
\r
728 Assert.assertArrayEquals("Wrong eth src mask", new byte[]{0, 0, 0, 0, 0, 8},
\r
729 ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc().getMask());
\r
730 entry = entries.get(3);
\r
731 checkEntryHeader(entry, VlanVid.class, true);
\r
732 Assert.assertEquals("Wrong vlan id", 0, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid()
\r
733 .getVlanVid().intValue());
\r
734 Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid()
\r
736 Assert.assertArrayEquals("Wrong vlanId mask", new byte[]{16, 0},
\r
737 ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid().getMask());
\r
738 entry = entries.get(4);
\r
739 checkEntryHeader(entry, Ipv4Src.class, true);
\r
740 Assert.assertEquals("Wrong ipv4 src", "10.0.0.0", ((Ipv4SrcCase) entry.getMatchEntryValue())
\r
741 .getIpv4Src().getIpv4Address().getValue());
\r
742 Assert.assertArrayEquals("Wrong ipv4 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, 0},
\r
743 ((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src().getMask());
\r
744 entry = entries.get(5);
\r
745 checkEntryHeader(entry, Ipv4Dst.class, true);
\r
746 Assert.assertEquals("Wrong ipv4 dst", "10.0.0.0", ((Ipv4DstCase) entry.getMatchEntryValue())
\r
747 .getIpv4Dst().getIpv4Address().getValue());
\r
748 Assert.assertArrayEquals("Wrong ipv4 dst mask", new byte[]{(byte) 255, 0, 0, 0},
\r
749 ((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst().getMask());
\r
750 entry = entries.get(6);
\r
751 checkEntryHeader(entry, PbbIsid.class, true);
\r
752 Assert.assertEquals("Wrong pbb isid", 20, ((PbbIsidCase) entry.getMatchEntryValue())
\r
753 .getPbbIsid().getIsid().intValue());
\r
754 Assert.assertArrayEquals("Wrong pbb isid mask", new byte[]{0, 0, 8},
\r
755 ((PbbIsidCase) entry.getMatchEntryValue()).getPbbIsid().getMask());
\r
756 entry = entries.get(7);
\r
757 checkEntryHeader(entry, TunnelId.class, true);
\r
758 Assert.assertArrayEquals("Wrong tunnel id", new byte[]{0, 0, 0, 0, 0, 0, 0, 21},
\r
759 ((TunnelIdCase) entry.getMatchEntryValue()).getTunnelId().getTunnelId());
\r
760 Assert.assertArrayEquals("Wrong tunnel id mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 14},
\r
761 ((TunnelIdCase) entry.getMatchEntryValue()).getTunnelId().getMask());
\r
765 * Test {@link Convertor#convert(Object)}
\r
768 public void testIpv6MatchArbitraryBitMask(){
\r
769 MatchBuilder builder = new MatchBuilder();
\r
770 Ipv6MatchArbitraryBitMaskBuilder ipv6MatchArbitraryBitMaskBuilder= new Ipv6MatchArbitraryBitMaskBuilder();
\r
771 ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceAddressNoMask(new Ipv6Address("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0"));
\r
772 ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceArbitraryBitmask(new Ipv6ArbitraryMask("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:A555"));
\r
773 ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationAddressNoMask(new Ipv6Address("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0"));
\r
774 ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationArbitraryBitmask(new Ipv6ArbitraryMask("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:A555"));
\r
775 builder.setLayer3Match(ipv6MatchArbitraryBitMaskBuilder.build());
\r
776 Match match = builder.build();
\r
778 List<MatchEntry> entries = convertor.convert(match);
\r
779 Assert.assertEquals("Wrong entries size", 2, entries.size());
\r
781 MatchEntry entry = entries.get(0);
\r
782 checkEntryHeader(entry,Ipv6Src.class,true);
\r
783 Assert.assertEquals("wrong Ipv6Adress source", "fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0",((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());
\r
784 entry = entries.get(1);
\r
785 checkEntryHeader(entry,Ipv6Dst.class,true);
\r
786 Assert.assertEquals("wrong Ipv6Adress destination", "fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0",((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());
\r