From 97554c44ffc7f7ce82fe89d6da5ac15c46ee80b4 Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Mon, 6 May 2019 13:48:21 +0200 Subject: fix Nat implementation after API changes in VPP Change-Id: Ibe8ead5a19119af9eb6b673f0713890ad5e243cb Signed-off-by: Michal Cmarada --- .../hc2vpp/nat/read/ExternalIpPoolCustomizer.java | 4 +- .../fd/hc2vpp/nat/read/MappingEntryCustomizer.java | 13 +++--- .../hc2vpp/nat/read/Nat64PrefixesCustomizer.java | 2 +- .../read/ifc/AbstractInterfaceNatCustomizer.java | 15 +++--- .../read/ifc/InterfaceInboundNatCustomizer.java | 5 +- .../read/ifc/InterfaceOutboundNatCustomizer.java | 5 +- .../read/ifc/SubInterfaceInboundNatCustomizer.java | 5 +- .../ifc/SubInterfaceOutboundNatCustomizer.java | 5 +- .../io/fd/hc2vpp/nat/util/MappingEntryContext.java | 18 ++++---- .../hc2vpp/nat/write/ExternalIpPoolCustomizer.java | 12 ++--- .../hc2vpp/nat/write/MappingEntryCustomizer.java | 27 +++++++---- .../hc2vpp/nat/write/Nat64PrefixesCustomizer.java | 5 +- .../write/ifc/AbstractInterfaceNatCustomizer.java | 44 ++++++++++++++---- .../nat/read/ExternalIpPoolCustomizerTest.java | 19 +++++--- .../nat/read/MappingEntryCustomizerTest.java | 54 ++++++++++++++-------- .../nat/read/Nat64PrefixesCustomizerTest.java | 15 ++++-- .../ifc/InterfaceInboundNatCustomizerTest.java | 14 ++++-- .../ifc/InterfaceOutboundNatCustomizerTest.java | 14 ++++-- .../hc2vpp/nat/util/MappingEntryContextTest.java | 11 +++-- .../nat/write/ExternalIpPoolCustomizerTest.java | 17 ++++--- .../nat/write/MappingEntryCustomizerTest.java | 50 ++++++++++++++------ .../nat/write/Nat64PrefixesCustomizerTest.java | 11 +++-- .../nat/write/ifc/AbstractNatCustomizerTest.java | 39 ++++++++++++---- vpp-common/vpp-translate-utils/pom.xml | 5 ++ .../common/translate/util/AddressTranslator.java | 1 - .../common/translate/util/Ipv4Translator.java | 25 ++++++++++ .../common/translate/util/Ipv6Translator.java | 28 +++++++++++ 27 files changed, 328 insertions(+), 135 deletions(-) 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 7a97a68d1..574d05862 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 @@ -102,7 +102,7 @@ final class ExternalIpPoolCustomizer implements // Uses ID<->address mapping as defined by getAllIds (nat44 mappings go before nat64): if (poolId < nat44PoolCount) { final Nat44AddressDetails detail = nat44Details.get(Math.toIntExact(poolId)); - readPoolIp(builder, detail.ipAddress); + readPoolIp(builder, detail.ipAddress.ip4Address); setPoolType(builder, NatPoolType.Nat44); } else { final List nat64Details = nat64DumpMgr.getDump(id, ctx.getModificationCache()) @@ -111,7 +111,7 @@ final class ExternalIpPoolCustomizer implements final int nat64PoolPosition = Math.toIntExact(poolId) - nat44PoolCount; if (nat64PoolPosition < nat64PoolCount) { final Nat64PoolAddrDetails detail = nat64Details.get(nat64PoolPosition); - readPoolIp(builder, detail.address); + readPoolIp(builder, detail.address.ip4Address); setPoolType(builder, NatPoolType.Nat64); } else { // Address pool for given ID is missing (legal state). 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 1ae452183..70dc10b44 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 @@ -33,6 +33,7 @@ import io.fd.jvpp.nat.dto.Nat64BibDetails; import io.fd.jvpp.nat.dto.Nat64BibDetailsReplyDump; import io.fd.jvpp.nat.dto.Nat64BibDump; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.NatConfigFlags; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -114,10 +115,10 @@ final class MappingEntryCustomizer implements Ipv4Translator, Ipv6Translator, builder.setIndex((long) index); builder.setType( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180628.MappingEntry.Type.Static); - builder.setExternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.externalIpAddress, 32))); - builder.setInternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.localIpAddress, 32))); + builder.setExternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.externalIpAddress.ip4Address, 32))); + builder.setInternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.localIpAddress.ip4Address, 32))); - if (detail.addrOnly == 0) { + if (!detail.flags.contains(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_ADDR_ONLY)) { builder.setExternalSrcPort(new ExternalSrcPortBuilder() .setStartPortNumber(new PortNumber(Short.toUnsignedInt(detail.externalPort))).build()); builder.setInternalSrcPort(new InternalSrcPortBuilder() @@ -128,15 +129,15 @@ final class MappingEntryCustomizer implements Ipv4Translator, Ipv6Translator, private void readNat64Entry(@Nonnull final MappingEntryBuilder builder, final int index, final Nat64BibDetails detail) { builder.setIndex((long) index); - if (detail.isStatic == 1) { + if (detail.flags.contains(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_STATIC)) { builder.setType( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180628.MappingEntry.Type.Static); } else { builder.setType( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180628.MappingEntry.Type.DynamicImplicit); } - builder.setExternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.oAddr,32 ))); - builder.setInternalSrcAddress(new IpPrefix(toIpv6Prefix(detail.iAddr, 128))); + builder.setExternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.oAddr.ip4Address, 32))); + builder.setInternalSrcAddress(new IpPrefix(toIpv6Prefix(detail.iAddr.ip6Address, 128))); builder.setExternalSrcPort(new ExternalSrcPortBuilder() .setStartPortNumber(new PortNumber(Short.toUnsignedInt(detail.oPort))).build()); 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 6e955ea64..468008c46 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 @@ -111,7 +111,7 @@ final class Nat64PrefixesCustomizer } private Ipv6Prefix readPrefix(final Nat64PrefixDetails details) { - return toIpv6Prefix(details.prefix, UnsignedBytes.toInt(details.prefixLen)); + return toIpv6Prefix(details.prefix.prefix.ip6Address, UnsignedBytes.toInt(details.prefix.len)); } private final class Nat64PrefixesExecutor implements EntityDumpExecutor, Void> { diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/AbstractInterfaceNatCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/AbstractInterfaceNatCustomizer.java index 2d8e4cce5..8ce475b38 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/AbstractInterfaceNatCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/AbstractInterfaceNatCustomizer.java @@ -31,6 +31,7 @@ import io.fd.jvpp.nat.dto.Nat44InterfaceOutputFeatureDump; import io.fd.jvpp.nat.dto.Nat64InterfaceDetailsReplyDump; import io.fd.jvpp.nat.dto.Nat64InterfaceDump; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.NatConfigFlags; import java.util.Optional; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; @@ -96,8 +97,8 @@ abstract class AbstractInterfaceNatCustomizer natIfcDetail.swIfIndex == index) - .filter(natIfcDetail -> isExpectedNatType(natIfcDetail.isInside)) + .filter(natIfcDetail -> natIfcDetail.swIfIndex.interfaceindex == index) + .filter(natIfcDetail -> isExpectedNatType(natIfcDetail.flags)) .findAny() .ifPresent(natIfcDetail -> vppAttributesBuilder.enableNat44(builder)); // do not modify builder is feature is absent (inbound/outbound are presence containers) @@ -109,8 +110,8 @@ abstract class AbstractInterfaceNatCustomizer natIfcDetail.swIfIndex == index) - .filter(natIfcDetail -> isExpectedNatType(natIfcDetail.isInside)) + .filter(natIfcDetail -> natIfcDetail.swIfIndex.interfaceindex == index) + .filter(natIfcDetail -> isExpectedNatType(natIfcDetail.flags)) .findAny() .ifPresent(natIfcDetail -> vppAttributesBuilder.enableNat64(builder)); // do not modify builder is feature is absent (inbound/outbound are presence containers) @@ -123,8 +124,8 @@ abstract class AbstractInterfaceNatCustomizer natIfcDetail.swIfIndex == index) - .filter(natIfcDetail -> isExpectedNatType(natIfcDetail.isInside)) + .filter(natIfcDetail -> natIfcDetail.swIfIndex.interfaceindex == index) + .filter(natIfcDetail -> isExpectedNatType(natIfcDetail.flags)) .findAny() .ifPresent(natIfcDetail -> vppAttributesBuilder.enablePostRouting(builder)); // do not modify builder is feature is absent (inbound/outbound are presence containers) @@ -136,5 +137,5 @@ abstract class AbstractInterfaceNatCustomizer id, final int ifcIndex, final boolean enable) throws WriteFailedException { final Nat44InterfaceAddDelFeature request = new Nat44InterfaceAddDelFeature(); - request.isAdd = booleanToByte(enable); - request.isInside = getType().isInside; - request.swIfIndex = ifcIndex; + request.isAdd = enable; + if (request.flags == null) { + request.flags = new NatConfigFlags(); + } + if (getType() == NatType.INBOUND) { + request.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_INSIDE); + } else if (getType() == NatType.OUTBOUND) { + request.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_OUTSIDE); + } + request.swIfIndex = new InterfaceIndex(); + request.swIfIndex.interfaceindex = ifcIndex; getReplyForWrite(jvppNat.nat44InterfaceAddDelFeature(request).toCompletableFuture(), id); } private void preRoutingNat64(@Nonnull final InstanceIdentifier id, final int ifcIndex, final boolean enable) throws WriteFailedException { final Nat64AddDelInterface request = new Nat64AddDelInterface(); - request.isAdd = booleanToByte(enable); - request.isInside = getType().isInside; - request.swIfIndex = ifcIndex; + request.isAdd = enable; + if (request.flags == null) { + request.flags = new NatConfigFlags(); + } + if (getType() == NatType.INBOUND) { + request.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_INSIDE); + } else if (getType() == NatType.OUTBOUND) { + request.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_OUTSIDE); + } + request.swIfIndex = new InterfaceIndex(); + request.swIfIndex.interfaceindex = ifcIndex; getReplyForWrite(jvppNat.nat64AddDelInterface(request).toCompletableFuture(), id); } diff --git a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizerTest.java b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizerTest.java index db23b7a24..906572ca0 100644 --- a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizerTest.java +++ b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/ExternalIpPoolCustomizerTest.java @@ -33,6 +33,7 @@ import io.fd.jvpp.nat.dto.Nat44AddressDetailsReplyDump; import io.fd.jvpp.nat.dto.Nat64PoolAddrDetails; import io.fd.jvpp.nat.dto.Nat64PoolAddrDetailsReplyDump; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.Ip4Address; import java.util.Arrays; import java.util.List; import java.util.stream.LongStream; @@ -172,13 +173,16 @@ public class ExternalIpPoolCustomizerTest Nat44AddressDetailsReplyDump replyDump = dumpReplyNat44Empty(); Nat44AddressDetails detailsOne = new Nat44AddressDetails(); - detailsOne.ipAddress = new byte[]{-64, -88, 44, 1}; + detailsOne.ipAddress = new Ip4Address(); + detailsOne.ipAddress.ip4Address = new byte[]{-64, -88, 44, 1}; Nat44AddressDetails detailsTwo = new Nat44AddressDetails(); - detailsTwo.ipAddress = new byte[]{-64, -88, 44, 2}; + detailsTwo.ipAddress = new Ip4Address(); + detailsTwo.ipAddress.ip4Address = new byte[]{-64, -88, 44, 2}; Nat44AddressDetails detailsThree = new Nat44AddressDetails(); - detailsThree.ipAddress = new byte[]{-64, -88, 44, 3}; + detailsThree.ipAddress = new Ip4Address(); + detailsThree.ipAddress.ip4Address = new byte[]{-64, -88, 44, 3}; replyDump.nat44AddressDetails = Arrays.asList(detailsOne, detailsTwo, detailsThree); @@ -193,13 +197,16 @@ public class ExternalIpPoolCustomizerTest Nat64PoolAddrDetailsReplyDump replyDump = dumpReplyNat64Empty(); Nat64PoolAddrDetails detailsOne = new Nat64PoolAddrDetails(); - detailsOne.address = new byte[]{-64, -88, 64, 1}; + detailsOne.address = new Ip4Address(); + detailsOne.address.ip4Address = new byte[]{-64, -88, 64, 1}; Nat64PoolAddrDetails detailsTwo = new Nat64PoolAddrDetails(); - detailsTwo.address = new byte[]{-64, -88, 64, 2}; + detailsTwo.address = new Ip4Address(); + detailsTwo.address.ip4Address = new byte[]{-64, -88, 64, 2}; Nat64PoolAddrDetails detailsThree = new Nat64PoolAddrDetails(); - detailsThree.address = new byte[]{-64, -88, 64, 3}; + detailsThree.address = new Ip4Address(); + detailsThree.address.ip4Address = new byte[]{-64, -88, 64, 3}; replyDump.nat64PoolAddrDetails = Arrays.asList(detailsOne, detailsTwo, detailsThree); diff --git a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizerTest.java b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizerTest.java index d0541dc24..247c810a8 100644 --- a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizerTest.java +++ b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizerTest.java @@ -30,6 +30,9 @@ import io.fd.jvpp.nat.dto.Nat44StaticMappingDetails; import io.fd.jvpp.nat.dto.Nat44StaticMappingDetailsReplyDump; import io.fd.jvpp.nat.dto.Nat64BibDetails; import io.fd.jvpp.nat.dto.Nat64BibDetailsReplyDump; +import io.fd.jvpp.nat.types.Ip4Address; +import io.fd.jvpp.nat.types.Ip6Address; +import io.fd.jvpp.nat.types.NatConfigFlags; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -214,26 +217,33 @@ public class MappingEntryCustomizerTest Nat44StaticMappingDetailsReplyDump replyDump = new Nat44StaticMappingDetailsReplyDump(); Nat44StaticMappingDetails detailsOne = new Nat44StaticMappingDetails(); - detailsOne.addrOnly = 1; - detailsOne.localIpAddress = new byte[]{-64, -88, 2, 1}; + detailsOne.flags = new NatConfigFlags(); + detailsOne.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_ADDR_ONLY); + detailsOne.localIpAddress = new Ip4Address(); + detailsOne.localIpAddress.ip4Address = new byte[]{-64, -88, 2, 1}; detailsOne.localPort = 1234; - detailsOne.externalIpAddress = new byte[]{-64, -88, 2, 8}; + detailsOne.externalIpAddress = new Ip4Address(); + detailsOne.externalIpAddress.ip4Address = new byte[]{-64, -88, 2, 8}; detailsOne.externalPort = 5874; detailsOne.vrfId = NatInstanceCustomizer.DEFAULT_VRF_ID.getId().byteValue(); Nat44StaticMappingDetails detailsTwo = new Nat44StaticMappingDetails(); - detailsTwo.addrOnly = 0; - detailsTwo.localIpAddress = new byte[]{-64, -88, 2, 3}; + detailsTwo.flags = new NatConfigFlags(); + detailsTwo.localIpAddress = new Ip4Address(); + detailsTwo.localIpAddress.ip4Address = new byte[]{-64, -88, 2, 3}; detailsTwo.localPort = (short) 60000; - detailsTwo.externalIpAddress = new byte[]{-64, -88, 2, 5}; + detailsTwo.externalIpAddress = new Ip4Address(); + detailsTwo.externalIpAddress.ip4Address = new byte[]{-64, -88, 2, 5}; detailsTwo.externalPort = (short) 65535; detailsTwo.vrfId = 2; Nat44StaticMappingDetails detailsThree = new Nat44StaticMappingDetails(); - detailsThree.addrOnly = 0; - detailsThree.localIpAddress = new byte[]{-64, -88, 2, 2}; + detailsThree.flags = new NatConfigFlags(); + detailsThree.localIpAddress = new Ip4Address(); + detailsThree.localIpAddress.ip4Address = new byte[]{-64, -88, 2, 2}; detailsThree.localPort = 1274; - detailsThree.externalIpAddress = new byte[]{-64, -88, 3, 8}; + detailsThree.externalIpAddress = new Ip4Address(); + detailsThree.externalIpAddress.ip4Address = new byte[]{-64, -88, 3, 8}; detailsThree.externalPort = 6874; detailsThree.vrfId = NatInstanceCustomizer.DEFAULT_VRF_ID.getId().byteValue(); @@ -245,32 +255,40 @@ public class MappingEntryCustomizerTest Nat64BibDetailsReplyDump replyDump = new Nat64BibDetailsReplyDump(); Nat64BibDetails detailsOne = new Nat64BibDetails(); - detailsOne.isStatic = 1; - detailsOne.iAddr = + detailsOne.flags = new NatConfigFlags(); + detailsOne.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_STATIC); + detailsOne.iAddr = new Ip6Address(); + detailsOne.iAddr.ip6Address = new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, (byte) 0x85, (byte) 0xa3, 0, 0, 0, 0, (byte) 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x01}; detailsOne.iPort = 1234; - detailsOne.oAddr = new byte[]{-64, -88, 64, 1}; + detailsOne.oAddr = new Ip4Address(); + detailsOne.oAddr.ip4Address = new byte[]{-64, -88, 64, 1}; detailsOne.oPort = 5874; detailsOne.vrfId = NatInstanceCustomizer.DEFAULT_VRF_ID.getId().byteValue(); Nat64BibDetails detailsTwo = new Nat64BibDetails(); - detailsTwo.isStatic = 0; - detailsTwo.iAddr = + detailsTwo.flags = new NatConfigFlags(); + detailsTwo.iAddr = new Ip6Address(); + detailsTwo.iAddr.ip6Address = new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, (byte) 0x85, (byte) 0xa3, 0, 0, 0, 0, (byte) 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x02}; detailsTwo.iPort = (short) 60000; - detailsTwo.oAddr = new byte[]{-64, -88, 64, 2}; + detailsTwo.oAddr = new Ip4Address(); + detailsTwo.oAddr.ip4Address = new byte[]{-64, -88, 64, 2}; detailsTwo.oPort = (short) 65535; detailsTwo.vrfId = 2; Nat64BibDetails detailsThree = new Nat64BibDetails(); - detailsThree.isStatic = 1; - detailsThree.iAddr = + detailsThree.flags = new NatConfigFlags(); + detailsThree.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_STATIC); + detailsThree.iAddr = new Ip6Address(); + detailsThree.iAddr.ip6Address = new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, (byte) 0x85, (byte) 0xa3, 0, 0, 0, 0, (byte) 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x03}; detailsThree.iPort = 1274; - detailsThree.oAddr = new byte[]{-64, -88, 64, 3}; + detailsThree.oAddr = new Ip4Address(); + detailsThree.oAddr.ip4Address = new byte[]{-64, -88, 64, 3}; detailsThree.oPort = 6874; detailsThree.vrfId = NatInstanceCustomizer.DEFAULT_VRF_ID.getId().byteValue(); diff --git a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizerTest.java b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizerTest.java index a3f757389..d576b6037 100644 --- a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizerTest.java +++ b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizerTest.java @@ -29,6 +29,8 @@ import io.fd.honeycomb.translate.spi.read.ReaderCustomizer; import io.fd.jvpp.nat.dto.Nat64PrefixDetails; import io.fd.jvpp.nat.dto.Nat64PrefixDetailsReplyDump; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.Ip6Address; +import io.fd.jvpp.nat.types.Ip6Prefix; import java.util.List; import org.junit.Test; import org.mockito.Mock; @@ -110,13 +112,18 @@ public class Nat64PrefixesCustomizerTest extends ListReaderCustomizerTestio.fd.jvpp jvpp-core + + io.fd.jvpp + jvpp-nat + ${jvpp.version} + org.opendaylight.mdsal.model ietf-inet-types-2013-07-15 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 3f5a56fb2..e6d71bee8 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 @@ -18,7 +18,6 @@ package io.fd.hc2vpp.common.translate.util; import static com.google.common.base.Preconditions.checkNotNull; -import java.util.Arrays; import javax.annotation.Nonnull; 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.IpAddressNoZone; 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 88085db78..f6fc3c78f 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 @@ -55,6 +55,20 @@ public interface Ipv4Translator extends ByteDataTranslator { return retval; } + /** + * Creates {@link io.fd.jvpp.nat.types.Ip4Address} address from address part of {@link Ipv4Prefix} + * + * @return {@link io.fd.jvpp.nat.types.Ip4Address} + */ + default io.fd.jvpp.nat.types.Ip4Address ipv4AddressPrefixToNatIp4Address(@Nonnull final Ipv4Prefix ipv4Prefix) { + checkNotNull(ipv4Prefix, "Cannot convert null prefix"); + + io.fd.jvpp.nat.types.Ip4Address address = new io.fd.jvpp.nat.types.Ip4Address(); + address.ip4Address = ipv4AddressPrefixToArray(ipv4Prefix); + + return address; + } + /** * Extracts {@link Ipv4Prefix} prefix */ @@ -88,6 +102,17 @@ public interface Ipv4Translator extends ByteDataTranslator { return ipv4AddressNoZoneToArray(ipv4Addr.getValue()); } + /** + * Transform Ipv4 address to a {@link io.fd.jvpp.nat.types.Ip4Address} acceptable by VPP. + * + * @return {@link io.fd.jvpp.nat.types.Ip4Address} + */ + default io.fd.jvpp.nat.types.Ip4Address ipv4AddressNoZoneToNatIp4Address(final Ipv4AddressNoZone ipv4Addr) { + io.fd.jvpp.nat.types.Ip4Address ip4Address = new io.fd.jvpp.nat.types.Ip4Address(); + ip4Address.ip4Address = ipv4AddressNoZoneToArray(ipv4Addr.getValue()); + return ip4Address; + } + /** * Transform Ipv4 address to a Ip4Address acceptable by VPP. * 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 153143910..c1ccd2d88 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 @@ -77,6 +77,19 @@ public interface Ipv6Translator extends ByteDataTranslator { new Ipv6Address(ipv6Prefix.getValue().substring(0, ipv6Prefix.getValue().indexOf('/'))))); } + /** + * Creates {@link io.fd.jvpp.nat.types.Ip6Address} from address part of {@link Ipv6Prefix} + * + * @return {@link io.fd.jvpp.nat.types.Ip6Address} + */ + default io.fd.jvpp.nat.types.Ip6Address ipv6AddressPrefixToNatIp6Address(@Nonnull final Ipv6Prefix ipv6Prefix) { + checkNotNull(ipv6Prefix, "Cannot convert null prefix"); + + io.fd.jvpp.nat.types.Ip6Address ip6Address = new io.fd.jvpp.nat.types.Ip6Address(); + ip6Address.ip6Address = ipv6AddressPrefixToArray(ipv6Prefix); + return ip6Address; + } + /** * Transforms {@link Prefix} from {@link Ipv6Prefix} * @param ipv6Prefix prefix to be translated @@ -94,6 +107,21 @@ public interface Ipv6Translator extends ByteDataTranslator { return prefix; } + /** + * Creates {@link io.fd.jvpp.nat.types.Ip6Prefix} from {@link Ipv6Prefix} + * + * @param ipv6Prefix prefix to be translated + * @return Vpp {@link io.fd.jvpp.nat.types.Ip6Prefix} from {@link Ipv6Prefix} + */ + default io.fd.jvpp.nat.types.Ip6Prefix ipv6AddressPrefixToNatIp6Prefix(@Nonnull final Ipv6Prefix ipv6Prefix) { + checkNotNull(ipv6Prefix, "Cannot convert null prefix"); + io.fd.jvpp.nat.types.Ip6Prefix prefix = new io.fd.jvpp.nat.types.Ip6Prefix(); + prefix.prefix = new io.fd.jvpp.nat.types.Ip6Address(); + prefix.prefix.ip6Address = ipv6AddressPrefixToArray(ipv6Prefix); + prefix.len = extractPrefix(ipv6Prefix); + return prefix; + } + /** * Extracts {@link Ipv6Prefix} prefix */ -- cgit 1.2.3-korg