From e259ab7990b8179eda4462907ecebccd0e85b587 Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Thu, 24 Nov 2016 11:56:40 +0100 Subject: HON-3 - Address logic refactoring Ipv4/6 address logic refactored to not use InetAddresses.fromLittleEndianArray to prevent unnecessary reverting of address arrays after fix introduced by VPP-132. Removed unused ***reverted variants of conversion logic. Tested with these plugins - Lisp - V3po - Nat Change-Id: I6a0728f8b3dffd04e2edd822ec61542216cca824 Signed-off-by: Jan Srnicek --- .../common/translate/util/AddressTranslator.java | 17 ---------- .../common/translate/util/Ipv4AddressRange.java | 4 +-- .../common/translate/util/Ipv4Translator.java | 36 +++------------------- .../common/translate/util/Ipv6Translator.java | 33 +++++--------------- .../translate/util/AddressTranslatorTest.java | 36 ---------------------- .../common/translate/util/Ipv4TranslatorTest.java | 5 +-- .../common/translate/util/Ipv6TranslatorTest.java | 7 ++--- 7 files changed, 17 insertions(+), 121 deletions(-) delete mode 100644 vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/AddressTranslatorTest.java (limited to 'vpp-common/vpp-translate-utils/src') diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/AddressTranslator.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/AddressTranslator.java index b9665df9a..eaa966479 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/AddressTranslator.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/AddressTranslator.java @@ -65,21 +65,4 @@ public interface AddressTranslator extends Ipv4Translator, Ipv6Translator, MacTr return new IpAddress(arrayToIpv4AddressNoZone(ip)); } } - - /** - * Converts array bytes to {@link IpAddress} - */ - @Nonnull - default IpAddress arrayToIpAddressReversed(boolean isIpv6, byte[] ip) { - if (isIpv6) { - return new IpAddress(arrayToIpv6AddressNoZoneReversed(ip)); - } else { - return new IpAddress(arrayToIpv4AddressNoZoneReversed(ip)); - } - } - - default IpAddress reverseAddress(@Nonnull final IpAddress address) { - //arrayToIpAdddress internaly reverts order - return arrayToIpAddress(isIpv6(address), ipAddressToArray(address)); - } } diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4AddressRange.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4AddressRange.java index 032b9051d..5f014d053 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4AddressRange.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4AddressRange.java @@ -115,7 +115,7 @@ public final class Ipv4AddressRange { } return new Ipv4AddressRange( - Ipv4Translator.INSTANCE.arrayToIpv4AddressNoZoneReversed(prefixAddrBytes0), - Ipv4Translator.INSTANCE.arrayToIpv4AddressNoZoneReversed(prefixAddrBytesF)); + Ipv4Translator.INSTANCE.arrayToIpv4AddressNoZone(prefixAddrBytes0), + Ipv4Translator.INSTANCE.arrayToIpv4AddressNoZone(prefixAddrBytesF)); } } 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 255639655..99d1757b4 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 @@ -19,6 +19,7 @@ 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; @@ -33,7 +34,8 @@ public interface Ipv4Translator extends ByteDataTranslator { /** * Make available also from static context. */ - Ipv4Translator INSTANCE = new Ipv4Translator() {}; + Ipv4Translator INSTANCE = new Ipv4Translator() { + }; /** * Creates address array from address part of {@link Ipv4Prefix} @@ -69,7 +71,7 @@ public interface Ipv4Translator extends ByteDataTranslator { } /** - * Parse byte array returned by VPP representing an Ipv4 address. Vpp returns IP byte arrays in reversed order. + * 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 * change in order. @@ -81,40 +83,12 @@ public interface Ipv4Translator extends ByteDataTranslator { ip = Arrays.copyOfRange(ip, 0, 4); } try { - // Not reversing the byte array here!! because the IP coming from VPP is in reversed byte order - // compared to byte order it was submitted - return new Ipv4AddressNoZone(InetAddresses.toAddrString(InetAddresses.fromLittleEndianByteArray(ip))); + return new Ipv4AddressNoZone(InetAddresses.toAddrString(InetAddress.getByAddress(ip))); } catch (UnknownHostException e) { throw new IllegalArgumentException("Unable to parse ipv4", e); } } - /** - * Parse byte array returned by VPP representing an Ipv4 address. Vpp returns IP byte arrays in reversed order. - * - * @return Ipv4AddressNoZone containing string representation of IPv4 address constructed from submitted bytes. No - * change in order. - */ - @Nonnull - default Ipv4AddressNoZone arrayToIpv4AddressNoZoneReversed(@Nonnull byte[] ip) { - // VPP sends ipv4 in a 16 byte array - - if (ip.length == 16) { - ip = Arrays.copyOfRange(ip, 0, 4); - } - - ip = reverseBytes(ip); - - try { - // Not reversing the byte array here!! because the IP coming from VPP is in reversed byte order - // compared to byte order it was submitted - return new Ipv4AddressNoZone(InetAddresses.toAddrString(InetAddresses.fromLittleEndianByteArray(ip))); - } catch (UnknownHostException e) { - throw new IllegalArgumentException("Unable to parse ipv4", e); - } - } - - /** * Transform Ipv4 address to a byte array acceptable by VPP. VPP expects incoming byte array to be in the same order * as the address. 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 0d645c3c0..cb8b2ac87 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,6 +21,7 @@ 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 java.util.List; @@ -75,11 +76,11 @@ public interface Ipv6Translator extends ByteDataTranslator { /** * Creates address array from address part of {@link Ipv6Prefix} */ - default byte[] ipv6AddressPrefixToArray(@Nonnull final Ipv6Prefix ipv4Prefix) { - checkNotNull(ipv4Prefix, "Cannot convert null prefix"); + default byte[] ipv6AddressPrefixToArray(@Nonnull final Ipv6Prefix ipv6Prefix) { + checkNotNull(ipv6Prefix, "Cannot convert null prefix"); return ipv6AddressNoZoneToArray(new Ipv6AddressNoZone( - new Ipv6Address(ipv4Prefix.getValue().substring(0, ipv4Prefix.getValue().indexOf('/'))))); + new Ipv6Address(ipv6Prefix.getValue().substring(0, ipv6Prefix.getValue().indexOf('/'))))); } /** @@ -101,9 +102,9 @@ public interface Ipv6Translator extends ByteDataTranslator { } /** - * Parse byte array returned by VPP representing an Ipv6 address. Vpp returns IP byte arrays in reversed order. + * Parse byte array returned by VPP representing an Ipv6 address. Expects array in non-reversed order * - * @return Ipv46ddressNoZone containing string representation of IPv6 address constructed from submitted bytes. No + * @return Ipv6ddressNoZone containing string representation of IPv6 address constructed from submitted bytes. No * change in order. */ @Nonnull @@ -111,7 +112,7 @@ public interface Ipv6Translator extends ByteDataTranslator { checkArgument(ip.length == 16, "Illegal array length"); try { - return new Ipv6AddressNoZone(InetAddresses.toAddrString(InetAddresses.fromLittleEndianByteArray(ip))); + return new Ipv6AddressNoZone(InetAddresses.toAddrString(InetAddress.getByAddress(ip))); } catch (UnknownHostException e) { throw new IllegalArgumentException("Unable to parse ipv6", e); } @@ -127,26 +128,6 @@ public interface Ipv6Translator extends ByteDataTranslator { return address.getIpv6Address() != null; } - /** - * Parse byte array returned by VPP representing an Ipv6 address. Vpp returns IP byte arrays in natural order. - * - * @return Ipv46ddressNoZone containing string representation of IPv6 address constructed from submitted bytes. No - * change in order. - */ - @Nonnull - default Ipv6AddressNoZone arrayToIpv6AddressNoZoneReversed(@Nonnull byte[] ip) { - checkArgument(ip.length == 16, "Illegal array length"); - - ip = reverseBytes(ip); - - try { - return new Ipv6AddressNoZone(InetAddresses.toAddrString(InetAddresses.fromLittleEndianByteArray(ip))); - } catch (UnknownHostException e) { - throw new IllegalArgumentException("Unable to parse ipv6", e); - } - } - - /** * Detects whether {@code IpPrefix} is ipv6 */ diff --git a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/AddressTranslatorTest.java b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/AddressTranslatorTest.java deleted file mode 100644 index 97fb2747c..000000000 --- a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/AddressTranslatorTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.hc2vpp.common.translate.util; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -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.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; - -public class AddressTranslatorTest implements AddressTranslator { - - @Test - public void testRevertAddress() { - assertEquals("1.2.168.192", - reverseAddress(new IpAddress(new Ipv4Address("192.168.2.1"))).getIpv4Address().getValue()); - assertEquals("3473:7003:2e8a::a385:b80d:120", - reverseAddress(new IpAddress(new Ipv6Address("2001:db8:85a3:0:0:8a2e:370:7334"))).getIpv6Address() - .getValue()); - } -} \ No newline at end of file diff --git a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv4TranslatorTest.java b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv4TranslatorTest.java index 722e2c62c..37e29d88c 100644 --- a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv4TranslatorTest.java +++ b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv4TranslatorTest.java @@ -18,7 +18,6 @@ package io.fd.hc2vpp.common.translate.util; import static org.junit.Assert.assertEquals; -import io.fd.hc2vpp.common.translate.util.Ipv4Translator; import org.junit.Test; 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; @@ -30,8 +29,6 @@ public class Ipv4TranslatorTest implements Ipv4Translator { final Ipv4AddressNoZone ipv4Addr = new Ipv4AddressNoZone("192.168.1.1"); byte[] bytes = ipv4AddressNoZoneToArray(ipv4Addr); assertEquals((byte) 192, bytes[0]); - // Simulating the magic of VPP - bytes = reverseBytes(bytes); final Ipv4AddressNoZone ipv4AddressNoZone = arrayToIpv4AddressNoZone(bytes); assertEquals(ipv4Addr, ipv4AddressNoZone); } @@ -40,7 +37,7 @@ public class Ipv4TranslatorTest implements Ipv4Translator { public void testIpv4AddressPrefixToArray() { byte[] ip = ipv4AddressPrefixToArray(new Ipv4Prefix("192.168.2.1/24")); - assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(ip).getValue()); + assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(ip).getValue()); } @Test 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 073754a98..43327ea56 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 @@ -18,7 +18,6 @@ package io.fd.hc2vpp.common.translate.util; import static org.junit.Assert.assertEquals; -import io.fd.hc2vpp.common.translate.util.Ipv6Translator; import org.junit.Test; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix; @@ -30,8 +29,6 @@ public class Ipv6TranslatorTest implements Ipv6Translator { final Ipv6AddressNoZone ipv6Addr = new Ipv6AddressNoZone("3ffe:1900:4545:3:200:f8ff:fe21:67cf"); byte[] bytes = ipv6AddressNoZoneToArray(ipv6Addr); assertEquals((byte) 63, bytes[0]); - - bytes = reverseBytes(bytes); final Ipv6AddressNoZone ivp6AddressNoZone = arrayToIpv6AddressNoZone(bytes); assertEquals(ipv6Addr, ivp6AddressNoZone); } @@ -40,14 +37,14 @@ public class Ipv6TranslatorTest implements Ipv6Translator { public void testIpv6AddressPrefixToArray() { byte[] ip = ipv6AddressPrefixToArray(new Ipv6Prefix("3ffe:1900:4545:3:200:f8ff:fe21:67cf/48")); - assertEquals("cf67:21fe:fff8:2:300:4545:19:fe3f", arrayToIpv6AddressNoZone(ip).getValue()); + assertEquals("3ffe:1900:4545:3:200:f8ff:fe21:67cf", arrayToIpv6AddressNoZone(ip).getValue()); } @Test public void testIpv4AddressPrefixToArray() { byte[] ip = ipv6AddressPrefixToArray(new Ipv6Prefix("2001:0db8:0a0b:12f0:0000:0000:0000:0001/128")); - assertEquals("100::f012:b0a:b80d:120", arrayToIpv6AddressNoZone(ip).getValue()); + assertEquals("2001:db8:a0b:12f0::1", arrayToIpv6AddressNoZone(ip).getValue()); } @Test -- cgit 1.2.3-korg