In tcp_splice_conn_from_sock(), the 'port' variable stores the source port of the connection on the originating side. In tcp_splice_new(), called directly from it, the 'port' parameter gives the _destination_ port of the originating connection and is then updated to the destination port of the connection on the other side. Similarly, in tcp_splice_conn_from_sock(), 's' is the fd of the accetped socket (on side 0), whereas in tcp_splice_new(), 's' is the fd of the connecting socket (side 1). I, for one, find having the same variable name with different meanings in such close proximity in the flow of control pretty confusing. Alter the names for greater specificity and clarity. Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au> --- tcp_splice.c | 40 ++++++++++++++++++++-------------------- tcp_splice.h | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/tcp_splice.c b/tcp_splice.c index 16be0c59..bdabe411 100644 --- a/tcp_splice.c +++ b/tcp_splice.c @@ -378,29 +378,29 @@ static int tcp_splice_connect(const struct ctx *c, struct tcp_splice_conn *conn, * Return: return code from connect() */ static int tcp_splice_new(const struct ctx *c, struct tcp_splice_conn *conn, - in_port_t port, uint8_t pif) + in_port_t dstport, uint8_t pif) { sa_family_t af = CONN_V6(conn) ? AF_INET6 : AF_INET; - int s = -1; + int s1; if (pif == PIF_SPLICE) { - port += c->tcp.fwd_out.delta[port]; + dstport += c->tcp.fwd_out.delta[dstport]; - s = tcp_conn_sock(c, af); + s1 = tcp_conn_sock(c, af); } else { ASSERT(pif == PIF_HOST); - port += c->tcp.fwd_in.delta[port]; + dstport += c->tcp.fwd_in.delta[dstport]; - s = tcp_conn_sock_ns(c, af); + s1 = tcp_conn_sock_ns(c, af); } - if (s < 0) { - warn("Couldn't open connectable socket for splice (%d)", s); - return s; + if (s1 < 0) { + warn("Couldn't open connectable socket for splice (%d)", s1); + return s1; } - return tcp_splice_connect(c, conn, s, port); + return tcp_splice_connect(c, conn, s1, dstport); } /** @@ -408,7 +408,7 @@ static int tcp_splice_new(const struct ctx *c, struct tcp_splice_conn *conn, * @c: Execution context * @ref: epoll reference of listening socket * @conn: connection structure to initialize - * @s: Accepted socket + * @s0: Accepted (side 0) socket * @sa: Peer address of connection * * Return: true if able to create a spliced connection, false otherwise @@ -416,25 +416,25 @@ static int tcp_splice_new(const struct ctx *c, struct tcp_splice_conn *conn, */ bool tcp_splice_conn_from_sock(const struct ctx *c, union tcp_listen_epoll_ref ref, - struct tcp_splice_conn *conn, int s, + struct tcp_splice_conn *conn, int s0, const struct sockaddr *sa) { - union inany_addr aany; - in_port_t port; + union inany_addr src; + in_port_t srcport; ASSERT(c->mode == MODE_PASTA); - inany_from_sockaddr(&aany, &port, sa); - if (!inany_is_loopback(&aany)) + inany_from_sockaddr(&src, &srcport, sa); + if (!inany_is_loopback(&src)) return false; - conn->flags = inany_v4(&aany) ? 0 : SPLICE_V6; + conn->flags = inany_v4(&src) ? 0 : SPLICE_V6; - if (setsockopt(s, SOL_TCP, TCP_QUICKACK, &((int){ 1 }), sizeof(int))) - flow_trace(conn, "failed to set TCP_QUICKACK on %i", s); + if (setsockopt(s0, SOL_TCP, TCP_QUICKACK, &((int){ 1 }), sizeof(int))) + flow_trace(conn, "failed to set TCP_QUICKACK on %i", s0); conn->f.type = FLOW_TCP_SPLICE; - conn->s[0] = s; + conn->s[0] = s0; conn->s[1] = -1; conn->pipe[0][0] = conn->pipe[0][1] = -1; conn->pipe[1][0] = conn->pipe[1][1] = -1; diff --git a/tcp_splice.h b/tcp_splice.h index 18193e4e..d3600807 100644 --- a/tcp_splice.h +++ b/tcp_splice.h @@ -12,7 +12,7 @@ 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, - struct tcp_splice_conn *conn, int s, + struct tcp_splice_conn *conn, int s0, const struct sockaddr *sa); void tcp_splice_init(struct ctx *c); -- 2.43.0