diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-05-01 16:53:44 +1000 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-05-02 16:13:03 +0200 |
commit | c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d (patch) | |
tree | 2ce92b2afebeb7f7af6d21066e5e38a3c98cf315 | |
parent | 76e32022c4085952eea119fa69976c8bccf2710c (diff) | |
download | passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.tar passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.tar.gz passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.tar.bz2 passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.tar.lz passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.tar.xz passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.tar.zst passt-c27ca9156422bdf2ecdcbf9e1fe06a702a7e288d.zip |
checksum: Use proto_ipv6_header_psum() for ICMPv6 as well
7df624e79 ("checksum: introduce functions to compute the header part
checksum for TCP/UDP") introduced a helper to compute the partial checksum
for the IPv6 pseudo-header used in L4 protocol checksums. It used it in
csum_udp6() for UDP packets, but not in csum_icmp6() for the identical
calculation in csum_icmp6() for ICMPv6 packets.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | checksum.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -253,10 +253,8 @@ void csum_icmp6(struct icmp6hdr *icmp6hr, const struct in6_addr *saddr, const struct in6_addr *daddr, const void *payload, size_t len) { - /* Partial checksum for the pseudo-IPv6 header */ - uint32_t psum = sum_16b(saddr, sizeof(*saddr)) + - sum_16b(daddr, sizeof(*daddr)) + - htons(len + sizeof(*icmp6hr)) + htons(IPPROTO_ICMPV6); + uint32_t psum = proto_ipv6_header_psum(len + sizeof(*icmp6hr), + IPPROTO_ICMPV6, saddr, daddr); icmp6hr->icmp6_cksum = 0; /* Add in partial checksum for the ICMPv6 header alone */ |