HC2VPP-325: use ip-prefix instead of ip-address in [email protected] 10/12810/2
authorMarek Gradzki <[email protected]>
Wed, 30 May 2018 11:45:41 +0000 (13:45 +0200)
committerMarek Gradzki <[email protected]>
Thu, 31 May 2018 09:09:49 +0000 (09:09 +0000)
Only /32 prefix for IPv4 and /128 for IPv6 are supported.

Change-Id: I875b1eb6c2cb43da54de0a731aeeb9757b39c39c
Signed-off-by: Marek Gradzki <[email protected]>
14 files changed:
nat/nat-api/src/main/yang/[email protected]
nat/nat-api/src/main/yang/[email protected]
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/util/MappingEntryContext.java
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java
nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizerTest.java
nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/util/MappingEntryContextTest.java
nat/nat2vpp/src/test/resources/nat44/static-mapping-address-update.json
nat/nat2vpp/src/test/resources/nat44/static-mapping-unsupported-proto.json
nat/nat2vpp/src/test/resources/nat44/static-mapping.json
nat/nat2vpp/src/test/resources/nat64/static-mapping-address-update.json
nat/nat2vpp/src/test/resources/nat64/static-mapping-unsupported-proto.json
nat/nat2vpp/src/test/resources/nat64/static-mapping.json
nat/nat_postman_collection.json

index 77e2d7b..5eec4c6 100644 (file)
@@ -420,8 +420,7 @@ module ietf-nat {
     }
 
     leaf internal-src-address {
-    // TODO(HC2VPP-325): original model uses inet:ip-prefix;
-      type inet:ip-address;
+      type inet:ip-prefix;
       description
         "Corresponds to the source IPv4/IPv6 address/prefix
          of the packet received on an internal
@@ -444,8 +443,7 @@ module ietf-nat {
     }
 
     leaf external-src-address {
-    // TODO(HC2VPP-325): original model uses inet:ip-prefix;
-      type inet:ipv4-address;
+      type inet:ip-prefix;
       description
         "Source IP address/prefix of the packet sent on an
          external interface of the NAT.";
@@ -462,8 +460,7 @@ module ietf-nat {
     }
 
     leaf internal-dst-address {
-    // TODO(HC2VPP-325): original model uses inet:ip-prefix;
-      type inet:ipv4-prefix;
+      type inet:ip-prefix;
       description
         "Corresponds to the destination IP address/prefix
          of the packet received on an internal interface
@@ -487,8 +484,7 @@ module ietf-nat {
     }
 
     leaf external-dst-address {
-    // TODO(HC2VPP-325): original model uses inet:ip-prefix;
-      type inet:ipv4-address;
+      type inet:ip-prefix;
       description
         "Corresponds to the destination IP address/prefix
          of the packet sent on an external interface
index de94368..a99e65f 100644 (file)
@@ -65,12 +65,12 @@ module nat-context {
                         unique "index";
 
                         leaf internal {
-                            type inet:ip-address;
+                            type inet:ip-prefix;
                             description "Local IP address set in VPP";
                         }
 
                         leaf external {
-                            type inet:ip-address;
+                            type inet:ip-prefix;
                             description "Extarnal IP address set in VPP";
                         }
 
index 43dba09..15f73e6 100644 (file)
@@ -37,7 +37,7 @@ import java.util.List;
 import java.util.Optional;
 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.IpAddress;
+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.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.mapping.entry.ExternalSrcPortBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.mapping.entry.InternalSrcPortBuilder;
@@ -114,9 +114,8 @@ 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.rev180223.MappingEntry.Type.Static);
-        builder.setExternalSrcAddress(arrayToIpv4AddressNoZone(detail.externalIpAddress));
-        builder.setInternalSrcAddress(
-                new IpAddress(arrayToIpv4AddressNoZone(detail.localIpAddress)));
+        builder.setExternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.externalIpAddress, 32)));
+        builder.setInternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.localIpAddress, 32)));
 
         if (detail.addrOnly == 0) {
             builder.setExternalSrcPort(new ExternalSrcPortBuilder()
@@ -136,9 +135,8 @@ final class MappingEntryCustomizer implements Ipv4Translator, Ipv6Translator,
             builder.setType(
                     org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.MappingEntry.Type.DynamicImplicit);
         }
-        builder.setExternalSrcAddress(arrayToIpv4AddressNoZone(detail.oAddr));
-        builder.setInternalSrcAddress(
-                new IpAddress(arrayToIpv6AddressNoZone(detail.iAddr)));
+        builder.setExternalSrcAddress(new IpPrefix(toIpv4Prefix(detail.oAddr,32 )));
+        builder.setInternalSrcAddress(new IpPrefix(toIpv6Prefix(detail.iAddr, 128)));
 
         builder.setExternalSrcPort(new ExternalSrcPortBuilder()
             .setStartPortNumber(new PortNumber(Short.toUnsignedInt(detail.oPort))).build());
index 0f72209..d136764 100644 (file)
@@ -40,8 +40,11 @@ import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.nat.context
 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.nat.context.rev161214.mapping.entry.context.attributes.nat.mapping.entry.context.nat.instance.mapping.table.MappingEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.nat.context.rev161214.mapping.entry.context.attributes.nat.mapping.entry.context.nat.instance.mapping.table.MappingEntryKey;
 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.IpPrefix;
 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.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -94,32 +97,30 @@ public class MappingEntryContext implements Ipv4Translator, Ipv6Translator {
     static MappingEntryKey entryToKey(
             final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.nat.instances.instance.mapping.table.MappingEntry entry) {
         // Only IPv4
-        return new MappingEntryKey(new IpAddress(entry.getExternalSrcAddress()), entry.getInternalSrcAddress());
+        return new MappingEntryKey(entry.getExternalSrcAddress(), entry.getInternalSrcAddress());
     }
 
     private MappingEntryKey entryToKey(final Nat44StaticMappingDetails entry) {
         // Only IPv4
         return new MappingEntryKey(
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(entry.externalIpAddress))),
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(entry.localIpAddress))));
+            new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.externalIpAddress,32))),
+            new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.localIpAddress, 32))));
     }
 
     private MappingEntryKey entryToKey(final Nat64BibDetails entry) {
         return new MappingEntryKey(
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(entry.oAddr))),
-                new IpAddress(new Ipv6Address(arrayToIpv6AddressNoZone(entry.iAddr))));
+                new IpPrefix(new Ipv4Prefix(toIpv4Prefix(entry.oAddr, 32))),
+                new IpPrefix(new Ipv6Prefix(toIpv6Prefix(entry.iAddr, 128))));
     }
 
     private boolean equalEntries(final Nat44StaticMappingDetails detail, final MappingEntry ctxMappingEntry) {
-        final IpAddress internalAddrFromDetails =
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(detail.localIpAddress)));
         // Only IPv4
+        final IpPrefix internalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.localIpAddress, 32));
         if (!ctxMappingEntry.getInternal().equals(internalAddrFromDetails)) {
             return false;
         }
         // Only IPv4
-        final IpAddress externalAddrFromDetails =
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(detail.externalIpAddress)));
+        final IpPrefix externalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.externalIpAddress, 32));
         if (!ctxMappingEntry.getExternal().equals(externalAddrFromDetails)) {
             return false;
         }
@@ -127,15 +128,13 @@ public class MappingEntryContext implements Ipv4Translator, Ipv6Translator {
     }
 
     private boolean equalEntries(final Nat64BibDetails detail, final MappingEntry ctxMappingEntry) {
-        final IpAddress internalAddrFromDetails =
-                new IpAddress(new Ipv6Address(arrayToIpv6AddressNoZone(detail.iAddr)));
         // Only IPv6
+        final IpPrefix internalAddrFromDetails = new IpPrefix(toIpv6Prefix(detail.iAddr, 128));
         if (!ctxMappingEntry.getInternal().equals(internalAddrFromDetails)) {
             return false;
         }
         // Only IPv4
-        final IpAddress externalAddrFromDetails =
-                new IpAddress(new Ipv4Address(arrayToIpv4AddressNoZone(detail.oAddr)));
+        final IpPrefix externalAddrFromDetails = new IpPrefix(toIpv4Prefix(detail.oAddr, 32));
         if (!ctxMappingEntry.getExternal().equals(externalAddrFromDetails)) {
             return false;
         }
index 6aca1af..7416068 100644 (file)
@@ -32,9 +32,9 @@ import io.fd.vpp.jvpp.nat.dto.Nat44AddDelStaticMapping;
 import io.fd.vpp.jvpp.nat.dto.Nat64AddDelStaticBib;
 import io.fd.vpp.jvpp.nat.future.FutureJVppNatFacade;
 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.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
+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;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.nat.instances.Instance;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.nat.instances.instance.mapping.table.MappingEntry;
@@ -85,15 +85,15 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry,
                                   @Nonnull final MappingEntry entry,
                                   @Nonnull final Long natInstanceId,
                                   final boolean isAdd) throws WriteFailedException {
-        final IpAddress internalSrcAddress = entry.getInternalSrcAddress();
-        final Ipv4Address internalV4SrcAddress = internalSrcAddress.getIpv4Address();
-        final Ipv6Address internalV6SrcAddress = internalSrcAddress.getIpv6Address();
-        if (internalV4SrcAddress != null) {
+        final IpPrefix internalSrcPrefix = entry.getInternalSrcAddress();
+        final Ipv4Prefix internalV4SrcPrefix = internalSrcPrefix.getIpv4Prefix();
+        final Ipv6Prefix internalV6SrcPrefix = internalSrcPrefix.getIpv6Prefix();
+        if (internalV4SrcPrefix != null) {
             final Nat44AddDelStaticMapping request = getNat44Request(id, entry, natInstanceId, isAdd);
             getReplyForWrite(jvppNat.nat44AddDelStaticMapping(request).toCompletableFuture(), id);
         } else {
-            checkState(internalV6SrcAddress != null,
-                    "internalSrcAddress.getIpv6Address() should not return null if v4 address is not given");
+            checkState(internalV6SrcPrefix != null,
+                    "internalSrcPrefix.getIpv4Prefix() should not return null if v4 prefix is not given");
             final Nat64AddDelStaticBib request = getNat64Request(id, entry, natInstanceId, isAdd);
             getReplyForWrite(jvppNat.nat64AddDelStaticBib(request).toCompletableFuture(), id);
         }
@@ -147,14 +147,15 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry,
         // VPP uses int, model long
         request.vrfId = natInstanceId.intValue();
 
-        final Ipv4Address internalAddress = mappingEntry.getInternalSrcAddress().getIpv4Address();
+        final Ipv4Prefix internalAddress = mappingEntry.getInternalSrcAddress().getIpv4Prefix();
         checkArgument(internalAddress != null, "No Ipv4 present in internal-src-address %s",
-                mappingEntry.getInternalSrcAddress());
+            mappingEntry.getInternalSrcAddress());
+        checkArgument(extractPrefix(internalAddress) == 32,
+            "Only /32 prefix in internal-src-address is supported, but was %s", internalAddress);
 
         request.addrOnly = 1;
-        request.localIpAddress =
-                ipv4AddressNoZoneToArray(mappingEntry.getInternalSrcAddress().getIpv4Address().getValue());
-        request.externalIpAddress = ipv4AddressNoZoneToArray(mappingEntry.getExternalSrcAddress().getValue());
+        request.localIpAddress = ipv4AddressPrefixToArray(internalAddress);
+        request.externalIpAddress = ipv4AddressPrefixToArray(getExternalAddress(mappingEntry));
         request.externalSwIfIndex = -1; // external ip address is ignored if externalSwIfIndex is given
         request.protocol = -1;
         final Short protocol = mappingEntry.getTransportProtocol();
@@ -185,13 +186,14 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry,
         // VPP uses int, model long
         request.vrfId = natInstanceId.intValue();
 
-        final Ipv6Address internalAddress = mappingEntry.getInternalSrcAddress().getIpv6Address();
+        final Ipv6Prefix internalAddress = mappingEntry.getInternalSrcAddress().getIpv6Prefix();
         checkArgument(internalAddress != null, "No Ipv6 present in internal-src-address %s",
                 mappingEntry.getInternalSrcAddress());
+        checkArgument(extractPrefix(internalAddress) == (byte)128,
+            "Only /128 prefix in internal-src-address is supported, but was %s", internalAddress);
 
-
-        request.iAddr = ipv6AddressNoZoneToArray(internalAddress);
-        request.oAddr = ipv4AddressNoZoneToArray(mappingEntry.getExternalSrcAddress().getValue());
+        request.iAddr = ipv6AddressPrefixToArray(internalAddress);
+        request.oAddr = ipv4AddressPrefixToArray(getExternalAddress(mappingEntry));
         request.proto = -1;
         final Short protocol = mappingEntry.getTransportProtocol();
         if (protocol != null) {
@@ -210,6 +212,15 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry,
         return request;
     }
 
+    private Ipv4Prefix getExternalAddress(final MappingEntry mappingEntry) {
+        final Ipv4Prefix externalAddress = mappingEntry.getExternalSrcAddress().getIpv4Prefix();
+        checkArgument(externalAddress != null, "No Ipv4 present in external-src-address %s",
+            mappingEntry.getExternalSrcAddress());
+        checkArgument(extractPrefix(externalAddress) == 32,
+            "Only /32 prefix in external-src-address is supported, but was %s", externalAddress);
+        return externalAddress;
+    }
+
     private Short getPortNumber(final InstanceIdentifier<MappingEntry> id, final PortNumber portNumber) {
         if (portNumber != null) {
             if (portNumber.getStartPortNumber() != null && portNumber.getEndPortNumber() == null) {
index 7f38dc9..9ce42da 100644 (file)
@@ -98,9 +98,9 @@ public class MappingEntryCustomizerTest
         getCustomizer().readCurrentAttributes(mappingEntryId, builder, ctx);
 
         assertEquals(NAT_MAPPING_ID, builder.getIndex().longValue());
-        assertEquals("192.168.3.8", builder.getExternalSrcAddress().getValue());
+        assertEquals("192.168.3.8/32", builder.getExternalSrcAddress().getIpv4Prefix().getValue());
         assertEquals(6874, builder.getExternalSrcPort().getStartPortNumber().getValue().intValue());
-        assertArrayEquals("192.168.2.2".toCharArray(), builder.getInternalSrcAddress().getValue());
+        assertEquals("192.168.2.2/32", builder.getInternalSrcAddress().getIpv4Prefix().getValue());
         assertEquals(1274, builder.getInternalSrcPort().getStartPortNumber().getValue().intValue());
     }
 
@@ -128,9 +128,9 @@ public class MappingEntryCustomizerTest
         getCustomizer().readCurrentAttributes(mappingEntryId, builder, ctx);
 
         assertEquals(NAT_MAPPING_ID, builder.getIndex().longValue());
-        assertEquals("192.168.64.3", builder.getExternalSrcAddress().getValue());
+        assertEquals("192.168.64.3/32", builder.getExternalSrcAddress().getIpv4Prefix().getValue());
         assertEquals(6874, builder.getExternalSrcPort().getStartPortNumber().getValue().intValue());
-        assertArrayEquals("2001:db8:85a3::8a2e:370:7303".toCharArray(), builder.getInternalSrcAddress().getValue());
+        assertEquals("2001:db8:85a3::8a2e:370:7303/128", builder.getInternalSrcAddress().getIpv6Prefix().getValue());
         assertEquals(1274, builder.getInternalSrcPort().getStartPortNumber().getValue().intValue());
     }
 
index df5912b..3af318c 100644 (file)
@@ -26,8 +26,8 @@ import static org.mockito.MockitoAnnotations.initMocks;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.Lists;
-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.nat.dto.Nat44StaticMappingDetails;
 import java.util.Collections;
 import java.util.List;
@@ -35,8 +35,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.nat.context.rev161214.mapping.entry.context.attributes.nat.mapping.entry.context.nat.instance.MappingTableBuilder;
-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.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.nat.instances.instance.mapping.table.MappingEntry;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.nat.instances.instance.mapping.table.MappingEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.nat.instances.instance.mapping.table.MappingEntryKey;
@@ -59,7 +59,7 @@ public class MappingEntryContextTest implements Ipv4Translator {
         when(mappingCtx.read(any(InstanceIdentifier.class))).thenReturn(Optional.absent());
         final long natId = 7;
         final long entryId = 99;
-        final MappingEntry entry = getEntry(natId, "192.168.1.5", "17.14.4.6");
+        final MappingEntry entry = getEntry(natId, "192.168.1.5/32", "17.14.4.6/32");
 
         ctx.addEntry(natId, entryId, entry, mappingCtx);
 
@@ -69,7 +69,7 @@ public class MappingEntryContextTest implements Ipv4Translator {
     @Test
     public void testRemove() throws Exception {
         final long natId = 0;
-        final MappingEntry entry = getEntry(natId, "192.168.1.5", "17.14.4.6");
+        final MappingEntry entry = getEntry(natId, "192.168.1.5/32", "17.14.4.6/32");
 
         ctx.removeEntry(natId, entry, mappingCtx);
 
@@ -80,7 +80,7 @@ public class MappingEntryContextTest implements Ipv4Translator {
     public void testGetExistingIndex() throws Exception {
         final long natId = 0;
         final long entryId = 12;
-        final MappingEntry entry = getEntry(entryId, "192.168.1.5", "17.14.4.6");
+        final MappingEntry entry = getEntry(entryId, "192.168.1.5/32", "17.14.4.6/32");
         final Nat44StaticMappingDetails details = getDetails(entryId, "192.168.1.5", "17.14.4.6");
 
         when(mappingCtx.read(MappingEntryContext.getId(natId, MappingEntryContext.entryToKey(entry))))
@@ -93,9 +93,9 @@ public class MappingEntryContextTest implements Ipv4Translator {
     @Test
     public void testFindDetails() throws Exception {
         final long natId = 0;
-        final MappingEntry entry = getEntry(0, "192.168.1.5", "17.14.4.6");
+        final MappingEntry entry = getEntry(0, "192.168.1.5/32", "17.14.4.6/32");
         final Nat44StaticMappingDetails details = getDetails(0, "192.168.1.5", "17.14.4.6");
-        final MappingEntry entry2 = getEntry(1, "192.168.1.8", "17.14.4.10");
+        final MappingEntry entry2 = getEntry(1, "192.168.1.8/32", "17.14.4.10/32");
         final Nat44StaticMappingDetails details2 = getDetails(1, "192.168.1.8", "17.14.4.10");
 
         final List<Nat44StaticMappingDetails> someDetails = Lists.newArrayList(details, details2);
@@ -138,16 +138,16 @@ public class MappingEntryContextTest implements Ipv4Translator {
     public void testGetArtificialIndex() throws Exception {
         final long natId = 0;
         final long entryId = 0;
-        final MappingEntry entry = getEntry(entryId, "192.168.1.5", "17.14.4.6");
+        final MappingEntry entry = getEntry(entryId, "192.168.1.5/32", "17.14.4.6/32");
         final long entryId2 = 55;
-        final MappingEntry entry2 = getEntry(entryId2, "192.168.1.6", "17.14.4.7");
+        final MappingEntry entry2 = getEntry(entryId2, "192.168.1.6/32", "17.14.4.7/32");
         final long entryId3 = 18954;
-        final MappingEntry entry3 = getEntry(entryId3, "192.168.1.7", "17.14.4.8");
+        final MappingEntry entry3 = getEntry(entryId3, "192.168.1.7/32", "17.14.4.8/32");
         final long entryId4 = 18955;
-        final MappingEntry entry4 = getEntry(entryId4, "192.168.1.8", "17.14.4.9");
+        final MappingEntry entry4 = getEntry(entryId4, "192.168.1.8/32", "17.14.4.9/32");
 
         final long newEntryId = 18956;
-        final MappingEntry newEntry = getEntry(newEntryId, "192.168.1.99", "17.14.4.99");
+        final MappingEntry newEntry = getEntry(newEntryId, "192.168.1.99/32", "17.14.4.99/32");
         final Nat44StaticMappingDetails newDetails = getDetails(newEntryId, "192.168.1.99", "17.14.4.99");
         when(mappingCtx.read(MappingEntryContext.getId(natId, MappingEntryContext.entryToKey(newEntry))))
                 .thenReturn(Optional.absent());
@@ -178,7 +178,7 @@ public class MappingEntryContextTest implements Ipv4Translator {
     public void testAddExisting() throws Exception {
         final long natId = 7;
         final long entryId = 99;
-        final MappingEntry entry = getEntry(natId, "192.168.1.5", "17.14.4.6");
+        final MappingEntry entry = getEntry(natId, "192.168.1.5/32", "17.14.4.6/32");
         final org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.nat.context.rev161214.mapping.entry.context.attributes.nat.mapping.entry.context.nat.instance.mapping.table.MappingEntry
                 data = MappingEntryContext.toCtxMapEntry(entry, entryId);
         when(mappingCtx.read(any(InstanceIdentifier.class))).thenReturn(Optional.of(data));
@@ -190,8 +190,8 @@ public class MappingEntryContextTest implements Ipv4Translator {
         return new MappingEntryBuilder()
                 .setKey(new MappingEntryKey(id))
                 .setType(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev180223.MappingEntry.Type.Static)
-                .setInternalSrcAddress(new IpAddress(new Ipv4Address(longernalIpv4)))
-                .setExternalSrcAddress(new Ipv4Address(externalIpv4))
+                .setInternalSrcAddress(new IpPrefix(new Ipv4Prefix(longernalIpv4)))
+                .setExternalSrcAddress(new IpPrefix(new Ipv4Prefix(externalIpv4)))
                 .build();
     }
 }
\ No newline at end of file
index 224a62a..6fe329d 100644 (file)
@@ -4,8 +4,8 @@
       "index": 22,
       "type": "static",
       "transport-protocol": 17,
-      "internal-src-address": "192.168.1.86",
-      "external-src-address": "45.1.5.6"
+      "internal-src-address": "192.168.1.86/32",
+      "external-src-address": "45.1.5.6/32"
     }
   }
 }
index 455465d..a701e26 100644 (file)
@@ -4,8 +4,8 @@
       "index": 22,
       "type": "static",
       "transport-protocol": 123,
-      "internal-src-address": "192.168.1.87",
-      "external-src-address": "45.1.5.7"
+      "internal-src-address": "192.168.1.87/32",
+      "external-src-address": "45.1.5.7/32"
     }
   }
 }
index b1561a4..a5b5caa 100644 (file)
@@ -4,8 +4,8 @@
       "index": 22,
       "type": "static",
       "transport-protocol": 17,
-      "internal-src-address": "192.168.1.87",
-      "external-src-address": "45.1.5.7"
+      "internal-src-address": "192.168.1.87/32",
+      "external-src-address": "45.1.5.7/32"
     }
   }
 }
index 2e836ce..32bffac 100644 (file)
@@ -4,8 +4,8 @@
       "index": 58,
       "type": "static",
       "transport-protocol": 58,
-      "internal-src-address": "2001:db8:85a3::8a2e:370:7334",
-      "external-src-address": "10.1.1.4",
+      "internal-src-address": "2001:db8:85a3::8a2e:370:7334/128",
+      "external-src-address": "10.1.1.4/32",
       "internal-src-port" : {
         "start-port-number" : 1234
       },
index bbe8a20..44432c5 100644 (file)
@@ -4,8 +4,8 @@
       "index": 58,
       "type": "static",
       "transport-protocol": 123,
-      "internal-src-address": "2001:db8:85a3::8a2e:370:7333",
-      "external-src-address": "10.1.1.3"
+      "internal-src-address": "2001:db8:85a3::8a2e:370:7333/128",
+      "external-src-address": "10.1.1.3/32"
     }
   }
 }
index 9fff452..4312a88 100644 (file)
@@ -4,11 +4,11 @@
       "index": 58,
       "type": "static",
       "transport-protocol": 58,
-      "internal-src-address": "2001:db8:85a3::8a2e:370:7333",
+      "internal-src-address": "2001:db8:85a3::8a2e:370:7333/128",
       "internal-src-port": {
         "start-port-number": 123
       },
-      "external-src-address": "10.1.1.3",
+      "external-src-address": "10.1.1.3/32",
       "external-src-port": {
         "start-port-number": 456
       }
index 2e6ceea..8013f1c 100644 (file)
                        "description": "CLI: nat44 add static mapping local 10.0.0.3 external 4.4.4.4\n\nMore information: https://wiki.fd.io/view/VPP/NAT",
                        "collectionId": "87e0bcaa-5031-9a2b-8a6b-329758310154",
                        "responses": [],
-                       "rawModeData": "{\r\n\t\"mapping-entry\" : {\r\n\t\t\"index\": 1,\r\n\t\t\"type\": \"static\",\r\n\t\t\"internal-src-address\": \"192.168.1.87\",\r\n\t\t\"external-src-address\": \"45.1.5.7\"\r\n\t}\r\n}",
+                       "rawModeData": "{\r\n\t\"mapping-entry\" : {\r\n\t\t\"index\": 1,\r\n\t\t\"type\": \"static\",\r\n\t\t\"internal-src-address\": \"192.168.1.87/32\",\r\n\t\t\"external-src-address\": \"45.1.5.7/32\"\r\n\t}\r\n}",
                        "folder": "d256d898-3c36-7ce5-cf2a-74370463d78f"
                },
                {
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "folder": "d256d898-3c36-7ce5-cf2a-74370463d78f",
-                       "rawModeData": "{\r\n\t\"mapping-entry\" : {\r\n\t\t\"index\": 1,\r\n\t\t\"type\": \"static\",\r\n\t\t\"internal-src-address\": \"192.168.1.87\",\r\n\t\t\"external-src-address\": \"45.1.5.7\"\r\n\t}\r\n}"
+                       "folder": "d256d898-3c36-7ce5-cf2a-74370463d78f"
                },
                {
                        "id": "afdc45a9-cf39-379b-5bb2-4a909512aee3",
                        "description": "CLI: nat64 add static bib 2001:db8:85a3::8a2e:370:7334 1234 10.1.1.3 5678 tcp\n\nMore information: https://wiki.fd.io/view/VPP/NAT#Stateful_NAT64",
                        "collectionId": "87e0bcaa-5031-9a2b-8a6b-329758310154",
                        "responses": [],
-                       "rawModeData": "{\n  \"mapping-entry\": {\n    \"index\": 1,\n    \"type\": \"static\",\n    \"transport-protocol\": 6,\n    \"internal-src-address\": \"2001:db8:85a3::8a2e:370:7334\",\n    \"external-src-address\": \"10.1.1.3\",\n    \"internal-src-port\": {\n      \"start-port-number\": 1234\n    },\n    \"external-src-port\": {\n      \"start-port-number\": 5678\n    }\n  }\n}"
+                       "rawModeData": "{\n  \"mapping-entry\": {\n    \"index\": 1,\n    \"type\": \"static\",\n    \"transport-protocol\": 6,\n    \"internal-src-address\": \"2001:db8:85a3::8a2e:370:7334/128\",\n    \"external-src-address\": \"10.1.1.3/32\",\n    \"internal-src-port\": {\n      \"start-port-number\": 1234\n    },\n    \"external-src-port\": {\n      \"start-port-number\": 5678\n    }\n  }\n}"
                },
                {
                        "id": "c47386c4-520b-78a5-9c52-a0f36e8aa6d0",