aboutgitcodebugslistschat
path: root/tap.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-10-19 11:43:47 +1100
committerStefano Brivio <sbrivio@redhat.com>2022-10-19 03:34:32 +0200
commitbd4be308fc92ed5d75ea45364a9f837d5c0fb0b2 (patch)
treeeaaaedcbf8e01177e072bb0dd168897a0cbb56ff /tap.c
parent6905ac75ec6643fbc93963ad9ded4903e8eeebf0 (diff)
downloadpasst-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.tar
passt-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.tar.gz
passt-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.tar.bz2
passt-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.tar.lz
passt-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.tar.xz
passt-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.tar.zst
passt-bd4be308fc92ed5d75ea45364a9f837d5c0fb0b2.zip
Add csum_udp4() helper for calculating UDP over IPv4 checksums
At least two places in passt fill in UDP over IPv4 checksums, although since UDP checksums are optional with IPv4 that just amounts to storing a 0 (in tap_ip_send()) or leaving a 0 from an earlier initialization (in dhcp()). For consistency, add a helper for this "calculation". Just for the heck of it, add the option (compile time disabled for now) to calculate real UDP checksums. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.c')
-rw-r--r--tap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/tap.c b/tap.c
index 9c197cb..58fc1de 100644
--- a/tap.c
+++ b/tap.c
@@ -145,7 +145,7 @@ void tap_ip_send(const struct ctx *c, const struct in6_addr *src, uint8_t proto,
} else if (iph->protocol == IPPROTO_UDP) {
struct udphdr *uh = (struct udphdr *)(iph + 1);
- uh->check = 0;
+ csum_udp4(uh, iph->saddr, iph->daddr, uh + 1, len - sizeof(*uh));
} else if (iph->protocol == IPPROTO_ICMP) {
struct icmphdr *ih = (struct icmphdr *)(iph + 1);
csum_icmp4(ih, ih + 1, len - sizeof(*ih));