/**
* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.primitives.Longs;
import com.google.common.primitives.UnsignedBytes;
import java.util.Iterator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import java.util.HashSet;
import java.util.Set;
import org.opendaylight.openflowplugin.extension.api.GroupingResolver;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.MatchEntryValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketIn;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemoved;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStats;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcAddFlow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcRemoveFlow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcUpdateFlowOriginal;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcUpdateFlowUpdated;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpShaGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpThaGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtStateGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxCtZoneGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc1Grouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc2Grouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc3Grouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshc4Grouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNsiGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNspGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxRegGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunIdGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunIpv4DstGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunIpv4SrcGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfArpOpGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfArpSpaGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfArpTpaGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfEthDstGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfEthSrcGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfEthTypeGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxEncapEthTypeGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxEncapEthSrcGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxEncapEthDstGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshMdtypeGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxNshNpGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxTunGpeNpGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfTcpDstGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfTcpSrcGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfUdpDstGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfUdpSrcGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmOfInPortGrouping;
import org.opendaylight.yangtools.yang.binding.Augmentation;
/**
* @author msunal
*
*/
public class MatchUtil {
private static final Splitter SPLITTER = Splitter.on('.');
private static final Joiner JOINER = Joiner.on('.');
private final static Set<Class<? extends Augmentation<Extension>>> augmentationsOfExtension = new HashSet<>();
public final static GroupingResolver<NxmNxRegGrouping, Extension> regResolver = new GroupingResolver<>(
NxmNxRegGrouping.class);
public final static GroupingResolver<NxmNxTunIdGrouping, Extension> tunIdResolver = new GroupingResolver<>(
NxmNxTunIdGrouping.class);
public final static GroupingResolver<NxmNxArpShaGrouping, Extension> arpShaResolver = new GroupingResolver<>(
NxmNxArpShaGrouping.class);
public final static GroupingResolver<NxmNxArpThaGrouping, Extension> arpThaResolver = new GroupingResolver<>(
NxmNxArpThaGrouping.class);
public final static GroupingResolver<NxmOfArpOpGrouping, Extension> arpOpResolver = new GroupingResolver<>(
NxmOfArpOpGrouping.class);
public final static GroupingResolver<NxmOfArpSpaGrouping, Extension> arpSpaResolver = new GroupingResolver<>(
NxmOfArpSpaGrouping.class);
public final static GroupingResolver<NxmOfArpTpaGrouping, Extension> arpTpaResolver = new GroupingResolver<>(
NxmOfArpTpaGrouping.class);
public final static GroupingResolver<NxmNxTunIpv4DstGrouping, Extension> tunIpv4DstResolver = new GroupingResolver<>(
NxmNxTunIpv4DstGrouping.class);
public final static GroupingResolver<NxmNxTunIpv4SrcGrouping, Extension> tunIpv4SrcResolver = new GroupingResolver<>(
NxmNxTunIpv4SrcGrouping.class);
public final static GroupingResolver<NxmOfEthDstGrouping, Extension> ethDstResolver = new GroupingResolver<>(
NxmOfEthDstGrouping.class);
public final static GroupingResolver<NxmOfEthSrcGrouping, Extension> ethSrcResolver = new GroupingResolver<>(
NxmOfEthSrcGrouping.class);
public final static GroupingResolver<NxmOfEthTypeGrouping, Extension> ethTypeResolver = new GroupingResolver<>(
NxmOfEthTypeGrouping.class);
public final static GroupingResolver<NxmNxNsiGrouping, Extension> nsiResolver = new GroupingResolver<>(
NxmNxNsiGrouping.class);
public final static GroupingResolver<NxmNxNspGrouping, Extension> nspResolver = new GroupingResolver<>(
NxmNxNspGrouping.class);
public final static GroupingResolver<NxmNxNshc1Grouping, Extension> nsc1Resolver = new GroupingResolver<>(
NxmNxNshc1Grouping.class);
public final static GroupingResolver<NxmNxNshc2Grouping, Extension> nsc2Resolver = new GroupingResolver<>(
NxmNxNshc2Grouping.class);
public final static GroupingResolver<NxmNxNshc3Grouping, Extension> nsc3Resolver = new GroupingResolver<>(
NxmNxNshc3Grouping.class);
public final static GroupingResolver<NxmNxNshc4Grouping, Extension> nsc4Resolver = new GroupingResolver<>(
NxmNxNshc4Grouping.class);
public final static GroupingResolver<NxmNxEncapEthTypeGrouping, Extension> encapEthTypeResolver = new GroupingResolver<>(
NxmNxEncapEthTypeGrouping.class);
public final static GroupingResolver<NxmNxEncapEthSrcGrouping, Extension> encapEthSrcResolver = new GroupingResolver<>(
NxmNxEncapEthSrcGrouping.class);
public final static GroupingResolver<NxmNxEncapEthDstGrouping, Extension> encapEthDstResolver = new GroupingResolver<>(
NxmNxEncapEthDstGrouping.class);
public final static GroupingResolver<NxmNxNshMdtypeGrouping, Extension> nshMdtypeResolver = new GroupingResolver<>(
NxmNxNshMdtypeGrouping.class);
public final static GroupingResolver<NxmNxNshNpGrouping, Extension> nshNpResolver = new GroupingResolver<>(
NxmNxNshNpGrouping.class);
public final static GroupingResolver<NxmNxTunGpeNpGrouping, Extension> tunGpeNpResolver = new GroupingResolver<>(
NxmNxTunGpeNpGrouping.class);
public final static GroupingResolver<NxmOfTcpSrcGrouping, Extension> tcpSrcResolver = new GroupingResolver<>(
NxmOfTcpSrcGrouping.class);
public final static GroupingResolver<NxmOfTcpDstGrouping, Extension> tcpDstResolver = new GroupingResolver<>(
NxmOfTcpDstGrouping.class);
public final static GroupingResolver<NxmOfUdpSrcGrouping, Extension> udpSrcResolver = new GroupingResolver<>(
NxmOfUdpSrcGrouping.class);
public final static GroupingResolver<NxmOfUdpDstGrouping, Extension> udpDstResolver = new GroupingResolver<>(
NxmOfUdpDstGrouping.class);
public final static GroupingResolver<NxmNxCtStateGrouping, Extension> ctStateResolver = new GroupingResolver<>(
NxmNxCtStateGrouping.class);
public final static GroupingResolver<NxmNxCtZoneGrouping, Extension> ctZoneResolver = new GroupingResolver<>(
NxmNxCtZoneGrouping.class);
public final static GroupingResolver<NxmOfInPortGrouping, Extension> nxmOfInportResolver = new GroupingResolver<>(
NxmOfInPortGrouping.class);
static {
augmentationsOfExtension.add(NxAugMatchRpcAddFlow.class);
augmentationsOfExtension.add(NxAugMatchRpcRemoveFlow.class);
augmentationsOfExtension.add(NxAugMatchRpcUpdateFlowOriginal.class);
augmentationsOfExtension.add(NxAugMatchRpcUpdateFlowUpdated.class);
augmentationsOfExtension.add(NxAugMatchNodesNodeTableFlow.class);
augmentationsOfExtension.add(NxAugMatchNotifSwitchFlowRemoved.class);
augmentationsOfExtension.add(NxAugMatchNotifPacketIn.class);
augmentationsOfExtension.add(NxAugMatchNotifUpdateFlowStats.class);
regResolver.setAugmentations(augmentationsOfExtension);
tunIdResolver.setAugmentations(augmentationsOfExtension);
arpShaResolver.setAugmentations(augmentationsOfExtension);
arpThaResolver.setAugmentations(augmentationsOfExtension);
arpOpResolver.setAugmentations(augmentationsOfExtension);
arpSpaResolver.setAugmentations(augmentationsOfExtension);
arpTpaResolver.setAugmentations(augmentationsOfExtension);
tunIpv4DstResolver.setAugmentations(augmentationsOfExtension);
tunIpv4SrcResolver.setAugmentations(augmentationsOfExtension);
ethDstResolver.setAugmentations(augmentationsOfExtension);
ethSrcResolver.setAugmentations(augmentationsOfExtension);
ethTypeResolver.setAugmentations(augmentationsOfExtension);
nspResolver.setAugmentations(augmentationsOfExtension);
nsiResolver.setAugmentations(augmentationsOfExtension);
nsc1Resolver.setAugmentations(augmentationsOfExtension);
nsc2Resolver.setAugmentations(augmentationsOfExtension);
nsc3Resolver.setAugmentations(augmentationsOfExtension);
nsc4Resolver.setAugmentations(augmentationsOfExtension);
encapEthTypeResolver.setAugmentations(augmentationsOfExtension);
encapEthSrcResolver.setAugmentations(augmentationsOfExtension);
encapEthDstResolver.setAugmentations(augmentationsOfExtension);
nshMdtypeResolver.setAugmentations(augmentationsOfExtension);
nshNpResolver.setAugmentations(augmentationsOfExtension);
tunGpeNpResolver.setAugmentations(augmentationsOfExtension);
tcpSrcResolver.setAugmentations(augmentationsOfExtension);
tcpDstResolver.setAugmentations(augmentationsOfExtension);
udpSrcResolver.setAugmentations(augmentationsOfExtension);
udpDstResolver.setAugmentations(augmentationsOfExtension);
ctStateResolver.setAugmentations(augmentationsOfExtension);
ctZoneResolver.setAugmentations(augmentationsOfExtension);
nxmOfInportResolver.setAugmentations(augmentationsOfExtension);
}
public static MatchEntryBuilder createDefaultMatchEntryBuilder(Class<? extends MatchField> matchField,
Class<? extends OxmClassBase> oxmClass,
MatchEntryValue matchEntryValue){
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
matchEntryBuilder.setHasMask(false);
matchEntryBuilder.setOxmMatchField(matchField);
matchEntryBuilder.setOxmClass(oxmClass);
matchEntryBuilder.setMatchEntryValue(matchEntryValue);
return matchEntryBuilder;
}
public static Long ipv4ToLong(Ipv4Address ipv4) {
Iterator<String> iterator = SPLITTER.split(ipv4.getValue()).iterator();
byte[] bytes = new byte[8];
for(int i =0;i < bytes.length;i++) {
if(i<4) {
bytes[i] = 0;
} else {
bytes[i] = UnsignedBytes.parseUnsignedByte((iterator.next()));
}
}
Long result = Longs.fromByteArray(bytes);
return result;
}
public static Ipv4Address longToIpv4Address(Long l) {
byte[] bytes = Longs.toByteArray(l);
String[] strArray = new String[4];
for(int i = 4;i < bytes.length;i++) {
strArray[i-4]=UnsignedBytes.toString(bytes[i]);
}
String str = JOINER.join(strArray);
Ipv4Address result = new Ipv4Address(str);
return result;
}
}