diff options
author | Juraj Sloboda <jsloboda@cisco.com> | 2018-09-26 14:25:32 +0200 |
---|---|---|
committer | Juraj Sloboda <jsloboda@cisco.com> | 2018-10-02 09:00:09 +0000 |
commit | 8f39d55a298e08ac808da6988032f14d542627c6 (patch) | |
tree | 4079d1187ee9fe5428388ec88b5e61b9af6b4db7 /src | |
parent | ef91534e665cf343af2389df11d46559a1f83d78 (diff) |
Update code to compute checksum for buffer chains
Compute ICMP checksum for buffer chains
Fix checksum function for buffer chains
Change-Id: I39b845b94a63c3ab5fc9f6f9ab36cadbc67c104f
Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
Diffstat (limited to 'src')
-rwxr-xr-x | src/plugins/nat/in2out.c | 8 | ||||
-rwxr-xr-x | src/plugins/nat/out2in.c | 8 | ||||
-rw-r--r-- | src/vnet/ip/ip.h | 2 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/plugins/nat/in2out.c b/src/plugins/nat/in2out.c index 53aca8b5773..b6106505331 100755 --- a/src/plugins/nat/in2out.c +++ b/src/plugins/nat/in2out.c @@ -632,9 +632,11 @@ icmp_in2out (snat_main_t * sm, if (PREDICT_TRUE (!ip4_is_fragment (ip0))) { - sum0 = ip_incremental_checksum (0, icmp0, - ntohs (ip0->length) - - ip4_header_bytes (ip0)); + sum0 = ip_incremental_checksum_buffer (sm->vlib_main, b0, (u8 *) icmp0 - + (u8 *) + vlib_buffer_get_current (b0), + ntohs (ip0->length) - + ip4_header_bytes (ip0), 0); checksum0 = ~ip_csum_fold (sum0); if (PREDICT_FALSE (checksum0 != 0 && checksum0 != 0xffff)) { diff --git a/src/plugins/nat/out2in.c b/src/plugins/nat/out2in.c index 985333fc765..67d831a850c 100755 --- a/src/plugins/nat/out2in.c +++ b/src/plugins/nat/out2in.c @@ -508,9 +508,11 @@ icmp_out2in (snat_main_t * sm, if (PREDICT_TRUE (!ip4_is_fragment (ip0))) { - sum0 = ip_incremental_checksum (0, icmp0, - ntohs (ip0->length) - - ip4_header_bytes (ip0)); + sum0 = ip_incremental_checksum_buffer (sm->vlib_main, b0, (u8 *) icmp0 - + (u8 *) + vlib_buffer_get_current (b0), + ntohs (ip0->length) - + ip4_header_bytes (ip0), 0); checksum0 = ~ip_csum_fold (sum0); if (checksum0 != 0 && checksum0 != 0xffff) { diff --git a/src/vnet/ip/ip.h b/src/vnet/ip/ip.h index 50965d411e6..b114fcbaaf6 100644 --- a/src/vnet/ip/ip.h +++ b/src/vnet/ip/ip.h @@ -162,7 +162,7 @@ ip_incremental_checksum_buffer (vlib_main_t * vm, void *h; u32 n; - n = clib_min (n_bytes_left, b->current_length); + n = clib_min (n_bytes_left, b->current_length - first_buffer_offset); h = vlib_buffer_get_current (b) + first_buffer_offset; sum = ip_incremental_checksum (sum, h, n); if (PREDICT_FALSE (b->flags & VLIB_BUFFER_NEXT_PRESENT)) |