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
14 import org.junit.Assert;
\r
15 import org.junit.Before;
\r
16 import org.junit.Test;
\r
17 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
\r
18 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMask;
\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.common.types.rev130731.EtherType;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;
\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;
\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;
\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;
\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;
\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;
\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;
\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCaseBuilder;
\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCaseBuilder;
\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCaseBuilder;
\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCaseBuilder;
\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCaseBuilder;
\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCaseBuilder;
\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCaseBuilder;
\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCaseBuilder;
\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCaseBuilder;
\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCaseBuilder;
\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCaseBuilder;
\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCaseBuilder;
\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCaseBuilder;
\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;
\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCaseBuilder;
\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCaseBuilder;
\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCaseBuilder;
\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;
\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCaseBuilder;
\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;
\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCaseBuilder;
\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCaseBuilder;
\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCaseBuilder;
\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCaseBuilder;
\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCaseBuilder;
\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;
\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCaseBuilder;
\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;
\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;
\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;
\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;
\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder;
\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder;
\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCaseBuilder;
\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCaseBuilder;
\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;
\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder;
\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder;
\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCaseBuilder;
\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;
\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.op._case.ArpOpBuilder;
\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.sha._case.ArpShaBuilder;
\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.spa._case.ArpSpaBuilder;
\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tha._case.ArpThaBuilder;
\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tpa._case.ArpTpaBuilder;
\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.dst._case.EthDstBuilder;
\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.src._case.EthSrcBuilder;
\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.type._case.EthTypeBuilder;
\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.code._case.Icmpv4CodeBuilder;
\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.type._case.Icmpv4TypeBuilder;
\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.code._case.Icmpv6CodeBuilder;
\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.type._case.Icmpv6TypeBuilder;
\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.phy.port._case.InPhyPortBuilder;
\r
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;
\r
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.dscp._case.IpDscpBuilder;
\r
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.ecn._case.IpEcnBuilder;
\r
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.proto._case.IpProtoBuilder;
\r
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;
\r
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.src._case.Ipv4SrcBuilder;
\r
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;
\r
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.exthdr._case.Ipv6ExthdrBuilder;
\r
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.flabel._case.Ipv6FlabelBuilder;
\r
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.sll._case.Ipv6NdSllBuilder;
\r
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.target._case.Ipv6NdTargetBuilder;
\r
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.tll._case.Ipv6NdTllBuilder;
\r
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;
\r
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;
\r
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;
\r
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;
\r
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;
\r
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder;
\r
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder;
\r
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.dst._case.TcpDstBuilder;
\r
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.src._case.TcpSrcBuilder;
\r
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;
\r
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.dst._case.UdpDstBuilder;
\r
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.src._case.UdpSrcBuilder;
\r
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;
\r
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;
\r
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
\r
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;
\r
156 * @author michal.polkorab
\r
158 public class MatchConvertorImplV13Test {
\r
161 * Initializes OpenflowPortsUtil
\r
164 public void startUp() {
\r
165 OpenflowPortsUtil.init();
\r
169 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
171 @Test(expected = NullPointerException.class)
\r
172 public void testEmptyMatch() {
\r
173 final MatchBuilder builder = new MatchBuilder();
\r
175 MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF10);
\r
179 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
182 public void testEmptyMatchEntry() {
\r
184 final MatchBuilder builder = new MatchBuilder();
\r
185 builder.setType(OxmMatchType.class);
\r
186 final List<MatchEntry> entries = new ArrayList<>();
\r
187 builder.setMatchEntry(entries);
\r
188 final Match match = builder.build();
\r
190 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
191 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
192 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
194 Assert.assertEquals("Wrong match entries", null, builtMatch.getEthernetMatch());
\r
195 Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv4Match());
\r
196 Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv6Match());
\r
197 Assert.assertEquals("Wrong match entries", null, builtMatch.getInPhyPort());
\r
198 Assert.assertEquals("Wrong match entries", null, builtMatch.getInPort());
\r
199 Assert.assertEquals("Wrong match entries", null, builtMatch.getIpMatch());
\r
200 Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer3Match());
\r
201 Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer4Match());
\r
202 Assert.assertEquals("Wrong match entries", null, builtMatch.getMetadata());
\r
203 Assert.assertEquals("Wrong match entries", null, builtMatch.getProtocolMatchFields());
\r
204 Assert.assertEquals("Wrong match entries", null, builtMatch.getVlanMatch());
\r
205 Assert.assertEquals("Wrong match entries", null, builtMatch.getTunnel());
\r
210 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
213 public void testWithMatchEntryNoMasks() {
\r
214 final List<MatchEntry> entries = new ArrayList<>();
\r
215 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
216 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
217 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort.class);
\r
218 entriesBuilder.setHasMask(false);
\r
219 final InPortCaseBuilder caseBuilder = new InPortCaseBuilder();
\r
220 final InPortBuilder portBuilder = new InPortBuilder();
\r
221 portBuilder.setPortNumber(new PortNumber(1L));
\r
222 caseBuilder.setInPort(portBuilder.build());
\r
223 entriesBuilder.setMatchEntryValue(caseBuilder.build());
\r
224 entries.add(entriesBuilder.build());
\r
226 final InPhyPortCaseBuilder inPhyPortCaseBuilder = new InPhyPortCaseBuilder();
\r
227 entriesBuilder = new MatchEntryBuilder();
\r
228 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
229 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort.class);
\r
230 entriesBuilder.setHasMask(false);
\r
231 final InPhyPortBuilder inPhyPortBuilder = new InPhyPortBuilder();
\r
232 inPhyPortBuilder.setPortNumber(new PortNumber(2L));
\r
233 inPhyPortCaseBuilder.setInPhyPort(inPhyPortBuilder.build());
\r
234 entriesBuilder.setMatchEntryValue(inPhyPortCaseBuilder.build());
\r
235 entries.add(entriesBuilder.build());
\r
237 entriesBuilder = new MatchEntryBuilder();
\r
238 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
239 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);
\r
240 entriesBuilder.setHasMask(false);
\r
241 final MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();
\r
242 final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();
\r
243 metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
\r
244 metadataCaseBuilder.setMetadata(metadataBuilder.build());
\r
245 entriesBuilder.setMatchEntryValue(metadataCaseBuilder.build());
\r
246 entries.add(entriesBuilder.build());
\r
248 entriesBuilder = new MatchEntryBuilder();
\r
249 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
250 entriesBuilder.setOxmMatchField(EthDst.class);
\r
251 entriesBuilder.setHasMask(false);
\r
252 final EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();
\r
253 final EthDstBuilder ethDstBuilder = new EthDstBuilder();
\r
254 ethDstBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));
\r
255 ethDstCaseBuilder.setEthDst(ethDstBuilder.build());
\r
256 entriesBuilder.setMatchEntryValue(ethDstCaseBuilder.build());
\r
257 entries.add(entriesBuilder.build());
\r
259 entriesBuilder = new MatchEntryBuilder();
\r
260 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
261 entriesBuilder.setOxmMatchField(EthSrc.class);
\r
262 entriesBuilder.setHasMask(false);
\r
263 final EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();
\r
264 final EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();
\r
265 ethSrcBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));
\r
266 ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());
\r
267 entriesBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());
\r
268 entries.add(entriesBuilder.build());
\r
271 entriesBuilder = new MatchEntryBuilder();
\r
272 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
273 entriesBuilder.setOxmMatchField(EthType.class);
\r
274 entriesBuilder.setHasMask(false);
\r
275 final EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();
\r
277 final EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();
\r
278 ethTypeBuilder.setEthType(new EtherType(3));
\r
279 ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());
\r
280 entriesBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());
\r
281 entries.add(entriesBuilder.build());
\r
284 entriesBuilder = new MatchEntryBuilder();
\r
285 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
286 entriesBuilder.setOxmMatchField(VlanVid.class);
\r
287 final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
\r
288 entriesBuilder.setHasMask(false);
\r
289 final VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
\r
290 vlanVidBuilder.setVlanVid(4);
\r
291 vlanVidBuilder.setCfiBit(true);
\r
292 vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
\r
293 entriesBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
\r
294 entries.add(entriesBuilder.build());
\r
296 entriesBuilder = new MatchEntryBuilder();
\r
297 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
298 entriesBuilder.setOxmMatchField(VlanPcp.class);
\r
299 final VlanPcpCaseBuilder vlanPcpCaseBuilder = new VlanPcpCaseBuilder();
\r
300 entriesBuilder.setHasMask(false);
\r
301 final VlanPcpBuilder vlanPcpBuilder = new VlanPcpBuilder();
\r
302 vlanPcpBuilder.setVlanPcp((short) 5);
\r
303 vlanPcpCaseBuilder.setVlanPcp(vlanPcpBuilder.build());
\r
304 entriesBuilder.setMatchEntryValue(vlanPcpCaseBuilder.build());
\r
305 entries.add(entriesBuilder.build());
\r
308 entriesBuilder = new MatchEntryBuilder();
\r
309 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
310 entriesBuilder.setOxmMatchField(IpDscp.class);
\r
311 entriesBuilder.setHasMask(false);
\r
312 final IpDscpCaseBuilder ipDscpCaseBuilder = new IpDscpCaseBuilder();
\r
313 final IpDscpBuilder ipDscpBuilder = new IpDscpBuilder();
\r
314 ipDscpBuilder.setDscp(new Dscp((short) 6));
\r
315 ipDscpCaseBuilder.setIpDscp(ipDscpBuilder.build());
\r
316 entriesBuilder.setMatchEntryValue(ipDscpCaseBuilder.build());
\r
317 entries.add(entriesBuilder.build());
\r
320 entriesBuilder = new MatchEntryBuilder();
\r
321 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
322 entriesBuilder.setOxmMatchField(IpEcn.class);
\r
323 entriesBuilder.setHasMask(false);
\r
324 final IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();
\r
325 final IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();
\r
326 ipEcnBuilder.setEcn((short) 7);
\r
327 ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());
\r
328 entriesBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());
\r
329 entries.add(entriesBuilder.build());
\r
332 entriesBuilder = new MatchEntryBuilder();
\r
333 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
334 entriesBuilder.setOxmMatchField(IpProto.class);
\r
335 final IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();
\r
336 entriesBuilder.setHasMask(false);
\r
337 final IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();
\r
338 ipProtoBuilder.setProtocolNumber((short) 8);
\r
339 ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());
\r
340 entriesBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());
\r
341 entries.add(entriesBuilder.build());
\r
344 entriesBuilder = new MatchEntryBuilder();
\r
345 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
346 entriesBuilder.setOxmMatchField(Ipv4Src.class);
\r
347 entriesBuilder.setHasMask(false);
\r
348 final Ipv4SrcCaseBuilder ipv4AddressBuilder = new Ipv4SrcCaseBuilder();
\r
349 final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();
\r
350 ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));
\r
351 ipv4AddressBuilder.setIpv4Src(ipv4SrcBuilder.build());
\r
352 entriesBuilder.setMatchEntryValue(ipv4AddressBuilder.build());
\r
353 entries.add(entriesBuilder.build());
\r
355 entriesBuilder = new MatchEntryBuilder();
\r
356 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
357 entriesBuilder.setOxmMatchField(Ipv4Dst.class);
\r
358 entriesBuilder.setHasMask(false);
\r
359 final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
\r
360 final Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();
\r
361 ipv4DstBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));
\r
362 ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());
\r
363 entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
\r
364 entries.add(entriesBuilder.build());
\r
366 entriesBuilder = new MatchEntryBuilder();
\r
367 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
368 entriesBuilder.setOxmMatchField(TcpSrc.class);
\r
369 entriesBuilder.setHasMask(false);
\r
370 final TcpSrcCaseBuilder tcpSrcCaseBuilder = new TcpSrcCaseBuilder();
\r
371 final TcpSrcBuilder tcpSrcBuilder = new TcpSrcBuilder();
\r
372 tcpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
373 .inet.types.rev100924.PortNumber(9));
\r
374 tcpSrcCaseBuilder.setTcpSrc(tcpSrcBuilder.build());
\r
375 entriesBuilder.setMatchEntryValue(tcpSrcCaseBuilder.build());
\r
376 entries.add(entriesBuilder.build());
\r
378 entriesBuilder = new MatchEntryBuilder();
\r
379 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
380 entriesBuilder.setOxmMatchField(TcpDst.class);
\r
381 entriesBuilder.setHasMask(false);
\r
382 final TcpDstCaseBuilder tcpDstCaseBuilder = new TcpDstCaseBuilder();
\r
383 final TcpDstBuilder tcpDstBuilder = new TcpDstBuilder();
\r
384 tcpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
385 .inet.types.rev100924.PortNumber(10));
\r
386 tcpDstCaseBuilder.setTcpDst(tcpDstBuilder.build());
\r
387 entriesBuilder.setMatchEntryValue(tcpDstCaseBuilder.build());
\r
388 entries.add(entriesBuilder.build());
\r
390 entriesBuilder = new MatchEntryBuilder();
\r
391 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
392 entriesBuilder.setOxmMatchField(Icmpv4Type.class);
\r
393 entriesBuilder.setHasMask(false);
\r
394 final Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();
\r
395 final Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();
\r
396 icmpv4TypeBuilder.setIcmpv4Type((short) 15);
\r
397 icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());
\r
398 entriesBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());
\r
399 entries.add(entriesBuilder.build());
\r
401 entriesBuilder = new MatchEntryBuilder();
\r
402 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
403 entriesBuilder.setOxmMatchField(Icmpv4Code.class);
\r
404 entriesBuilder.setHasMask(false);
\r
405 final Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();
\r
406 final Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();
\r
407 icmpv4CodeBuilder.setIcmpv4Code((short) 16);
\r
408 icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());
\r
409 entriesBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());
\r
410 entries.add(entriesBuilder.build());
\r
412 entriesBuilder = new MatchEntryBuilder();
\r
413 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
414 entriesBuilder.setOxmMatchField(Icmpv6Type.class);
\r
415 entriesBuilder.setHasMask(false);
\r
416 final Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();
\r
417 final Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();
\r
418 icmpv6TypeBuilder.setIcmpv6Type((short) 19);
\r
419 icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());
\r
420 entriesBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());
\r
421 entries.add(entriesBuilder.build());
\r
423 entriesBuilder = new MatchEntryBuilder();
\r
424 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
425 entriesBuilder.setOxmMatchField(Icmpv6Code.class);
\r
426 entriesBuilder.setHasMask(false);
\r
427 final Icmpv6CodeCaseBuilder icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();
\r
428 final Icmpv6CodeBuilder icmpv6CodeBuilder = new Icmpv6CodeBuilder();
\r
429 icmpv6CodeBuilder.setIcmpv6Code((short) 20);
\r
430 icmpv6CodeCaseBuilder.setIcmpv6Code(icmpv6CodeBuilder.build());
\r
431 entriesBuilder.setMatchEntryValue(icmpv6CodeCaseBuilder.build());
\r
432 entries.add(entriesBuilder.build());
\r
434 entriesBuilder = new MatchEntryBuilder();
\r
435 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
436 entriesBuilder.setOxmMatchField(MplsLabel.class);
\r
437 entriesBuilder.setHasMask(false);
\r
438 final MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();
\r
440 final MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();
\r
441 mplsLabelBuilder.setMplsLabel(21L);
\r
442 mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());
\r
443 entriesBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());
\r
444 entries.add(entriesBuilder.build());
\r
446 entriesBuilder = new MatchEntryBuilder();
\r
447 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
448 entriesBuilder.setOxmMatchField(MplsTc.class);
\r
449 entriesBuilder.setHasMask(false);
\r
450 final MplsTcCaseBuilder mplsTcCaseBuilder = new MplsTcCaseBuilder();
\r
451 final MplsTcBuilder mplsTcBuilder = new MplsTcBuilder();
\r
452 mplsTcBuilder.setTc((short) 22);
\r
453 mplsTcCaseBuilder.setMplsTc(mplsTcBuilder.build());
\r
454 entriesBuilder.setMatchEntryValue(mplsTcCaseBuilder.build());
\r
455 entries.add(entriesBuilder.build());
\r
457 entriesBuilder = new MatchEntryBuilder();
\r
458 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
459 entriesBuilder.setOxmMatchField(MplsBos.class);
\r
460 entriesBuilder.setHasMask(false);
\r
461 final MplsBosCaseBuilder mplsBosCaseBuilder = new MplsBosCaseBuilder();
\r
462 final MplsBosBuilder mplsBosBuilder = new MplsBosBuilder();
\r
463 mplsBosBuilder.setBos(true);
\r
464 mplsBosCaseBuilder.setMplsBos(mplsBosBuilder.build());
\r
465 entriesBuilder.setMatchEntryValue(mplsBosCaseBuilder.build());
\r
466 entries.add(entriesBuilder.build());
\r
468 entriesBuilder = new MatchEntryBuilder();
\r
469 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
470 entriesBuilder.setOxmMatchField(PbbIsid.class);
\r
471 entriesBuilder.setHasMask(false);
\r
472 final PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
\r
473 final PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();
\r
474 pbbIsidBuilder.setIsid(23L);
\r
475 pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());
\r
476 entriesBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());
\r
478 entries.add(entriesBuilder.build());
\r
479 entriesBuilder = new MatchEntryBuilder();
\r
480 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
481 entriesBuilder.setOxmMatchField(TunnelId.class);
\r
482 entriesBuilder.setHasMask(false);
\r
483 final TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
\r
484 final TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
\r
485 tunnelIdBuilder.setTunnelId(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});
\r
486 tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
\r
487 entriesBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
\r
488 entries.add(entriesBuilder.build());
\r
490 final MatchBuilder builder = new MatchBuilder();
\r
491 builder.setMatchEntry(entries);
\r
493 final Match match = builder.build();
\r
495 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
496 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
497 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
499 Assert.assertEquals("Wrong in port", "openflow:42:1", builtMatch.getInPort().getValue());
\r
500 Assert.assertEquals("Wrong in phy port", "openflow:42:2", builtMatch.getInPhyPort().getValue());
\r
501 Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());
\r
502 Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());
\r
503 Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());
\r
504 Assert.assertEquals("Wrong eth type", 3, builtMatch.getEthernetMatch().getEthernetType().getType().getValue().intValue());
\r
505 Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());
\r
506 Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());
\r
507 Assert.assertEquals("Wrong vlan pcp", 5, builtMatch.getVlanMatch().getVlanPcp().getValue().intValue());
\r
508 Assert.assertEquals("Wrong ip dscp", 6, builtMatch.getIpMatch().getIpDscp().getValue().intValue());
\r
509 Assert.assertEquals("Wrong ip ecn", 7, builtMatch.getIpMatch().getIpEcn().intValue());
\r
510 Assert.assertEquals("Wrong ip proto", null, builtMatch.getIpMatch().getIpProto());
\r
511 Assert.assertEquals("Wrong ip protocol", 8, builtMatch.getIpMatch().getIpProtocol().intValue());
\r
513 final TcpMatch tcpMatch = (TcpMatch) builtMatch.getLayer4Match();
\r
514 Assert.assertEquals("Wrong tcp src port", 9, tcpMatch.getTcpSourcePort().getValue().intValue());
\r
515 Assert.assertEquals("Wrong tcp dst port", 10, tcpMatch.getTcpDestinationPort().getValue().intValue());
\r
516 Assert.assertEquals("Wrong icmpv4 type", 15, builtMatch.getIcmpv4Match().getIcmpv4Type().intValue());
\r
517 Assert.assertEquals("Wrong icmpv4 code", 16, builtMatch.getIcmpv4Match().getIcmpv4Code().intValue());
\r
518 Assert.assertEquals("Wrong icmpv6 type", 19, builtMatch.getIcmpv6Match().getIcmpv6Type().intValue());
\r
519 Assert.assertEquals("Wrong icmpv6 code", 20, builtMatch.getIcmpv6Match().getIcmpv6Code().intValue());
\r
521 final Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();
\r
522 Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/32", ipv4Match.getIpv4Source().getValue());
\r
523 Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/32", ipv4Match.getIpv4Destination().getValue());
\r
524 Assert.assertEquals("Wrong mpls label", 21, builtMatch.getProtocolMatchFields().getMplsLabel().intValue());
\r
525 Assert.assertEquals("Wrong mpls bos", 1, builtMatch.getProtocolMatchFields().getMplsBos().intValue());
\r
526 Assert.assertEquals("Wrong mpls tc", 22, builtMatch.getProtocolMatchFields().getMplsTc().intValue());
\r
527 Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());
\r
528 Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),
\r
529 builtMatch.getTunnel().getTunnelId());
\r
533 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
536 public void testWithMatchEntryWithMasks() {
\r
537 final MatchBuilder builder = new MatchBuilder();
\r
538 builder.setType(OxmMatchType.class);
\r
539 final List<MatchEntry> entries = new ArrayList<>();
\r
540 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
541 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
542 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);
\r
543 entriesBuilder.setHasMask(true);
\r
546 final MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();
\r
547 final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();
\r
548 metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
\r
549 metadataBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 1});
\r
550 metadataCaseBuilder.setMetadata(metadataBuilder.build());
\r
551 entriesBuilder.setMatchEntryValue(metadataCaseBuilder.build());
\r
552 entries.add(entriesBuilder.build());
\r
554 entriesBuilder = new MatchEntryBuilder();
\r
555 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
556 entriesBuilder.setOxmMatchField(EthDst.class);
\r
557 entriesBuilder.setHasMask(true);
\r
558 final EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();
\r
559 final EthDstBuilder ethDstBuilder = new EthDstBuilder();
\r
560 ethDstBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));
\r
561 ethDstBuilder.setMask(new byte[]{0, 0, 0, 0, 1, 1});
\r
562 ethDstCaseBuilder.setEthDst(ethDstBuilder.build());
\r
563 entriesBuilder.setMatchEntryValue(ethDstCaseBuilder.build());
\r
564 entries.add(entriesBuilder.build());
\r
566 entriesBuilder = new MatchEntryBuilder();
\r
567 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
568 entriesBuilder.setOxmMatchField(EthSrc.class);
\r
569 entriesBuilder.setHasMask(true);
\r
570 final EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();
\r
571 final EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();
\r
572 ethSrcBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));
\r
573 ethSrcBuilder.setMask(new byte[]{0, 0, 0, 0, 2, 2});
\r
574 ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());
\r
575 entriesBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());
\r
576 entries.add(entriesBuilder.build());
\r
578 entriesBuilder = new MatchEntryBuilder();
\r
579 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
580 entriesBuilder.setOxmMatchField(VlanVid.class);
\r
581 entriesBuilder.setHasMask(true);
\r
582 final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
\r
583 final VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
\r
584 vlanVidBuilder.setVlanVid(4);
\r
585 vlanVidBuilder.setCfiBit(true);
\r
586 vlanVidBuilder.setMask(new byte[]{0, 4});
\r
587 vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
\r
588 entriesBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
\r
589 entries.add(entriesBuilder.build());
\r
591 entriesBuilder = new MatchEntryBuilder();
\r
592 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
593 entriesBuilder.setOxmMatchField(Ipv4Src.class);
\r
594 entriesBuilder.setHasMask(true);
\r
595 final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();
\r
596 final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();
\r
597 ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));
\r
598 ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});
\r
599 ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());
\r
600 entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());
\r
601 entries.add(entriesBuilder.build());
\r
603 entriesBuilder = new MatchEntryBuilder();
\r
604 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
605 entriesBuilder.setOxmMatchField(Ipv4Dst.class);
\r
606 entriesBuilder.setHasMask(true);
\r
607 final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
\r
608 final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();
\r
609 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));
\r
610 ipv4AddressBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});
\r
611 ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());
\r
612 entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
\r
613 entries.add(entriesBuilder.build());
\r
615 entriesBuilder = new MatchEntryBuilder();
\r
616 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
617 entriesBuilder.setOxmMatchField(PbbIsid.class);
\r
618 entriesBuilder.setHasMask(true);
\r
619 final PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
\r
621 final PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();
\r
622 pbbIsidBuilder.setIsid(23L);
\r
623 pbbIsidBuilder.setMask(new byte[]{0, 0, 7});
\r
624 pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());
\r
625 entriesBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());
\r
626 entries.add(entriesBuilder.build());
\r
628 entriesBuilder = new MatchEntryBuilder();
\r
629 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
630 entriesBuilder.setOxmMatchField(TunnelId.class);
\r
631 entriesBuilder.setHasMask(true);
\r
632 final TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
\r
633 final TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
\r
634 tunnelIdBuilder.setTunnelId(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});
\r
635 tunnelIdBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 8});
\r
636 tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
\r
637 entriesBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
\r
638 entries.add(entriesBuilder.build());
\r
639 builder.setMatchEntry(entries);
\r
640 final Match match = builder.build();
\r
642 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
643 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
644 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
646 Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());
\r
647 Assert.assertEquals("Wrong metadata mask", new BigInteger(1, new byte[]{0, 0, 0, 0, 0, 0, 0, 1}),
\r
648 builtMatch.getMetadata().getMetadataMask());
\r
649 Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());
\r
650 Assert.assertEquals("Wrong eth dst mask", new MacAddress("00:00:00:00:01:01"), builtMatch.getEthernetMatch().getEthernetDestination().getMask());
\r
651 Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());
\r
652 Assert.assertEquals("Wrong eth src mask", new MacAddress("00:00:00:00:02:02"), builtMatch.getEthernetMatch().getEthernetSource().getMask());
\r
653 Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());
\r
654 Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());
\r
655 final Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();
\r
656 Assert.assertEquals("Wrong ipv4 src address", "10.0.0.0/24", ipv4Match.getIpv4Source().getValue());
\r
657 Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.0/20", ipv4Match.getIpv4Destination().getValue());
\r
658 Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());
\r
659 Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),
\r
660 builtMatch.getTunnel().getTunnelId());
\r
664 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
667 public void testWithMatchEntryWithArbitraryMasks() {
\r
668 final MatchBuilder builder = new MatchBuilder();
\r
669 builder.setType(OxmMatchType.class);
\r
670 final List<MatchEntry> entries = new ArrayList<>();
\r
671 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
672 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
673 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);
\r
674 entriesBuilder.setHasMask(true);
\r
676 entriesBuilder = new MatchEntryBuilder();
\r
677 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
678 entriesBuilder.setOxmMatchField(Ipv4Src.class);
\r
679 entriesBuilder.setHasMask(true);
\r
680 final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();
\r
681 final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();
\r
682 ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));
\r
683 ipv4SrcBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 255, 0});
\r
684 ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());
\r
685 entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());
\r
686 entries.add(entriesBuilder.build());
\r
688 entriesBuilder = new MatchEntryBuilder();
\r
689 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
690 entriesBuilder.setOxmMatchField(Ipv4Dst.class);
\r
691 entriesBuilder.setHasMask(true);
\r
692 final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
\r
693 final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();
\r
694 ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));
\r
695 ipv4AddressBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 240, 0});
\r
696 ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());
\r
697 entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
\r
698 entries.add(entriesBuilder.build());
\r
700 builder.setMatchEntry(entries);
\r
701 final Match match = builder.build();
\r
703 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
704 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);
\r
705 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();
\r
707 final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();
\r
708 Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1", ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());
\r
709 Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1", ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());
\r
713 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
716 public void testLayer4MatchUdp() {
\r
717 final MatchBuilder builder = new MatchBuilder();
\r
718 builder.setType(OxmMatchType.class);
\r
719 final List<MatchEntry> entries = new ArrayList<>();
\r
720 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
721 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
722 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc.class);
\r
723 entriesBuilder.setHasMask(false);
\r
724 final UdpSrcCaseBuilder udpSrcCaseBuilder = new UdpSrcCaseBuilder();
\r
725 final UdpSrcBuilder portBuilder = new UdpSrcBuilder();
\r
726 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
727 .inet.types.rev100924.PortNumber(11));
\r
728 udpSrcCaseBuilder.setUdpSrc(portBuilder.build());
\r
729 entriesBuilder.setMatchEntryValue(udpSrcCaseBuilder.build());
\r
730 entries.add(entriesBuilder.build());
\r
733 entriesBuilder = new MatchEntryBuilder();
\r
734 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
735 entriesBuilder.setOxmMatchField(UdpDst.class);
\r
736 entriesBuilder.setHasMask(false);
\r
737 final UdpDstCaseBuilder udpDstCaseBuilder = new UdpDstCaseBuilder();
\r
738 final UdpDstBuilder udpDstBuilder = new UdpDstBuilder();
\r
739 udpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
740 .inet.types.rev100924.PortNumber(12));
\r
741 udpDstCaseBuilder.setUdpDst(udpDstBuilder.build());
\r
742 entriesBuilder.setMatchEntryValue(udpDstCaseBuilder.build());
\r
743 entries.add(entriesBuilder.build());
\r
745 builder.setMatchEntry(entries);
\r
747 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
748 .MatchBuilder builtMatch = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
750 final UdpMatch udpMatch = (UdpMatch) builtMatch.getLayer4Match();
\r
751 Assert.assertEquals("Wrong udp src port", 11, udpMatch.getUdpSourcePort().getValue().intValue());
\r
752 Assert.assertEquals("Wrong udp dst port", 12, udpMatch.getUdpDestinationPort().getValue().intValue());
\r
756 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
759 public void testLayer4MatchSctp() {
\r
760 final MatchBuilder builder = new MatchBuilder();
\r
761 builder.setType(OxmMatchType.class);
\r
762 final List<MatchEntry> entries = new ArrayList<>();
\r
763 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
764 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
765 entriesBuilder.setOxmMatchField(SctpSrc.class);
\r
766 entriesBuilder.setHasMask(false);
\r
767 final SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();
\r
768 final SctpSrcBuilder portBuilder = new SctpSrcBuilder();
\r
769 portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
770 .inet.types.rev100924.PortNumber(13));
\r
771 sctpSrcCaseBuilder.setSctpSrc(portBuilder.build());
\r
772 entriesBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());
\r
773 entries.add(entriesBuilder.build());
\r
776 entriesBuilder = new MatchEntryBuilder();
\r
777 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
778 entriesBuilder.setOxmMatchField(SctpDst.class);
\r
779 entriesBuilder.setHasMask(false);
\r
780 final SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();
\r
781 final SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();
\r
782 sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
\r
783 .inet.types.rev100924.PortNumber(14));
\r
784 sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());
\r
785 entriesBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());
\r
786 entries.add(entriesBuilder.build());
\r
787 builder.setMatchEntry(entries);
\r
789 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
790 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
791 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
793 final SctpMatch udpMatch = (SctpMatch) builtMatch.getLayer4Match();
\r
794 Assert.assertEquals("Wrong sctp src port", 13, udpMatch.getSctpSourcePort().getValue().intValue());
\r
795 Assert.assertEquals("Wrong sctp dst port", 14, udpMatch.getSctpDestinationPort().getValue().intValue());
\r
799 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
802 public void testLayer3MatchIpv6() {
\r
803 final MatchBuilder builder = new MatchBuilder();
\r
804 builder.setType(OxmMatchType.class);
\r
805 final List<MatchEntry> entries = new ArrayList<>();
\r
806 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
807 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
808 entriesBuilder.setOxmMatchField(Ipv6Src.class);
\r
809 entriesBuilder.setHasMask(false);
\r
810 final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();
\r
811 final Ipv6SrcBuilder ipv6AddressBuilder = new Ipv6SrcBuilder();
\r
812 ipv6AddressBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9657"));
\r
813 ipv6SrcCaseBuilder.setIpv6Src(ipv6AddressBuilder.build());
\r
814 entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());
\r
815 entries.add(entriesBuilder.build());
\r
817 entriesBuilder = new MatchEntryBuilder();
\r
818 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
819 entriesBuilder.setOxmMatchField(Ipv6Dst.class);
\r
820 entriesBuilder.setHasMask(false);
\r
821 final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();
\r
822 final Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();
\r
823 ipv6DstBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9658"));
\r
824 ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());
\r
825 entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());
\r
826 entries.add(entriesBuilder.build());
\r
828 entriesBuilder = new MatchEntryBuilder();
\r
829 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
830 entriesBuilder.setOxmMatchField(Ipv6Flabel.class);
\r
831 entriesBuilder.setHasMask(false);
\r
832 final Ipv6FlabelCaseBuilder ipv6FlabelCaseBuilder = new Ipv6FlabelCaseBuilder();
\r
833 final Ipv6FlabelBuilder ipv6FlabelBuilder = new Ipv6FlabelBuilder();
\r
834 ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(18L));
\r
835 ipv6FlabelCaseBuilder.setIpv6Flabel(ipv6FlabelBuilder.build());
\r
836 entriesBuilder.setMatchEntryValue(ipv6FlabelCaseBuilder.build());
\r
837 entries.add(entriesBuilder.build());
\r
839 entriesBuilder = new MatchEntryBuilder();
\r
840 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
841 entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
\r
842 entriesBuilder.setHasMask(false);
\r
843 final Ipv6NdTargetCaseBuilder ipv6NdTargetCaseBuilder = new Ipv6NdTargetCaseBuilder();
\r
844 final Ipv6NdTargetBuilder ipv6NdTargetBuilder = new Ipv6NdTargetBuilder();
\r
845 ipv6NdTargetBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9659"));
\r
846 ipv6NdTargetCaseBuilder.setIpv6NdTarget(ipv6NdTargetBuilder.build());
\r
847 entriesBuilder.setMatchEntryValue(ipv6NdTargetCaseBuilder.build());
\r
848 entries.add(entriesBuilder.build());
\r
850 entriesBuilder = new MatchEntryBuilder();
\r
851 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
852 entriesBuilder.setOxmMatchField(Ipv6NdSll.class);
\r
853 entriesBuilder.setHasMask(false);
\r
854 final Ipv6NdSllCaseBuilder ipv6NdSllCaseBuilder = new Ipv6NdSllCaseBuilder();
\r
855 final Ipv6NdSllBuilder ipv6NdSllBuilder = new Ipv6NdSllBuilder();
\r
856 ipv6NdSllBuilder.setMacAddress(new MacAddress("00:00:00:00:00:05"));
\r
857 ipv6NdSllCaseBuilder.setIpv6NdSll(ipv6NdSllBuilder.build());
\r
858 entriesBuilder.setMatchEntryValue(ipv6NdSllCaseBuilder.build());
\r
859 entries.add(entriesBuilder.build());
\r
861 entriesBuilder = new MatchEntryBuilder();
\r
862 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
863 entriesBuilder.setOxmMatchField(Ipv6NdTll.class);
\r
864 entriesBuilder.setHasMask(false);
\r
865 final Ipv6NdTllCaseBuilder ipv6NdTllCaseBuilder = new Ipv6NdTllCaseBuilder();
\r
866 final Ipv6NdTllBuilder ipv6NdTllBuilder = new Ipv6NdTllBuilder();
\r
867 ipv6NdTllBuilder.setMacAddress(new MacAddress("00:00:00:00:00:06"));
\r
868 ipv6NdTllCaseBuilder.setIpv6NdTll(ipv6NdTllBuilder.build());
\r
869 entriesBuilder.setMatchEntryValue(ipv6NdTllCaseBuilder.build());
\r
870 entries.add(entriesBuilder.build());
\r
872 entriesBuilder = new MatchEntryBuilder();
\r
873 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
874 entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
\r
875 entriesBuilder.setHasMask(false);
\r
876 final Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();
\r
877 final Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();
\r
878 ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));
\r
879 ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());
\r
880 entriesBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());
\r
881 builder.setMatchEntry(entries);
\r
882 entries.add(entriesBuilder.build());
\r
884 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
885 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
886 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
888 final Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();
\r
889 Assert.assertEquals("Wrong ipv6 src address", "2001:cdba:0000:0000:0000:0000:3257:9657/128",
\r
890 ipv6Match.getIpv6Source().getValue());
\r
891 Assert.assertEquals("Wrong ipv6 dst address", "2001:cdba:0000:0000:0000:0000:3257:9658/128",
\r
892 ipv6Match.getIpv6Destination().getValue());
\r
893 Assert.assertEquals("Wrong ipv6 nd target", "2001:cdba:0000:0000:0000:0000:3257:9659",
\r
894 ipv6Match.getIpv6NdTarget().getValue());
\r
895 Assert.assertEquals("Wrong ipv6 flabel", 18, ipv6Match.getIpv6Label().getIpv6Flabel().getValue().intValue());
\r
896 Assert.assertEquals("Wrong ipv6 nd sll", new MacAddress("00:00:00:00:00:05"), ipv6Match.getIpv6NdSll());
\r
897 Assert.assertEquals("Wrong ipv6 nd tll", new MacAddress("00:00:00:00:00:06"), ipv6Match.getIpv6NdTll());
\r
898 Assert.assertEquals("Wrong ipv6 ext header", 358, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());
\r
902 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
905 public void testLayer3MatchIpv6ExtHeader2() {
\r
906 final MatchBuilder builder = new MatchBuilder();
\r
907 builder.setType(OxmMatchType.class);
\r
908 final List<MatchEntry> entries = new ArrayList<>();
\r
909 final MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
910 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
911 entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
\r
912 entriesBuilder.setHasMask(true);
\r
913 final Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();
\r
914 final Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();
\r
915 ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(false, true, false, true, false, true, false, true, false));
\r
916 ipv6ExthdrBuilder.setMask(new byte[]{1, 2});
\r
917 ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());
\r
918 entriesBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());
\r
919 entries.add(entriesBuilder.build());
\r
920 builder.setMatchEntry(entries);
\r
922 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
923 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
924 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
926 final Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();
\r
927 Assert.assertEquals("Wrong ipv6 ext header", 153, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());
\r
928 Assert.assertEquals("Wrong ipv6 ext header mask", 258, ipv6Match.getIpv6ExtHeader().getIpv6ExthdrMask().intValue());
\r
932 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
935 public void testLayer3MatchArp() {
\r
936 final MatchBuilder builder = new MatchBuilder();
\r
937 builder.setType(OxmMatchType.class);
\r
938 final List<MatchEntry> entries = new ArrayList<>();
\r
939 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
940 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
941 entriesBuilder.setOxmMatchField(ArpOp.class);
\r
942 entriesBuilder.setHasMask(false);
\r
943 final ArpOpCaseBuilder arpOpCaseBuilder = new ArpOpCaseBuilder();
\r
944 final ArpOpBuilder arpOpBuilder = new ArpOpBuilder();
\r
945 arpOpBuilder.setOpCode(17);
\r
946 arpOpCaseBuilder.setArpOp(arpOpBuilder.build());
\r
947 entriesBuilder.setMatchEntryValue(arpOpCaseBuilder.build());
\r
948 entries.add(entriesBuilder.build());
\r
950 entriesBuilder = new MatchEntryBuilder();
\r
951 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
952 entriesBuilder.setOxmMatchField(ArpSpa.class);
\r
953 entriesBuilder.setHasMask(false);
\r
954 final ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();
\r
955 final ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();
\r
956 arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));
\r
957 arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());
\r
958 entriesBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());
\r
959 entries.add(entriesBuilder.build());
\r
961 entriesBuilder = new MatchEntryBuilder();
\r
962 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
963 entriesBuilder.setOxmMatchField(ArpTpa.class);
\r
964 entriesBuilder.setHasMask(false);
\r
965 final ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();
\r
966 final ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();
\r
967 arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));
\r
968 arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());
\r
969 entriesBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());
\r
970 entries.add(entriesBuilder.build());
\r
972 entriesBuilder = new MatchEntryBuilder();
\r
973 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
974 entriesBuilder.setOxmMatchField(ArpSha.class);
\r
975 entriesBuilder.setHasMask(false);
\r
976 final ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();
\r
977 final ArpShaBuilder arpShaBuilder = new ArpShaBuilder();
\r
978 arpShaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
\r
979 arpShaCaseBuilder.setArpSha(arpShaBuilder.build());
\r
980 entriesBuilder.setMatchEntryValue(arpShaCaseBuilder.build());
\r
981 entries.add(entriesBuilder.build());
\r
983 entriesBuilder = new MatchEntryBuilder();
\r
984 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
985 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha.class);
\r
986 entriesBuilder.setHasMask(false);
\r
987 final ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();
\r
988 final ArpThaBuilder arpThaBuilder = new ArpThaBuilder();
\r
989 arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));
\r
990 arpThaCaseBuilder.setArpTha(arpThaBuilder.build());
\r
991 entriesBuilder.setMatchEntryValue(arpThaCaseBuilder.build());
\r
992 entries.add(entriesBuilder.build());
\r
993 builder.setMatchEntry(entries);
\r
995 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
996 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
997 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
999 final ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();
\r
1000 Assert.assertEquals("Wrong arp op", 17, arpMatch.getArpOp().intValue());
\r
1001 Assert.assertEquals("Wrong arp spa", "10.0.0.3/32", arpMatch.getArpSourceTransportAddress().getValue());
\r
1002 Assert.assertEquals("Wrong arp tpa", "10.0.0.4/32", arpMatch.getArpTargetTransportAddress().getValue());
\r
1003 Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());
\r
1004 Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());
\r
1008 * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}
\r
1011 public void testLayer3MatchArpWithMasks() {
\r
1012 final MatchBuilder builder = new MatchBuilder();
\r
1013 builder.setType(OxmMatchType.class);
\r
1014 final List<MatchEntry> entries = new ArrayList<>();
\r
1015 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
\r
1016 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
1017 entriesBuilder.setOxmMatchField(ArpSpa.class);
\r
1018 entriesBuilder.setHasMask(true);
\r
1019 final ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();
\r
1020 final ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();
\r
1021 arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));
\r
1022 arpSpaBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});
\r
1023 arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());
\r
1024 entriesBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());
\r
1025 entries.add(entriesBuilder.build());
\r
1027 entriesBuilder = new MatchEntryBuilder();
\r
1028 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
1029 entriesBuilder.setOxmMatchField(ArpTpa.class);
\r
1030 entriesBuilder.setHasMask(true);
\r
1031 final ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();
\r
1032 final ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();
\r
1033 arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));
\r
1034 arpTpaBuilder.setMask(new byte[]{(byte) 255, (byte) 128, 0, 0});
\r
1035 arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());
\r
1036 entriesBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());
\r
1037 entries.add(entriesBuilder.build());
\r
1039 entriesBuilder = new MatchEntryBuilder();
\r
1040 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
1041 entriesBuilder.setOxmMatchField(ArpSha.class);
\r
1042 entriesBuilder.setHasMask(true);
\r
1043 final ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();
\r
1044 final ArpShaBuilder arpShaBuilder = new ArpShaBuilder();
\r
1045 arpShaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
\r
1046 arpShaBuilder.setMask(new byte[]{0, 0, 1, 0, 4, 0});
\r
1047 arpShaCaseBuilder.setArpSha(arpShaBuilder.build());
\r
1048 entriesBuilder.setMatchEntryValue(arpShaCaseBuilder.build());
\r
1049 entries.add(entriesBuilder.build());
\r
1051 entriesBuilder = new MatchEntryBuilder();
\r
1052 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
\r
1053 entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha.class);
\r
1054 entriesBuilder.setHasMask(true);
\r
1055 final ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();
\r
1056 final ArpThaBuilder arpThaBuilder = new ArpThaBuilder();
\r
1057 arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));
\r
1058 arpThaBuilder.setMask(new byte[]{1, 1, 1, 2, 2, 2});
\r
1059 arpThaCaseBuilder.setArpTha(arpThaBuilder.build());
\r
1060 entriesBuilder.setMatchEntryValue(arpThaCaseBuilder.build());
\r
1061 entries.add(entriesBuilder.build());
\r
1063 builder.setMatchEntry(entries);
\r
1065 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
\r
1066 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);
\r
1067 final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();
\r
1069 final ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();
\r
1070 Assert.assertEquals("Wrong arp spa", "10.0.0.3/24", arpMatch.getArpSourceTransportAddress().getValue());
\r
1071 Assert.assertEquals("Wrong arp tpa", "10.0.0.0/9", arpMatch.getArpTargetTransportAddress().getValue());
\r
1072 Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());
\r
1073 Assert.assertEquals("Wrong arp sha mask", "00:00:01:00:04:00", arpMatch.getArpSourceHardwareAddress().getMask().getValue());
\r
1074 Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());
\r
1075 Assert.assertEquals("Wrong arp tha mask", "01:01:01:02:02:02", arpMatch.getArpTargetHardwareAddress().getMask().getValue());
\r