summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshubing guo <guo.shubing@zte.com.cn>2018-08-30 11:09:49 +0800
committerFlorin Coras <florin.coras@gmail.com>2018-08-31 03:37:41 +0000
commit45478933b21cf1bce028b757e1358936dd08380b (patch)
tree80f9a94f60941d9d451ad6b1b1b2938b5aa6a8cd
parentaea5f39b6448b6dc2bb823f6de704dbd6c4962f5 (diff)
VPP-1407: Fix the wrong length of udp header for buffer chains
Change-Id: I1669faeac15dfb69e335a1e96b6da118dc1892c1 Signed-off-by: shubing guo <guo.shubing@zte.com.cn>
-rw-r--r--src/vnet/udp/udp.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vnet/udp/udp.h b/src/vnet/udp/udp.h
index 0382bc20d64..abf0d686d0a 100644
--- a/src/vnet/udp/udp.h
+++ b/src/vnet/udp/udp.h
@@ -254,12 +254,15 @@ always_inline void *
vlib_buffer_push_udp (vlib_buffer_t * b, u16 sp, u16 dp, u8 offload_csum)
{
udp_header_t *uh;
+ u16 udp_len = sizeof (udp_header_t) + b->current_length;
+ if (PREDICT_FALSE (b->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID))
+ udp_len += b->total_length_not_including_first_buffer;
uh = vlib_buffer_push_uninit (b, sizeof (udp_header_t));
uh->src_port = sp;
uh->dst_port = dp;
uh->checksum = 0;
- uh->length = clib_host_to_net_u16 (b->current_length);
+ uh->length = clib_host_to_net_u16 (udp_len);
if (offload_csum)
{
b->flags |= VNET_BUFFER_F_OFFLOAD_UDP_CKSUM;