diff options
author | Marek Gradzki <mgradzki@cisco.com> | 2017-11-20 15:27:44 +0100 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-11-20 17:12:59 +0100 |
commit | 868f11f4f4da49198b8102509fb0234578be25e8 (patch) | |
tree | bd77955fc9ad0e8268ce81390f28a5b4ed805c03 | |
parent | c3524b9d3b8579f1aa79bf8c123299a94f4dcc18 (diff) |
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 <mgradzki@cisco.com>
6 files changed, 22 insertions, 64 deletions
diff --git a/acl/acl-impl/src/test/java/io/fd/hc2vpp/acl/util/ace/extractor/AceDataExtractorTestCase.java b/acl/acl-impl/src/test/java/io/fd/hc2vpp/acl/util/ace/extractor/AceDataExtractorTestCase.java index fc925c992..14afdcd3f 100644 --- a/acl/acl-impl/src/test/java/io/fd/hc2vpp/acl/util/ace/extractor/AceDataExtractorTestCase.java +++ b/acl/acl-impl/src/test/java/io/fd/hc2vpp/acl/util/ace/extractor/AceDataExtractorTestCase.java @@ -40,8 +40,8 @@ abstract class AceDataExtractorTestCase { protected static final int DEFAULT_IPV4_PREFIX_VALUE = 0; protected static final byte[] DEFAULT_IPV6_ADDRESS_BYTES = new byte[16]; - protected static final Ipv6Prefix IPV6_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0:0:0:0:1/64"); - protected static final Ipv6Prefix IPV6_2_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0:0:0:0:2/48"); + protected static final Ipv6Prefix IPV6_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0::1/64"); + protected static final Ipv6Prefix IPV6_2_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0::2/48"); protected static final byte[] IPV6_PREFIX_BYTES = {32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1}; protected static final byte[] IPV6_2_PREFIX_BYTES = {32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 2}; protected static final byte IPV6_PREFIX_VALUE = (byte) 64; diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizer.java index f3997dc79..5026a0127 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizer.java @@ -113,7 +113,7 @@ final class Nat64PrefixesCustomizer if (prefixDetails != null) { builder.setNat64PrefixId(prefixId); builder.setNat64Prefix( - arrayToIpv6Prefix(prefixDetails.prefix, UnsignedBytes.toInt(prefixDetails.prefixLen))); + toIpv6Prefix(prefixDetails.prefix, UnsignedBytes.toInt(prefixDetails.prefixLen))); } } diff --git a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java index 79d906719..3626056b8 100644 --- a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java +++ b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java @@ -211,7 +211,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou assertEquals(1, builder.getId().intValue()); assertEquals(1, builder.getKey().getId().intValue()); - assertEquals("2001:db8:a0b:12f0:0:0:0:1/24", builder.getDestinationPrefix().getValue()); + assertEquals("2001:db8:a0b:12f0::1/24", builder.getDestinationPrefix().getValue()); NextHopOptions hopOptions = builder.getNextHopOptions(); assertTrue(hopOptions instanceof SpecialNextHop); @@ -227,7 +227,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou assertEquals(2, builder.getId().intValue()); assertEquals(2, builder.getKey().getId().intValue()); - assertEquals("2001:db8:a0b:12f0:0:0:0:2/22", builder.getDestinationPrefix().getValue()); + assertEquals("2001:db8:a0b:12f0::2/22", builder.getDestinationPrefix().getValue()); NextHopOptions hopOptions = builder.getNextHopOptions(); assertTrue(hopOptions instanceof SimpleNextHop); @@ -246,7 +246,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou assertEquals(3, builder.getId().intValue()); assertEquals(3, builder.getKey().getId().intValue()); - assertEquals("2001:db8:a0b:12f0:0:0:0:2/16", builder.getDestinationPrefix().getValue()); + assertEquals("2001:db8:a0b:12f0::2/16", builder.getDestinationPrefix().getValue()); NextHopOptions hopOptions = builder.getNextHopOptions(); assertTrue(hopOptions instanceof NextHopList); 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,20 +55,10 @@ 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 * * @return Ipv4AddressNoZone containing string representation of IPv4 address constructed from submitted bytes. No @@ -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 @@ -63,13 +63,20 @@ public class Ipv6TranslatorTest implements Ipv6Translator { } @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 |