From 868f11f4f4da49198b8102509fb0234578be25e8 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Mon, 20 Nov 2017 15:27:44 +0100 Subject: Refactor IP translators to use IetfInetUtil Use efficient factory methods for ietf-inet-types DTOs where possible. Also cleans up some duplicated and unused code. Change-Id: I58f4163edba0dcd30e5e044cf701788446d86a0f Signed-off-by: Marek Gradzki --- .../common/translate/util/Ipv4Translator.java | 29 +++------------------- .../common/translate/util/Ipv6Translator.java | 27 +++----------------- .../common/translate/util/Ipv6TranslatorTest.java | 18 +++++++------- 3 files changed, 16 insertions(+), 58 deletions(-) (limited to 'vpp-common') diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java index 69ef7f3ab..24f4ae9aa 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java @@ -18,11 +18,9 @@ package io.fd.hc2vpp.common.translate.util; import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.net.InetAddresses; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.util.Arrays; import javax.annotation.Nonnull; +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.Ipv4AddressNoZone; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; @@ -57,19 +55,9 @@ public interface Ipv4Translator extends ByteDataTranslator { */ default byte extractPrefix(Ipv4Prefix data) { checkNotNull(data, "Cannot extract from null"); - return Byte.valueOf(data.getValue().substring(data.getValue().indexOf('/') + 1)); } - /** - * Converts byte array to {@link Ipv4Prefix} with specified prefixLength - */ - default Ipv4Prefix arrayToIpv4Prefix(final byte[] address, byte prefixLength) { - Ipv4AddressNoZone addressPart = arrayToIpv4AddressNoZone(address); - - return new Ipv4Prefix(addressPart.getValue().concat("/").concat(String.valueOf(prefixLength))); - } - /** * Parse byte array returned by VPP representing an Ipv4 address. Expects array in big endian * @@ -82,11 +70,7 @@ public interface Ipv4Translator extends ByteDataTranslator { if (ip.length == 16) { ip = Arrays.copyOfRange(ip, 0, 4); } - try { - return new Ipv4AddressNoZone(InetAddresses.toAddrString(InetAddress.getByAddress(ip))); - } catch (UnknownHostException e) { - throw new IllegalArgumentException("Unable to parse ipv4", e); - } + return new Ipv4AddressNoZone(IetfInetUtil.INSTANCE.ipv4AddressFor(ip)); } /** @@ -110,13 +94,6 @@ public interface Ipv4Translator extends ByteDataTranslator { } default Ipv4Prefix toIpv4Prefix(final byte[] address, final int prefix) { - try { - return new Ipv4Prefix( - String.format("%s/%s", InetAddress.getByAddress(address).getHostAddress(), - String.valueOf(prefix))); - } catch (UnknownHostException e) { - throw new IllegalArgumentException( - "Cannot create prefix for address[" + Arrays.toString(address) + "],prefix[" + prefix + "]", e); - } + return IetfInetUtil.INSTANCE.ipv4PrefixFor(address, prefix); } } diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java index 6a71d6af2..6d939af07 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java @@ -21,10 +21,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import com.google.common.net.InetAddresses; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Arrays; import javax.annotation.Nonnull; +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.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; @@ -68,9 +66,8 @@ public interface Ipv6Translator extends ByteDataTranslator { /** * Converts byte array to {@link Ipv6Prefix} with specified prefixLength */ - default Ipv6Prefix arrayToIpv6Prefix(final byte[] address, int prefixLength) { - Ipv6AddressNoZone addressPart = arrayToIpv6AddressNoZone(address); - return new Ipv6Prefix(addressPart.getValue().concat("/").concat(String.valueOf(prefixLength))); + default Ipv6Prefix toIpv6Prefix(final byte[] address, int prefix) { + return IetfInetUtil.INSTANCE.ipv6PrefixFor(address, prefix); } /** @@ -82,12 +79,7 @@ public interface Ipv6Translator extends ByteDataTranslator { @Nonnull default Ipv6AddressNoZone arrayToIpv6AddressNoZone(@Nonnull byte[] ip) { checkArgument(ip.length == 16, "Illegal array length"); - - try { - return new Ipv6AddressNoZone(InetAddresses.toAddrString(InetAddress.getByAddress(ip))); - } catch (UnknownHostException e) { - throw new IllegalArgumentException("Unable to parse ipv6", e); - } + return new Ipv6AddressNoZone(IetfInetUtil.INSTANCE.ipv6AddressFor(ip)); } /** @@ -117,15 +109,4 @@ public interface Ipv6Translator extends ByteDataTranslator { System.arraycopy(ip, 0, result, 0, 4); return result; } - - default Ipv6Prefix toIpv6Prefix(final byte[] address, final int prefix) { - try { - return new Ipv6Prefix( - String.format("%s/%s", InetAddress.getByAddress(address).getHostAddress(), - String.valueOf(prefix))); - } catch (UnknownHostException e) { - throw new IllegalArgumentException( - "Cannot create prefix for address[" + Arrays.toString(address) + "],prefix[" + prefix + "]", e); - } - } } diff --git a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java index fb4c61b55..3ed7433ea 100644 --- a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java +++ b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java @@ -62,14 +62,21 @@ public class Ipv6TranslatorTest implements Ipv6Translator { assertEquals(64, extractPrefix(new Ipv6Prefix(IPV6_COMPRESSED + "/64"))); } + @Test + public void testArrayToIpv6Prefix48() { + assertEquals("2001:db8:a0b:12f0::1/48", + toIpv6Prefix(new byte[]{32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1}, + (byte) 48).getValue()); + } + @Test public void testArrayToIpv6Prefix64() throws Exception { - assertEquals(IPV6_COMPRESSED + "/64", arrayToIpv6Prefix(IPV6_BYTES, 64).getValue()); + assertEquals(IPV6_COMPRESSED + "/64", toIpv6Prefix(IPV6_BYTES, 64).getValue()); } @Test public void testArrayToIpv6Prefix128() throws Exception { - assertEquals(IPV6_COMPRESSED + "/128", arrayToIpv6Prefix(IPV6_BYTES, 128).getValue()); + assertEquals(IPV6_COMPRESSED + "/128", toIpv6Prefix(IPV6_BYTES, 128).getValue()); } @Test @@ -129,11 +136,4 @@ public class Ipv6TranslatorTest implements Ipv6Translator { public void testExtractPrefix() { assertEquals(48, extractPrefix(new Ipv6Prefix("3ffe:1900:4545:3:200:f8ff:fe21:67cf/48"))); } - - @Test - public void toPrefix() { - assertEquals("2001:db8:a0b:12f0:0:0:0:1/48", - toIpv6Prefix(new byte[]{32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1}, - (byte) 48).getValue()); - } } \ No newline at end of file -- cgit 1.2.3-korg