diff options
author | Laurent Vivier <lvivier@redhat.com> | 2024-10-03 16:51:04 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-10-04 14:50:46 +0200 |
commit | 72e7d3024b037afe2cb00c772eea0807286633bd (patch) | |
tree | fb024c0637e8fa7d8e74fb2564e2e55a401117f7 /tcp_internal.h | |
parent | def8acdcd846582df5939446be0d73d50971ab18 (diff) | |
download | passt-72e7d3024b037afe2cb00c772eea0807286633bd.tar passt-72e7d3024b037afe2cb00c772eea0807286633bd.tar.gz passt-72e7d3024b037afe2cb00c772eea0807286633bd.tar.bz2 passt-72e7d3024b037afe2cb00c772eea0807286633bd.tar.lz passt-72e7d3024b037afe2cb00c772eea0807286633bd.tar.xz passt-72e7d3024b037afe2cb00c772eea0807286633bd.tar.zst passt-72e7d3024b037afe2cb00c772eea0807286633bd.zip |
tcp: Use tcp_payload_t rather than tcphdr
As tcp_update_check_tcp4() and tcp_update_check_tcp6() compute the
checksum using the TCP header and the TCP payload, it is clearer
to use a pointer to tcp_payload_t that includes tcphdr and payload
rather than a pointer to tcphdr (and guessing TCP header is
followed by the payload).
Move tcp_payload_t and tcp_flags_t to tcp_internal.h.
(They will be used also by vhost-user).
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp_internal.h')
-rw-r--r-- | tcp_internal.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tcp_internal.h b/tcp_internal.h index de06db1..2f74ffe 100644 --- a/tcp_internal.h +++ b/tcp_internal.h @@ -63,6 +63,35 @@ enum tcp_iov_parts { TCP_NUM_IOVS }; +/** + * struct tcp_payload_t - TCP header and data to send segments with payload + * @th: TCP header + * @data: TCP data + */ +struct tcp_payload_t { + struct tcphdr th; + uint8_t data[IP_MAX_MTU - sizeof(struct tcphdr)]; +#ifdef __AVX2__ +} __attribute__ ((packed, aligned(32))); /* For AVX2 checksum routines */ +#else +} __attribute__ ((packed, aligned(__alignof__(unsigned int)))); +#endif + +/** + * struct tcp_flags_t - TCP header and data to send zero-length + * segments (flags) + * @th: TCP header + * @opts TCP options + */ +struct tcp_flags_t { + struct tcphdr th; + char opts[OPT_MSS_LEN + OPT_WS_LEN + 1]; +#ifdef __AVX2__ +} __attribute__ ((packed, aligned(32))); +#else +} __attribute__ ((packed, aligned(__alignof__(unsigned int)))); +#endif + extern char tcp_buf_discard [MAX_WINDOW]; void conn_flag_do(const struct ctx *c, struct tcp_tap_conn *conn, |