From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 13CBD5A02D1 for ; Tue, 14 May 2024 03:03:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1715648621; bh=rcm98VVJZ0EQ/v6+ERE551rihrjDoZZAKXPyUFfHdcg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ND1aMgsZxvC2tEQ3w8oSioouVRfxTWYCdEW5t2eFCoSRpHtNuJk5vBcWJ250yftTt p4iZh4TIsRJaD/aIfyOaeQ3l5HEj2LEBuhGOjuCXDqLMlSFYrFMTtJgceMC53Lhkw2 CYnA5AF1XLMehMC9VYBHGiSk8ushGO6xpVOlfA3Ucb3P9FDkkSY0octCIl2GDaQSWj mK6gGplE5q5ilGoUlZ8pqB090H4FJTjOBiZ6crPmEa1jgGtWUYxd05W8CCgkyPmt3u xIZG/MMkChBJPMIgU5fcPljnlnZq7us6C7wstfUsxqS2ueMJ6w5P1/Ul59gH2JoUAh SG68sJBVCUN7A== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4VddQj6skhz4wyw; Tue, 14 May 2024 11:03:41 +1000 (AEST) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH v5 04/19] tcp: Remove interim 'tapside' field from connection Date: Tue, 14 May 2024 11:03:22 +1000 Message-ID: <20240514010337.1104606-5-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240514010337.1104606-1-david@gibson.dropbear.id.au> References: <20240514010337.1104606-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: CFY5BAQJTMRCW5DPTPO3VW62TOZJNQPG X-Message-ID-Hash: CFY5BAQJTMRCW5DPTPO3VW62TOZJNQPG X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: We recently introduced this field to keep track of which side of a TCP flow is the guest/tap facing one. Now that we generically record which pif each side of each flow is connected to, we can easily derive that, and no longer need to keep track of it explicitly. Signed-off-by: David Gibson --- tcp.c | 12 ++++++------ tcp_conn.h | 2 -- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/tcp.c b/tcp.c index 48aae30..3895f3f 100644 --- a/tcp.c +++ b/tcp.c @@ -368,6 +368,8 @@ #define OPT_SACK 5 #define OPT_TS 8 +#define TAPSIDE(conn_) ((conn_)->f.pif[1] == PIF_TAP) + #define CONN_V4(conn) (!!inany_v4(&(conn)->faddr)) #define CONN_V6(conn) (!CONN_V4(conn)) #define CONN_IS_CLOSING(conn) \ @@ -577,7 +579,7 @@ static int tcp_epoll_ctl(const struct ctx *c, struct tcp_tap_conn *conn) { int m = conn->in_epoll ? EPOLL_CTL_MOD : EPOLL_CTL_ADD; union epoll_ref ref = { .type = EPOLL_TYPE_TCP, .fd = conn->sock, - .flowside = FLOW_SIDX(conn, !conn->tapside), }; + .flowside = FLOW_SIDX(conn, !TAPSIDE(conn)), }; struct epoll_event ev = { .data.u64 = ref.u64 }; if (conn->events == CLOSED) { @@ -1130,8 +1132,8 @@ static uint64_t tcp_conn_hash(const struct ctx *c, static inline unsigned tcp_hash_probe(const struct ctx *c, const struct tcp_tap_conn *conn) { - flow_sidx_t sidx = FLOW_SIDX(conn, conn->tapside); unsigned b = tcp_conn_hash(c, conn) % TCP_HASH_TABLE_SIZE; + flow_sidx_t sidx = FLOW_SIDX(conn, TAPSIDE(conn)); /* Linear probing */ while (!flow_sidx_eq(tc_hash[b], FLOW_SIDX_NONE) && @@ -1150,7 +1152,7 @@ static void tcp_hash_insert(const struct ctx *c, struct tcp_tap_conn *conn) { unsigned b = tcp_hash_probe(c, conn); - tc_hash[b] = FLOW_SIDX(conn, conn->tapside); + tc_hash[b] = FLOW_SIDX(conn, TAPSIDE(conn)); flow_dbg(conn, "hash table insert: sock %i, bucket: %u", conn->sock, b); } @@ -2006,7 +2008,6 @@ static void tcp_conn_from_tap(struct ctx *c, sa_family_t af, flow_forward(flow, PIF_HOST); conn = FLOW_SET_TYPE(flow, FLOW_TCP, tcp); - conn->tapside = INISIDE; conn->sock = s; conn->timer = -1; conn_event(c, conn, TAP_SYN_RCVD); @@ -2730,7 +2731,6 @@ static void tcp_tap_conn_from_sock(struct ctx *c, in_port_t dstport, flow_forward(flow, PIF_TAP); conn = FLOW_SET_TYPE(flow, FLOW_TCP, tcp); - conn->tapside = FWDSIDE; conn->sock = s; conn->timer = -1; conn->ws_to_tap = conn->ws_from_tap = 0; @@ -2889,7 +2889,7 @@ void tcp_sock_handler(struct ctx *c, union epoll_ref ref, uint32_t events) struct tcp_tap_conn *conn = CONN(ref.flowside.flow); ASSERT(conn->f.type == FLOW_TCP); - ASSERT(ref.flowside.side == !conn->tapside); + ASSERT(conn->f.pif[ref.flowside.side] != PIF_TAP); if (conn->events == CLOSED) return; diff --git a/tcp_conn.h b/tcp_conn.h index 5df0076..1a07dd5 100644 --- a/tcp_conn.h +++ b/tcp_conn.h @@ -13,7 +13,6 @@ * struct tcp_tap_conn - Descriptor for a TCP connection (not spliced) * @f: Generic flow information * @in_epoll: Is the connection in the epoll set? - * @tapside: Which side of the flow faces the tap/guest interface * @tap_mss: MSS advertised by tap/guest, rounded to 2 ^ TCP_MSS_BITS * @sock: Socket descriptor number * @events: Connection events, implying connection states @@ -40,7 +39,6 @@ struct tcp_tap_conn { struct flow_common f; bool in_epoll :1; - unsigned tapside :1; #define TCP_RETRANS_BITS 3 unsigned int retrans :TCP_RETRANS_BITS; -- 2.45.0