diff options
author | Marek Gradzki <mgradzki@cisco.com> | 2018-05-11 09:07:04 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2018-05-11 07:35:07 +0000 |
commit | 027b5b37883847a7f0acfdb386d8e891914cd26c (patch) | |
tree | 1c111e0b2e6878a6c12bd17027f834fcdc304527 | |
parent | 7f65e3e6e35dafca1fd7e386c62d0c8e76a21484 (diff) |
NAT: fix port read
Change-Id: I2aceb52f9c3bace7107f203ed717fe7d1c649328
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
(cherry picked from commit 6e6b56482dddb1575820b62ae4a39b6006293e9a)
-rw-r--r-- | nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizer.java | 8 | ||||
-rw-r--r-- | nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/read/MappingEntryCustomizerTest.java | 87 |
2 files changed, 70 insertions, 25 deletions
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 a3874482f..9075f4d0c 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 @@ -124,12 +124,12 @@ final class MappingEntryCustomizer implements Ipv4Translator, Ipv6Translator, if (detail.addrOnly == 0) { builder.setExternalSrcPort(new ExternalSrcPortBuilder() .setPortType(new SinglePortNumberBuilder().setSinglePortNumber(new PortNumber( - (int) detail.externalPort)) + Short.toUnsignedInt(detail.externalPort))) .build()) .build()); builder.setInternalSrcPort(new InternalSrcPortBuilder() .setPortType(new SinglePortNumberBuilder().setSinglePortNumber(new PortNumber( - (int) detail.localPort)) + Short.toUnsignedInt(detail.localPort))) .build()) .build()); } @@ -151,12 +151,12 @@ final class MappingEntryCustomizer implements Ipv4Translator, Ipv6Translator, builder.setExternalSrcPort(new ExternalSrcPortBuilder() .setPortType(new SinglePortNumberBuilder().setSinglePortNumber(new PortNumber( - (int) detail.oPort)) + Short.toUnsignedInt(detail.oPort))) .build()) .build()); builder.setInternalSrcPort(new InternalSrcPortBuilder() .setPortType(new SinglePortNumberBuilder().setSinglePortNumber(new PortNumber( - (int) detail.iPort)) + Short.toUnsignedInt(detail.iPort))) .build()) .build()); } 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 5402746ae..576324757 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 @@ -93,22 +93,37 @@ public class MappingEntryCustomizerTest public void testReadNat44() throws Exception { final Nat44StaticMappingDetailsReplyDump dumpNat44 = dumpReplyNat44NonEmpty(); when(nat44DumpExecutor.executeDump(mappingEntryId, null)).thenReturn(dumpNat44); + stubFindDetailsNat44(dumpNat44, 2); + final MappingEntryBuilder builder = new MappingEntryBuilder(); - when(mappingContext - .findDetailsNat44(dumpNat44.nat44StaticMappingDetails, NatInstanceCustomizer.DEFAULT_VRF_ID.getId(), - NAT_MAPPING_ID, ctx.getMappingContext())) - .thenReturn(Optional.of(dumpNat44.nat44StaticMappingDetails.get(2))); getCustomizer().readCurrentAttributes(mappingEntryId, builder, ctx); assertEquals(NAT_MAPPING_ID, builder.getIndex().longValue()); assertEquals("192.168.3.8", builder.getExternalSrcAddress().getValue()); assertEquals(6874, - ((SinglePortNumber) builder.getExternalSrcPort().getPortType()).getSinglePortNumber().getValue() - .intValue()); + ((SinglePortNumber) builder.getExternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); assertArrayEquals("192.168.2.2".toCharArray(), builder.getInternalSrcAddress().getValue()); assertEquals(1274, - ((SinglePortNumber) builder.getInternalSrcPort().getPortType()).getSinglePortNumber().getValue() - .intValue()); + ((SinglePortNumber) builder.getInternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); + } + + @Test + public void testReadNat44HighPorts() throws Exception { + final Nat44StaticMappingDetailsReplyDump dumpNat44 = dumpReplyNat44NonEmpty(); + when(nat44DumpExecutor.executeDump(mappingEntryId, null)).thenReturn(dumpNat44); + stubFindDetailsNat44(dumpNat44, 1); + + final MappingEntryBuilder builder = new MappingEntryBuilder(); + getCustomizer().readCurrentAttributes(mappingEntryId, builder, ctx); + + assertEquals(65535, + ((SinglePortNumber) builder.getExternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); + assertEquals(60000, + ((SinglePortNumber) builder.getInternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); } @Test @@ -116,22 +131,38 @@ public class MappingEntryCustomizerTest when(nat44DumpExecutor.executeDump(mappingEntryId, null)).thenReturn(new Nat44StaticMappingDetailsReplyDump()); final Nat64BibDetailsReplyDump dumpNat64 = dumpReplyNat64NonEmpty(); when(nat64DumpExecutor.executeDump(mappingEntryId, null)).thenReturn(dumpNat64); + stubFindDetailsNat64(dumpNat64, 2); + final MappingEntryBuilder builder = new MappingEntryBuilder(); - when(mappingContext - .findDetailsNat64(dumpNat64.nat64BibDetails, NatInstanceCustomizer.DEFAULT_VRF_ID.getId(), - NAT_MAPPING_ID, ctx.getMappingContext())) - .thenReturn(Optional.of(dumpNat64.nat64BibDetails.get(2))); getCustomizer().readCurrentAttributes(mappingEntryId, builder, ctx); assertEquals(NAT_MAPPING_ID, builder.getIndex().longValue()); assertEquals("192.168.64.3", builder.getExternalSrcAddress().getValue()); assertEquals(6874, - ((SinglePortNumber) builder.getExternalSrcPort().getPortType()).getSinglePortNumber().getValue() - .intValue()); + ((SinglePortNumber) builder.getExternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); assertArrayEquals("2001:db8:85a3::8a2e:370:7303".toCharArray(), builder.getInternalSrcAddress().getValue()); assertEquals(1274, - ((SinglePortNumber) builder.getInternalSrcPort().getPortType()).getSinglePortNumber().getValue() - .intValue()); + ((SinglePortNumber) builder.getInternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); + } + + @Test + public void testReadNat64HighPorts() throws Exception { + when(nat44DumpExecutor.executeDump(mappingEntryId, null)).thenReturn(new Nat44StaticMappingDetailsReplyDump()); + final Nat64BibDetailsReplyDump dumpNat64 = dumpReplyNat64NonEmpty(); + when(nat64DumpExecutor.executeDump(mappingEntryId, null)).thenReturn(dumpNat64); + stubFindDetailsNat64(dumpNat64, 1); + + final MappingEntryBuilder builder = new MappingEntryBuilder(); + getCustomizer().readCurrentAttributes(mappingEntryId, builder, ctx); + + assertEquals(65535, + ((SinglePortNumber) builder.getExternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); + assertEquals(60000, + ((SinglePortNumber) builder.getInternalSrcPort().getPortType()).getSinglePortNumber().getValue() + .intValue()); } @Test @@ -209,11 +240,11 @@ public class MappingEntryCustomizerTest detailsOne.vrfId = NatInstanceCustomizer.DEFAULT_VRF_ID.getId().byteValue(); Nat44StaticMappingDetails detailsTwo = new Nat44StaticMappingDetails(); - detailsTwo.addrOnly = 1; + detailsTwo.addrOnly = 0; detailsTwo.localIpAddress = new byte[]{-64, -88, 2, 3}; - detailsTwo.localPort = 1235; + detailsTwo.localPort = (short) 60000; detailsTwo.externalIpAddress = new byte[]{-64, -88, 2, 5}; - detailsTwo.externalPort = 5874; + detailsTwo.externalPort = (short) 65535; detailsTwo.vrfId = 2; Nat44StaticMappingDetails detailsThree = new Nat44StaticMappingDetails(); @@ -246,9 +277,9 @@ public class MappingEntryCustomizerTest detailsTwo.iAddr = new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, (byte) 0x85, (byte) 0xa3, 0, 0, 0, 0, (byte) 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x02}; - detailsTwo.iPort = 1235; + detailsTwo.iPort = (short) 60000; detailsTwo.oAddr = new byte[]{-64, -88, 64, 2}; - detailsTwo.oPort = 5874; + detailsTwo.oPort = (short) 65535; detailsTwo.vrfId = 2; Nat64BibDetails detailsThree = new Nat64BibDetails(); @@ -264,4 +295,18 @@ public class MappingEntryCustomizerTest replyDump.nat64BibDetails = Arrays.asList(detailsOne, detailsTwo, detailsThree); return replyDump; } + + private void stubFindDetailsNat44(final Nat44StaticMappingDetailsReplyDump dumpNat44, final int index) { + when(mappingContext + .findDetailsNat44(dumpNat44.nat44StaticMappingDetails, NatInstanceCustomizer.DEFAULT_VRF_ID.getId(), + NAT_MAPPING_ID, ctx.getMappingContext())) + .thenReturn(Optional.of(dumpNat44.nat44StaticMappingDetails.get(index))); + } + + private void stubFindDetailsNat64(final Nat64BibDetailsReplyDump dumpNat64, final int index) { + when(mappingContext + .findDetailsNat64(dumpNat64.nat64BibDetails, NatInstanceCustomizer.DEFAULT_VRF_ID.getId(), + NAT_MAPPING_ID, ctx.getMappingContext())) + .thenReturn(Optional.of(dumpNat64.nat64BibDetails.get(index))); + } }
\ No newline at end of file |