Upgrade ietf-{inet,yang}-types to 2013-07-15
[vpnservice.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / vpnservice / mdsalutil / MatchFieldType.java
1 /*
2  * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.vpnservice.mdsalutil;
9
10 import java.math.BigInteger;
11 import java.util.Map;
12
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSpa;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTpa;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Src;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MatchField;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Metadata;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.PbbIsid;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpDst;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpSrc;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId;
55
56 public enum MatchFieldType {
57     eth_src {
58         @Override
59         protected Class<? extends MatchField> getMatchType() {
60             return EthSrc.class;
61         }
62
63         @Override
64         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
65             EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
66                     .get(EthernetMatchBuilder.class);
67
68             if (ethernetMatchBuilder == null) {
69                 ethernetMatchBuilder = new EthernetMatchBuilder();
70                 mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
71             }
72
73             ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
74                     new MacAddress(matchInfo.getStringMatchValues()[0])).build());
75         }
76
77         @Override
78         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
79             EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
80                     .remove(EthernetMatchBuilder.class);
81
82             if (ethernetMatchBuilder != null) {
83                 matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
84             }
85         }
86     },
87
88     eth_dst {
89         @Override
90         protected Class<? extends MatchField> getMatchType() {
91             return EthDst.class;
92         }
93
94         @Override
95         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
96             EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
97                     .get(EthernetMatchBuilder.class);
98
99             if (ethernetMatchBuilder == null) {
100                 ethernetMatchBuilder = new EthernetMatchBuilder();
101                 mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
102             }
103
104             ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
105                     new MacAddress(matchInfo.getStringMatchValues()[0])).build());
106         }
107
108         @Override
109         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
110             EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
111                     .remove(EthernetMatchBuilder.class);
112
113             if (ethernetMatchBuilder != null) {
114                 matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
115             }
116         }
117     },
118
119     eth_type {
120         @Override
121         protected Class<? extends MatchField> getMatchType() {
122             return EthType.class;
123         }
124
125         @Override
126         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
127             EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
128                     .get(EthernetMatchBuilder.class);
129
130             if (ethernetMatchBuilder == null) {
131                 ethernetMatchBuilder = new EthernetMatchBuilder();
132                 mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
133             }
134
135             ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
136                     new EtherType(matchInfo.getMatchValues()[0])).build());
137         }
138
139         @Override
140         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
141             EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
142                     .remove(EthernetMatchBuilder.class);
143
144             if (ethernetMatchBuilder != null) {
145                 matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
146             }
147         }
148     },
149
150     in_port {
151         @Override
152         protected Class<? extends MatchField> getMatchType() {
153             return InPort.class;
154         }
155
156         @Override
157         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
158         }
159
160         @Override
161         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
162
163             StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getBigMatchValues()[0])
164             .append(':').append(matchInfo.getBigMatchValues()[1]);
165             matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
166         }
167     },
168
169     ip_proto {
170         @Override
171         protected Class<? extends MatchField> getMatchType() {
172             return IpProto.class;
173         }
174
175         @Override
176         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
177             IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
178
179             if (ipMatchBuilder == null) {
180                 ipMatchBuilder = new IpMatchBuilder();
181                 mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
182             }
183
184             ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
185         }
186
187         @Override
188         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
189             IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
190
191             if (ipMatchBuilder != null) {
192                 matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
193             }
194         }
195     },
196
197     ipv4_dst {
198         @Override
199         protected Class<? extends MatchField> getMatchType() {
200             return Ipv4Dst.class;
201         }
202
203         @Override
204         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
205             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
206
207             if (ipv4MatchBuilder == null) {
208                 ipv4MatchBuilder = new Ipv4MatchBuilder();
209                 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
210             }
211
212             long[] prefix = matchInfo.getMatchValues();
213             ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
214         }
215
216         @Override
217         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
218             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
219
220             if (ipv4MatchBuilder != null) {
221                 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
222             }
223         }
224     },
225
226     ipv4_src {
227         @Override
228         protected Class<? extends MatchField> getMatchType() {
229             return Ipv4Src.class;
230         }
231
232         @Override
233         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
234             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
235
236             if (ipv4MatchBuilder == null) {
237                 ipv4MatchBuilder = new Ipv4MatchBuilder();
238                 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
239             }
240
241             long[] prefix = matchInfo.getMatchValues();
242             ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
243         }
244
245         @Override
246         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
247             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
248
249             if (ipv4MatchBuilder != null) {
250                 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
251             }
252         }
253     },
254     
255     ipv4_destination {
256         @Override
257         protected Class<? extends MatchField> getMatchType() {
258             return Ipv4Dst.class;
259         }
260
261         @Override
262         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
263             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
264
265             if (ipv4MatchBuilder == null) {
266                 ipv4MatchBuilder = new Ipv4MatchBuilder();
267                 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
268             }
269
270             String[] prefix = matchInfo.getStringMatchValues();
271             ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(prefix[0] + "/" + prefix[1])).build();
272         }
273
274         @Override
275         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
276             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
277
278             if (ipv4MatchBuilder != null) {
279                 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
280             }
281         }
282     },
283
284     ipv4_source {
285         @Override
286         protected Class<? extends MatchField> getMatchType() {
287             return Ipv4Src.class;
288         }
289
290         @Override
291         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
292             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
293
294             if (ipv4MatchBuilder == null) {
295                 ipv4MatchBuilder = new Ipv4MatchBuilder();
296                 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
297             }
298
299             String[] prefix = matchInfo.getStringMatchValues();
300             ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(prefix[0] + "/" + prefix[1])).build();
301         }
302
303         @Override
304         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
305             Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
306
307             if (ipv4MatchBuilder != null) {
308                 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
309             }
310         }
311     },
312
313     arp_op {
314         @Override
315         protected Class<? extends MatchField> getMatchType() {
316             return ArpOp.class;
317         }
318
319         @Override
320         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
321             ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
322
323             if (arpMatchBuilder == null) {
324                 arpMatchBuilder = new ArpMatchBuilder();
325                 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
326             }
327
328             arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
329         }
330
331         @Override
332         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
333             ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
334
335             if (arpMatchBuilder != null) {
336                 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
337             }
338         }
339     },
340
341     arp_tpa {
342         @Override
343         protected Class<? extends MatchField> getMatchType() {
344             return ArpTpa.class;
345         }
346
347         @Override
348         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
349             ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
350
351             if (arpMatchBuilder == null) {
352                 arpMatchBuilder = new ArpMatchBuilder();
353                 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
354             }
355
356             long[] prefix = matchInfo.getMatchValues();
357             arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
358         }
359
360         @Override
361         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
362             ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
363
364             if (arpMatchBuilder != null) {
365                 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
366             }
367         }
368     },
369
370     arp_spa {
371         @Override
372         protected Class<? extends MatchField> getMatchType() {
373             return ArpSpa.class;
374         }
375
376         @Override
377         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
378             ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
379
380             if (arpMatchBuilder == null) {
381                 arpMatchBuilder = new ArpMatchBuilder();
382                 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
383             }
384
385             long[] prefix = matchInfo.getMatchValues();
386             arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
387         }
388
389         @Override
390         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
391             ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
392
393             if (arpMatchBuilder != null) {
394                 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
395             }
396         }
397     },
398
399     metadata {
400         @Override
401         protected Class<? extends MatchField> getMatchType() {
402             return Metadata.class;
403         }
404
405         @Override
406         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
407             MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
408
409             if (metadataBuilder == null) {
410                 metadataBuilder = new MetadataBuilder();
411                 mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
412             }
413
414             BigInteger[] metadataValues = matchInfo.getBigMatchValues();
415             metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
416         }
417
418         @Override
419         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
420             MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
421
422             if (metadataBuilder != null) {
423                 matchBuilderInOut.setMetadata(metadataBuilder.build());
424             }
425         }
426     },
427
428     mpls_label {
429         @Override
430         protected Class<? extends MatchField> getMatchType() {
431             return MplsLabel.class;
432         }
433
434         @Override
435         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
436             ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
437                     .get(ProtocolMatchFieldsBuilder.class);
438
439             if (protocolMatchFieldsBuilder == null) {
440                 protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
441                 mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
442             }
443
444             protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
445         }
446
447         @Override
448         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
449             ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
450                     .remove(ProtocolMatchFieldsBuilder.class);
451
452             if (protocolMatchFieldsBuilder != null) {
453                 matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
454             }
455         }
456     },
457
458     pbb_isid {
459         @Override
460         protected Class<? extends MatchField> getMatchType() {
461             return PbbIsid.class;
462         }
463
464         @Override
465         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
466             ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
467                     .get(ProtocolMatchFieldsBuilder.class);
468
469             if (protocolMatchFieldsBuilder == null) {
470                 protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
471                 mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
472             }
473
474             protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
475                     .build());
476         }
477
478         @Override
479         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
480             ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
481                     .remove(ProtocolMatchFieldsBuilder.class);
482
483             if (protocolMatchFieldsBuilder != null) {
484                 matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
485             }
486         }
487     },
488
489     tcp_dst {
490         @Override
491         protected Class<? extends MatchField> getMatchType() {
492             return TcpDst.class;
493         }
494
495         @Override
496         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
497             TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
498
499             if (tcpMatchBuilder == null) {
500                 tcpMatchBuilder = new TcpMatchBuilder();
501                 mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
502             }
503
504             tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
505         }
506
507         @Override
508         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
509             TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
510
511             if (tcpMatchBuilder != null) {
512                 matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
513             }
514         }
515     },
516
517     tcp_src {
518         @Override
519         protected Class<? extends MatchField> getMatchType() {
520             return TcpSrc.class;
521         }
522
523         @Override
524         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
525             TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
526
527             if (tcpMatchBuilder == null) {
528                 tcpMatchBuilder = new TcpMatchBuilder();
529                 mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
530             }
531
532             tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
533         }
534
535         @Override
536         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
537             TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
538
539             if (tcpMatchBuilder != null) {
540                 matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
541             }
542         }
543     },
544
545     udp_dst {
546         @Override
547         protected Class<? extends MatchField> getMatchType() {
548             return UdpDst.class;
549         }
550
551         @Override
552         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
553             UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
554
555             if (udpMatchBuilder == null) {
556                 udpMatchBuilder = new UdpMatchBuilder();
557                 mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
558             }
559
560             udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
561         }
562
563         @Override
564         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
565             UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
566
567             if (udpMatchBuilder != null) {
568                 matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
569             }
570         }
571     },
572
573     udp_src {
574         @Override
575         protected Class<? extends MatchField> getMatchType() {
576             return UdpSrc.class;
577         }
578
579         @Override
580         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
581             UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
582
583             if (udpMatchBuilder == null) {
584                 udpMatchBuilder = new UdpMatchBuilder();
585                 mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
586             }
587
588             udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
589         }
590
591         @Override
592         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
593             UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
594
595             if (udpMatchBuilder != null) {
596                 matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
597             }
598         }
599     },
600     tunnel_id {
601         @Override
602         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
603             TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
604
605             if (tunnelBuilder == null) {
606                 tunnelBuilder = new TunnelBuilder();
607                 mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
608             }
609
610             BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
611             tunnelBuilder.setTunnelId(tunnelIdValues[0]);
612             if(tunnelIdValues.length > 1){
613                 tunnelBuilder.setTunnelMask(tunnelIdValues[1]);
614             }
615             tunnelBuilder.build();
616         }
617
618         @Override
619         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
620             TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
621
622             if (tunnelBuilder != null) {
623                 matchBuilderInOut.setTunnel(tunnelBuilder.build());
624             }
625         }
626
627         @Override
628         protected Class<? extends MatchField> getMatchType() {
629             return TunnelId.class;
630         }
631
632     },
633
634     vlan_vid {
635         @Override
636         protected Class<? extends MatchField> getMatchType() {
637             return VlanVid.class;
638         }
639
640         @Override
641         public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
642             VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
643
644             if (vlanMatchBuilder == null) {
645                 vlanMatchBuilder = new VlanMatchBuilder();
646                 mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
647             }
648
649             vlanMatchBuilder.setVlanId(new VlanIdBuilder()
650             .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
651             .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
652             .build());
653         }
654
655         @Override
656         public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
657             VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
658
659             if (vlanMatchBuilder != null) {
660                 matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
661             }
662         }
663     };
664
665
666     public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
667
668     public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
669             Map<Class<?>, Object> mapMatchBuilder);
670
671     protected abstract Class<? extends MatchField> getMatchType();
672
673     protected boolean hasMatchFieldMask() {
674         // Override this to return true
675                 return false;
676     }
677 }