import java.util.BitSet;
import java.util.Iterator;
import java.util.List;
-
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-/**
- * Created by Martin Bobak <mbobak@cisco.com> on 5.3.2015.
- * v6 routines added by Anton Ivanov on 14.6.2015
- * Arbitrary masks by sai.marapareddy@gmail.com
- */
public final class IpConversionUtil {
private static final Logger LOG = LoggerFactory.getLogger(IpConversionUtil.class);
}
public static Ipv4Prefix createPrefix(final Ipv4Address ipv4Address, final byte [] bytemask){
+ if (bytemask == null) {
+ return createPrefix(ipv4Address);
+ }
+
return IetfInetUtil.INSTANCE.ipv4PrefixFor(ipv4Address, countBits(bytemask));
}
}
public static Ipv6Prefix createPrefix(final Ipv6Address ipv6Address, final byte [] bytemask){
+ if (bytemask == null) {
+ return createPrefix(ipv6Address);
+ }
+
return IetfInetUtil.INSTANCE.ipv6PrefixFor(ipv6Address, countBits(bytemask));
}
* @param ipv6Address - v6 Address object
* @return - byte array of size 16. Last byte contains netmask
*/
-
-
public static byte[] canonicalBinaryV6Address(final Ipv6Address ipv6Address) {
/*
* Do not modify this routine to take direct strings input!!!
* the input is validated via regexps in Ipv6Prefix()
*/
+ return canonicalBinaryV6AddressFromString(ipv6Address.getValue());
+ }
+
+
+ private static byte[] canonicalBinaryV6AddressFromString(final String ipv6Address) {
Iterable<String> splittedV6Address = Splitter.on("%")
.trimResults()
.omitEmptyStrings()
- .split(ipv6Address.getValue());
+ .split(ipv6Address);
List<String> partsV6Address = Lists.newArrayList(splittedV6Address.iterator());
int colonp;
return dst;
}
- public static String byteArrayV6AddressToString (final byte [] _binary_form) throws UnknownHostException{
+ public static String byteArrayV6AddressToString (final byte [] _binary_form) throws UnknownHostException {
/* DO NOT DIY!!! - InetAddresses will actually print correct canonical
* zero compressed form.
*/
List<String> partsV6Prefix = Lists.newArrayList(splittedV6Prefix.iterator());
boolean valid = true;
-
+
try {
mask = Integer.parseInt(partsV6Prefix.get(1));
if (mask > 128) {
return sb.toString();
}
+ /**
+ * Check if the supplied IPv6Address has any prefix
+ *
+ * @param ipv6Prefix Ipv6 prefix
+ * @return prefix if there is one, else null
+ */
+ public static Integer hasIpv6Prefix(final Ipv6Prefix ipv6Prefix) {
+ final int prefix = IpConversionUtil.extractIpv6Prefix(ipv6Prefix);
+ return prefix < IPV6_ADDRESS_LENGTH ? prefix : null;
+ }
+
private static int ipv6PrefixByteArrayOffset(final int mask) {
if (mask < 0) {
return 0;
public static final byte[] convertIpv6ArbitraryMaskToByteArray(final Ipv6ArbitraryMask mask) {
String maskValue;
- if (mask.getValue() != null) {
+ if (mask != null && mask.getValue() != null) {
maskValue = mask.getValue();
} else {
maskValue = DEFAULT_IPV6_ARBITRARY_BITMASK;
return false;
}
- public static String compressedIpv6Format(final String ipv6Address) {
- String compressedIpv6Address;
- compressedIpv6Address = ipv6Address.replaceAll("((?::0+\\b){2,}):?(?!\\S*\\b\\1:0\\b)(\\S*)", "::$2");
- return compressedIpv6Address;
+ private static String compressedIpv6FormatFromString(final String ipv6Address) {
+ try {
+ return byteArrayV6AddressToString(canonicalBinaryV6AddressFromString(ipv6Address));
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to compress IPv6 address {} because it is invalid", ipv6Address);
+ return ipv6Address;
+ }
+ }
+
+ public static Ipv6Address compressedIpv6AddressFormat(final Ipv6Address ipv6Address) {
+ return new Ipv6Address(compressedIpv6FormatFromString(ipv6Address.getValue()));
}
public static Ipv6ArbitraryMask compressedIpv6MaskFormat(final Ipv6ArbitraryMask ipv6Mask) {
- String stringIpv6Mask = ipv6Mask.getValue();
- return new Ipv6ArbitraryMask(compressedIpv6Format(stringIpv6Mask));
+ return new Ipv6ArbitraryMask(compressedIpv6FormatFromString(ipv6Mask.getValue()));
}
}