mirror of
https://passt.top/passt
synced 2025-06-16 20:35:33 +02:00
checksum: use csum_ip4_header() in udp.c and tcp.c
We can find the same function to compute the IPv4 header checksum in tcp.c, udp.c and tap.c Use the function defined for tap.c, csum_ip4_header(), but with the code used in tcp.c and udp.c as it doesn't need a fully initialiazed IPv4 header, only protocol, tot_len, saddr and daddr. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-ID: <20240303135114.1023026-7-lvivier@redhat.com> [dwg: Fix weird cppcheck regression; it appears to be a problem in pre-existing code, but somehow this patch is exposing it] Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
e82b4fe5fc
commit
feb4900c25
5 changed files with 27 additions and 46 deletions
24
tcp.c
24
tcp.c
|
@ -935,23 +935,6 @@ static void tcp_sock_set_bufsize(const struct ctx *c, int s)
|
|||
trace("TCP: failed to set SO_SNDBUF to %i", v);
|
||||
}
|
||||
|
||||
/**
|
||||
* tcp_update_check_ip4() - Update IPv4 with variable parts from stored one
|
||||
* @buf: L2 packet buffer with final IPv4 header
|
||||
*/
|
||||
static void tcp_update_check_ip4(struct tcp4_l2_buf_t *buf)
|
||||
{
|
||||
uint32_t sum = L2_BUF_IP4_PSUM(IPPROTO_TCP);
|
||||
|
||||
sum += buf->iph.tot_len;
|
||||
sum += (buf->iph.saddr >> 16) & 0xffff;
|
||||
sum += buf->iph.saddr & 0xffff;
|
||||
sum += (buf->iph.daddr >> 16) & 0xffff;
|
||||
sum += buf->iph.daddr & 0xffff;
|
||||
|
||||
buf->iph.check = (uint16_t)~csum_fold(sum);
|
||||
}
|
||||
|
||||
/**
|
||||
* tcp_update_check_tcp4() - Update TCP checksum from stored one
|
||||
* @buf: L2 packet buffer with final IPv4 header
|
||||
|
@ -1394,10 +1377,9 @@ do { \
|
|||
b->iph.saddr = a4->s_addr;
|
||||
b->iph.daddr = c->ip4.addr_seen.s_addr;
|
||||
|
||||
if (check)
|
||||
b->iph.check = *check;
|
||||
else
|
||||
tcp_update_check_ip4(b);
|
||||
b->iph.check = check ? *check :
|
||||
csum_ip4_header(b->iph.tot_len, IPPROTO_TCP,
|
||||
*a4, c->ip4.addr_seen);
|
||||
|
||||
SET_TCP_HEADER_COMMON_V4_V6(b, conn, seq);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue