aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--tcp.c12
-rw-r--r--tcp_splice.c12
-rw-r--r--tcp_splice.h5
3 files changed, 16 insertions, 13 deletions
diff --git a/tcp.c b/tcp.c
index be62a31..b4d7eec 100644
--- a/tcp.c
+++ b/tcp.c
@@ -2679,14 +2679,13 @@ static void tcp_snat_inbound(const struct ctx *c, union inany_addr *addr)
/**
* tcp_tap_conn_from_sock() - Initialize state for non-spliced connection
* @c: Execution context
- * @ref: epoll reference of listening socket
+ * @dstport: Destination port for connection (host side)
* @flow: flow to initialise
* @s: Accepted socket
* @sa: Peer socket address (from accept())
* @now: Current timestamp
*/
-static void tcp_tap_conn_from_sock(struct ctx *c,
- union tcp_listen_epoll_ref ref,
+static void tcp_tap_conn_from_sock(struct ctx *c, in_port_t dstport,
union flow *flow, int s,
const union sockaddr_inany *sa,
const struct timespec *now)
@@ -2699,7 +2698,7 @@ static void tcp_tap_conn_from_sock(struct ctx *c,
conn_event(c, conn, SOCK_ACCEPTED);
inany_from_sockaddr(&conn->faddr, &conn->fport, sa);
- conn->eport = ref.port + c->tcp.fwd_in.delta[ref.port];
+ conn->eport = dstport + c->tcp.fwd_in.delta[dstport];
tcp_snat_inbound(c, &conn->faddr);
@@ -2737,10 +2736,11 @@ void tcp_listen_handler(struct ctx *c, union epoll_ref ref,
if (s < 0)
goto cancel;
- if (tcp_splice_conn_from_sock(c, ref.tcp_listen, flow, s, &sa))
+ if (tcp_splice_conn_from_sock(c, ref.tcp_listen.pif,
+ ref.tcp_listen.port, flow, s, &sa))
return;
- tcp_tap_conn_from_sock(c, ref.tcp_listen, flow, s, &sa, now);
+ tcp_tap_conn_from_sock(c, ref.tcp_listen.port, flow, s, &sa, now);
return;
cancel:
diff --git a/tcp_splice.c b/tcp_splice.c
index 45b9b29..4957abb 100644
--- a/tcp_splice.c
+++ b/tcp_splice.c
@@ -413,7 +413,8 @@ static int tcp_conn_sock_ns(const struct ctx *c, sa_family_t af)
/**
* tcp_splice_conn_from_sock() - Attempt to init state for a spliced connection
* @c: Execution context
- * @ref: epoll reference of listening socket
+ * @pif0: pif id of side 0
+ * @dstport: Side 0 destination port of connection
* @flow: flow to initialise
* @s0: Accepted (side 0) socket
* @sa: Peer address of connection
@@ -422,12 +423,13 @@ static int tcp_conn_sock_ns(const struct ctx *c, sa_family_t af)
* #syscalls:pasta setsockopt
*/
bool tcp_splice_conn_from_sock(const struct ctx *c,
- union tcp_listen_epoll_ref ref, union flow *flow,
- int s0, const union sockaddr_inany *sa)
+ uint8_t pif0, in_port_t dstport,
+ union flow *flow, int s0,
+ const union sockaddr_inany *sa)
{
- in_port_t srcport, dstport = ref.port;
struct tcp_splice_conn *conn;
union inany_addr src;
+ in_port_t srcport;
sa_family_t af;
uint8_t pif1;
@@ -437,7 +439,7 @@ bool tcp_splice_conn_from_sock(const struct ctx *c,
inany_from_sockaddr(&src, &srcport, sa);
af = inany_v4(&src) ? AF_INET : AF_INET6;
- switch (ref.pif) {
+ switch (pif0) {
case PIF_SPLICE:
if (!inany_is_loopback(&src)) {
char str[INANY_ADDRSTRLEN];
diff --git a/tcp_splice.h b/tcp_splice.h
index d0c6ff7..ed8f0c5 100644
--- a/tcp_splice.h
+++ b/tcp_splice.h
@@ -12,8 +12,9 @@ union sockaddr_inany;
void tcp_splice_sock_handler(struct ctx *c, union epoll_ref ref,
uint32_t events);
bool tcp_splice_conn_from_sock(const struct ctx *c,
- union tcp_listen_epoll_ref ref, union flow *flow,
- int s0, const union sockaddr_inany *sa);
+ uint8_t pif0, in_port_t dstport,
+ union flow *flow, int s0,
+ const union sockaddr_inany *sa);
void tcp_splice_init(struct ctx *c);
#endif /* TCP_SPLICE_H */