diff options
Diffstat (limited to 'nat/nat2vpp/src/main')
13 files changed, 99 insertions, 61 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<Nat64PoolAddrDetails> 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<Map<Long, Nat64PrefixDetails>, 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<C extends DataObject, B extends Bu preRoutingNat44DumpMgr.getDump(id, ctx.getModificationCache()); dump.orElse(new Nat44InterfaceDetailsReplyDump()).nat44InterfaceDetails.stream() - .filter(natIfcDetail -> 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<C extends DataObject, B extends Bu preRoutingNat64DumpMgr.getDump(id, ctx.getModificationCache()); dump.orElse(new Nat64InterfaceDetailsReplyDump()).nat64InterfaceDetails.stream() - .filter(natIfcDetail -> 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<C extends DataObject, B extends Bu dump.orElse(new Nat44InterfaceOutputFeatureDetailsReplyDump()).nat44InterfaceOutputFeatureDetails .stream() - .filter(natIfcDetail -> 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<C extends DataObject, B extends Bu abstract Logger getLog(); - abstract boolean isExpectedNatType(final int isInside); + abstract boolean isExpectedNatType(final NatConfigFlags flags); } diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceInboundNatCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceInboundNatCustomizer.java index 76a20a94c..c0dde6516 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceInboundNatCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceInboundNatCustomizer.java @@ -20,6 +20,7 @@ import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.spi.read.Initialized; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.NatConfigFlags; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816.NatInterfaceAugmentation; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816._interface.nat.attributes.Nat; @@ -50,8 +51,8 @@ final class InterfaceInboundNatCustomizer extends AbstractInterfaceNatCustomizer } @Override - boolean isExpectedNatType(final int isInside) { - return isInside == 1; + boolean isExpectedNatType(final NatConfigFlags flags) { + return flags.contains(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_INSIDE); } @Nonnull diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceOutboundNatCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceOutboundNatCustomizer.java index 68c0cb1ce..3196cda10 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceOutboundNatCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/InterfaceOutboundNatCustomizer.java @@ -20,6 +20,7 @@ import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.spi.read.Initialized; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.NatConfigFlags; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816.NatInterfaceAugmentation; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816._interface.nat.attributes.Nat; @@ -50,8 +51,8 @@ final class InterfaceOutboundNatCustomizer extends AbstractInterfaceNatCustomize } @Override - boolean isExpectedNatType(final int isInside) { - return isInside == 0; + boolean isExpectedNatType(final NatConfigFlags flags) { + return flags.contains(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_OUTSIDE); } @Nonnull diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceInboundNatCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceInboundNatCustomizer.java index 0ca344419..c9f4dc888 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceInboundNatCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceInboundNatCustomizer.java @@ -20,6 +20,7 @@ import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.spi.read.Initialized; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.NatConfigFlags; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816._interface.nat.attributes.Nat; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816._interface.nat.attributes.NatBuilder; @@ -54,8 +55,8 @@ final class SubInterfaceInboundNatCustomizer extends AbstractSubInterfaceNatCust } @Override - boolean isExpectedNatType(final int isInside) { - return isInside == 1; + boolean isExpectedNatType(final NatConfigFlags flags) { + return flags.contains(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_INSIDE); } @Nonnull diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceOutboundNatCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceOutboundNatCustomizer.java index 92d829987..8485cded9 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceOutboundNatCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/ifc/SubInterfaceOutboundNatCustomizer.java @@ -20,6 +20,7 @@ import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.spi.read.Initialized; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.NatConfigFlags; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816._interface.nat.attributes.Nat; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816._interface.nat.attributes.NatBuilder; @@ -54,8 +55,8 @@ final class SubInterfaceOutboundNatCustomizer extends AbstractSubInterfaceNatCus } @Override - boolean isExpectedNatType(final int isInside) { - return isInside == 0; + boolean isExpectedNatType(final NatConfigFlags flags) { + return flags.contains(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_OUTSIDE); } @Nonnull 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 aed383b10..67e29ccb2 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 @@ -19,7 +19,6 @@ package io.fd.hc2vpp.nat.util; import static com.google.common.base.Preconditions.checkArgument; import com.google.common.annotations.VisibleForTesting; -import java.util.Optional; import io.fd.hc2vpp.common.translate.util.Ipv4Translator; import io.fd.hc2vpp.common.translate.util.Ipv6Translator; import io.fd.honeycomb.translate.MappingContext; @@ -28,6 +27,7 @@ import io.fd.jvpp.nat.dto.Nat64BibDetails; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Optional; import javax.annotation.Nonnull; import javax.annotation.concurrent.ThreadSafe; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.naming.context.rev160513.Contexts; @@ -100,24 +100,24 @@ public class MappingEntryContext implements Ipv4Translator, Ipv6Translator { private MappingEntryKey entryToKey(final Nat44StaticMappingDetails entry) { // Only IPv4 return new MappingEntryKey( - new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.externalIpAddress,32))), - new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.localIpAddress, 32)))); + new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.externalIpAddress.ip4Address, 32))), + new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.localIpAddress.ip4Address, 32)))); } private MappingEntryKey entryToKey(final Nat64BibDetails entry) { return new MappingEntryKey( - new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.oAddr, 32))), - new IpPrefix(new Ipv6Prefix(toIpv6Prefix(entry.iAddr, 128)))); + new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.oAddr.ip4Address, 32))), + new IpPrefix(new Ipv6Prefix(toIpv6Prefix(entry.iAddr.ip6Address, 128)))); } private boolean equalEntries(final Nat44StaticMappingDetails detail, final MappingEntry ctxMappingEntry) { // Only IPv4 - final IpPrefix internalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.localIpAddress, 32)); + final IpPrefix internalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.localIpAddress.ip4Address, 32)); if (!ctxMappingEntry.getInternal().equals(internalAddrFromDetails)) { return false; } // Only IPv4 - final IpPrefix externalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.externalIpAddress, 32)); + final IpPrefix externalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.externalIpAddress.ip4Address, 32)); if (!ctxMappingEntry.getExternal().equals(externalAddrFromDetails)) { return false; } @@ -126,12 +126,12 @@ public class MappingEntryContext implements Ipv4Translator, Ipv6Translator { private boolean equalEntries(final Nat64BibDetails detail, final MappingEntry ctxMappingEntry) { // Only IPv6 - final IpPrefix internalAddrFromDetails = new IpPrefix(toIpv6Prefix(detail.iAddr, 128)); + final IpPrefix internalAddrFromDetails = new IpPrefix(toIpv6Prefix(detail.iAddr.ip6Address, 128)); if (!ctxMappingEntry.getInternal().equals(internalAddrFromDetails)) { return false; } // Only IPv4 - final IpPrefix externalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.oAddr, 32)); + final IpPrefix externalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.oAddr.ip4Address, 32)); if (!ctxMappingEntry.getExternal().equals(externalAddrFromDetails)) { return false; } diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ExternalIpPoolCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ExternalIpPoolCustomizer.java index 38d2f5a60..8b9d9dd41 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ExternalIpPoolCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ExternalIpPoolCustomizer.java @@ -89,9 +89,9 @@ final class ExternalIpPoolCustomizer implements ListWriterCustomizer<ExternalIpA final Nat44AddDelAddressRange request = new Nat44AddDelAddressRange(); final Ipv4AddressRange range = Ipv4AddressRange.fromPrefix(externalIpPool); LOG.trace("Handling NAT44 address range: {}", range); - request.isAdd = booleanToByte(isAdd); - request.firstIpAddress = ipv4AddressNoZoneToArray(range.getStart()); - request.lastIpAddress = ipv4AddressNoZoneToArray(range.getEnd()); + request.isAdd = isAdd; + request.firstIpAddress = ipv4AddressNoZoneToNatIp4Address(range.getStart()); + request.lastIpAddress = ipv4AddressNoZoneToNatIp4Address(range.getEnd()); return request; } @@ -99,9 +99,9 @@ final class ExternalIpPoolCustomizer implements ListWriterCustomizer<ExternalIpA final Nat64AddDelPoolAddrRange request = new Nat64AddDelPoolAddrRange(); final Ipv4AddressRange range = Ipv4AddressRange.fromPrefix(externalIpPool); LOG.trace("Handling NAT64 address range: {}", range); - request.isAdd = booleanToByte(isAdd); - request.startAddr = ipv4AddressNoZoneToArray(range.getStart()); - request.endAddr = ipv4AddressNoZoneToArray(range.getEnd()); + request.isAdd = isAdd; + request.startAddr = ipv4AddressNoZoneToNatIp4Address(range.getStart()); + request.endAddr = ipv4AddressNoZoneToNatIp4Address(range.getEnd()); return request; } } diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java index 9c8da8c84..bf7811852 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java @@ -16,7 +16,6 @@ package io.fd.hc2vpp.nat.write; -import java.util.Optional; import io.fd.hc2vpp.common.translate.util.ByteDataTranslator; import io.fd.hc2vpp.common.translate.util.Ipv4Translator; import io.fd.hc2vpp.common.translate.util.Ipv6Translator; @@ -28,6 +27,9 @@ import io.fd.honeycomb.translate.write.WriteFailedException; import io.fd.jvpp.nat.dto.Nat44AddDelStaticMapping; import io.fd.jvpp.nat.dto.Nat64AddDelStaticBib; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.InterfaceIndex; +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.inet.types.rev130715.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; @@ -133,15 +135,20 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry, final boolean isAdd) throws WriteFailedException.CreateFailedException { final Nat44AddDelStaticMapping request = new Nat44AddDelStaticMapping(); - request.isAdd = booleanToByte(isAdd); + request.isAdd = isAdd; // VPP uses int, model long request.vrfId = natInstanceId.intValue(); final Ipv4Prefix internalAddress = mappingEntry.getInternalSrcAddress().getIpv4Prefix(); - request.addrOnly = 1; - request.localIpAddress = ipv4AddressPrefixToArray(internalAddress); - request.externalIpAddress = ipv4AddressPrefixToArray(mappingEntry.getExternalSrcAddress().getIpv4Prefix()); - request.externalSwIfIndex = -1; // external ip address is ignored if externalSwIfIndex is given + if (request.flags == null) { + request.flags = new NatConfigFlags(); + } + request.flags.add(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_ADDR_ONLY); + request.localIpAddress = ipv4AddressPrefixToNatIp4Address(internalAddress); + request.externalIpAddress = + ipv4AddressPrefixToNatIp4Address(mappingEntry.getExternalSrcAddress().getIpv4Prefix()); + request.externalSwIfIndex = new InterfaceIndex(); + request.externalSwIfIndex.interfaceindex = -1; // external ip address is ignored if externalSwIfIndex is given request.protocol = -1; final Short protocol = mappingEntry.getTransportProtocol(); if (protocol != null) { @@ -151,7 +158,7 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry, final Integer internalPortNumber = getPortNumber(mappingEntry.getInternalSrcPort()); final Integer externalPortNumber = getPortNumber(mappingEntry.getExternalSrcPort()); if (internalPortNumber != null && externalPortNumber != null) { - request.addrOnly = 0; + request.flags.remove(NatConfigFlags.NatConfigFlagsOptions.NAT_IS_ADDR_ONLY); request.localPort = internalPortNumber.shortValue(); request.externalPort = externalPortNumber.shortValue(); } @@ -164,13 +171,13 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry, final boolean isAdd) throws WriteFailedException.CreateFailedException { final Nat64AddDelStaticBib request = new Nat64AddDelStaticBib(); - request.isAdd = booleanToByte(isAdd); + request.isAdd = isAdd; // VPP uses int, model long request.vrfId = natInstanceId.intValue(); final Ipv6Prefix internalAddress = mappingEntry.getInternalSrcAddress().getIpv6Prefix(); - request.iAddr = ipv6AddressPrefixToArray(internalAddress); - request.oAddr = ipv4AddressPrefixToArray(mappingEntry.getExternalSrcAddress().getIpv4Prefix()); + request.iAddr = ipv6AddressPrefixToNatIp6Address(internalAddress); + request.oAddr = ipv4AddressPrefixToNatIp4Address(mappingEntry.getExternalSrcAddress().getIpv4Prefix()); request.proto = -1; final Short protocol = mappingEntry.getTransportProtocol(); if (protocol != null) { diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/Nat64PrefixesCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/Nat64PrefixesCustomizer.java index df8af8550..a9082c0c8 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/Nat64PrefixesCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/Nat64PrefixesCustomizer.java @@ -76,9 +76,8 @@ final class Nat64PrefixesCustomizer final Ipv6Prefix nat64Prefix = data.getNat64Prefix(); final Nat64AddDelPrefix request = new Nat64AddDelPrefix(); - request.prefix = ipv6AddressPrefixToArray(nat64Prefix); - request.prefixLen = extractPrefix(nat64Prefix); - request.isAdd = booleanToByte(isAdd); + request.prefix = ipv6AddressPrefixToNatIp6Prefix(nat64Prefix); + request.isAdd = isAdd; request.vrfId = vrfId; getReplyForWrite(jvppNat.nat64AddDelPrefix(request).toCompletableFuture(), id); } diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ifc/AbstractInterfaceNatCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ifc/AbstractInterfaceNatCustomizer.java index 336b17a6f..380de89a3 100644 --- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ifc/AbstractInterfaceNatCustomizer.java +++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/ifc/AbstractInterfaceNatCustomizer.java @@ -28,6 +28,8 @@ import io.fd.jvpp.nat.dto.Nat44InterfaceAddDelFeature; import io.fd.jvpp.nat.dto.Nat44InterfaceAddDelOutputFeature; import io.fd.jvpp.nat.dto.Nat64AddDelInterface; import io.fd.jvpp.nat.future.FutureJVppNatFacade; +import io.fd.jvpp.nat.types.InterfaceIndex; +import io.fd.jvpp.nat.types.NatConfigFlags; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang._interface.nat.rev170816.InterfaceNatVppFeatureAttributes; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; @@ -89,9 +91,17 @@ abstract class AbstractInterfaceNatCustomizer<D extends InterfaceNatVppFeatureAt throws WriteFailedException { checkArgument(!isNat64Supported(natAttributes), "Post routing Nat64 is not supported by VPP"); final Nat44InterfaceAddDelOutputFeature request = new Nat44InterfaceAddDelOutputFeature(); - 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.nat44InterfaceAddDelOutputFeature(request).toCompletableFuture(), id); } @@ -114,18 +124,34 @@ abstract class AbstractInterfaceNatCustomizer<D extends InterfaceNatVppFeatureAt private void preRoutingNat44(@Nonnull final InstanceIdentifier<D> 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<D> 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); } |