2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.genius.mdsalutil;
10 import java.math.BigInteger;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4MatchBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv6MatchBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TcpFlagsMatchBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.reg.grouping.NxmNxRegBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSha;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSpa;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTha;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTpa;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Type;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Type;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Src;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Dst;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTarget;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Src;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MatchField;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Metadata;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.PbbIsid;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpDst;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlags;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpSrc;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid;
74 import static org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.OrderComparator.build;
76 public enum MatchFieldType {
79 protected Class<? extends MatchField> getMatchType() {
84 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
85 EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
86 .get(EthernetMatchBuilder.class);
88 if (ethernetMatchBuilder == null) {
89 ethernetMatchBuilder = new EthernetMatchBuilder();
90 mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
93 ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
94 new MacAddress(matchInfo.getStringMatchValues()[0])).build());
98 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
99 EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
100 .remove(EthernetMatchBuilder.class);
102 if (ethernetMatchBuilder != null) {
103 matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
110 protected Class<? extends MatchField> getMatchType() {
115 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
116 EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
117 .get(EthernetMatchBuilder.class);
119 if (ethernetMatchBuilder == null) {
120 ethernetMatchBuilder = new EthernetMatchBuilder();
121 mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
124 ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
125 new MacAddress(matchInfo.getStringMatchValues()[0])).build());
129 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
130 EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
131 .remove(EthernetMatchBuilder.class);
133 if (ethernetMatchBuilder != null) {
134 matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
141 protected Class<? extends MatchField> getMatchType() {
142 return EthType.class;
146 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
147 EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
148 .get(EthernetMatchBuilder.class);
150 if (ethernetMatchBuilder == null) {
151 ethernetMatchBuilder = new EthernetMatchBuilder();
152 mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
155 ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
156 new EtherType(matchInfo.getMatchValues()[0])).build());
160 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
161 EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
162 .remove(EthernetMatchBuilder.class);
164 if (ethernetMatchBuilder != null) {
165 matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
172 protected Class<? extends MatchField> getMatchType() {
177 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
181 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
183 StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getBigMatchValues()[0])
184 .append(':').append(matchInfo.getBigMatchValues()[1]);
185 matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
191 protected Class<? extends MatchField> getMatchType() {
192 return IpProto.class;
196 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
197 IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
199 if (ipMatchBuilder == null) {
200 ipMatchBuilder = new IpMatchBuilder();
201 mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
204 ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
208 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
209 IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
211 if (ipMatchBuilder != null) {
212 matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
219 protected Class<? extends MatchField> getMatchType() {
220 return Ipv4Dst.class;
224 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
225 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
227 if (ipv4MatchBuilder == null) {
228 ipv4MatchBuilder = new Ipv4MatchBuilder();
229 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
232 long[] prefix = matchInfo.getMatchValues();
233 ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
237 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
238 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
240 if (ipv4MatchBuilder != null) {
241 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
248 protected Class<? extends MatchField> getMatchType() {
249 return Ipv4Src.class;
253 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
254 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
256 if (ipv4MatchBuilder == null) {
257 ipv4MatchBuilder = new Ipv4MatchBuilder();
258 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
261 long[] prefix = matchInfo.getMatchValues();
262 ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
266 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
267 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
269 if (ipv4MatchBuilder != null) {
270 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
277 protected Class<? extends MatchField> getMatchType() {
278 return Ipv4Dst.class;
282 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
283 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
285 if (ipv4MatchBuilder == null) {
286 ipv4MatchBuilder = new Ipv4MatchBuilder();
287 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
290 String[] prefix = matchInfo.getStringMatchValues();
291 ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(prefix[0] + "/" + prefix[1])).build();
295 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
296 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
298 if (ipv4MatchBuilder != null) {
299 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
306 protected Class<? extends MatchField> getMatchType() {
307 return Ipv4Src.class;
311 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
312 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
314 if (ipv4MatchBuilder == null) {
315 ipv4MatchBuilder = new Ipv4MatchBuilder();
316 mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
319 String[] prefix = matchInfo.getStringMatchValues();
320 ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(prefix[0] + "/" + prefix[1])).build();
324 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
325 Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
327 if (ipv4MatchBuilder != null) {
328 matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
335 protected Class<? extends MatchField> getMatchType() {
336 return Ipv6Dst.class;
340 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
341 Ipv6MatchBuilder ipv6MatchBuilder = (Ipv6MatchBuilder) mapMatchBuilder.get(Ipv6MatchBuilder.class);
343 if (ipv6MatchBuilder == null) {
344 ipv6MatchBuilder = new Ipv6MatchBuilder();
345 mapMatchBuilder.put(Ipv6MatchBuilder.class, ipv6MatchBuilder);
347 ipv6MatchBuilder.setIpv6Destination(new Ipv6Prefix(matchInfo.getStringMatchValues()[0])).build();
351 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
352 Ipv6MatchBuilder ipv6MatchBuilder = (Ipv6MatchBuilder) mapMatchBuilder.remove(Ipv6MatchBuilder.class);
354 if (ipv6MatchBuilder != null) {
355 matchBuilderInOut.setLayer3Match(ipv6MatchBuilder.build());
362 protected Class<? extends MatchField> getMatchType() {
363 return Ipv6Src.class;
367 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
368 Ipv6MatchBuilder ipv6MatchBuilder = (Ipv6MatchBuilder) mapMatchBuilder.get(Ipv6MatchBuilder.class);
370 if (ipv6MatchBuilder == null) {
371 ipv6MatchBuilder = new Ipv6MatchBuilder();
372 mapMatchBuilder.put(Ipv6MatchBuilder.class, ipv6MatchBuilder);
375 ipv6MatchBuilder.setIpv6Source(new Ipv6Prefix(matchInfo.getStringMatchValues()[0])).build();
379 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
380 Ipv6MatchBuilder ipv6MatchBuilder = (Ipv6MatchBuilder) mapMatchBuilder.remove(Ipv6MatchBuilder.class);
382 if (ipv6MatchBuilder != null) {
383 matchBuilderInOut.setLayer3Match(ipv6MatchBuilder.build());
391 protected Class<? extends MatchField> getMatchType() {
396 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
397 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
399 if (arpMatchBuilder == null) {
400 arpMatchBuilder = new ArpMatchBuilder();
401 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
404 arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
408 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
409 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
411 if (arpMatchBuilder != null) {
412 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
419 protected Class<? extends MatchField> getMatchType() {
424 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
425 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
427 if (arpMatchBuilder == null) {
428 arpMatchBuilder = new ArpMatchBuilder();
429 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
432 if (matchInfo.getStringMatchValues() != null) {
433 arpTpa = matchInfo.getStringMatchValues()[0] + "/" + matchInfo.getStringMatchValues()[1];
435 long[] prefix = matchInfo.getMatchValues();
436 arpTpa = NWUtil.longToIpv4(prefix[0], prefix[1]);
438 arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(arpTpa));
442 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
443 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
445 if (arpMatchBuilder != null) {
446 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
453 protected Class<? extends MatchField> getMatchType() {
458 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
459 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
461 if (arpMatchBuilder == null) {
462 arpMatchBuilder = new ArpMatchBuilder();
463 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
466 long[] prefix = matchInfo.getMatchValues();
467 arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
471 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
472 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
474 if (arpMatchBuilder != null) {
475 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
482 protected Class<? extends MatchField> getMatchType() {
487 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
488 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
490 if (arpMatchBuilder == null) {
491 arpMatchBuilder = new ArpMatchBuilder();
492 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
495 ArpTargetHardwareAddressBuilder arpSrc = new ArpTargetHardwareAddressBuilder();
496 arpSrc.setAddress(new MacAddress(matchInfo.getStringMatchValues()[0]));
497 arpMatchBuilder.setArpTargetHardwareAddress(arpSrc.build());
501 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
502 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
504 if (arpMatchBuilder != null) {
505 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
512 protected Class<? extends MatchField> getMatchType() {
517 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
518 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
520 if (arpMatchBuilder == null) {
521 arpMatchBuilder = new ArpMatchBuilder();
522 mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
525 ArpSourceHardwareAddressBuilder arpSrc = new ArpSourceHardwareAddressBuilder();
526 arpSrc.setAddress(new MacAddress(matchInfo.getStringMatchValues()[0]));
527 arpMatchBuilder.setArpSourceHardwareAddress(arpSrc.build());
531 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
532 ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
534 if (arpMatchBuilder != null) {
535 matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
542 protected Class<? extends MatchField> getMatchType() {
543 return Metadata.class;
547 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
548 MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
550 if (metadataBuilder == null) {
551 metadataBuilder = new MetadataBuilder();
552 mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
555 BigInteger[] metadataValues = matchInfo.getBigMatchValues();
556 metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
560 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
561 MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
563 if (metadataBuilder != null) {
564 matchBuilderInOut.setMetadata(metadataBuilder.build());
571 protected Class<? extends MatchField> getMatchType() {
572 return MplsLabel.class;
576 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
577 ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
578 .get(ProtocolMatchFieldsBuilder.class);
580 if (protocolMatchFieldsBuilder == null) {
581 protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
582 mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
585 protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
589 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
590 ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
591 .remove(ProtocolMatchFieldsBuilder.class);
593 if (protocolMatchFieldsBuilder != null) {
594 matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
601 protected Class<? extends MatchField> getMatchType() {
602 return PbbIsid.class;
606 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
607 ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
608 .get(ProtocolMatchFieldsBuilder.class);
610 if (protocolMatchFieldsBuilder == null) {
611 protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
612 mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
615 protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
620 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
621 ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
622 .remove(ProtocolMatchFieldsBuilder.class);
624 if (protocolMatchFieldsBuilder != null) {
625 matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
632 protected Class<? extends MatchField> getMatchType() {
637 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
638 TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
640 if (tcpMatchBuilder == null) {
641 tcpMatchBuilder = new TcpMatchBuilder();
642 mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
645 tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
649 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
650 TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
652 if (tcpMatchBuilder != null) {
653 matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
660 protected Class<? extends MatchField> getMatchType() {
665 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
666 TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
668 if (tcpMatchBuilder == null) {
669 tcpMatchBuilder = new TcpMatchBuilder();
670 mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
673 tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
677 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
678 TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
680 if (tcpMatchBuilder != null) {
681 matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
688 protected Class<? extends MatchField> getMatchType() {
689 return TcpFlags.class;
693 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
694 TcpFlagsMatchBuilder TcpFlagsMatchBuilder = (TcpFlagsMatchBuilder) mapMatchBuilder
695 .get(TcpFlagsMatchBuilder.class);
696 if (matchInfo == null || matchInfo.getMatchValues() == null || matchInfo.getMatchValues().length == 0) {
700 if (TcpFlagsMatchBuilder == null) {
701 TcpFlagsMatchBuilder = new TcpFlagsMatchBuilder();
702 mapMatchBuilder.put(TcpFlagsMatchBuilder.class, TcpFlagsMatchBuilder);
704 TcpFlagsMatchBuilder.setTcpFlags((int) matchInfo.getMatchValues()[0]);
708 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>,
709 Object> mapMatchBuilder) {
710 TcpFlagsMatchBuilder TcpFlagsMatchBuilder = (TcpFlagsMatchBuilder) mapMatchBuilder
711 .remove(TcpFlagsMatchBuilder.class);
713 if (TcpFlagsMatchBuilder != null) {
714 matchBuilderInOut.setTcpFlagsMatch(TcpFlagsMatchBuilder.build());
720 protected Class<? extends MatchField> getMatchType() {
725 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
726 UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
728 if (udpMatchBuilder == null) {
729 udpMatchBuilder = new UdpMatchBuilder();
730 mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
733 udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
737 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
738 UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
740 if (udpMatchBuilder != null) {
741 matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
748 protected Class<? extends MatchField> getMatchType() {
753 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
754 UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
756 if (udpMatchBuilder == null) {
757 udpMatchBuilder = new UdpMatchBuilder();
758 mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
761 udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
765 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
766 UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
768 if (udpMatchBuilder != null) {
769 matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
775 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
776 TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
778 if (tunnelBuilder == null) {
779 tunnelBuilder = new TunnelBuilder();
780 mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
783 BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
784 tunnelBuilder.setTunnelId(tunnelIdValues[0]);
785 if(tunnelIdValues.length > 1){
786 tunnelBuilder.setTunnelMask(tunnelIdValues[1]);
788 tunnelBuilder.build();
792 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
793 TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
795 if (tunnelBuilder != null) {
796 matchBuilderInOut.setTunnel(tunnelBuilder.build());
801 protected Class<? extends MatchField> getMatchType() {
802 return TunnelId.class;
809 protected Class<? extends MatchField> getMatchType() {
810 return VlanVid.class;
814 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
815 VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
817 if (vlanMatchBuilder == null) {
818 vlanMatchBuilder = new VlanMatchBuilder();
819 mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
822 vlanMatchBuilder.setVlanId(new VlanIdBuilder()
823 .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
824 .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
829 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
830 VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
832 if (vlanMatchBuilder != null) {
833 matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
840 protected Class<? extends MatchField> getMatchType() {
841 return Icmpv4Type.class;
845 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
846 Icmpv4MatchBuilder icmpv4MatchBuilder = (Icmpv4MatchBuilder) mapMatchBuilder.get(Icmpv4MatchBuilder.class);
848 if (icmpv4MatchBuilder == null) {
849 icmpv4MatchBuilder = new Icmpv4MatchBuilder();
850 mapMatchBuilder.put(Icmpv4MatchBuilder.class, icmpv4MatchBuilder);
853 icmpv4MatchBuilder.setIcmpv4Type((short) matchInfo.getMatchValues()[0]);
854 icmpv4MatchBuilder.setIcmpv4Code((short) matchInfo.getMatchValues()[1]);
858 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
859 Icmpv4MatchBuilder icmpv4MatchBuilder = (Icmpv4MatchBuilder) mapMatchBuilder.remove(Icmpv4MatchBuilder.class);
861 if (icmpv4MatchBuilder != null) {
862 matchBuilderInOut.setIcmpv4Match(icmpv4MatchBuilder.build());
869 protected Class<? extends MatchField> getMatchType() {
870 return Icmpv6Type.class;
874 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
875 Icmpv6MatchBuilder icmpv6MatchBuilder = (Icmpv6MatchBuilder) mapMatchBuilder.get(Icmpv6MatchBuilder.class);
877 if (icmpv6MatchBuilder == null) {
878 icmpv6MatchBuilder = new Icmpv6MatchBuilder();
879 mapMatchBuilder.put(Icmpv6MatchBuilder.class, icmpv6MatchBuilder);
882 icmpv6MatchBuilder.setIcmpv6Type((short) matchInfo.getMatchValues()[0]);
883 icmpv6MatchBuilder.setIcmpv6Code((short) matchInfo.getMatchValues()[1]);
887 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
888 Icmpv6MatchBuilder icmpv6MatchBuilder = (Icmpv6MatchBuilder) mapMatchBuilder.remove(Icmpv6MatchBuilder.class);
890 if (icmpv6MatchBuilder != null) {
891 matchBuilderInOut.setIcmpv6Match(icmpv6MatchBuilder.build());
898 protected Class<? extends MatchField> getMatchType() {
899 return Ipv6NdTarget.class;
903 public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
904 Ipv6MatchBuilder ipv6MatchBuilder = (Ipv6MatchBuilder) mapMatchBuilder.get(Ipv6MatchBuilder.class);
906 if (ipv6MatchBuilder == null) {
907 ipv6MatchBuilder = new Ipv6MatchBuilder();
908 mapMatchBuilder.put(Ipv6MatchBuilder.class, ipv6MatchBuilder);
910 ipv6MatchBuilder.setIpv6NdTarget(new Ipv6Address(matchInfo.getStringMatchValues()[0])).build();
914 public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
915 Ipv6MatchBuilder ipv6MatchBuilder = (Ipv6MatchBuilder) mapMatchBuilder.remove(Ipv6MatchBuilder.class);
917 if (ipv6MatchBuilder != null) {
918 matchBuilderInOut.setLayer3Match(ipv6MatchBuilder.build());
924 public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
926 public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
927 Map<Class<?>, Object> mapMatchBuilder);
929 protected abstract Class<? extends MatchField> getMatchType();
931 protected boolean hasMatchFieldMask() {
932 // Override this to return true