diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2016-11-24 11:56:40 +0100 |
---|---|---|
committer | Jan Srnicek <jsrnicek@cisco.com> | 2016-11-24 11:56:40 +0100 |
commit | e259ab7990b8179eda4462907ecebccd0e85b587 (patch) | |
tree | b0326a66b0a9d775e79dfbc495568df94643f3ef | |
parent | 927fb75d969b2d39c91ae6735f0127646348b73c (diff) |
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 <jsrnicek@cisco.com>
19 files changed, 82 insertions, 190 deletions
diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/MapResolverCustomizer.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/MapResolverCustomizer.java index cf6ca8b83..c2a7f0bd8 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/MapResolverCustomizer.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/MapResolverCustomizer.java @@ -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()); } diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java index 3b00d2800..27b51218c 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java @@ -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)) diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/util/EidTranslator.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/util/EidTranslator.java index 347720958..3110faf07 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/util/EidTranslator.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/util/EidTranslator.java @@ -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) diff --git a/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/LocalMappingCustomizerTest.java b/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/LocalMappingCustomizerTest.java index ba5639dc5..111a383dd 100755 --- a/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/LocalMappingCustomizerTest.java +++ b/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/LocalMappingCustomizerTest.java @@ -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); diff --git a/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/MapResolverCustomizerTest.java b/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/MapResolverCustomizerTest.java index e3239202f..c4dc869f3 100755 --- a/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/MapResolverCustomizerTest.java +++ b/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/MapResolverCustomizerTest.java @@ -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()); } } diff --git a/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/RemoteMappingCustomizerTest.java b/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/RemoteMappingCustomizerTest.java index 538263ba4..8b31fa64f 100755 --- a/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/RemoteMappingCustomizerTest.java +++ b/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/write/RemoteMappingCustomizerTest.java @@ -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); } diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizer.java index 615d9c70f..1a6742648 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizer.java @@ -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); diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java index 75e06c26f..ae4f11917 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java @@ -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() diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/util/MappingEntryContext.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/util/MappingEntryContext.java index 6db8d468c..afdf8abae 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/util/MappingEntryContext.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/util/MappingEntryContext.java @@ -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; } diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4AddressCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4AddressCustomizer.java index 43d82ec5e..a3e12faea 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4AddressCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4AddressCustomizer.java @@ -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())); + } } diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4Reader.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4Reader.java index 4caaa5922..8c8299dbd 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4Reader.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/Ipv4Reader.java @@ -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(); diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/SubInterfaceIpv4AddressCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/SubInterfaceIpv4AddressCustomizer.java index cb239dc9f..a8617c578 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/SubInterfaceIpv4AddressCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/SubInterfaceIpv4AddressCustomizer.java @@ -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()) { 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,41 +83,13 @@ 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); } @@ -128,26 +129,6 @@ public interface Ipv6Translator extends ByteDataTranslator { } /** - * 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 */ default boolean isIpv6(IpPrefix address) { 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 |