aboutgitcodebugslistschat
path: root/checksum.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-10-19 11:43:46 +1100
committerStefano Brivio <sbrivio@redhat.com>2022-10-19 03:34:29 +0200
commit6905ac75ec6643fbc93963ad9ded4903e8eeebf0 (patch)
tree114e6e04a4d849fce5972d9cec15be3f918d68c8 /checksum.h
parent67ab6171729cfcf7867cbb92a2099d88d86f6e6b (diff)
downloadpasst-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.tar
passt-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.tar.gz
passt-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.tar.bz2
passt-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.tar.lz
passt-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.tar.xz
passt-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.tar.zst
passt-6905ac75ec6643fbc93963ad9ded4903e8eeebf0.zip
Add csum_udp6() helper for calculating UDP over IPv6 checksums
Add a helper for calculating UDP checksums when used over IPv6 For future flexibility, the new helper takes parameters for the fields in the IPv6 pseudo-header, so an IPv6 header or pseudo-header doesn't need to be explicitly constructed. It also allows the UDP header and payload to be in separate buffers, although we don't use this yet. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'checksum.h')
-rw-r--r--checksum.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/checksum.h b/checksum.h
index bf0620f..2bb2ff9 100644
--- a/checksum.h
+++ b/checksum.h
@@ -6,6 +6,7 @@
#ifndef CHECKSUM_H
#define CHECKSUM_H
+struct udphdr;
struct icmphdr;
struct icmp6hdr;
@@ -13,6 +14,9 @@ uint32_t sum_16b(const void *buf, size_t len);
uint16_t csum_fold(uint32_t sum);
uint16_t csum_unaligned(const void *buf, size_t len, uint32_t init);
void csum_icmp4(struct icmphdr *ih, const void *payload, size_t len);
+void csum_udp6(struct udphdr *udp6hr,
+ const struct in6_addr *saddr, const struct in6_addr *daddr,
+ const void *payload, size_t len);
void csum_icmp6(struct icmp6hdr *icmp6hr,
const struct in6_addr *saddr, const struct in6_addr *daddr,
const void *payload, size_t len);