From fc3b8b8ad08d2d4cc375149ecdc10c37d4a80940 Mon Sep 17 00:00:00 2001 From: Kingwel Xie Date: Wed, 10 Oct 2018 20:51:59 -0400 Subject: pg: udp length & checsum issue 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 --- src/vnet/udp/udp_pg.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/vnet/udp') diff --git a/src/vnet/udp/udp_pg.c b/src/vnet/udp/udp_pg.c index c9d8d38ca4a..a81a9d2ed40 100644 --- a/src/vnet/udp/udp_pg.c +++ b/src/vnet/udp/udp_pg.c @@ -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) -- cgit 1.2.3-korg