Bug 752 - removed model ambiguities
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / util / MatchIdsSerializer.java
1 /*\r
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.\r
3  *\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
7  */\r
8 package org.opendaylight.openflowjava.protocol.impl.util;\r
9 \r
10 import io.netty.buffer.ByteBuf;\r
11 \r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
54 \r
55 /**\r
56  * Encodes match ids (oxm_ids) needed in Multipart-TableFeatures messages\r
57  * @author michal.polkorab\r
58  */\r
59 public abstract class MatchIdsSerializer {\r
60 \r
61     /**\r
62      * Encodes oxm headers (without values) \r
63      * @param entry match entry\r
64      * @param out output ByteBuf\r
65      */\r
66     public static void encodeIdsRest(MatchEntries entry, ByteBuf out) {\r
67         int fieldValue = 0;\r
68         Class<? extends MatchField> field = entry.getOxmMatchField();\r
69         if (field.isAssignableFrom(InPort.class)) {\r
70             fieldValue = 0;\r
71             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
72         } else if (field.isAssignableFrom(InPhyPort.class)) {\r
73             fieldValue = 1;\r
74             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
75         } else if (field.isAssignableFrom(Metadata.class)) {\r
76             fieldValue = 2;\r
77             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
78                     EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
79         } else if (field.isAssignableFrom(EthDst.class)) {\r
80             fieldValue = 3;\r
81             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
82                     EncodeConstants.MAC_ADDRESS_LENGTH);\r
83         } else if (field.isAssignableFrom(EthSrc.class)) {\r
84             fieldValue = 4;\r
85             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
86                     EncodeConstants.MAC_ADDRESS_LENGTH);\r
87         } else if (field.isAssignableFrom(EthType.class)) {\r
88             fieldValue = 5;\r
89             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
90         } else if (field.isAssignableFrom(VlanVid.class)) {\r
91             fieldValue = 6;\r
92             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
93                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
94         } else if (field.isAssignableFrom(VlanPcp.class)) {\r
95             fieldValue = 7;\r
96             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
97         } else if (field.isAssignableFrom(IpDscp.class)) {\r
98             fieldValue = 8;\r
99             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
100         } else if (field.isAssignableFrom(IpEcn.class)) {\r
101             fieldValue = 9;\r
102             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
103         } else if (field.isAssignableFrom(IpProto.class)) {\r
104             fieldValue = 10;\r
105             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
106         } else if (field.isAssignableFrom(Ipv4Src.class)) {\r
107             fieldValue = 11;\r
108             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
109                     EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
110         } else if (field.isAssignableFrom(Ipv4Dst.class)) {\r
111             fieldValue = 12;\r
112             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
113                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
114         } else if (field.isAssignableFrom(TcpSrc.class)) {\r
115             fieldValue = 13;\r
116             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
117         } else if (field.isAssignableFrom(TcpDst.class)) {\r
118             fieldValue = 14;\r
119             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
120         } else if (field.isAssignableFrom(UdpSrc.class)) {\r
121             fieldValue = 15;\r
122             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
123         } else if (field.isAssignableFrom(UdpDst.class)) {\r
124             fieldValue = 16;\r
125             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
126         } else if (field.isAssignableFrom(SctpSrc.class)) {\r
127             fieldValue = 17;\r
128             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
129         } else if (field.isAssignableFrom(SctpDst.class)) {\r
130             fieldValue = 18;\r
131             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
132         } else if (field.isAssignableFrom(Icmpv4Type.class)) {\r
133             fieldValue = 19;\r
134             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
135         } else if (field.isAssignableFrom(Icmpv4Code.class)) {\r
136             fieldValue = 20;\r
137             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
138         } else if (field.isAssignableFrom(ArpOp.class)) {\r
139             fieldValue = 21;\r
140             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
141         } else if (field.isAssignableFrom(ArpSpa.class)) {\r
142             fieldValue = 22;\r
143             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
144                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
145         } else if (field.isAssignableFrom(ArpTpa.class)) {\r
146             fieldValue = 23;\r
147             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
148                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
149         } else if (field.isAssignableFrom(ArpSha.class)) {\r
150             fieldValue = 24;\r
151             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
152                     EncodeConstants.MAC_ADDRESS_LENGTH);\r
153         } else if (field.isAssignableFrom(ArpTha.class)) {\r
154             fieldValue = 25;\r
155             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
156                     EncodeConstants.MAC_ADDRESS_LENGTH);\r
157         } else if (field.isAssignableFrom(Ipv6Src.class)) {\r
158             fieldValue = 26;\r
159             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
160                     EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
161         } else if (field.isAssignableFrom(Ipv6Dst.class)) {\r
162             fieldValue = 27;\r
163             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
164                     EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
165         } else if (field.isAssignableFrom(Ipv6Flabel.class)) {\r
166             fieldValue = 28;\r
167             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
168                     EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
169         } else if (field.isAssignableFrom(Icmpv6Type.class)) {\r
170             fieldValue = 29;\r
171             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
172         } else if (field.isAssignableFrom(Icmpv6Code.class)) {\r
173             fieldValue = 30;\r
174             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
175         } else if (field.isAssignableFrom(Ipv6NdTarget.class)) {\r
176             fieldValue = 31;\r
177             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
178                     EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
179         } else if (field.isAssignableFrom(Ipv6NdSll.class)) {\r
180             fieldValue = 32;\r
181             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
182                     EncodeConstants.MAC_ADDRESS_LENGTH);\r
183         } else if (field.isAssignableFrom(Ipv6NdTll.class)) {\r
184             fieldValue = 33;\r
185             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
186                     EncodeConstants.MAC_ADDRESS_LENGTH);\r
187         } else if (field.isAssignableFrom(MplsLabel.class)) {\r
188             fieldValue = 34;\r
189             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
190         } else if (field.isAssignableFrom(MplsTc.class)) {\r
191             fieldValue = 35;\r
192             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
193         } else if (field.isAssignableFrom(MplsBos.class)) {\r
194             fieldValue = 36;\r
195             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, false, EncodeConstants.SIZE_OF_BYTE_IN_BYTES);\r
196         } else if (field.isAssignableFrom(PbbIsid.class)) {\r
197             fieldValue = 37;\r
198             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(), EncodeConstants.SIZE_OF_3_BYTES);\r
199         } else if (field.isAssignableFrom(TunnelId.class)) {\r
200             fieldValue = 38;\r
201             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
202                     EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
203         } else if (field.isAssignableFrom(Ipv6Exthdr.class)) {\r
204             fieldValue = 39;\r
205             MatchSerializer.writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),\r
206                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
207         }\r
208     }\r
209 \r
210 }\r