aboutgitcodebugslistschat
path: root/tcp_internal.h
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2024-10-03 16:51:04 +0200
committerStefano Brivio <sbrivio@redhat.com>2024-10-04 14:50:46 +0200
commit72e7d3024b037afe2cb00c772eea0807286633bd (patch)
treefb024c0637e8fa7d8e74fb2564e2e55a401117f7 /tcp_internal.h
parentdef8acdcd846582df5939446be0d73d50971ab18 (diff)
downloadpasst-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.h29
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,