HON-3 - Address logic refactoring 47/3947/3
authorJan Srnicek <[email protected]>
Thu, 24 Nov 2016 10:56:40 +0000 (11:56 +0100)
committerJan Srnicek <[email protected]>
Thu, 24 Nov 2016 10:56:40 +0000 (11:56 +0100)
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 <[email protected]>
19 files changed:
lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/MapResolverCustomizer.java
lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java
lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/util/EidTranslator.java
lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/LocalMappingCustomizerTest.java
lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/MapResolverCustomizerTest.java
lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/RemoteMappingCustomizerTest.java
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizer.java
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/util/MappingEntryContext.java
v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4AddressCustomizer.java
v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4Reader.java
v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/SubInterfaceIpv4AddressCustomizer.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/AddressTranslator.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4AddressRange.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java
vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/AddressTranslatorTest.java [deleted file]
vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv4TranslatorTest.java
vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java

index cf6ca8b..c2a7f0b 100755 (executable)
@@ -87,7 +87,7 @@ public class MapResolverCustomizer extends FutureJVppCustomizer
         final LispMapResolverDetails mapResolverDetails =
                 dumpOptional.get().lispMapResolverDetails.stream()
                         .filter(a -> addressesEqual(key.getIpAddress(),
-                                arrayToIpAddressReversed(byteToBoolean(a.isIpv6), a.ipAddress)))
+                                arrayToIpAddress(byteToBoolean(a.isIpv6), a.ipAddress)))
                         .collect(RWUtils.singleItemCollector());
 
         builder.setKey(key);
@@ -115,7 +115,7 @@ public class MapResolverCustomizer extends FutureJVppCustomizer
 
         return dumpOptional.get().lispMapResolverDetails.stream()
                 .map(resolver -> new MapResolverKey(
-                        arrayToIpAddressReversed(byteToBoolean(resolver.isIpv6), resolver.ipAddress)))
+                        arrayToIpAddress(byteToBoolean(resolver.isIpv6), resolver.ipAddress)))
                 .collect(Collectors.toList());
     }
 
index 3b00d28..27b5121 100755 (executable)
@@ -292,7 +292,7 @@ public class RemoteMappingCustomizer extends FutureJVppCustomizer
     }
 
     private Locator detailsToLocator(final LispLocatorDetails details) {
-        final IpAddress address = arrayToIpAddressReversed(byteToBoolean(details.isIpv6), details.ipAddress);
+        final IpAddress address = arrayToIpAddress(byteToBoolean(details.isIpv6), details.ipAddress);
         return new LocatorBuilder()
                 .setAddress(address)
                 .setKey(new LocatorKey(address))
index 3477209..3110faf 100755 (executable)
@@ -92,12 +92,12 @@ public interface EidTranslator extends AddressTranslator, EidMetadataProvider {
         switch (type) {
             case IPV4: {
                 return newLocalEidBuilder(Ipv4Afi.class, vni).setAddress(
-                        new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZoneReversed(address)).build())
+                        new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZone(address)).build())
                         .build();
             }
             case IPV6: {
                 return newLocalEidBuilder(Ipv6Afi.class, vni).setAddress(
-                        new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZoneReversed(address)).build())
+                        new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZone(address)).build())
                         .build();
             }
             case MAC: {
@@ -118,14 +118,14 @@ public interface EidTranslator extends AddressTranslator, EidMetadataProvider {
             case IPV4: {
                 return newRemoteEidBuilder(Ipv4Afi.class, vni)
                         .setAddress(
-                                new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZoneReversed(address))
+                                new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZone(address))
                                         .build())
                         .build();
             }
             case IPV6: {
                 return newRemoteEidBuilder(Ipv6Afi.class, vni)
                         .setAddress(
-                                new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZoneReversed(address))
+                                new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZone(address))
                                         .build())
                         .build();
             }
@@ -146,14 +146,14 @@ public interface EidTranslator extends AddressTranslator, EidMetadataProvider {
             case IPV4: {
                 return newEidBuilderLocal(Ipv4Afi.class, vni)
                         .setAddress(
-                                new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZoneReversed(address))
+                                new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZone(address))
                                         .build())
                         .build();
             }
             case IPV6: {
                 return newEidBuilderLocal(Ipv6Afi.class, vni)
                         .setAddress(
-                                new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZoneReversed(address))
+                                new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZone(address))
                                         .build())
                         .build();
             }
@@ -174,14 +174,14 @@ public interface EidTranslator extends AddressTranslator, EidMetadataProvider {
             case IPV4: {
                 return newEidBuilderRemote(Ipv4Afi.class, vni)
                         .setAddress(
-                                new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZoneReversed(address))
+                                new Ipv4Builder().setIpv4(arrayToIpv4AddressNoZone(address))
                                         .build())
                         .build();
             }
             case IPV6: {
                 return newEidBuilderRemote(Ipv6Afi.class, vni)
                         .setAddress(
-                                new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZoneReversed(address))
+                                new Ipv6Builder().setIpv6(arrayToIpv6AddressNoZone(address))
                                         .build())
                         .build();
             }
@@ -201,10 +201,10 @@ public interface EidTranslator extends AddressTranslator, EidMetadataProvider {
             EidType type, byte[] address) {
         switch (type) {
             case IPV4: {
-                return arrayToIpv4AddressNoZoneReversed(address).getValue();
+                return arrayToIpv4AddressNoZone(address).getValue();
             }
             case IPV6: {
-                return arrayToIpv6AddressNoZoneReversed(address).getValue();
+                return arrayToIpv6AddressNoZone(address).getValue();
             }
             case MAC: {
                 //as wrong as it looks ,its right(second param is not end index,but count)
index ba5639d..111a383 100755 (executable)
@@ -131,7 +131,7 @@ public class LocalMappingCustomizerTest extends WriterCustomizerTest implements
 
         assertNotNull(request);
         assertEquals("Locator", new String(request.locatorSetName));
-        assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.eid).getValue());
+        assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(request.eid).getValue());
         assertEquals(0, request.eidType);
         assertEquals(1, request.isAdd);
         assertEquals(25, request.vni);
@@ -154,7 +154,7 @@ public class LocalMappingCustomizerTest extends WriterCustomizerTest implements
 
         assertNotNull(request);
         assertEquals("Locator", new String(request.locatorSetName));
-        assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.eid).getValue());
+        assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(request.eid).getValue());
         assertEquals(0, request.eidType);
         assertEquals(0, request.isAdd);
         assertEquals(25, request.vni);
index e323920..c4dc869 100755 (executable)
@@ -74,7 +74,7 @@ public class MapResolverCustomizerTest extends WriterCustomizerTest implements I
 
         LispAddDelMapResolver request = resolverCaptor.getValue();
         assertEquals(1, request.isAdd);
-        assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.ipAddress).getValue());
+        assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(request.ipAddress).getValue());
     }
 
 
@@ -97,7 +97,7 @@ public class MapResolverCustomizerTest extends WriterCustomizerTest implements I
 
         LispAddDelMapResolver request = resolverCaptor.getValue();
         assertEquals(0, request.isAdd);
-        assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.ipAddress).getValue());
+        assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(request.ipAddress).getValue());
     }
 
 }
index 538263b..8b31fa6 100755 (executable)
@@ -109,8 +109,7 @@ public class RemoteMappingCustomizerTest extends WriterCustomizerTest implements
 
     @Test(expected = NullPointerException.class)
     public void testWriteCurrentAttributesBadData() throws WriteFailedException {
-        customizer
-                .writeCurrentAttributes(null, mock(RemoteMapping.class), writeContext);
+        customizer.writeCurrentAttributes(null, mock(RemoteMapping.class), writeContext);
     }
 
     @Test
@@ -123,7 +122,7 @@ public class RemoteMappingCustomizerTest extends WriterCustomizerTest implements
 
         assertNotNull(request);
         assertEquals(1, request.isAdd);
-        assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.eid).getValue());
+        assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(request.eid).getValue());
         assertEquals(25, request.vni);
     }
 
@@ -148,7 +147,7 @@ public class RemoteMappingCustomizerTest extends WriterCustomizerTest implements
 
         assertNotNull(request);
         assertEquals(0, request.isAdd);
-        assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.eid).getValue());
+        assertEquals("192.168.2.1", arrayToIpv4AddressNoZone(request.eid).getValue());
         assertEquals(25, request.vni);
     }
 
index 615d9c7..1a67426 100644 (file)
@@ -16,6 +16,8 @@
 
 package io.fd.hc2vpp.nat.read;
 
+import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
 import io.fd.honeycomb.translate.read.ReadContext;
 import io.fd.honeycomb.translate.read.ReadFailedException;
 import io.fd.honeycomb.translate.spi.read.Initialized;
@@ -23,8 +25,6 @@ import io.fd.honeycomb.translate.spi.read.InitializingListReaderCustomizer;
 import io.fd.honeycomb.translate.util.RWUtils;
 import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager;
 import io.fd.honeycomb.translate.util.read.cache.EntityDumpExecutor;
-import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
-import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
 import io.fd.vpp.jvpp.snat.dto.SnatAddressDetails;
 import io.fd.vpp.jvpp.snat.dto.SnatAddressDetailsReplyDump;
 import io.fd.vpp.jvpp.snat.dto.SnatAddressDump;
@@ -76,8 +76,7 @@ final class ExternalIpPoolCustomizer implements
                 dumpMgr.getDump(id, ctx.getModificationCache(), null)
                         .or(new SnatAddressDetailsReplyDump()).snatAddressDetails.get(Math.toIntExact(poolId));
 
-        builder.setExternalIpPool(
-                new Ipv4Prefix(arrayToIpv4AddressNoZoneReversed(details.ipAddress).getValue() + "/32"));
+        builder.setExternalIpPool(new Ipv4Prefix(arrayToIpv4AddressNoZone(details.ipAddress).getValue() + "/32"));
         builder.setPoolId(poolId);
 
         LOG.trace("External IP pool: {}. Read as: {}", id, builder);
index 75e06c2..ae4f119 100644 (file)
@@ -16,6 +16,8 @@
 
 package io.fd.hc2vpp.nat.read;
 
+import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
 import io.fd.hc2vpp.nat.util.MappingEntryContext;
 import io.fd.honeycomb.translate.read.ReadContext;
 import io.fd.honeycomb.translate.read.ReadFailedException;
@@ -24,8 +26,6 @@ import io.fd.honeycomb.translate.spi.read.InitializingListReaderCustomizer;
 import io.fd.honeycomb.translate.util.RWUtils;
 import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager;
 import io.fd.honeycomb.translate.util.read.cache.EntityDumpExecutor;
-import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
-import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
 import io.fd.vpp.jvpp.snat.dto.SnatStaticMappingDetails;
 import io.fd.vpp.jvpp.snat.dto.SnatStaticMappingDetailsReplyDump;
 import io.fd.vpp.jvpp.snat.dto.SnatStaticMappingDump;
@@ -89,9 +89,9 @@ final class MappingEntryCustomizer implements Ipv4Translator,
         builder.setType(
                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.MappingEntry.Type.Static);
         // Snat only supports ipv4 for now
-        builder.setExternalSrcAddress(arrayToIpv4AddressNoZoneReversed(snatStaticMappingDetails.externalIpAddress));
+        builder.setExternalSrcAddress(arrayToIpv4AddressNoZone(snatStaticMappingDetails.externalIpAddress));
         builder.setInternalSrcAddress(
-                new IpAddress(arrayToIpv4AddressNoZoneReversed(snatStaticMappingDetails.localIpAddress)));
+                new IpAddress(arrayToIpv4AddressNoZone(snatStaticMappingDetails.localIpAddress)));
 
         if (snatStaticMappingDetails.addrOnly == 0) {
             builder.setExternalSrcPort(new ExternalSrcPortBuilder()
index 6db8d46..afdf8ab 100644 (file)
@@ -20,8 +20,8 @@ import static com.google.common.base.Preconditions.checkArgument;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
-import io.fd.honeycomb.translate.MappingContext;
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.honeycomb.translate.MappingContext;
 import io.fd.vpp.jvpp.snat.dto.SnatStaticMappingDetails;
 import java.util.Collections;
 import java.util.Comparator;
@@ -97,20 +97,20 @@ public class MappingEntryContext implements Ipv4Translator {
     private MappingEntryKey entryToKey(final SnatStaticMappingDetails entry) {
         // Only IPv4
         return new MappingEntryKey(
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZoneReversed(entry.externalIpAddress))),
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZoneReversed(entry.localIpAddress))));
+                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(entry.externalIpAddress))),
+                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(entry.localIpAddress))));
     }
 
     private boolean equalEntries(final SnatStaticMappingDetails detail, final MappingEntry ctxMappingEntry) {
         final IpAddress internalAddrFromDetails =
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZoneReversed(detail.localIpAddress)));
+                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(detail.localIpAddress)));
         // Only IPv4
         if (!ctxMappingEntry.getInternal().equals(internalAddrFromDetails)) {
             return false;
         }
         // Only IPv4
         final IpAddress externalAddrFromDetails =
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZoneReversed(detail.externalIpAddress)));
+                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(detail.externalIpAddress)));
         if (!ctxMappingEntry.getExternal().equals(externalAddrFromDetails)) {
             return false;
         }
index 43d82ec..a3e12fa 100644 (file)
@@ -77,30 +77,6 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer
                         .build();
     }
 
-    private static Subnet getSubnet(final Address address) {
-        final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.Subnet
-                subnet = address.getSubnet();
-
-        // Only prefix length supported
-        Preconditions.checkArgument(
-                subnet instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.subnet.PrefixLength);
-
-        return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLengthBuilder()
-                .setPrefixLength(
-                        ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.subnet.PrefixLength) subnet)
-                                .getPrefixLength()).build();
-    }
-
-    static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address> getCfgId(
-            final InstanceIdentifier<Address> id) {
-        return InterfaceCustomizer.getCfgId(RWUtils.cutId(id, Interface.class))
-                .augmentation(Interface1.class)
-                .child(Ipv4.class)
-                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address.class,
-                        new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.AddressKey(
-                                id.firstKeyOf(Address.class).getIp()));
-    }
-
     @Override
     @Nonnull
     public AddressBuilder getBuilder(@Nonnull InstanceIdentifier<Address> id) {
@@ -126,9 +102,8 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer
 
         if (ipAddressDetails.isPresent()) {
             final IpAddressDetails detail = ipAddressDetails.get();
-            builder.setIp(arrayToIpv4AddressNoZoneReversed(detail.ip))
-                    .setSubnet(
-                            new PrefixLengthBuilder().setPrefixLength(Short.valueOf(detail.prefixLength)).build());
+            builder.setIp(arrayToIpv4AddressNoZone(detail.ip))
+                    .setSubnet(new PrefixLengthBuilder().setPrefixLength(Short.valueOf(detail.prefixLength)).build());
 
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Attributes for {} interface (id={}) address {} successfully read: {}",
@@ -165,4 +140,27 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer
                         .setSubnet(getSubnet(readValue))
                         .build());
     }
+
+    private static Subnet getSubnet(final Address address) {
+        final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.Subnet
+                subnet = address.getSubnet();
+
+        // Only prefix length supported
+        Preconditions.checkArgument(
+                subnet instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.subnet.PrefixLength);
+
+        return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLengthBuilder()
+                .setPrefixLength(
+                ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.subnet.PrefixLength) subnet)
+                        .getPrefixLength()).build();
+    }
+
+    static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address> getCfgId(
+            final InstanceIdentifier<Address> id) {
+        return InterfaceCustomizer.getCfgId(RWUtils.cutId(id, Interface.class))
+                .augmentation(Interface1.class)
+                .child(Ipv4.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address.class,
+                        new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.AddressKey(id.firstKeyOf(Address.class).getIp()));
+    }
 }
index 4caaa59..8c8299d 100644 (file)
@@ -19,11 +19,13 @@ package io.fd.hc2vpp.v3po.interfacesstate.ip;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import com.google.common.base.Optional;
-import io.fd.honeycomb.translate.util.RWUtils;
-import io.fd.honeycomb.translate.util.read.cache.EntityDumpExecutor;
-import io.fd.hc2vpp.v3po.interfacesstate.ip.dump.params.AddressDumpParams;
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
 import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
+import io.fd.hc2vpp.v3po.interfacesstate.ip.dump.params.AddressDumpParams;
+import io.fd.honeycomb.translate.util.RWUtils;
+import io.fd.honeycomb.translate.util.read.cache.EntityDumpExecutor;
+import io.fd.vpp.jvpp.core.dto.IpAddressDetails;
+import io.fd.vpp.jvpp.core.dto.IpAddressDetailsReplyDump;
 import io.fd.vpp.jvpp.core.dto.IpAddressDump;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
 import java.util.Collections;
@@ -33,8 +35,6 @@ import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 import org.opendaylight.yangtools.yang.binding.Identifier;
-import io.fd.vpp.jvpp.core.dto.IpAddressDetails;
-import io.fd.vpp.jvpp.core.dto.IpAddressDetailsReplyDump;
 
 /**
  * Utility class providing Ipv4 read support.
@@ -47,7 +47,7 @@ interface Ipv4Reader extends Ipv4Translator, JvppReplyConsumer {
             @Nonnull final Function<Ipv4AddressNoZone, T> keyConstructor) {
         if (dumpOptional.isPresent() && dumpOptional.get().ipAddressDetails != null) {
             return dumpOptional.get().ipAddressDetails.stream()
-                    .map(detail -> keyConstructor.apply(arrayToIpv4AddressNoZoneReversed(detail.ip)))
+                    .map(detail -> keyConstructor.apply(arrayToIpv4AddressNoZone(detail.ip)))
                     .collect(Collectors.toList());
         } else {
             return Collections.emptyList();
@@ -63,7 +63,7 @@ interface Ipv4Reader extends Ipv4Translator, JvppReplyConsumer {
             final List<IpAddressDetails> details = dump.get().ipAddressDetails;
 
             return Optional.of(details.stream()
-                    .filter(singleDetail -> ip.equals(arrayToIpv4AddressNoZoneReversed(singleDetail.ip)))
+                    .filter(singleDetail -> ip.equals(arrayToIpv4AddressNoZone(singleDetail.ip)))
                     .collect(RWUtils.singleItemCollector()));
         }
         return Optional.absent();
index cb239dc..a8617c5 100644 (file)
@@ -101,7 +101,7 @@ public class SubInterfaceIpv4AddressCustomizer extends FutureJVppCustomizer
 
         if (ipAddressDetails.isPresent()) {
             final IpAddressDetails detail = ipAddressDetails.get();
-            builder.setIp(arrayToIpv4AddressNoZoneReversed(detail.ip));
+            builder.setIp(arrayToIpv4AddressNoZone(detail.ip));
             builder.setSubnet(new PrefixLengthBuilder().setPrefixLength(Short.valueOf(detail.prefixLength)).build());
 
             if (LOG.isDebugEnabled()) {
index b9665df..eaa9664 100644 (file)
@@ -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));
-    }
 }
index 032b905..5f014d0 100644 (file)
@@ -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));
     }
 }
index 2556396..99d1757 100644 (file)
@@ -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.
index 0d645c3..cb8b2ac 100644 (file)
@@ -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 (file)
index 97fb274..0000000
+++ /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
index 722e2c6..37e29d8 100644 (file)
@@ -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
index 073754a..43327ea 100644 (file)
@@ -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