summaryrefslogtreecommitdiffstats
path: root/src/vnet/interface_output.c
diff options
context:
space:
mode:
authorSteven Luong <sluong@cisco.com>2020-01-27 10:37:56 -0800
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-08-12 15:59:46 +0000
commitb29ebcad592a0835324728e49f329e01904b6900 (patch)
tree1f757cbbf3178a784122216b11cbb2ef0a82bfe1 /src/vnet/interface_output.c
parent7e8cd07b1f2b859847b050ab64e37955a04f90f9 (diff)
interface: Add missing ip4 udp->checksum = 0 prior to computing checksum
For ip4 tcp, ip6 tcp, and ip6 udp packet, we set checksum = 0 prior to computing the checksum. We missed ip4 udp case. This oversight requires all clients to set udp->checksum = 0 if ip4 udp checksum offload is needed. Type: fix Signed-off-by: Steven Luong <sluong@cisco.com> Change-Id: Ic608811e82099f3bec469e123671e9b281f38d76 (cherry picked from commit 03328ec8bb86b93fa70bb6b2a9b37c40e686a1f7)
Diffstat (limited to 'src/vnet/interface_output.c')
-rw-r--r--src/vnet/interface_output.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c
index ec92c38edc6..549ed91676f 100644
--- a/src/vnet/interface_output.c
+++ b/src/vnet/interface_output.c
@@ -204,7 +204,10 @@ calc_checksums (vlib_main_t * vm, vlib_buffer_t * b)
th->checksum = ip4_tcp_udp_compute_checksum (vm, b, ip4);
}
else if (b->flags & VNET_BUFFER_F_OFFLOAD_UDP_CKSUM)
- uh->checksum = ip4_tcp_udp_compute_checksum (vm, b, ip4);
+ {
+ uh->checksum = 0;
+ uh->checksum = ip4_tcp_udp_compute_checksum (vm, b, ip4);
+ }
}
else if (is_ip6)
{