diff options
author | Laurent Vivier <lvivier@redhat.com> | 2024-03-06 16:58:36 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-03-06 08:03:47 +0100 |
commit | 7df624e79a450ba6b737b972040d9007ecc61672 (patch) | |
tree | b5b04fd7ad258104870e5dcf2d123578458fa247 /checksum.h | |
parent | feb4900c25deabaf9b54760e40aea5e65499e987 (diff) | |
download | passt-7df624e79a450ba6b737b972040d9007ecc61672.tar passt-7df624e79a450ba6b737b972040d9007ecc61672.tar.gz passt-7df624e79a450ba6b737b972040d9007ecc61672.tar.bz2 passt-7df624e79a450ba6b737b972040d9007ecc61672.tar.lz passt-7df624e79a450ba6b737b972040d9007ecc61672.tar.xz passt-7df624e79a450ba6b737b972040d9007ecc61672.tar.zst passt-7df624e79a450ba6b737b972040d9007ecc61672.zip |
checksum: introduce functions to compute the header part checksum for TCP/UDP
The TCP and UDP checksums are computed using the data in the TCP/UDP
payload but also some informations in the IP header (protocol,
length, source and destination addresses).
We add two functions, proto_ipv4_header_psum() and
proto_ipv6_header_psum(), to compute the checksum of the IP
header part.
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Message-ID: <20240303135114.1023026-8-lvivier@redhat.com>
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.h | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -15,10 +15,15 @@ uint16_t csum_fold(uint32_t sum); uint16_t csum_unaligned(const void *buf, size_t len, uint32_t init); uint16_t csum_ip4_header(uint16_t tot_len, uint8_t protocol, struct in_addr saddr, struct in_addr daddr); +uint32_t proto_ipv4_header_psum(uint16_t tot_len, uint8_t protocol, + struct in_addr saddr, struct in_addr daddr); void csum_udp4(struct udphdr *udp4hr, struct in_addr saddr, struct in_addr daddr, const void *payload, size_t len); void csum_icmp4(struct icmphdr *icmp4hr, const void *payload, size_t len); +uint32_t proto_ipv6_header_psum(uint16_t payload_len, uint8_t protocol, + const struct in6_addr *saddr, + const struct in6_addr *daddr); void csum_udp6(struct udphdr *udp6hr, const struct in6_addr *saddr, const struct in6_addr *daddr, const void *payload, size_t len); |