summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2017-11-20 15:27:44 +0100
committerMarek Gradzki <mgradzki@cisco.com>2017-11-20 17:12:59 +0100
commit868f11f4f4da49198b8102509fb0234578be25e8 (patch)
treebd77955fc9ad0e8268ce81390f28a5b4ed805c03
parentc3524b9d3b8579f1aa79bf8c123299a94f4dcc18 (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>
-rw-r--r--acl/acl-impl/src/test/java/io/fd/hc2vpp/acl/util/ace/extractor/AceDataExtractorTestCase.java4
-rw-r--r--nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizer.java2
-rw-r--r--routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java6
-rw-r--r--vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java29
-rw-r--r--vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java27
-rw-r--r--vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java18
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