aboutgitcodebugslistschat
path: root/tcp.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-02-28 22:25:15 +1100
committerStefano Brivio <sbrivio@redhat.com>2024-02-29 09:48:13 +0100
commitee677e0a42c434787bf02cb715d76612a6550c21 (patch)
treef2203a5ac7771768e9c30d622036f58299e7b99d /tcp.c
parent4c2d923b121329b5366d0053d6b2336ae71bed60 (diff)
downloadpasst-ee677e0a42c434787bf02cb715d76612a6550c21.tar
passt-ee677e0a42c434787bf02cb715d76612a6550c21.tar.gz
passt-ee677e0a42c434787bf02cb715d76612a6550c21.tar.bz2
passt-ee677e0a42c434787bf02cb715d76612a6550c21.tar.lz
passt-ee677e0a42c434787bf02cb715d76612a6550c21.tar.xz
passt-ee677e0a42c434787bf02cb715d76612a6550c21.tar.zst
passt-ee677e0a42c434787bf02cb715d76612a6550c21.zip
tcp_splice: Improve logic deciding when to splice
This makes several tweaks to improve the logic which decides whether we're able to use the splice method for a new connection. * Rather than only calling tcp_splice_conn_from_sock() in pasta mode, we check for pasta mode within it, better localising the checks. * Previously if we got a connection from a non-loopback address we'd always fall back to the "tap" path, even if the connection was on a socket in the namespace. If we did get a non-loopback address on a namespace socket, something has gone wrong and the "tap" path certainly won't be able to handle it. Report the error and close, rather than passing it along to tap. 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.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/tcp.c b/tcp.c
index 91163b8..be62a31 100644
--- a/tcp.c
+++ b/tcp.c
@@ -2737,8 +2737,7 @@ void tcp_listen_handler(struct ctx *c, union epoll_ref ref,
if (s < 0)
goto cancel;
- if (c->mode == MODE_PASTA &&
- tcp_splice_conn_from_sock(c, ref.tcp_listen, flow, s, &sa))
+ if (tcp_splice_conn_from_sock(c, ref.tcp_listen, flow, s, &sa))
return;
tcp_tap_conn_from_sock(c, ref.tcp_listen, flow, s, &sa, now);