aboutgitcodebugslistschat
path: root/tcp_conn.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-08-22 15:29:58 +1000
committerStefano Brivio <sbrivio@redhat.com>2023-08-22 12:15:36 +0200
commitb60fa33eeafbe2d73d3a4cb6586dd4d637751fa7 (patch)
tree8be1d614dad751b9bb746944eee48ec9e5c3d8b6 /tcp_conn.h
parent955dd3251c9e9b0a1469015748e4600f68e8de0a (diff)
downloadpasst-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.tar
passt-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.tar.gz
passt-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.tar.bz2
passt-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.tar.lz
passt-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.tar.xz
passt-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.tar.zst
passt-b60fa33eeafbe2d73d3a4cb6586dd4d637751fa7.zip
tcp: Move in_epoll flag out of common connection structure
The in_epoll boolean is one of only two fields (currently) in the common structure shared between tap and spliced connections. It seems like it belongs there, because both tap and spliced connections use it, and it has roughly the same meaning. Roughly, however, isn't exactly: which fds this flag says are in the epoll varies between the two connection types, and are in type specific fields. So, it's only possible to meaningfully use this value locally in type specific code anyway. This common field is going to get in the way of more widespread generalisation of connection / flow tracking, so move it to separate fields in the tap and splice specific structures. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp_conn.h')
-rw-r--r--tcp_conn.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/tcp_conn.h b/tcp_conn.h
index e533bd4..d67ea62 100644
--- a/tcp_conn.h
+++ b/tcp_conn.h
@@ -12,11 +12,9 @@
/**
* struct tcp_conn_common - Common fields for spliced and non-spliced
* @spliced: Is this a spliced connection?
- * @in_epoll: Is the connection in the epoll set?
*/
struct tcp_conn_common {
bool spliced :1;
- bool in_epoll :1;
};
extern const char *tcp_common_flag_str[];
@@ -24,6 +22,7 @@ extern const char *tcp_common_flag_str[];
/**
* struct tcp_tap_conn - Descriptor for a TCP connection (not spliced)
* @c: Fields common with tcp_splice_conn
+ * @in_epoll: Is the connection in the epoll set?
* @next_index: Connection index of next item in hash chain, -1 for none
* @tap_mss: MSS advertised by tap/guest, rounded to 2 ^ TCP_MSS_BITS
* @sock: Socket descriptor number
@@ -50,6 +49,7 @@ struct tcp_tap_conn {
/* Must be first element to match tcp_splice_conn */
struct tcp_conn_common c;
+ bool in_epoll :1;
int next_index :TCP_CONN_INDEX_BITS + 2;
#define TCP_RETRANS_BITS 3
@@ -122,6 +122,7 @@ struct tcp_tap_conn {
/**
* struct tcp_splice_conn - Descriptor for a spliced TCP connection
* @c: Fields common with tcp_tap_conn
+ * @in_epoll: Is the connection in the epoll set?
* @a: File descriptor number of socket for accepted connection
* @pipe_a_b: Pipe ends for splice() from @a to @b
* @b: File descriptor number of peer connected socket
@@ -137,6 +138,7 @@ struct tcp_splice_conn {
/* Must be first element to match tcp_tap_conn */
struct tcp_conn_common c;
+ bool in_epoll :1;
int a;
int pipe_a_b[2];
int b;