aboutgitcodebugslistschat
path: root/tcp.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-11-27 14:54:05 +1100
committerStefano Brivio <sbrivio@redhat.com>2024-11-28 14:03:16 +0100
commit67151090bc349d9eec5a0b303d0cb3347b755251 (patch)
tree4e03fce4394192bb30056e9a91921eb7c5e3beba /tcp.c
parentf9311031713ab8f18e9c872a42a8f6a9935954ec (diff)
downloadpasst-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.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/tcp.c b/tcp.c
index 61c12a5..f334ca5 100644
--- a/tcp.c
+++ b/tcp.c
@@ -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);
}
/**