aboutgitcodebugslistschat
path: root/udp.c
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2024-10-03 16:51:08 +0200
committerStefano Brivio <sbrivio@redhat.com>2024-10-04 14:51:13 +0200
commit151dbe0d3d3690978a0a5cf3b8fa9808bd708668 (patch)
tree0f0b3daf785a837b8648b55b3ad2fa6ea5aad7f0 /udp.c
parent3d484aa370902873bd42a434fa856b9ee3eac228 (diff)
downloadpasst-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.tar
passt-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.tar.gz
passt-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.tar.bz2
passt-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.tar.lz
passt-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.tar.xz
passt-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.tar.zst
passt-151dbe0d3d3690978a0a5cf3b8fa9808bd708668.zip
udp: Update UDP checksum using an iovec array
As for tcp_update_check_tcp4()/tcp_update_check_tcp6(), change csum_udp4() and csum_udp6() to use an iovec array. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'udp.c')
-rw-r--r--udp.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/udp.c b/udp.c
index 08faaec..100610f 100644
--- a/udp.c
+++ b/udp.c
@@ -321,10 +321,15 @@ static size_t udp_update_hdr4(struct iphdr *ip4h, struct udp_payload_t *bp,
bp->uh.source = htons(toside->oport);
bp->uh.dest = htons(toside->eport);
bp->uh.len = htons(l4len);
- if (no_udp_csum)
+ if (no_udp_csum) {
bp->uh.check = 0;
- else
- csum_udp4(&bp->uh, *src, *dst, bp->data, dlen);
+ } else {
+ const struct iovec iov = {
+ .iov_base = bp->data,
+ .iov_len = dlen
+ };
+ csum_udp4(&bp->uh, *src, *dst, &iov, 1, 0);
+ }
return l4len;
}
@@ -363,8 +368,12 @@ static size_t udp_update_hdr6(struct ipv6hdr *ip6h, struct udp_payload_t *bp,
*/
bp->uh.check = 0xffff;
} else {
+ const struct iovec iov = {
+ .iov_base = bp->data,
+ .iov_len = dlen
+ };
csum_udp6(&bp->uh, &toside->oaddr.a6, &toside->eaddr.a6,
- bp->data, dlen);
+ &iov, 1, 0);
}
return l4len;