diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-11-27 14:54:05 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-11-28 14:03:16 +0100 |
commit | 67151090bc349d9eec5a0b303d0cb3347b755251 (patch) | |
tree | 4e03fce4394192bb30056e9a91921eb7c5e3beba /tcp.c | |
parent | f9311031713ab8f18e9c872a42a8f6a9935954ec (diff) | |
download | passt-67151090bc349d9eec5a0b303d0cb3347b755251.tar passt-67151090bc349d9eec5a0b303d0cb3347b755251.tar.gz passt-67151090bc349d9eec5a0b303d0cb3347b755251.tar.bz2 passt-67151090bc349d9eec5a0b303d0cb3347b755251.tar.lz passt-67151090bc349d9eec5a0b303d0cb3347b755251.tar.xz passt-67151090bc349d9eec5a0b303d0cb3347b755251.tar.zst passt-67151090bc349d9eec5a0b303d0cb3347b755251.zip |
iov, checksum: Replace csum_iov() with csum_iov_tail()
We usually want to checksum only the tail part of a frame, excluding at
least some headers. csum_iov() does that for a frame represented as an
IO vector, not actually summing the entire IO vector. We now have struct
iov_tail to explicitly represent this construct, so replace csum_iov()
with csum_iov_tail() taking that representation rather than 3 parameters.
We propagate the same change to csum_udp4() and csum_udp6() which take
similar parameters. This slightly simplifies the code, and will allow some
further simplifications as struct iov_tail is more widely used.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp.c')
-rw-r--r-- | tcp.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -764,6 +764,7 @@ void tcp_update_check_tcp4(const struct iphdr *iph, size_t l4offset) { uint16_t l4len = ntohs(iph->tot_len) - sizeof(struct iphdr); + struct iov_tail l4 = IOV_TAIL(iov, iov_cnt, l4offset); struct in_addr saddr = { .s_addr = iph->saddr }; struct in_addr daddr = { .s_addr = iph->daddr }; size_t check_ofs; @@ -801,7 +802,7 @@ void tcp_update_check_tcp4(const struct iphdr *iph, check = (uint16_t *)ptr; *check = 0; - *check = csum_iov(iov, iov_cnt, l4offset, sum); + *check = csum_iov_tail(&l4, sum); } /** @@ -815,6 +816,7 @@ void tcp_update_check_tcp6(const struct ipv6hdr *ip6h, const struct iovec *iov, int iov_cnt, size_t l4offset) { + struct iov_tail l4 = IOV_TAIL(iov, iov_cnt, l4offset); uint16_t l4len = ntohs(ip6h->payload_len); size_t check_ofs; uint16_t *check; @@ -852,7 +854,7 @@ void tcp_update_check_tcp6(const struct ipv6hdr *ip6h, check = (uint16_t *)ptr; *check = 0; - *check = csum_iov(iov, iov_cnt, l4offset, sum); + *check = csum_iov_tail(&l4, sum); } /** |