From 7abd2b0d727b4dad0f92d8c3130931d023e58514 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 19 Oct 2022 11:43:44 +1100 Subject: Add csum_icmp6() helper for calculating ICMPv6 checksums At least two places in passt calculate ICMPv6 checksums, ndp() and tap_ip_send(). Add a helper to handle this calculation in both places. 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 ICMPv6 header and payload to be in separate buffers, although we don't use this yet. Signed-off-by: David Gibson Signed-off-by: Stefano Brivio --- checksum.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'checksum.h') diff --git a/checksum.h b/checksum.h index 5418406..d7daabf 100644 --- a/checksum.h +++ b/checksum.h @@ -6,9 +6,14 @@ #ifndef CHECKSUM_H #define CHECKSUM_H +struct icmp6hdr; + 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_icmp6(struct icmp6hdr *icmp6hr, + const struct in6_addr *saddr, const struct in6_addr *daddr, + const void *payload, size_t len); void csum_tcp4(struct iphdr *iph); uint16_t csum(const void *buf, size_t len, uint32_t init); -- cgit v1.2.3