pg: udp length & checsum issue 30/15230/3
authorKingwel Xie <kingwel.xie@ericsson.com>
Thu, 11 Oct 2018 00:51:59 +0000 (20:51 -0400)
committerDamjan Marion <dmarion@me.com>
Tue, 23 Oct 2018 13:20:48 +0000 (13:20 +0000)
if udp length is specified, then use this length to calculate udp checksum
otherwise, use length from vlib_buffer

Change-Id: I5304a60d5d429993d0524b864b65ec503775412d
Signed-off-by: Kingwel Xie <kingwel.xie@ericsson.com>
src/vnet/udp/udp_pg.c

index c9d8d38..a81a9d2 100644 (file)
@@ -68,12 +68,12 @@ udp_pg_edit_function_inline (pg_main_t * pg,
 
       ip0 = (void *) (p0->data + ip_offset);
       udp0 = (void *) (p0->data + udp_offset);
-      udp_len0 = clib_net_to_host_u16 (ip0->length) - sizeof (ip0[0]);
+      udp_len0 = vlib_buffer_length_in_chain (vm, p0) - udp_offset;
 
       if (flags & UDP_PG_EDIT_LENGTH)
-       udp0->length =
-         clib_net_to_host_u16 (vlib_buffer_length_in_chain (vm, p0)
-                               - ip_offset);
+       udp0->length = clib_host_to_net_u16 (udp_len0);
+      else
+       udp_len0 = clib_host_to_net_u16 (udp0->length);
 
       /* Initialize checksum with header. */
       if (flags & UDP_PG_EDIT_CHECKSUM)