aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Luong <sluong@cisco.com>2020-01-27 10:37:56 -0800
committerDamjan Marion <dmarion@me.com>2020-01-27 20:42:43 +0000
commit03328ec8bb86b93fa70bb6b2a9b37c40e686a1f7 (patch)
treeb7ab5d60102a8127fad4bbf44027332791a45fd8
parent14053c9dbd75182f5302f7388d17508f3930f7ce (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
-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 73c7a31f010..eadee692919 100644
--- a/src/vnet/interface_output.c
+++ b/src/vnet/interface_output.c
@@ -189,7 +189,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)
{