2 * Copyright (c) 2014 Cisco Systems, Inc. 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.openflowplugin.extension.vendor.nicira.convertor.match;
10 import com.google.common.base.Joiner;
11 import com.google.common.base.Splitter;
13 import com.google.common.primitives.Longs;
14 import com.google.common.primitives.UnsignedBytes;
15 import java.util.Iterator;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
17 import java.util.HashSet;
19 import org.opendaylight.openflowplugin.extension.api.GroupingResolver;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.MatchEntryValue;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlow;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketIn;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemoved;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStats;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchPacketInMessage;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcAddFlow;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcRemoveFlow;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcUpdateFlowOriginal;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcUpdateFlowUpdated;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpShaGrouping;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpThaGrouping;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtStateGrouping;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtZoneGrouping;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc1Grouping;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc2Grouping;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc3Grouping;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc4Grouping;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNsiGrouping;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNspGrouping;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxRegGrouping;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunIdGrouping;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunIpv4DstGrouping;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunIpv4SrcGrouping;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfArpOpGrouping;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfArpSpaGrouping;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfArpTpaGrouping;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfEthDstGrouping;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfEthSrcGrouping;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfEthTypeGrouping;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxEncapEthTypeGrouping;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxEncapEthSrcGrouping;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxEncapEthDstGrouping;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshMdtypeGrouping;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshNpGrouping;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunGpeNpGrouping;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfTcpDstGrouping;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfTcpSrcGrouping;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfUdpDstGrouping;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfUdpSrcGrouping;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfInPortGrouping;
65 import org.opendaylight.yangtools.yang.binding.Augmentation;
71 public class MatchUtil {
72 private static final Splitter SPLITTER = Splitter.on('.');
73 private static final Joiner JOINER = Joiner.on('.');
75 private final static Set<Class<? extends Augmentation<Extension>>> augmentationsOfExtension = new HashSet<>();
76 public final static GroupingResolver<NxmNxRegGrouping, Extension> regResolver = new GroupingResolver<>(
77 NxmNxRegGrouping.class);
78 public final static GroupingResolver<NxmNxTunIdGrouping, Extension> tunIdResolver = new GroupingResolver<>(
79 NxmNxTunIdGrouping.class);
80 public final static GroupingResolver<NxmNxArpShaGrouping, Extension> arpShaResolver = new GroupingResolver<>(
81 NxmNxArpShaGrouping.class);
82 public final static GroupingResolver<NxmNxArpThaGrouping, Extension> arpThaResolver = new GroupingResolver<>(
83 NxmNxArpThaGrouping.class);
84 public final static GroupingResolver<NxmOfArpOpGrouping, Extension> arpOpResolver = new GroupingResolver<>(
85 NxmOfArpOpGrouping.class);
86 public final static GroupingResolver<NxmOfArpSpaGrouping, Extension> arpSpaResolver = new GroupingResolver<>(
87 NxmOfArpSpaGrouping.class);
88 public final static GroupingResolver<NxmOfArpTpaGrouping, Extension> arpTpaResolver = new GroupingResolver<>(
89 NxmOfArpTpaGrouping.class);
90 public final static GroupingResolver<NxmNxTunIpv4DstGrouping, Extension> tunIpv4DstResolver = new GroupingResolver<>(
91 NxmNxTunIpv4DstGrouping.class);
92 public final static GroupingResolver<NxmNxTunIpv4SrcGrouping, Extension> tunIpv4SrcResolver = new GroupingResolver<>(
93 NxmNxTunIpv4SrcGrouping.class);
94 public final static GroupingResolver<NxmOfEthDstGrouping, Extension> ethDstResolver = new GroupingResolver<>(
95 NxmOfEthDstGrouping.class);
96 public final static GroupingResolver<NxmOfEthSrcGrouping, Extension> ethSrcResolver = new GroupingResolver<>(
97 NxmOfEthSrcGrouping.class);
98 public final static GroupingResolver<NxmOfEthTypeGrouping, Extension> ethTypeResolver = new GroupingResolver<>(
99 NxmOfEthTypeGrouping.class);
100 public final static GroupingResolver<NxmNxNsiGrouping, Extension> nsiResolver = new GroupingResolver<>(
101 NxmNxNsiGrouping.class);
102 public final static GroupingResolver<NxmNxNspGrouping, Extension> nspResolver = new GroupingResolver<>(
103 NxmNxNspGrouping.class);
104 public final static GroupingResolver<NxmNxNshc1Grouping, Extension> nsc1Resolver = new GroupingResolver<>(
105 NxmNxNshc1Grouping.class);
106 public final static GroupingResolver<NxmNxNshc2Grouping, Extension> nsc2Resolver = new GroupingResolver<>(
107 NxmNxNshc2Grouping.class);
108 public final static GroupingResolver<NxmNxNshc3Grouping, Extension> nsc3Resolver = new GroupingResolver<>(
109 NxmNxNshc3Grouping.class);
110 public final static GroupingResolver<NxmNxNshc4Grouping, Extension> nsc4Resolver = new GroupingResolver<>(
111 NxmNxNshc4Grouping.class);
112 public final static GroupingResolver<NxmNxEncapEthTypeGrouping, Extension> encapEthTypeResolver = new GroupingResolver<>(
113 NxmNxEncapEthTypeGrouping.class);
114 public final static GroupingResolver<NxmNxEncapEthSrcGrouping, Extension> encapEthSrcResolver = new GroupingResolver<>(
115 NxmNxEncapEthSrcGrouping.class);
116 public final static GroupingResolver<NxmNxEncapEthDstGrouping, Extension> encapEthDstResolver = new GroupingResolver<>(
117 NxmNxEncapEthDstGrouping.class);
118 public final static GroupingResolver<NxmNxNshMdtypeGrouping, Extension> nshMdtypeResolver = new GroupingResolver<>(
119 NxmNxNshMdtypeGrouping.class);
120 public final static GroupingResolver<NxmNxNshNpGrouping, Extension> nshNpResolver = new GroupingResolver<>(
121 NxmNxNshNpGrouping.class);
122 public final static GroupingResolver<NxmNxTunGpeNpGrouping, Extension> tunGpeNpResolver = new GroupingResolver<>(
123 NxmNxTunGpeNpGrouping.class);
124 public final static GroupingResolver<NxmOfTcpSrcGrouping, Extension> tcpSrcResolver = new GroupingResolver<>(
125 NxmOfTcpSrcGrouping.class);
126 public final static GroupingResolver<NxmOfTcpDstGrouping, Extension> tcpDstResolver = new GroupingResolver<>(
127 NxmOfTcpDstGrouping.class);
128 public final static GroupingResolver<NxmOfUdpSrcGrouping, Extension> udpSrcResolver = new GroupingResolver<>(
129 NxmOfUdpSrcGrouping.class);
130 public final static GroupingResolver<NxmOfUdpDstGrouping, Extension> udpDstResolver = new GroupingResolver<>(
131 NxmOfUdpDstGrouping.class);
132 public final static GroupingResolver<NxmNxCtStateGrouping, Extension> ctStateResolver = new GroupingResolver<>(
133 NxmNxCtStateGrouping.class);
134 public final static GroupingResolver<NxmNxCtZoneGrouping, Extension> ctZoneResolver = new GroupingResolver<>(
135 NxmNxCtZoneGrouping.class);
136 public final static GroupingResolver<NxmOfInPortGrouping, Extension> nxmOfInportResolver = new GroupingResolver<>(
137 NxmOfInPortGrouping.class);
140 augmentationsOfExtension.add(NxAugMatchRpcAddFlow.class);
141 augmentationsOfExtension.add(NxAugMatchRpcRemoveFlow.class);
142 augmentationsOfExtension.add(NxAugMatchRpcUpdateFlowOriginal.class);
143 augmentationsOfExtension.add(NxAugMatchRpcUpdateFlowUpdated.class);
144 augmentationsOfExtension.add(NxAugMatchNodesNodeTableFlow.class);
145 augmentationsOfExtension.add(NxAugMatchNotifSwitchFlowRemoved.class);
146 augmentationsOfExtension.add(NxAugMatchNotifPacketIn.class);
147 augmentationsOfExtension.add(NxAugMatchNotifUpdateFlowStats.class);
148 augmentationsOfExtension.add(NxAugMatchPacketInMessage.class);
149 regResolver.setAugmentations(augmentationsOfExtension);
150 tunIdResolver.setAugmentations(augmentationsOfExtension);
151 arpShaResolver.setAugmentations(augmentationsOfExtension);
152 arpThaResolver.setAugmentations(augmentationsOfExtension);
153 arpOpResolver.setAugmentations(augmentationsOfExtension);
154 arpSpaResolver.setAugmentations(augmentationsOfExtension);
155 arpTpaResolver.setAugmentations(augmentationsOfExtension);
156 tunIpv4DstResolver.setAugmentations(augmentationsOfExtension);
157 tunIpv4SrcResolver.setAugmentations(augmentationsOfExtension);
158 ethDstResolver.setAugmentations(augmentationsOfExtension);
159 ethSrcResolver.setAugmentations(augmentationsOfExtension);
160 ethTypeResolver.setAugmentations(augmentationsOfExtension);
161 nspResolver.setAugmentations(augmentationsOfExtension);
162 nsiResolver.setAugmentations(augmentationsOfExtension);
163 nsc1Resolver.setAugmentations(augmentationsOfExtension);
164 nsc2Resolver.setAugmentations(augmentationsOfExtension);
165 nsc3Resolver.setAugmentations(augmentationsOfExtension);
166 nsc4Resolver.setAugmentations(augmentationsOfExtension);
167 encapEthTypeResolver.setAugmentations(augmentationsOfExtension);
168 encapEthSrcResolver.setAugmentations(augmentationsOfExtension);
169 encapEthDstResolver.setAugmentations(augmentationsOfExtension);
170 nshMdtypeResolver.setAugmentations(augmentationsOfExtension);
171 nshNpResolver.setAugmentations(augmentationsOfExtension);
172 tunGpeNpResolver.setAugmentations(augmentationsOfExtension);
173 tcpSrcResolver.setAugmentations(augmentationsOfExtension);
174 tcpDstResolver.setAugmentations(augmentationsOfExtension);
175 udpSrcResolver.setAugmentations(augmentationsOfExtension);
176 udpDstResolver.setAugmentations(augmentationsOfExtension);
177 ctStateResolver.setAugmentations(augmentationsOfExtension);
178 ctZoneResolver.setAugmentations(augmentationsOfExtension);
179 nxmOfInportResolver.setAugmentations(augmentationsOfExtension);
183 public static MatchEntryBuilder createDefaultMatchEntryBuilder(Class<? extends MatchField> matchField,
184 Class<? extends OxmClassBase> oxmClass,
185 MatchEntryValue matchEntryValue){
186 MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
187 matchEntryBuilder.setHasMask(false);
188 matchEntryBuilder.setOxmMatchField(matchField);
189 matchEntryBuilder.setOxmClass(oxmClass);
190 matchEntryBuilder.setMatchEntryValue(matchEntryValue);
191 return matchEntryBuilder;
194 public static Long ipv4ToLong(Ipv4Address ipv4) {
195 Iterator<String> iterator = SPLITTER.split(ipv4.getValue()).iterator();
196 byte[] bytes = new byte[8];
197 for(int i =0;i < bytes.length;i++) {
201 bytes[i] = UnsignedBytes.parseUnsignedByte((iterator.next()));
204 Long result = Longs.fromByteArray(bytes);
208 public static Ipv4Address longToIpv4Address(Long l) {
209 byte[] bytes = Longs.toByteArray(l);
210 String[] strArray = new String[4];
211 for(int i = 4;i < bytes.length;i++) {
212 strArray[i-4]=UnsignedBytes.toString(bytes[i]);
214 String str = JOINER.join(strArray);
215 Ipv4Address result = new Ipv4Address(str);