X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Flisp-proto%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Flisp%2Futil%2FLispAddressStringifier.java;h=29e2409077818fff41ac68a0df89c26daf0e2916;hb=4a99f1d24037d5b7947658b7360a8c53baeedbf6;hp=9934937af92c33286acf2a8e7a1098fe43ac9b68;hpb=2274996733b78f69cdf4039588aa6b11741ceafc;p=lispflowmapping.git diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java index 9934937af..29e240907 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java @@ -7,8 +7,13 @@ */ package org.opendaylight.lispflowmapping.lisp.util; +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 java.util.Set; 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; @@ -25,14 +30,18 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres 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 com.google.common.base.Preconditions; -import com.google.common.io.BaseEncoding; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Utility class with static methods returning string representations of @@ -42,14 +51,17 @@ import com.google.common.io.BaseEncoding; * @author Lorand Jakab * */ -public class LispAddressStringifier { +public final class LispAddressStringifier { + 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: @@ -67,26 +79,48 @@ public class LispAddressStringifier { URL; } + // Utility class, should not be instantiated + private LispAddressStringifier() { + } + public static String getString(LispAddress lispAddress) { return getAddrString(Destination.USER, lispAddress); } - public static String getURIString(LispAddress lispAddress) { - return getAddrString(Destination.URI, lispAddress); + public static String getString(Set eids) { + StringBuilder sb = new StringBuilder("{"); + boolean first = true; + for (Eid eid : eids) { + if (!first) { + sb.append(", "); + } + sb.append(getString(eid)); + first = false; + } + sb.append("}"); + return sb.toString(); } - public static String getURLString(LispAddress lispAddress) { - return getAddrString(Destination.URL, lispAddress); + public static String getString(Address address) { + return getAddrString(Destination.USER, address, null); } public static String getString(XtrId xtrId) { return getXtrIdString(xtrId); } + public static String getURIString(LispAddress lispAddress) { + return getAddrString(Destination.URI, lispAddress); + } + 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) { return getXtrIdString(xtrId); } @@ -96,28 +130,53 @@ public class LispAddressStringifier { } private static String getAddrString(Destination dst, LispAddress lispAddress) { - Preconditions.checkNotNull(lispAddress, "lispAddress should not be null"); + if (lispAddress == null) { + return "null"; + } + Address addr = lispAddress.getAddress(); + Long vni = null; + + if (lispAddress.getVirtualNetworkId() != null) { + vni = lispAddress.getVirtualNetworkId().getValue().toJava(); + } + + return getAddrString(dst, addr, vni); + } + + private static String getAddrString(Destination dst, Address addr, Long virtualNetworkId) { String prefix = ""; String vni = ""; String address = ""; - if (lispAddress.getVirtualNetworkId() != null) { - vni = "[" + lispAddress.getVirtualNetworkId().getValue() + "] "; + if (virtualNetworkId != null) { + vni = "[" + virtualNetworkId + "] "; } if (addr instanceof Ipv4) { prefix = "ipv4" + PREFIX_SEPARATOR; address = getStringFromIpv4(dst, (Ipv4) addr); + } else if (addr instanceof Ipv4Binary) { + prefix = "ipv4" + PREFIX_SEPARATOR; + address = getStringFromIpv4Binary(dst, (Ipv4Binary) addr); } 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 Ipv6Binary) { + prefix = "ipv6" + PREFIX_SEPARATOR; + address = getStringFromIpv6Binary(dst, (Ipv6Binary) 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); @@ -187,22 +246,70 @@ public class LispAddressStringifier { return addr.getIpv4().getValue(); } + protected static String getStringFromIpv4Binary(Destination dst, Ipv4Binary addr) { + // AFI = 1; IPv4 + try { + return InetAddresses.toAddrString(Inet4Address.getByAddress(addr.getIpv4Binary().getValue())); + } catch (UnknownHostException e) { + LOG.debug("Cannot convert binary IPv4 to string", e); + } + return null; + } + protected static String getStringFromIpv4Prefix(Destination dst, Ipv4Prefix addr) { // AFI = 1; IPv4 String prefix = addr.getIpv4Prefix().getValue(); 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(); } + protected static String getStringFromIpv6Binary(Destination dst, Ipv6Binary addr) { + // AFI = 2; IPv6 + try { + return InetAddresses.toAddrString(Inet6Address.getByAddress(addr.getIpv6Binary().getValue())); + } catch (UnknownHostException e) { + LOG.debug("Cannot convert binary IPv6 to string", e); + } + return null; + } + protected static String getStringFromIpv6Prefix(Destination dst, Ipv6Prefix addr) { // AFI = 2; IPv6 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(); @@ -212,6 +319,7 @@ public class LispAddressStringifier { // 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: @@ -223,7 +331,7 @@ public class LispAddressStringifier { if (needComma) { sb.append(","); } - sb.append(a.getValue()); + sb.append(a.stringValue()); needComma = true; } sb.append("}"); @@ -292,16 +400,16 @@ public class LispAddressStringifier { // AFI = 16387, LCAF Type 12, Source/Destination Key // Example rendering: // 192.0.2.1/32|192.0.2.2/32 - return getPrefixString(dst, (new String(addr.getSourceDestKey().getSource().getValue())) - + "|" + getPrefixString(dst, new String(addr.getSourceDestKey().getDest().getValue()))); + return getPrefixString(dst, addr.getSourceDestKey().getSource().stringValue() + + "|" + getPrefixString(dst, addr.getSourceDestKey().getDest().stringValue())); } protected static String getStringFromKeyValueAddress(Destination dst, KeyValueAddress addr) { // AFI = 16387, LCAF Type 15, Key/Value Address Pair // Example rendering: // 192.0.2.1=>192.0.2.2 - return getPrefixString(dst, new String(addr.getKeyValueAddress().getKey().getValue()) - + "=>" + getPrefixString(dst, new String(addr.getKeyValueAddress().getValue().getValue()))); + return getPrefixString(dst, addr.getKeyValueAddress().getKey().stringValue() + + "=>" + getPrefixString(dst, addr.getKeyValueAddress().getValue().stringValue())); } protected static String getStringFromMac(Destination dst, Mac addr) {