*/
package org.opendaylight.lispflowmapping.lisp.util;
+import com.google.common.base.Preconditions;
+import com.google.common.io.BaseEncoding;
+import com.google.common.net.InetAddresses;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.UnknownHostException;
import java.util.List;
-
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop.LrsBits;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinary;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinary;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Preconditions;
-import com.google.common.io.BaseEncoding;
-import com.google.common.net.InetAddresses;
-
/**
* Utility class with static methods returning string representations of
* supported LISP address types, both for use in URLs and for user friendly
protected static final Logger LOG = LoggerFactory.getLogger(LispAddressStringifier.class);
private static final String PREFIX_SEPARATOR = ":";
+
/*
* In the unlikely event that a AFI 0 address is used a key, we use a
* sequence number to ensure uniqueness
*/
protected static int noAddrSeq = 0;
+
/*
* There are three possible destinations for rendering an address as a
* string:
return getAddrString(Destination.USER, lispAddress);
}
- public static String getURIString(LispAddress lispAddress) {
- return getAddrString(Destination.URI, lispAddress);
+ public static String getString(XtrId xtrId) {
+ return getXtrIdString(xtrId);
}
- public static String getURLString(LispAddress lispAddress) {
- return getAddrString(Destination.URL, lispAddress);
+ public static String getURIString(LispAddress lispAddress) {
+ return getAddrString(Destination.URI, lispAddress);
}
- public static String getString(XtrId xtrId) {
+ public static String getURIString(XtrId xtrId) {
return getXtrIdString(xtrId);
}
- public static String getURIString(XtrId xtrId) {
- return getXtrIdString(xtrId);
+ public static String getURLString(LispAddress lispAddress) {
+ return getAddrString(Destination.URL, lispAddress);
}
public static String getURLString(XtrId xtrId) {
} else if (addr instanceof Ipv4Prefix) {
prefix = "ipv4" + PREFIX_SEPARATOR;
address = getStringFromIpv4Prefix(dst, (Ipv4Prefix) addr);
+ } else if (addr instanceof Ipv4PrefixBinary) {
+ prefix = "ipv4" + PREFIX_SEPARATOR;
+ address = getStringFromIpv4PrefixBinary(dst, (Ipv4PrefixBinary) addr);
} else if (addr instanceof Ipv6) {
prefix = "ipv6" + PREFIX_SEPARATOR;
address = getStringFromIpv6(dst, (Ipv6) addr);
} else if (addr instanceof Ipv6Prefix) {
prefix = "ipv6" + PREFIX_SEPARATOR;
address = getStringFromIpv6Prefix(dst, (Ipv6Prefix) addr);
+ } else if (addr instanceof Ipv6PrefixBinary) {
+ prefix = "ipv6" + PREFIX_SEPARATOR;
+ address = getStringFromIpv6PrefixBinary(dst, (Ipv6PrefixBinary) addr);
} else if (addr instanceof Mac) {
prefix = "mac" + PREFIX_SEPARATOR;
address = getStringFromMac(dst, (Mac) addr);
return getPrefixString(dst, prefix);
}
+ protected static String getStringFromIpv4PrefixBinary(Destination dst, Ipv4PrefixBinary addr) {
+ // AFI = 1; IPv4
+ try {
+ StringBuilder prefixBuilder = new StringBuilder(InetAddresses.toAddrString(
+ Inet4Address.getByAddress(addr.getIpv4AddressBinary().getValue())));
+ prefixBuilder.append('/');
+ prefixBuilder.append(addr.getIpv4MaskLength().toString());
+ return getPrefixString(dst, prefixBuilder.toString());
+ } catch (UnknownHostException e) {
+ LOG.debug("Cannot convert binary IPv4 prefix to string", e);
+ }
+ return null;
+ }
+
protected static String getStringFromIpv6(Destination dst, Ipv6 addr) {
// AFI = 2; IPv6
return addr.getIpv6().getValue();
return addr.getIpv6Prefix().getValue();
}
+ protected static String getStringFromIpv6PrefixBinary(Destination dst, Ipv6PrefixBinary addr) {
+ // AFI = 2; IPv5
+ try {
+ StringBuilder prefixBuilder = new StringBuilder(InetAddresses.toAddrString(
+ Inet6Address.getByAddress(addr.getIpv6AddressBinary().getValue())));
+ prefixBuilder.append('/');
+ prefixBuilder.append(addr.getIpv6MaskLength().toString());
+ return getPrefixString(dst, prefixBuilder.toString());
+ } catch (UnknownHostException e) {
+ LOG.debug("Cannot convert binary IPv6 prefix to string", e);
+ }
+ return null;
+ }
+
protected static String getStringFromDistinguishedName(Destination dst, DistinguishedName addr) {
// AFI = 17; Distinguished Name
return addr.getDistinguishedName().getValue();
// AFI = 18; Autonomous System Number
return "AS" + addr.getAsNumber().getValue();
}
+
protected static String getStringFromAfiList(Destination dst, AfiList addr) {
// AFI 16387, LCAF Type 1; Address List
// Example rendering: