2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowjava.protocol.impl.util;
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.UnpooledByteBufAllocator;
13 import java.util.ArrayList;
14 import java.util.List;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
21 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Dscp;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6FlowLabel;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCaseBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCaseBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCaseBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCaseBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCaseBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCaseBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCaseBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCaseBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCaseBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCaseBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCaseBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCaseBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCaseBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCaseBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCaseBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCaseBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCaseBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCaseBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCaseBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCaseBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCaseBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCaseBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCaseBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCaseBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCaseBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.op._case.ArpOpBuilder;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.sha._case.ArpShaBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.spa._case.ArpSpaBuilder;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tha._case.ArpThaBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tpa._case.ArpTpaBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.dst._case.EthDstBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.src._case.EthSrcBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.type._case.EthTypeBuilder;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.code._case.Icmpv4CodeBuilder;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.type._case.Icmpv4TypeBuilder;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.code._case.Icmpv6CodeBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.type._case.Icmpv6TypeBuilder;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.phy.port._case.InPhyPortBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.dscp._case.IpDscpBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.ecn._case.IpEcnBuilder;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.proto._case.IpProtoBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.src._case.Ipv4SrcBuilder;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.exthdr._case.Ipv6ExthdrBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.flabel._case.Ipv6FlabelBuilder;
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.sll._case.Ipv6NdSllBuilder;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.target._case.Ipv6NdTargetBuilder;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.tll._case.Ipv6NdTllBuilder;
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder;
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder;
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.dst._case.TcpDstBuilder;
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.src._case.TcpSrcBuilder;
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.dst._case.UdpDstBuilder;
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.src._case.UdpSrcBuilder;
154 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;
155 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;
156 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
157 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;
160 * @author michal.polkorab
163 public class OF13MatchSerializer02Test {
165 private SerializerRegistry registry;
166 private OFSerializer<Match> matchSerializer;
169 * Initializes serializer table and stores correct factory in field
172 public void startUp() {
173 registry = new SerializerRegistryImpl();
175 matchSerializer = registry.getSerializer(
176 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));
180 * Testing serialization of match
183 public void testEmptyMatch() {
184 MatchBuilder builder = new MatchBuilder();
185 builder.setType(OxmMatchType.class);
186 Match match = builder.build();
188 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
189 matchSerializer.serialize(match, out);
191 Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
192 Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());
193 Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
197 * Testing serialization of match
201 MatchBuilder builder = new MatchBuilder();
202 builder.setType(OxmMatchType.class);
203 List<MatchEntry> entries = new ArrayList<>();
204 MatchEntryBuilder entryBuilder = new MatchEntryBuilder();
205 entryBuilder.setOxmClass(OpenflowBasicClass.class);
206 entryBuilder.setOxmMatchField(InPort.class);
207 entryBuilder.setHasMask(false);
208 InPortCaseBuilder inPortCaseBuilder = new InPortCaseBuilder();
209 InPortBuilder inPortBuilder = new InPortBuilder();
210 inPortBuilder.setPortNumber(new PortNumber(42L));
211 inPortCaseBuilder.setInPort(inPortBuilder.build());
212 entryBuilder.setMatchEntryValue(inPortCaseBuilder.build());
213 entries.add(entryBuilder.build());
214 entryBuilder = new MatchEntryBuilder();
215 entryBuilder.setOxmClass(OpenflowBasicClass.class);
216 entryBuilder.setOxmMatchField(InPhyPort.class);
217 entryBuilder.setHasMask(false);
218 InPhyPortCaseBuilder inPhyPortCaseBuilder = new InPhyPortCaseBuilder();
219 InPhyPortBuilder inPhyPortBuilder = new InPhyPortBuilder();
220 inPhyPortBuilder.setPortNumber(new PortNumber(43L));
221 inPhyPortCaseBuilder.setInPhyPort(inPhyPortBuilder.build());
222 entryBuilder.setMatchEntryValue(inPhyPortCaseBuilder.build());
223 entries.add(entryBuilder.build());
224 entryBuilder = new MatchEntryBuilder();
225 entryBuilder.setOxmClass(OpenflowBasicClass.class);
226 entryBuilder.setOxmMatchField(Metadata.class);
227 entryBuilder.setHasMask(true);
228 MetadataCaseBuilder metaCaseBuilder = new MetadataCaseBuilder();
229 MetadataBuilder metadataBuilder = new MetadataBuilder();
230 metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
231 metadataBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
232 metaCaseBuilder.setMetadata(metadataBuilder.build());
233 entryBuilder.setMatchEntryValue(metaCaseBuilder.build());
234 entries.add(entryBuilder.build());
235 entryBuilder = new MatchEntryBuilder();
236 entryBuilder.setOxmClass(OpenflowBasicClass.class);
237 entryBuilder.setOxmMatchField(EthDst.class);
238 entryBuilder.setHasMask(true);
239 EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();
240 EthDstBuilder ethDstBuilder = new EthDstBuilder();
241 ethDstBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
242 ethDstBuilder.setMask(new byte[]{0,0,0,0,0,5});
243 ethDstCaseBuilder.setEthDst(ethDstBuilder.build());
244 entryBuilder.setMatchEntryValue(ethDstCaseBuilder.build());
245 entries.add(entryBuilder.build());
246 entryBuilder = new MatchEntryBuilder();
247 entryBuilder.setOxmClass(OpenflowBasicClass.class);
248 entryBuilder.setOxmMatchField(EthSrc.class);
249 entryBuilder.setHasMask(true);
250 EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();
251 EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();
252 ethSrcBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
253 ethSrcBuilder.setMask(new byte[]{0,0,0,0,0,2});
254 ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());
255 entryBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());
256 entries.add(entryBuilder.build());
257 entryBuilder = new MatchEntryBuilder();
258 entryBuilder.setOxmClass(OpenflowBasicClass.class);
259 entryBuilder.setOxmMatchField(EthType.class);
260 entryBuilder.setHasMask(false);
261 EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();
262 EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();
263 ethTypeBuilder.setEthType(new EtherType(46));
264 ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());
265 entryBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());
266 entries.add(entryBuilder.build());
267 entryBuilder = new MatchEntryBuilder();
268 entryBuilder.setOxmClass(OpenflowBasicClass.class);
269 entryBuilder.setOxmMatchField(VlanVid.class);
270 entryBuilder.setHasMask(true);
271 VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
272 VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
273 vlanVidBuilder.setVlanVid(45);
274 vlanVidBuilder.setCfiBit(true);
275 vlanVidBuilder.setMask(new byte[]{0,9});
276 vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
277 entryBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
278 entries.add(entryBuilder.build());
279 entryBuilder = new MatchEntryBuilder();
280 entryBuilder.setOxmClass(OpenflowBasicClass.class);
281 entryBuilder.setOxmMatchField(VlanPcp.class);
282 entryBuilder.setHasMask(false);
283 VlanPcpCaseBuilder vlanPcpCaseBuilder = new VlanPcpCaseBuilder();
284 VlanPcpBuilder vlanPcpBuilder = new VlanPcpBuilder();
285 vlanPcpBuilder.setVlanPcp((short) 14);
286 vlanPcpCaseBuilder.setVlanPcp(vlanPcpBuilder.build());
287 entryBuilder.setMatchEntryValue(vlanPcpCaseBuilder.build());
288 entries.add(entryBuilder.build());
289 entryBuilder = new MatchEntryBuilder();
290 entryBuilder.setOxmClass(OpenflowBasicClass.class);
291 entryBuilder.setOxmMatchField(IpDscp.class);
292 entryBuilder.setHasMask(false);
293 IpDscpCaseBuilder ipDscpCaseBuilder = new IpDscpCaseBuilder();
294 IpDscpBuilder ipDscpBuilder = new IpDscpBuilder();
295 ipDscpBuilder.setDscp(new Dscp((short) 48));
296 ipDscpCaseBuilder.setIpDscp(ipDscpBuilder.build());
297 entryBuilder.setMatchEntryValue(ipDscpCaseBuilder.build());
298 entries.add(entryBuilder.build());
299 entryBuilder = new MatchEntryBuilder();
300 entryBuilder.setOxmClass(OpenflowBasicClass.class);
301 entryBuilder.setOxmMatchField(IpEcn.class);
302 entryBuilder.setHasMask(false);
303 IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();
304 IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();
305 ipEcnBuilder.setEcn((short) 49);
306 ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());
307 entryBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());
308 entries.add(entryBuilder.build());
309 entryBuilder = new MatchEntryBuilder();
310 entryBuilder.setOxmClass(OpenflowBasicClass.class);
311 entryBuilder.setOxmMatchField(IpProto.class);
312 entryBuilder.setHasMask(false);
313 IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();
314 IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();
315 ipProtoBuilder.setProtocolNumber((short) 50);
316 ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());
317 entryBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());
318 entries.add(entryBuilder.build());
319 entryBuilder = new MatchEntryBuilder();
320 entryBuilder.setOxmClass(OpenflowBasicClass.class);
321 entryBuilder.setOxmMatchField(Ipv4Src.class);
322 entryBuilder.setHasMask(true);
323 Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();
324 Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();
325 ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));
326 ipv4SrcBuilder.setMask(new byte[]{0,0,0,14});
327 ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());
328 entryBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());
329 entries.add(entryBuilder.build());
330 entryBuilder = new MatchEntryBuilder();
331 entryBuilder.setOxmClass(OpenflowBasicClass.class);
332 entryBuilder.setOxmMatchField(Ipv4Dst.class);
333 entryBuilder.setHasMask(true);
334 Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
335 Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();
336 ipv4DstBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));
337 ipv4DstBuilder.setMask(new byte[]{0,0,0,15});
338 ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());
339 entryBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
340 entries.add(entryBuilder.build());
341 entryBuilder = new MatchEntryBuilder();
342 entryBuilder.setOxmClass(OpenflowBasicClass.class);
343 entryBuilder.setOxmMatchField(TcpSrc.class);
344 entryBuilder.setHasMask(false);
345 TcpSrcCaseBuilder tcpSrcCaseBuilder = new TcpSrcCaseBuilder();
346 TcpSrcBuilder tcpSrcBuilder = new TcpSrcBuilder();
347 tcpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
348 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6653));
349 tcpSrcCaseBuilder.setTcpSrc(tcpSrcBuilder.build());
350 entryBuilder.setMatchEntryValue(tcpSrcCaseBuilder.build());
351 entries.add(entryBuilder.build());
352 entryBuilder = new MatchEntryBuilder();
353 entryBuilder.setOxmClass(OpenflowBasicClass.class);
354 entryBuilder.setOxmMatchField(TcpDst.class);
355 entryBuilder.setHasMask(false);
356 TcpDstCaseBuilder tcpDstCaseBuilder = new TcpDstCaseBuilder();
357 TcpDstBuilder tcpDstBuilder = new TcpDstBuilder();
358 tcpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
359 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6654));
360 tcpDstCaseBuilder.setTcpDst(tcpDstBuilder.build());
361 entryBuilder.setMatchEntryValue(tcpDstCaseBuilder.build());
362 entries.add(entryBuilder.build());
363 entryBuilder = new MatchEntryBuilder();
364 entryBuilder.setOxmClass(OpenflowBasicClass.class);
365 entryBuilder.setOxmMatchField(UdpSrc.class);
366 entryBuilder.setHasMask(false);
367 UdpSrcCaseBuilder udpSrcCaseBuilder = new UdpSrcCaseBuilder();
368 UdpSrcBuilder udpSrcBuilder = new UdpSrcBuilder();
369 udpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
370 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6655));
371 udpSrcCaseBuilder.setUdpSrc(udpSrcBuilder.build());
372 entryBuilder.setMatchEntryValue(udpSrcCaseBuilder.build());
373 entries.add(entryBuilder.build());
374 entryBuilder = new MatchEntryBuilder();
375 entryBuilder.setOxmClass(OpenflowBasicClass.class);
376 entryBuilder.setOxmMatchField(UdpDst.class);
377 entryBuilder.setHasMask(false);
378 UdpDstCaseBuilder udpDstCaseBuilder = new UdpDstCaseBuilder();
379 UdpDstBuilder udpDstBuilder = new UdpDstBuilder();
380 udpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
381 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6656));
382 udpDstCaseBuilder.setUdpDst(udpDstBuilder.build());
383 entryBuilder.setMatchEntryValue(udpDstCaseBuilder.build());
384 entries.add(entryBuilder.build());
385 entryBuilder = new MatchEntryBuilder();
386 entryBuilder.setOxmClass(OpenflowBasicClass.class);
387 entryBuilder.setOxmMatchField(SctpSrc.class);
388 entryBuilder.setHasMask(false);
389 SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();
390 SctpSrcBuilder sctpSrcBuilder = new SctpSrcBuilder();
391 sctpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
392 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6657));
393 sctpSrcCaseBuilder.setSctpSrc(sctpSrcBuilder.build());
394 entryBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());
395 entries.add(entryBuilder.build());
396 entryBuilder = new MatchEntryBuilder();
397 entryBuilder.setOxmClass(OpenflowBasicClass.class);
398 entryBuilder.setOxmMatchField(SctpDst.class);
399 entryBuilder.setHasMask(false);
400 SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();
401 SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();
402 sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
403 .xml.ns.yang.ietf.inet.types.rev130715.PortNumber(6658));
404 sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());
405 entryBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());
406 entries.add(entryBuilder.build());
407 entryBuilder = new MatchEntryBuilder();
408 entryBuilder.setOxmClass(OpenflowBasicClass.class);
409 entryBuilder.setOxmMatchField(Icmpv4Type.class);
410 entryBuilder.setHasMask(false);
411 Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();
412 Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();
413 icmpv4TypeBuilder.setIcmpv4Type((short) 51);
414 icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());
415 entryBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());
416 entries.add(entryBuilder.build());
417 entryBuilder = new MatchEntryBuilder();
418 entryBuilder.setOxmClass(OpenflowBasicClass.class);
419 entryBuilder.setOxmMatchField(Icmpv4Code.class);
420 entryBuilder.setHasMask(false);
421 Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();
422 Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();
423 icmpv4CodeBuilder.setIcmpv4Code((short) 52);
424 icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());
425 entryBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());
426 entries.add(entryBuilder.build());
427 entryBuilder = new MatchEntryBuilder();
428 entryBuilder.setOxmClass(OpenflowBasicClass.class);
429 entryBuilder.setOxmMatchField(ArpOp.class);
430 entryBuilder.setHasMask(false);
431 ArpOpCaseBuilder arpOpCaseBuilder = new ArpOpCaseBuilder();
432 ArpOpBuilder arpOpBuilder = new ArpOpBuilder();
433 arpOpBuilder.setOpCode(53);
434 arpOpCaseBuilder.setArpOp(arpOpBuilder.build());
435 entryBuilder.setMatchEntryValue(arpOpCaseBuilder.build());
436 entries.add(entryBuilder.build());
437 entryBuilder = new MatchEntryBuilder();
438 entryBuilder.setOxmClass(OpenflowBasicClass.class);
439 entryBuilder.setOxmMatchField(ArpSpa.class);
440 entryBuilder.setHasMask(true);
441 ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();
442 ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();
443 arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));
444 arpSpaBuilder.setMask(new byte[]{0,0,0,16});
445 arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());
446 entryBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());
447 entries.add(entryBuilder.build());
448 entryBuilder = new MatchEntryBuilder();
449 entryBuilder.setOxmClass(OpenflowBasicClass.class);
450 entryBuilder.setOxmMatchField(ArpTpa.class);
451 entryBuilder.setHasMask(true);
452 ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();
453 ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();
454 arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.5"));
455 arpTpaBuilder.setMask(new byte[]{0,0,0,17});
456 arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());
457 entryBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());
458 entries.add(entryBuilder.build());
459 entryBuilder = new MatchEntryBuilder();
460 entryBuilder.setOxmClass(OpenflowBasicClass.class);
461 entryBuilder.setOxmMatchField(ArpSha.class);
462 entryBuilder.setHasMask(true);
463 ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();
464 ArpShaBuilder arpShaBuilder = new ArpShaBuilder();
465 arpShaBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));
466 arpShaBuilder.setMask(new byte[]{0,0,4,0,0,6});
467 arpShaCaseBuilder.setArpSha(arpShaBuilder.build());
468 entryBuilder.setMatchEntryValue(arpShaCaseBuilder.build());
469 entries.add(entryBuilder.build());
470 entryBuilder = new MatchEntryBuilder();
471 entryBuilder.setOxmClass(OpenflowBasicClass.class);
472 entryBuilder.setOxmMatchField(ArpTha.class);
473 entryBuilder.setHasMask(true);
474 ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();
475 ArpThaBuilder arpThaBuilder = new ArpThaBuilder();
476 arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
477 arpThaBuilder.setMask(new byte[]{0,0,6,0,0,4});
478 arpThaCaseBuilder.setArpTha(arpThaBuilder.build());
479 entryBuilder.setMatchEntryValue(arpThaCaseBuilder.build());
480 entries.add(entryBuilder.build());
481 entryBuilder = new MatchEntryBuilder();
482 entryBuilder.setOxmClass(OpenflowBasicClass.class);
483 entryBuilder.setOxmMatchField(Ipv6Src.class);
484 entryBuilder.setHasMask(true);
485 Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();
486 Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();
487 ipv6SrcBuilder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));
488 ipv6SrcBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});
489 ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());
490 entryBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());
491 entries.add(entryBuilder.build());
492 entryBuilder = new MatchEntryBuilder();
493 entryBuilder.setOxmClass(OpenflowBasicClass.class);
494 entryBuilder.setOxmMatchField(Ipv6Dst.class);
495 entryBuilder.setHasMask(true);
496 Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();
497 Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();
498 ipv6DstBuilder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));
499 ipv6DstBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});
500 ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());
501 entryBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());
502 entries.add(entryBuilder.build());
503 entryBuilder = new MatchEntryBuilder();
504 entryBuilder.setOxmClass(OpenflowBasicClass.class);
505 entryBuilder.setOxmMatchField(Ipv6Flabel.class);
506 entryBuilder.setHasMask(false);
507 Ipv6FlabelCaseBuilder ipv6FlabelCaseBuilder = new Ipv6FlabelCaseBuilder();
508 Ipv6FlabelBuilder ipv6FlabelBuilder = new Ipv6FlabelBuilder();
509 ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));
510 ipv6FlabelCaseBuilder.setIpv6Flabel(ipv6FlabelBuilder.build());
511 entryBuilder.setMatchEntryValue(ipv6FlabelCaseBuilder.build());
512 entries.add(entryBuilder.build());
513 entryBuilder = new MatchEntryBuilder();
514 entryBuilder.setOxmClass(OpenflowBasicClass.class);
515 entryBuilder.setOxmMatchField(Icmpv6Type.class);
516 entryBuilder.setHasMask(false);
517 Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();
518 Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();
519 icmpv6TypeBuilder.setIcmpv6Type((short) 59);
520 icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());
521 entryBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());
522 entries.add(entryBuilder.build());
523 entryBuilder = new MatchEntryBuilder();
524 entryBuilder.setOxmClass(OpenflowBasicClass.class);
525 entryBuilder.setOxmMatchField(Icmpv6Code.class);
526 entryBuilder.setHasMask(false);
527 Icmpv6CodeCaseBuilder Icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();
528 Icmpv6CodeBuilder Icmpv6CodeBuilder = new Icmpv6CodeBuilder();
529 Icmpv6CodeBuilder.setIcmpv6Code((short) 60);
530 Icmpv6CodeCaseBuilder.setIcmpv6Code(Icmpv6CodeBuilder.build());
531 entryBuilder.setMatchEntryValue(Icmpv6CodeCaseBuilder.build());
532 entries.add(entryBuilder.build());
533 entryBuilder.setOxmClass(OpenflowBasicClass.class);
534 entryBuilder.setOxmMatchField(Ipv6NdTarget.class);
535 entryBuilder.setHasMask(false);
536 Ipv6NdTargetCaseBuilder ipv6NdTargetCaseBuilder = new Ipv6NdTargetCaseBuilder();
537 Ipv6NdTargetBuilder ipv6NdTargetBuilder = new Ipv6NdTargetBuilder();
538 ipv6NdTargetBuilder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));
539 ipv6NdTargetCaseBuilder.setIpv6NdTarget(ipv6NdTargetBuilder.build());
540 entryBuilder.setMatchEntryValue(ipv6NdTargetCaseBuilder.build());
541 entries.add(entryBuilder.build());
542 entryBuilder = new MatchEntryBuilder();
543 entryBuilder.setOxmClass(OpenflowBasicClass.class);
544 entryBuilder.setOxmMatchField(Ipv6NdSll.class);
545 entryBuilder.setHasMask(false);
546 Ipv6NdSllCaseBuilder ipv6NdSllCaseBuilder = new Ipv6NdSllCaseBuilder();
547 Ipv6NdSllBuilder ipv6NdSllBuilder = new Ipv6NdSllBuilder();
548 ipv6NdSllBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
549 ipv6NdSllCaseBuilder.setIpv6NdSll(ipv6NdSllBuilder.build());
550 entryBuilder.setMatchEntryValue(ipv6NdSllCaseBuilder.build());
551 entries.add(entryBuilder.build());
552 entryBuilder = new MatchEntryBuilder();
553 entryBuilder.setOxmClass(OpenflowBasicClass.class);
554 entryBuilder.setOxmMatchField(Ipv6NdTll.class);
555 entryBuilder.setHasMask(false);
556 Ipv6NdTllCaseBuilder ipv6NdTllCaseBuilder = new Ipv6NdTllCaseBuilder();
557 Ipv6NdTllBuilder ipv6NdTllBuilder = new Ipv6NdTllBuilder();
558 ipv6NdTllBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
559 ipv6NdTllCaseBuilder.setIpv6NdTll(ipv6NdTllBuilder.build());
560 entryBuilder.setMatchEntryValue(ipv6NdTllCaseBuilder.build());
561 entries.add(entryBuilder.build());
562 entryBuilder = new MatchEntryBuilder();
563 entryBuilder.setOxmClass(OpenflowBasicClass.class);
564 entryBuilder.setOxmMatchField(MplsLabel.class);
565 entryBuilder.setHasMask(false);
566 MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();
567 MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();
568 mplsLabelBuilder.setMplsLabel(61L);
569 mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());
570 entryBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());
571 entries.add(entryBuilder.build());
572 entryBuilder = new MatchEntryBuilder();
573 entryBuilder.setOxmClass(OpenflowBasicClass.class);
574 entryBuilder.setOxmMatchField(MplsTc.class);
575 entryBuilder.setHasMask(false);
576 MplsTcCaseBuilder MplsTcCaseBuilder = new MplsTcCaseBuilder();
577 MplsTcBuilder MplsTcBuilder = new MplsTcBuilder();
578 MplsTcBuilder.setTc((short) 62);
579 MplsTcCaseBuilder.setMplsTc(MplsTcBuilder.build());
580 entryBuilder.setMatchEntryValue(MplsTcCaseBuilder.build());
581 entries.add(entryBuilder.build());
582 entryBuilder = new MatchEntryBuilder();
583 entryBuilder.setOxmClass(OpenflowBasicClass.class);
584 entryBuilder.setOxmMatchField(MplsBos.class);
585 entryBuilder.setHasMask(false);
586 MplsBosCaseBuilder MplsBosCaseBuilder = new MplsBosCaseBuilder();
587 MplsBosBuilder MplsBosBuilder = new MplsBosBuilder();
588 MplsBosBuilder.setBos(true);
589 MplsBosCaseBuilder.setMplsBos(MplsBosBuilder.build());
590 entryBuilder.setMatchEntryValue(MplsBosCaseBuilder.build());
591 entries.add(entryBuilder.build());
592 entryBuilder = new MatchEntryBuilder();
593 entryBuilder.setOxmClass(OpenflowBasicClass.class);
594 entryBuilder.setOxmMatchField(PbbIsid.class);
595 entryBuilder.setHasMask(true);
596 PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
597 PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();
598 pbbIsidBuilder.setIsid(64L);
599 pbbIsidBuilder.setMask(new byte[]{0,1,2});
600 pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());
601 entryBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());
602 entries.add(entryBuilder.build());
603 entryBuilder = new MatchEntryBuilder();
604 entryBuilder.setOxmClass(OpenflowBasicClass.class);
605 entryBuilder.setOxmMatchField(TunnelId.class);
606 entryBuilder.setHasMask(true);
607 TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
608 TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
609 tunnelIdBuilder.setTunnelId(new byte[]{0,0,0,0,0,0,0,1});
610 tunnelIdBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
611 tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
612 entryBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
613 entries.add(entryBuilder.build());
614 entryBuilder = new MatchEntryBuilder();
615 entryBuilder.setOxmClass(OpenflowBasicClass.class);
616 entryBuilder.setOxmMatchField(Ipv6Exthdr.class);
617 entryBuilder.setHasMask(true);
618 Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();
619 Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();
620 ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true,
621 false, true, false, true, false, true));
622 ipv6ExthdrBuilder.setMask(new byte[]{0,2});
623 ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());
624 entryBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());
625 entries.add(entryBuilder.build());
628 builder.setMatchEntry(entries);
629 Match match = builder.build();
631 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
632 matchSerializer.serialize(match, out);
634 Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
635 Assert.assertEquals("Wrong match length", 424, out.readUnsignedShort());
636 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
637 Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());
638 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
639 Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());
640 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
641 Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());
642 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
643 Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());
644 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
645 Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());
646 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
647 Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
648 Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
649 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
650 Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());
651 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
652 byte[] array = new byte[6];
653 out.readBytes(array);
654 Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
656 out.readBytes(array);
657 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);
658 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
659 Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());
660 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
662 out.readBytes(array);
663 Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
665 out.readBytes(array);
666 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);
667 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
668 Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());
669 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
670 Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());
671 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
672 Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());
673 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
674 Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());
676 out.readBytes(array);
677 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);
678 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
679 Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());
680 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
681 Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());
682 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
683 Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());
684 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
685 Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());
686 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
687 Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());
688 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
689 Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());
690 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
691 Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());
692 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
693 Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());
694 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
695 Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());
696 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
698 out.readBytes(array);
699 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);
701 out.readBytes(array);
702 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);
703 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
704 Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());
705 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
707 out.readBytes(array);
708 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);
710 out.readBytes(array);
711 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);
712 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
713 Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());
714 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
715 Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());
716 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
717 Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());
718 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
719 Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());
720 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
721 Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());
722 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
723 Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());
724 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
725 Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());
726 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
727 Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());
728 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
729 Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());
730 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
731 Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());
732 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
733 Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());
734 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
735 Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());
736 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
737 Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());
738 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
739 Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());
740 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
741 Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());
742 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
743 Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());
744 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
745 Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());
746 Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
747 Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());
748 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
749 Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());
750 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
752 out.readBytes(array);
753 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);
755 out.readBytes(array);
756 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);
757 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
758 Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());
759 Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
761 out.readBytes(array);
762 Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);
764 out.readBytes(array);
765 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);
766 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
767 Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());
768 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
770 out.readBytes(array);
771 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);
773 out.readBytes(array);
774 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);
775 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
776 Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());
777 Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
779 out.readBytes(array);
780 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);
782 out.readBytes(array);
783 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);
784 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
785 Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());
786 Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
787 array = new byte[16];
788 out.readBytes(array);
789 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, array);
790 array = new byte[16];
791 out.readBytes(array);
792 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, array);
793 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
794 Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());
795 Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
796 array = new byte[16];
797 out.readBytes(array);
798 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1}, array);
799 array = new byte[16];
800 out.readBytes(array);
801 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1}, array);
802 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
803 Assert.assertEquals("Wrong match entry field & hasMask", 56, out.readUnsignedByte());
804 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte()); //8, out.readUnsignedByte());
805 Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());
806 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
807 Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());
808 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
809 Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());
810 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
811 Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());
812 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
813 Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());
814 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
815 Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());
816 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
817 array = new byte[16];
818 out.readBytes(array);
819 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, array);
820 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
821 Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());
822 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
824 out.readBytes(array);
825 Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
826 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
827 Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());
828 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
830 out.readBytes(array);
831 Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
832 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
833 Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());
834 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
835 Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());
836 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
837 Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());
838 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
839 Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());
840 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
841 Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());
842 Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
843 Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());
844 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
845 Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());
846 Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
847 Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());
849 out.readBytes(array);
850 Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);
851 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
852 Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());
853 Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
854 Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
855 Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
856 Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
857 Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());
858 Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
859 Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());
861 out.readBytes(array);
862 Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);
863 Assert.assertTrue("Wrong padding", out.readableBytes() == 0);