From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by passt.top (Postfix) with ESMTPS id DE4585A0056 for ; Fri, 14 Jun 2024 08:14:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1718345632; bh=qsEbIWBtYIE9b2TeNo62xFzJIWTGz8g7v9qGfgb+9Xs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A2lkhFK4ceg7X0prqzDxYDK5LVMGbGTbnoJG24z91zDquti+xZI5YwGZEj49Zhz/o YlJlEgoVrwwJSBP4zjpBcy55Sf8CXUyw9F9Kcz5mFOeE4A/yUv+YJK9Pf9LyICWadX HEv5aOokDTb8HweFm4ahctpSR7jfwxLO5K0WWhiJh4D47573EUwUiGs4UQyisECvol 9irIgLNh4+zsGpAhcS7Zp1CFwTaaDs/YzgS/TbI0jxHUFQUt/UIA0Pn0kJixgjKIHk 8XS94xtjJjVvhlI5nQoa5ayGBzYop28QmKkx9nxlZIyicUTtN7FRQNSvm2rZvDmNEF zdD7yWeADlJ9A== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4W0prJ3c50z4x1Y; Fri, 14 Jun 2024 16:13:52 +1000 (AEST) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH v6 23/26] udp: Remove 'splicesrc' tracking Date: Fri, 14 Jun 2024 16:13:45 +1000 Message-ID: <20240614061348.3814736-24-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240614061348.3814736-1-david@gibson.dropbear.id.au> References: <20240614061348.3814736-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: BEWRXO6CBRAOUTWHBBL2SNIYP6N5TC36 X-Message-ID-Hash: BEWRXO6CBRAOUTWHBBL2SNIYP6N5TC36 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: jmaloy@redhat.com, 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: This field in udp_meta_t was used to work out whether and how we're splicing datagrams. However, that role has been taken over by the flow table, so this field is updated, but never used. Eliminate it. Signed-off-by: David Gibson --- udp.c | 48 ++++++------------------------------------------ 1 file changed, 6 insertions(+), 42 deletions(-) diff --git a/udp.c b/udp.c index 89dc0307..3b30306a 100644 --- a/udp.c +++ b/udp.c @@ -205,7 +205,6 @@ static struct ethhdr udp6_eth_hdr; * @ip4h: Pre-filled IPv4 header (except for tot_len and saddr) * @taph: Tap backend specific header * @s_in: Source socket address, filled in by recvmmsg() - * @splicesrc: Source port for splicing, or -1 if not spliceable * @tosidx: sidx for the destination side of this datagram's flow */ static struct udp_meta_t { @@ -214,7 +213,6 @@ static struct udp_meta_t { struct tap_hdr taph; union sockaddr_inany s_in; - int splicesrc; flow_sidx_t tosidx; } #ifdef __AVX2__ @@ -479,32 +477,6 @@ static int udp_splice_new_ns(void *arg) return 0; } -/** - * udp_mmh_splice_port() - Is source address of message suitable for splicing? - * @uref: UDP epoll reference for incoming message's origin socket - * @mmh: mmsghdr of incoming message - * - * Return: if source address of message in @mmh refers to localhost (127.0.0.1 - * or ::1) its source port (host order), otherwise -1. - */ -static int udp_mmh_splice_port(union udp_epoll_ref uref, - const struct mmsghdr *mmh) -{ - const struct sockaddr_in6 *sa6 = mmh->msg_hdr.msg_name; - const struct sockaddr_in *sa4 = mmh->msg_hdr.msg_name; - - if (!uref.splice) - return -1; - - if (uref.v6 && IN6_IS_ADDR_LOOPBACK(&sa6->sin6_addr)) - return ntohs(sa6->sin6_port); - - if (!uref.v6 && IN4_IS_ADDR_LOOPBACK(&sa4->sin_addr)) - return ntohs(sa4->sin_port); - - return -1; -} - /** * udp_flow_from_sock() - Find or create UDP flow for datagrams from socket * @c: Execution context @@ -610,7 +582,6 @@ static unsigned udp_splice_send(const struct ctx *c, size_t start, size_t n, if (++i >= n) break; - udp_meta[i].splicesrc = udp_mmh_splice_port(uref, &mmh_recv[i]); udp_meta[i].tosidx = udp_flow_from_sock(c, uref, &udp_meta[i]); } while (flow_sidx_eq(udp_meta[i].tosidx, startsidx)); @@ -729,16 +700,12 @@ static unsigned udp_tap_send(const struct ctx *c, size_t start, size_t n, const struct timespec *now) { struct iovec (*tap_iov)[UDP_NUM_IOVS]; - struct mmsghdr *mmh_recv; size_t i = start; - if (uref.v6) { + if (uref.v6) tap_iov = udp6_l2_iov_tap; - mmh_recv = udp6_l2_mh_sock; - } else { - mmh_recv = udp4_l2_mh_sock; + else tap_iov = udp4_l2_iov_tap; - } do { struct udp_payload_t *bp = &udp_payload[i]; @@ -764,7 +731,6 @@ static unsigned udp_tap_send(const struct ctx *c, size_t start, size_t n, if (++i >= n) break; - udp_meta[i].splicesrc = udp_mmh_splice_port(uref, &mmh_recv[i]); udp_meta[i].tosidx = udp_flow_from_sock(c, uref, &udp_meta[i]); } while (pif_at_sidx(udp_meta[i].tosidx) == PIF_TAP); @@ -819,12 +785,11 @@ void udp_buf_sock_handler(const struct ctx *c, union epoll_ref ref, uint32_t eve /* We divide things into batches based on how we need to send them, * determined by udp_meta[i].tosidx. To avoid either two passes through - * the array, or recalculating splicesrc and tosidx for a single entry, - * we have to populate them one entry *ahead* of the loop counter (if - * present). So we fill in entry 0 before the loop, then udp_*_send() - * populate one entry past where they consume. + * the array, or recalculating tosidx for a single entry, we have to + * populate it one entry *ahead* of the loop counter (if present). So + * we fill in entry 0 before the loop, then udp_*_send() populate one + * entry past where they consume. */ - udp_meta[0].splicesrc = udp_mmh_splice_port(ref.udp, mmh_recv); udp_meta[0].tosidx = udp_flow_from_sock(c, ref.udp, &udp_meta[0]); for (i = 0; i < n; i += m) { flow_sidx_t tosidx = udp_meta[i].tosidx; @@ -843,7 +808,6 @@ void udp_buf_sock_handler(const struct ctx *c, union epoll_ref ref, uint32_t eve dstport); m = 1; - udp_meta[i].splicesrc = udp_mmh_splice_port(ref.udp, mmh_recv); udp_meta[i].tosidx = udp_flow_from_sock(c, ref.udp, &udp_meta[i]); } } -- 2.45.2