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 +++++++++++++++++----- 13 files changed, 99 insertions(+), 61 deletions(-) (limited to 'nat/nat2vpp/src/main/java') 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); } -- cgit 1.2.3-korg