X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Ficmp4.c;h=a598ca9f174e8c431a67d663ae5a8933aed40680;hb=a91866fc1fd673a5edab6e3cb61bd41b8ea3def7;hp=3626e96305bb7d838e3b858ffe1e170718cae67e;hpb=49cd3bad66cba83f0364d94ed34de2457694f545;p=vpp.git diff --git a/src/vnet/ip/icmp4.c b/src/vnet/ip/icmp4.c index 3626e96305b..a598ca9f174 100644 --- a/src/vnet/ip/icmp4.c +++ b/src/vnet/ip/icmp4.c @@ -653,7 +653,13 @@ icmp4_pg_edit_function (pg_main_t * pg, ASSERT (p0->current_data == 0); ip0 = (void *) (p0->data + ip_offset); icmp0 = (void *) (p0->data + icmp_offset); - len0 = clib_net_to_host_u16 (ip0->length) - ip4_header_bytes (ip0); + + /* if IP length has been specified, then calculate the length based on buffer */ + if (ip0->length == 0) + len0 = vlib_buffer_length_in_chain (vm, p0) - icmp_offset; + else + len0 = clib_net_to_host_u16 (ip0->length) - icmp_offset; + icmp0->checksum = ~ip_csum_fold (ip_incremental_checksum (0, icmp0, len0)); }