From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5848B3DC4DA for ; Thu, 9 Jul 2026 07:06:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580821; cv=none; b=Q8//4v+JFC6k53nzjF90JiOtg/NDoFAZoTQC0P4/RroIYUgNNcLVjvKxTZ31uTKZZHunq9+jbk/b7mu75L83g3aZnbc6ZOdz4usHjr2k6s38Pfn6ADtXasPPdObl2w6fIhDGDcASDsw5pKSWDsTTRAbmtBbwS36QJ/TqlPgrOPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580821; c=relaxed/simple; bh=gAcz67fzvMR/gfx335hxH9yW0tDj98EBfK2dKKlENIo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EqKc7oOPOIQmHrlQMaiQhfJXBaiP2m7f+Mw1STTRroODolZLDghCMq+9GBqnSdLW7z3PXVCGAMJVqJrUPoauZ32jRSMAx4tvCyuIRVfOVEG5sBydPdj5P7BSofqeO7Ttdaxsk04U8bCBzOrJwCZW2dm33AOdpsLNsF/GROvf2AE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NMW94tx0; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NMW94tx0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2EB4F1F00A3A; Thu, 9 Jul 2026 07:06:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580818; bh=8zG6CYydeSOB/SqiyU1GB1g3Q6jngpqw8MC/SLVzoI8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=NMW94tx0N0RWKuO69lxqAYhvZszOp05AQCuduXZpJi9d/cZmhSgW14R8xuuUAcrUi emrXvgeae9mw0ZUXbOeqk7LCYSLKXPKcuul3wr0rf5RXBxJAQMWVUq3Oux7Vk5gTwx GbIwGGUPBurKtLAVJ0RlHPjfW/Cg9KOCQRatl4ycdvajMuYWdxNnNEi9zkKP6rFtaN 9WBZp3LVJ1j4mfAYeW+FV6UI3gMML6Qwdmtgr87J0oFacycXUNZYY14CI2aKWvyXeV 88zB1t8KMm2wd55Fqrz81U8yeRw9Heh6dMg/5tQi7b3o/ymFNYtrEGzUZOtb7sWaJR JqQxBwoZFnhwg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 01/12] selftests: mptcp: sockopt: add tx/rx protocol options Date: Thu, 9 Jul 2026 15:06:10 +0800 Message-ID: <49fd836fee8c6da9027917225cf40cd43584ddcd.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add -t and -r options to specify tx/rx protocols (TCP/MPTCP). This increases testing flexibility by allowing explicit protocol selection for both transmission and reception paths. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index b6e58d936ebe..1d516779929a 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -28,6 +28,8 @@ #include =20 static int pf =3D AF_INET; +static int proto_tx =3D IPPROTO_MPTCP; +static int proto_rx =3D IPPROTO_MPTCP; =20 #ifndef IPPROTO_MPTCP #define IPPROTO_MPTCP 262 @@ -137,6 +139,7 @@ static void __noreturn die_perror(const char *msg) static void die_usage(int r) { fprintf(stderr, "Usage: mptcp_sockopt [-6]\n"); + fprintf(stderr, " [-t tcp|mptcp] [-r tcp|mptcp]\n"); exit(r); } =20 @@ -202,7 +205,7 @@ static int sock_listen_mptcp(const char * const listena= ddr, hints.ai_family =3D pf; =20 for (a =3D addr; a; a =3D a->ai_next) { - sock =3D socket(a->ai_family, a->ai_socktype, IPPROTO_MPTCP); + sock =3D socket(a->ai_family, a->ai_socktype, proto_rx); if (sock < 0) continue; =20 @@ -260,11 +263,22 @@ static int sock_connect_mptcp(const char * const remo= teaddr, return sock; } =20 +static int protostr_to_num(const char *s) +{ + if (strcasecmp(s, "tcp") =3D=3D 0) + return IPPROTO_TCP; + if (strcasecmp(s, "mptcp") =3D=3D 0) + return IPPROTO_MPTCP; + + die_usage(1); + return 0; +} + static void parse_opts(int argc, char **argv) { int c; =20 - while ((c =3D getopt(argc, argv, "h6")) !=3D -1) { + while ((c =3D getopt(argc, argv, "h6t:r:")) !=3D -1) { switch (c) { case 'h': die_usage(0); @@ -272,6 +286,12 @@ static void parse_opts(int argc, char **argv) case '6': pf =3D AF_INET6; break; + case 't': + proto_tx =3D protostr_to_num(optarg); + break; + case 'r': + proto_rx =3D protostr_to_num(optarg); + break; default: die_usage(1); break; @@ -777,10 +797,10 @@ static int client(int pipefd) =20 switch (pf) { case AF_INET: - fd =3D sock_connect_mptcp("127.0.0.1", "15432", IPPROTO_MPTCP); + fd =3D sock_connect_mptcp("127.0.0.1", "15432", proto_tx); break; case AF_INET6: - fd =3D sock_connect_mptcp("::1", "15432", IPPROTO_MPTCP); + fd =3D sock_connect_mptcp("::1", "15432", proto_tx); break; default: xerror("Unknown pf %d\n", pf); --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CA893D47D3 for ; Thu, 9 Jul 2026 07:07:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580823; cv=none; b=Sb0tXB4ebnkEIRljVy1AT07i2/iuU9UG9Jz7OE/bCk+N3z96BMqcLx2XYmijIMbKBaeZrAfwwFyKGwPxqzUJwmC006TD0hY4gkyus+9n/F9M48/nsCH7wZNxiWi7pxczHZS2xR8Wj1Awj6ZjegdSt27MH7rQDsqJmVmrg6FMy2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580823; c=relaxed/simple; bh=QMwLxh7VVd4qKAvIHLMtyDuyVPUeIWkJnsZI6OuNuyo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kk/hdykMVzOgpVeMBmzgsbRAI4U36x/A8NdIbYU8Zngt8ynSN27rbLMbsNJ1AOwnW0XEe6JiyRX/rAz/X+9roinf09CYr22a1eTlg2fqpCIG2jpp/b/eMTL3iJOhvFmUbu75LvkbWiqJ0Myo/Bd5qr7aPr1gGclx5hHD00uqNrM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hUJTyjOw; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hUJTyjOw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D4D321F00A3D; Thu, 9 Jul 2026 07:06:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580819; bh=9LisMqvHV+xWYzW89mUgUb6NXOiG+2E5pmyEEF1r8mU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hUJTyjOwZZQvNwwhH+eD5bSIFyX0Dj6/tr/+NW3/4iM/G0gVRe5QGf8EYzHrUIzsS +f8+bTD0eyJDweOMjR4GnazM6nm2wOXvfHTiG152W9dGz+r5r5S2Oj7KlH6QE6ljCo G3ZRsJO970pbEsJswAwfd7e6B5KF30KQafsPGYeDhS5oO7anruRkFOYnCYWg+uM6Zp sPTAqRDVr+oHFbWPzCyC+4dcBY36EVrUqVR/5hkdLCygNja73/p7hhJiQLFbpZ6/0/ ZH8iLMJC2s2tSyf3DTgg2yqTO4UcY1UcCjxxhKa1bS7UDJVGWjqrEcXM9zuPaXHuO6 Ho4JZnedsGzBg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 02/12] selftests: mptcp: sockopt: add TCP_INQ test option Date: Thu, 9 Jul 2026 15:06:11 +0800 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add -i option to enable TCP_INQ testing. This prepares for consolidating TCP_INQ tests into a single binary by adding the necessary command-line interface. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 1d516779929a..45dc85d10519 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -30,6 +30,7 @@ static int pf =3D AF_INET; static int proto_tx =3D IPPROTO_MPTCP; static int proto_rx =3D IPPROTO_MPTCP; +static bool inq; =20 #ifndef IPPROTO_MPTCP #define IPPROTO_MPTCP 262 @@ -140,6 +141,7 @@ static void die_usage(int r) { fprintf(stderr, "Usage: mptcp_sockopt [-6]\n"); fprintf(stderr, " [-t tcp|mptcp] [-r tcp|mptcp]\n"); + fprintf(stderr, " [-i]\n"); exit(r); } =20 @@ -278,7 +280,7 @@ static void parse_opts(int argc, char **argv) { int c; =20 - while ((c =3D getopt(argc, argv, "h6t:r:")) !=3D -1) { + while ((c =3D getopt(argc, argv, "h6t:r:i")) !=3D -1) { switch (c) { case 'h': die_usage(0); @@ -292,6 +294,9 @@ static void parse_opts(int argc, char **argv) case 'r': proto_rx =3D protostr_to_num(optarg); break; + case 'i': + inq =3D true; + break; default: die_usage(1); break; --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 677223DC4DA for ; Thu, 9 Jul 2026 07:07:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580824; cv=none; b=KxSEehmypdYTH5kxH7QQq72ln484tFis/k4PyFF9ryNXM3V5e2Ypr03ZSotQQ3hTVY0EnikFn4YlhavRvNAE3W71zehhPeK5XjtfmWmpSWUIGHc14te89gcbVYotwY9oWE7s1F50df5/jTGc6CE7m2PL3OA5deFuIGMtR/36Okk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580824; c=relaxed/simple; bh=JUvA09XmgNXXYWzCac00mDcWliNE+6UkoO9DrbmCJqg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bV1S6lsbdTQGeVMxPcnGd2Fx2x5oL5YQJx1V9AuA/fSqkaUxXBQcVf/kLEhfZjLk4QfBhla/xA3nO+FzGGRF1a3v9MFKKGlaHzkDuLP/a7qnF8AAcXNkybvMmzVK4jeWnNNIngUGHR91bIlnO7TkpBjR10T3O+xc9wiNfDsBDbI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NfRaebGy; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NfRaebGy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 515131F000E9; Thu, 9 Jul 2026 07:07:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580821; bh=3su+Upk+IbKVZmWnvk7iNRdrlKbXNwKevsBEw0RoxA4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=NfRaebGy636CrhKLyn/rPTxz+Rdp3Nz4AUVG+mWS26wasQKnl01mqTPZbOW9PF5BG q8BTYQwqk4xU2BK6yCFGN3tM+zwdRtN6wBbXQ2R4guZ/ZXbpVPayEjHGj7pzuprBmJ +28XeWBm0Kl9Ygn1vU38n0d6WprdssPr1fvv4/S+c6hVaN56Y0fCFObJxt3SzuLzxj yDk05ud+NgGu0Cvk/QKpkSnxxtahFYD1KQO/1eNmcvMOAGk2ByhVih2wH6k9kymrYE tnhNZEx/D5bxvTLDUrgihpmyHBvarf2md5JdEsYZkFf+VHdxaKFAauK9pckyRU+DJQ iC9UrILKuNncw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 03/12] selftests: mptcp: sockopt: set TCP_INQ on accepted sockets Date: Thu, 9 Jul 2026 15:06:12 +0800 Message-ID: <4365a32b22b7bb1364b3f5b5c0c038adaf99c722.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add helper functions to conditionally set TCP_INQ sockopt on accepted sockets when running in inq mode. This ensures proper testing of TCP_CM_INQ functionality by enabling the required socket option on both ends of the connection. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 45dc85d10519..c6ced79e5814 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -718,6 +718,14 @@ static void process_one_client(int fd, int pipefd) close(fd); } =20 +static void do_setsockopt_inq(int fd) +{ + int on =3D 1; + + if (setsockopt(fd, IPPROTO_TCP, TCP_INQ, &on, sizeof(on))) + die_perror("setsockopt(TCP_INQ)"); +} + static int xaccept(int s) { int fd =3D accept(s, NULL, 0); @@ -725,6 +733,9 @@ static int xaccept(int s) if (fd < 0) die_perror("accept"); =20 + if (inq) + do_setsockopt_inq(fd); + return fd; } =20 --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 752FA3DBD47 for ; Thu, 9 Jul 2026 07:07:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580827; cv=none; b=s5TsUGS/j5vPxEWgYVhH6W+rUVu72IjW3LJ2c3iaXTKf9O10I7D0IUwrYeJ17/NyEjF/faFBzPczZqollI4woby8ACqx0bQPsf9FEPwtgaPQ2YK7+pNVVDjiAFhMtTr+XTXpMah/KKUMvK8qMDUhUdiwdZhIAp1RRa+tN6DbC6M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580827; c=relaxed/simple; bh=HHWgYdeLvN6aOakvRE9hGyicdrRASmOxiT0XvmYZ+oo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FpDNizNQdUD3C0/g3t3+ajLp/v8tbY2T339lTI8h9V7b4ZbM8z9EwuqNdEWW7cEciog1OB/H6FKgMt/xQZBWnl/h6mVjXjbjomgzqGCwKFaxjQ7sXN64KtMR+72LWSqtgG+bi9om3pW3ceKyEOauGi+B97JpCC0HC6j+8+V/xtw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mJ51KhzE; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mJ51KhzE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 25AAE1F00ACA; Thu, 9 Jul 2026 07:07:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580823; bh=9egIk76lj8tPOGSN6ZuRCjdNcoN4FCpgbxGdcdIYXCA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mJ51KhzEdnqXH0VZr2CYjFT8EUiJThPtT25BHU6beVTFmZikaJqhXgsjgBmlVu/ML cd2WjH4ZFWOrWgmJgFSTQd09W1D17eYfKg1LEv7jNPpyy9eS0EalmnQpaX6t18gu2q YN6PqDPsLzZVIa2wzY1Fn2sxog9ExuZf7GZjrlcnglaopMmy1Em0op6DNG5ognnV5Z cbltKn3SOpyzd6nR7mxDmPNUYborKJr+aP+/goixGic4dRWSZ1HodPBbonJWTsg+P0 D0R3H+O7uLbU1nkjT07U6ZuL/81/Z2liqndab9sflPTaOBEQl8l7ZTnTaIpZG5Ox32 KsD5DOu9si9ng== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 04/12] selftests: mptcp: sockopt: use unix socket instead of pipe Date: Thu, 9 Jul 2026 15:06:13 +0800 Message-ID: <1b241d5da44a9dc841f3485974d5169c72c0a9f4.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Replace pipe-based synchronization with Unix domain socket pairs (SOCK_DGRAM) for better bidirectional communication reliability between server and client processes. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index c6ced79e5814..6738ad45b9eb 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -592,7 +592,7 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_mptcp_full_info(s, fd); } =20 -static void connect_one_server(int fd, int pipefd) +static void connect_one_server(int fd, int unixfd) { char buf[4096], buf2[4096]; size_t len, i, total; @@ -617,9 +617,9 @@ static void connect_one_server(int fd, int pipefd) do_getsockopts(&s, fd, 0, 0); =20 /* un-block server */ - ret =3D read(pipefd, buf2, 4); + ret =3D read(unixfd, buf2, 4); assert(ret =3D=3D 4); - close(pipefd); + close(unixfd); =20 assert(strncmp(buf2, "xmit", 4) =3D=3D 0); =20 @@ -661,7 +661,7 @@ static void connect_one_server(int fd, int pipefd) close(fd); } =20 -static void process_one_client(int fd, int pipefd) +static void process_one_client(int fd, int unixfd) { ssize_t ret, ret2, ret3; struct so_state s; @@ -670,7 +670,7 @@ static void process_one_client(int fd, int pipefd) memset(&s, 0, sizeof(s)); do_getsockopts(&s, fd, 0, 0); =20 - ret =3D write(pipefd, "xmit", 4); + ret =3D write(unixfd, "xmit", 4); assert(ret =3D=3D 4); =20 ret =3D read(fd, buf, sizeof(buf)); @@ -739,7 +739,7 @@ static int xaccept(int s) return fd; } =20 -static int server(int pipefd) +static int server(int unixfd) { int fd =3D -1, r; =20 @@ -755,13 +755,13 @@ static int server(int pipefd) break; } =20 - r =3D write(pipefd, "conn", 4); + r =3D write(unixfd, "conn", 4); assert(r =3D=3D 4); =20 alarm(15); r =3D xaccept(fd); =20 - process_one_client(r, pipefd); + process_one_client(r, unixfd); =20 close(fd); return 0; @@ -805,7 +805,7 @@ static void test_ip_tos_sockopt(int fd) xerror("expect socklen_t =3D=3D -1"); } =20 -static int client(int pipefd) +static int client(int unixfd) { int fd =3D -1; =20 @@ -824,7 +824,7 @@ static int client(int pipefd) =20 test_ip_tos_sockopt(fd); =20 - connect_one_server(fd, pipefd); + connect_one_server(fd, unixfd); =20 return 0; } @@ -878,35 +878,35 @@ int main(int argc, char *argv[]) { int e1, e2, wstatus; pid_t s, c, ret; - int pipefds[2]; + int unixfds[2]; =20 parse_opts(argc, argv); =20 init_rng(); =20 - e1 =3D pipe(pipefds); + e1 =3D socketpair(AF_UNIX, SOCK_DGRAM, 0, unixfds); if (e1 < 0) - die_perror("pipe"); + die_perror("socketpair"); =20 s =3D xfork(); if (s =3D=3D 0) { - close(pipefds[0]); - ret =3D server(pipefds[1]); - close(pipefds[1]); + close(unixfds[0]); + ret =3D server(unixfds[1]); + close(unixfds[1]); return ret; } =20 - close(pipefds[1]); + close(unixfds[1]); =20 /* wait until server bound a socket */ - e1 =3D read(pipefds[0], &e1, 4); + e1 =3D read(unixfds[0], &e1, 4); assert(e1 =3D=3D 4); =20 c =3D xfork(); if (c =3D=3D 0) - return client(pipefds[0]); + return client(unixfds[0]); =20 - close(pipefds[0]); + close(unixfds[0]); =20 ret =3D waitpid(s, &wstatus, 0); if (ret =3D=3D -1) --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 698AD3DDDB8 for ; Thu, 9 Jul 2026 07:07:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580827; cv=none; b=KZCcnsmv7/0VbHpExYatsDa4efYX3+C/Mve6+kusVWKomAIQgAzukzrzArtxhS940J5kwOgYVjVA/n7kQCZBI3EXxaQ2pxwHONOUxvRUUypeB1NeTyZjRoXRm816eVzVeh+Uql3mkBE5kwUL4TwCcJIoluocYR9PU7bTPdwNXE4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580827; c=relaxed/simple; bh=BdnTCPjlXR6bjdNAYKpaamtQgkfulfiTu1eHR3d1HQk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cloxl1k8Q0+AguAGuKeze5mHkyG50Gg6s6Es0kg3Jg1uJLmkLbMdfrpkapN4k2Q7k5YvztuLM/e9V+YfaFtChc8B5Vad3MGoB3vzzrDYCHSnhI1ghvRO7Y2VwWVfTOOyfFwlvQR8No0ghnG7p1eLnIquNUlhlfvS5/EecTatSME= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PzATAZT5; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PzATAZT5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F280C1F00A3D; Thu, 9 Jul 2026 07:07:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580825; bh=pHvnr71QJwENXLvoJedloCMOxpR9IVA+nEr8EXMaMG0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PzATAZT59HvvqjEMo0U0KNgfYnclBKRKc3s2IuGpixvVXetUgML7sYCNHlzCAVWJu oVfLyWojcsE0aDRAmTpsCpmVJ9et8bjNTh3+T9cHju5B3LDK4mXcGFyO4sEJGz/Fx5 M4/5CKgd3Zq2dsnTLTUV5mD/S1Rf9WD/x4fsPUgCYS06l9mdjWPJFqT5BFySfCWHd5 ZfaAclDtrFceT/5Z87Ez8Ktydg36a79JFwjvZ88URTbJ8SLIldVMy6rS6RuGISAkKq SbJrm/iRS3bKJKyMOWOHsOUBDS40cdp9yeAgwDt23xGSOILRYVNjbA3Xpf1lpZ3jMj rtY8CGpN5pZHA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 05/12] selftests: mptcp: sockopt: pass echo length over unixfd Date: Thu, 9 Jul 2026 15:06:14 +0800 Message-ID: <9c55800b7800971f03600521d5841589452f5db2.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Pass 'len' from the server to the client over the unixfd control channel so that the client knows the server's payload size in advance for the FIONREAD loop and TCP_CM_INQ validation. Also keep the unixfd open for the second write by moving 'close(unixfd)' to the end of connect_one_server(). These codes are from mptcp_inq.c. Note: Additionally, silence a -Wstringop-overflow false positive by using 'len - total' as the read size, which lets GCC prove the destination is large enough. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 6738ad45b9eb..15c9f8dbae47 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -619,10 +619,12 @@ static void connect_one_server(int fd, int unixfd) /* un-block server */ ret =3D read(unixfd, buf2, 4); assert(ret =3D=3D 4); - close(unixfd); =20 assert(strncmp(buf2, "xmit", 4) =3D=3D 0); =20 + ret =3D write(unixfd, &len, sizeof(len)); + assert(ret =3D=3D (ssize_t)sizeof(len)); + ret =3D write(fd, buf, len); if (ret < 0) die_perror("write"); @@ -632,7 +634,7 @@ static void connect_one_server(int fd, int unixfd) =20 total =3D 0; do { - ret =3D read(fd, buf2 + total, sizeof(buf2) - total); + ret =3D read(fd, buf2 + total, len - total); if (ret < 0) die_perror("read"); if (ret =3D=3D 0) { @@ -659,12 +661,14 @@ static void connect_one_server(int fd, int unixfd) =20 assert(s.mptcpi_rcv_delta =3D=3D (uint64_t)total); close(fd); + close(unixfd); } =20 static void process_one_client(int fd, int unixfd) { ssize_t ret, ret2, ret3; struct so_state s; + size_t expect_len; char buf[4096]; =20 memset(&s, 0, sizeof(s)); @@ -673,6 +677,12 @@ static void process_one_client(int fd, int unixfd) ret =3D write(unixfd, "xmit", 4); assert(ret =3D=3D 4); =20 + ret =3D read(unixfd, &expect_len, sizeof(expect_len)); + assert(ret =3D=3D (ssize_t)sizeof(expect_len)); + + if (expect_len > sizeof(buf)) + xerror("expect len %zu exceeds buffer size", expect_len); + ret =3D read(fd, buf, sizeof(buf)); if (ret < 0) die_perror("read"); --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 051273DCDAB for ; Thu, 9 Jul 2026 07:07:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580831; cv=none; b=NA57nr3l3V8ALjGnrUQEDMlGMwX1scE43a+HDOuKkU2ucXJyDFaXh38kRyhSY/L7+Y1FLkXI+JL5sMdrp4hQ75PZzfvWPLyQDU1SwwTY4DTkbTlSZ+sSVa9RBLBfEBKslNsLPDmtdDneEkFxAiYoV7L58g0JZYRkzor3slJ4JoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580831; c=relaxed/simple; bh=CfzGSmkj9yOu8ulI2KgIZbhEJpX1k2fMqyrxZpM7N+I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S0znhPrL1Iz3+XfETMI3PxK+FKx8v/pyGk6pa1RkZNDUS4AXgE+RCYl5lR+XgEh0RZ4OPRdeHcw2spAVvDsjsrM18fmEsEQAUmswQbZfqb+7yQA/f27fE1LeRGejy++8aJu7PTQsyx+KeO6ZJS77sNGv34BXmQ8+HrkQCH/s9vc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=apuBd4kK; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="apuBd4kK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CC8BC1F000E9; Thu, 9 Jul 2026 07:07:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580827; bh=YUO9o5zbQvgy5LE9w7vJtkymziVd45Xt3ZiXB7fgL6E=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=apuBd4kKgcj/m9uecSiKfDZi8Cti6tK53LMfh9+zuWrkI/5VvGwEfKv+eYcQb7r2x sg3SMDTtwAUxlvI6645TszmosSDti2Yz5VhKu1MzJcUrSH3fYGGoP8QcQpulmuOW0R VSrAJf7o/0snPJj5ezQ9cbZCbQYNmcArDv/6mhLlaa2WOV4WnJb8+m98y/dHLnPviR Wq6wOh4GfWotSCqaSAvJzLs1XKDWADSsnZjl1UJUwJEwzTxwY5JvjeQi/8v2TBSvwA zwv8ZGrwnOocVJH5YVCSVfNTmLewHNMAnSsaJAUryZNSGShPqwfxQ4qsPj8F0k+sbz uor4ywHmqPpHA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 06/12] selftests: mptcp: sockopt: set FIONREAD ioctl Date: Thu, 9 Jul 2026 15:06:15 +0800 Message-ID: <4ddab6eb6a25ffc6c956277709a870e474c0103e.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Implement FIONREAD ioctl checks to validate available data size, ensuring synchronization between write and read operations with non-blocking waits. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 15c9f8dbae47..1b4d94abb1c6 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -20,6 +20,7 @@ #include #include #include +#include =20 #include #include @@ -683,6 +684,24 @@ static void process_one_client(int fd, int unixfd) if (expect_len > sizeof(buf)) xerror("expect len %zu exceeds buffer size", expect_len); =20 + for (;;) { + struct timespec req; + unsigned int queued; + + ret =3D ioctl(fd, FIONREAD, &queued); + if (ret < 0) + die_perror("FIONREAD"); + if (queued > expect_len) + xerror("FIONREAD returned %u, but only %zu expected\n", + queued, expect_len); + if (queued =3D=3D expect_len) + break; + + req.tv_sec =3D 0; + req.tv_nsec =3D 1000 * 1000ul; + nanosleep(&req, NULL); + } + ret =3D read(fd, buf, sizeof(buf)); if (ret < 0) die_perror("read"); --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7D873DE42D for ; Thu, 9 Jul 2026 07:07:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580832; cv=none; b=X+I+XAkmyPoCFnRfhEa1GL1XuuU/j6t5eKYAz0gpjjwRgxdo9ZCvRBwbp3JIkwzBP5/8qHBmtK2QJ75lw1c1g8wQzmJlByNbp7Cv3HQt3RVA/eS1srJfsgkh4vuhgNQYX3ASEcntFml/TZ22LJJBPhtNFAeVfa7DJnFiZ3QatEI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580832; c=relaxed/simple; bh=zQeGSLgLGStC8IVm9O0o4TGAlyI5EbVglszBZ+ycC4o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NQyoKKGu/PPT4zA0LckzF2GAce7eKmyCWvHVHLJWiHcWCDX+RJnhOvPOcBi/OYE/xDvGo1hVtCPwpLrGGRvn1q4VGilNrc+HP3x69zVztHwq5xhl55fdD9TrsHHBCRc5eOPEtxG1IW+9xCKfJSoflj89LuYGjAzJ8ecxQz2vU3g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lPlUqjml; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lPlUqjml" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A64DC1F00A3A; Thu, 9 Jul 2026 07:07:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580829; bh=aX6g8Mgm+aF+xWMM3gcFzSmAb1l4mqgMNx7N39MMy68=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lPlUqjmlWjuEEATTAy1oW2kFH0puRnJNWcvJQoSP5FhqG6LUTsEndaaf7r4pIKwS/ u7AT/2pFCkOtGV5awfNqdtIWE1m2Cxk7ji5SbmFvvuovAGusoIghXadEnKvXeC+Tj4 kti8Cba8LRWKR2yKfSDhAa6ELRQlKhQferzllxwS2ooilp4WaYqPhKGap24bb0Rd7z 0MjTnjxdpEDs5Lg0ltlrEYLesJCLd4FmwSe9SgQDViKs1mc4OWOsfqM95kQWXYDxpm qP4kIwCl3gbuLy5/oEGZ1rx/JRKBmHSoTPqI0pCiPeWjovA7JLJ20p2ar/D1HJDOmw +WisTvsapZsBQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 07/12] selftests: mptcp: sockopt: add huge data transfer tests Date: Thu, 9 Jul 2026 15:06:16 +0800 Message-ID: <278d77bd30b85f28c834ce3e663e2112c2de8550.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Introduce huge data transfer tests (1-17 MB) to validate MPTCP socket options under high-volume conditions, including proper EOF handling, preparing for TCP_INQ support in subsequent patches. These codes are from mptcp_inq.c, but here they have been placed into two separate functions. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 1b4d94abb1c6..b4da3aa9713b 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -593,6 +593,47 @@ static void do_getsockopts(struct so_state *s, int fd,= size_t r, size_t w) do_getsockopt_mptcp_full_info(s, fd); } =20 +static void server_huge_transfer(int fd, int unixfd, size_t len) +{ + char buf[4096], buf2[4]; + size_t total; + ssize_t ret; + + ret =3D read(unixfd, buf2, 4); + assert(strncmp(buf2, "huge", 4) =3D=3D 0); + + total =3D rand() % (16 * 1024 * 1024); + total +=3D (1 * 1024 * 1024); + + ret =3D write(unixfd, &total, sizeof(total)); + assert(ret =3D=3D (ssize_t)sizeof(total)); + + while (total > 0) { + if (total > sizeof(buf)) + len =3D sizeof(buf); + else + len =3D total; + + ret =3D write(fd, buf, len); + if (ret < 0) + die_perror("write"); + total -=3D ret; + + /* we don't have to care about buf content, only + * number of total bytes sent + */ + } + + ret =3D read(unixfd, buf2, 4); + assert(ret =3D=3D 4); + assert(strncmp(buf2, "shut", 4) =3D=3D 0); + + ret =3D write(fd, buf, 1); + assert(ret =3D=3D 1); + ret =3D write(unixfd, "closed", 6); + assert(ret =3D=3D 6); +} + static void connect_one_server(int fd, int unixfd) { char buf[4096], buf2[4096]; @@ -661,10 +702,70 @@ static void connect_one_server(int fd, int unixfd) total +=3D 1; /* sequence advances due to FIN */ =20 assert(s.mptcpi_rcv_delta =3D=3D (uint64_t)total); + + if (inq) + server_huge_transfer(fd, unixfd, len); + close(fd); close(unixfd); } =20 +static void client_huge_transfer(int fd, int unixfd) +{ + char msg_buf[4096]; + size_t expect_len; + ssize_t ret, tot; + char buf[4096]; + char tmp[16]; + struct iovec iov =3D { + .iov_base =3D buf, + .iov_len =3D 1, + }; + struct msghdr msg =3D { + .msg_iov =3D &iov, + .msg_iovlen =3D 1, + .msg_control =3D msg_buf, + .msg_controllen =3D sizeof(msg_buf), + }; + + /* request a large swath of data. */ + ret =3D write(unixfd, "huge", 4); + assert(ret =3D=3D 4); + + ret =3D read(unixfd, &expect_len, sizeof(expect_len)); + assert(ret =3D=3D (ssize_t)sizeof(expect_len)); + + /* peer should send us a few mb of data */ + if (expect_len <=3D sizeof(buf)) + xerror("expect len %zu too small\n", expect_len); + + tot =3D 0; + do { + iov.iov_len =3D sizeof(buf); + ret =3D recvmsg(fd, &msg, 0); + if (ret < 0) + die_perror("recvmsg"); + + tot +=3D ret; + } while ((size_t)tot < expect_len); + + ret =3D write(unixfd, "shut", 4); + assert(ret =3D=3D 4); + + /* wait for hangup. Should have received one more byte of data. */ + ret =3D read(unixfd, tmp, sizeof(tmp)); + assert(ret =3D=3D 6); + assert(strncmp(tmp, "closed", 6) =3D=3D 0); + + sleep(1); + + iov.iov_len =3D 1; + ret =3D recvmsg(fd, &msg, 0); + if (ret < 0) + die_perror("recvmsg"); + assert(ret =3D=3D 1); +} + static void process_one_client(int fd, int unixfd) { ssize_t ret, ret2, ret3; @@ -715,6 +816,9 @@ static void process_one_client(int fd, int unixfd) if (ret2 < 0) die_perror("write"); =20 + if (inq) + client_huge_transfer(fd, unixfd); + /* wait for hangup */ ret3 =3D read(fd, buf, 1); if (ret3 !=3D 0) --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0828E3DD877 for ; Thu, 9 Jul 2026 07:07:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580834; cv=none; b=qZJJUGl5hgkWhW1t3F832nzgsG7ww1X3L9ZDSV3iYlgjBxP3RSeS13ojGRyLhzq9Vsf5EE0Q7wqFyA6+P1Ks6t+RtGob1+QlU1w/RlfbBPUzZQTJCCi3CFq+JMAHkBhZmzhEpjrYrQ6hkCTWzxAo7zF6k1/3FOo8pjP4bSzsev4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580834; c=relaxed/simple; bh=KUAXdMF3I9CUBID25zCxTb9wxzhWV0A6zbYTQVhM2lk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qOYt+6tdn1/DcxcWJbRKXcVI367d8SlSBEgeXG/5XKMQN7wOKRTyVC7+jozmy91nCSueTDtj3OSY8K+MdMQsnYIBD5V1ZlWSDxPpddUWkw+EqhTpr4UI4d3XpZqzHtvFkwBfyubhokuLXYrhcbMlQQEDFrp5W7Cn2EbuWHB9GsI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WS6xdS3B; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="WS6xdS3B" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 097FD1F00A3D; Thu, 9 Jul 2026 07:07:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580831; bh=JPJfCfvQuca4Y2g365WtslHky8kUIgI3IJJJk9Ql6MI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WS6xdS3BNDkTRN0u9X7LdW4QjNaWsyby5Re3koJRqAr/UjrgZDlqJXYkntbjaD/K0 M1KSpMjfiilX9SSCovl7QUaUMX1RSS48XnnhLwk4SCCqTaAzy0ODT9Y5cXeRE2FvC7 zCd6zcMctvYip7CeA176e4qXjk4i9//Nqpq8+ALf5DvB5FGkAZB/kYC+d9+1O66eYO TMbOvGoq79OxdBfAdSGnOr1QapaxHKu4WlvtZUfURf06L4x4ulg45/Vp4jF6fmqSsv SacrNAcjIQJy25LZA7zOPMs/BOBoxth50dgjr0cCdV5lTYZ7S/0SGVOHp/qgmX/y2w y/VuFBq7bdk2A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 08/12] selftests: mptcp: sockopt: add wait_for_ack helper Date: Thu, 9 Jul 2026 15:06:17 +0800 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add wait_for_ack() helper using TIOCOUTQ/SIOCOUTQNSD ioctls to synchronize tests by waiting for data acknowledgment before proceeding. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index b4da3aa9713b..393c863f3762 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -26,6 +26,7 @@ #include =20 #include +#include #include =20 static int pf =3D AF_INET; @@ -593,10 +594,44 @@ static void do_getsockopts(struct so_state *s, int fd= , size_t r, size_t w) do_getsockopt_mptcp_full_info(s, fd); } =20 +/* wait up to timeout milliseconds */ +static void wait_for_ack(int fd, int timeout, size_t total) +{ + int i; + + for (i =3D 0; i < timeout; i++) { + int nsd, ret, queued =3D -1; + struct timespec req; + + ret =3D ioctl(fd, TIOCOUTQ, &queued); + if (ret < 0) + die_perror("TIOCOUTQ"); + + ret =3D ioctl(fd, SIOCOUTQNSD, &nsd); + if (ret < 0) + die_perror("SIOCOUTQNSD"); + + if ((size_t)queued > total) + xerror("TIOCOUTQ %u, but only %zu expected\n", + queued, total); + assert(nsd <=3D queued); + + if (queued =3D=3D 0) + return; + + /* wait for peer to ack rx of all data */ + req.tv_sec =3D 0; + req.tv_nsec =3D 1 * 1000 * 1000ul; /* 1ms */ + nanosleep(&req, NULL); + } + + xerror("still tx data queued after %u ms\n", timeout); +} + static void server_huge_transfer(int fd, int unixfd, size_t len) { char buf[4096], buf2[4]; - size_t total; + size_t total, sent; ssize_t ret; =20 ret =3D read(unixfd, buf2, 4); @@ -604,10 +639,13 @@ static void server_huge_transfer(int fd, int unixfd, = size_t len) =20 total =3D rand() % (16 * 1024 * 1024); total +=3D (1 * 1024 * 1024); + sent =3D total; =20 ret =3D write(unixfd, &total, sizeof(total)); assert(ret =3D=3D (ssize_t)sizeof(total)); =20 + wait_for_ack(fd, 5000, len); + while (total > 0) { if (total > sizeof(buf)) len =3D sizeof(buf); @@ -628,6 +666,8 @@ static void server_huge_transfer(int fd, int unixfd, si= ze_t len) assert(ret =3D=3D 4); assert(strncmp(buf2, "shut", 4) =3D=3D 0); =20 + wait_for_ack(fd, 5000, sent); + ret =3D write(fd, buf, 1); assert(ret =3D=3D 1); ret =3D write(unixfd, "closed", 6); --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3014C3DE420 for ; Thu, 9 Jul 2026 07:07:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580835; cv=none; b=Qqt+ByGs1zhFxeeLdkAJjmDF7njbuvi7SyW7x6gqEEwpd+tMJ9jLDS4a8/kPIOFMOPpI301bY3MybrxRxAJ5ZpD/7sHAgLQFi8iJ7QqRx5H0pFP4Dz9+wdZY81cm3p2UyJrnm9qFjKLXaN4nGxNJ77IQhRHVblN1orXKeEvxnWc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580835; c=relaxed/simple; bh=I8qT2AdYHMQHfRNBCzX4DT09OQ/VnBQXRIk9Yi3oVQk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=knX9cVep6nAaBJ6SaJHjvh1swGwmsTNPWemUlPXvjv8hsNjwPCISBrPDq29fRg0r5pqzmiX/XacBwtgJfQ3E0J6JOyykzqCzmd02bbJGuvisKzFf8qFnk9MBUpTu4VpC5pK0rkU9ec8o0rxnYE62OoZ9lnKNKNC2kfS4H9BOA3Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J2tPqlrL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="J2tPqlrL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD5B21F00A3E; Thu, 9 Jul 2026 07:07:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580833; bh=c+SdKJeNbX+vFKSuZuEzO0jFu12cTe4FCkqbwvTlLNk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=J2tPqlrL3Cs7AlXfwuEugiEMEWR5L5lA3NcVKhRpa0CIY4Js3ogXQMk20A4XIS85m +rd7sXaRc1c2scAwrFVlpAQk2Q4VzUIjzex64ZPjxdSnjanjASw0MU+W4YrY5J8bBF v3yhGxWnyKKdGUhPjBngqiZoVi2QwQg+7zJozCvT56XnmeYqc+SnjUJdoy25ZWIINL w0ZTJ32WlcxRGKJ8pbAXebiILgZsgITJXS8HvatM8T0K9+rYdAkgd7wnELDUV/wrEQ Fk14tUZ0cltLw9iKDD5Aa3XJXHzzrEw32aNr6AbSOROpHr0x4bTbeKaKgv00cxyuoI fj6s7imsAFi/g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 09/12] selftests: mptcp: sockopt: add get_tcp_inq helper Date: Thu, 9 Jul 2026 15:06:18 +0800 Message-ID: <5ee448f59c74c732a2efe0de1d5a717528eefad8.1783579976.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add check_tcp_inq() helper to extract and verify TCP_CM_INQ values from control messages, ensuring correct in-queue data tracking during transfers. These codes are from mptcp_inq.c. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 393c863f3762..1674b660848d 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -750,8 +750,25 @@ static void connect_one_server(int fd, int unixfd) close(unixfd); } =20 +static void get_tcp_inq(struct msghdr *msgh, unsigned int *inqv) +{ + struct cmsghdr *cmsg; + + for (cmsg =3D CMSG_FIRSTHDR(msgh); cmsg; + cmsg =3D CMSG_NXTHDR(msgh, cmsg)) { + if (cmsg->cmsg_level =3D=3D IPPROTO_TCP && + cmsg->cmsg_type =3D=3D TCP_CM_INQ) { + memcpy(inqv, CMSG_DATA(cmsg), sizeof(*inqv)); + return; + } + } + + xerror("could not find TCP_CM_INQ cmsg type"); +} + static void client_huge_transfer(int fd, int unixfd) { + unsigned int tcp_inq; char msg_buf[4096]; size_t expect_len; ssize_t ret, tot; @@ -787,6 +804,14 @@ static void client_huge_transfer(int fd, int unixfd) die_perror("recvmsg"); =20 tot +=3D ret; + + get_tcp_inq(&msg, &tcp_inq); + + if (tcp_inq > expect_len - tot) + xerror("inq %d, remaining %d total_len %d\n", + tcp_inq, expect_len - tot, (int)expect_len); + + assert(tcp_inq <=3D expect_len - tot); } while ((size_t)tot < expect_len); =20 ret =3D write(unixfd, "shut", 4); @@ -804,6 +829,11 @@ static void client_huge_transfer(int fd, int unixfd) if (ret < 0) die_perror("recvmsg"); assert(ret =3D=3D 1); + + get_tcp_inq(&msg, &tcp_inq); + + /* tcp_inq should be 1 due to received fin. */ + assert(tcp_inq =3D=3D 1); } =20 static void process_one_client(int fd, int unixfd) --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E28643DD526 for ; Thu, 9 Jul 2026 07:07:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580836; cv=none; b=HtNp1c1JYkhlqfxXq0vbfDqAaJO53bC0HWTd8+jaALkKZ9CuEmzrDGd3FrhQJVbOcRt5uho9/pwvPua4OLANT6NDJKzNM0qgeHoCYKGvSNHMdJE6fhcJENneK5eOapY1ygfCcNfAlkkN308LjzWlLQ6eXVnniAC5Q95pAy+08YY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580836; c=relaxed/simple; bh=K8dkpKmzNBE+70kOk3PDpqYSBxt7PxYJFkDu++zIc5k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HQHJKNFTU1J10iEHwc0UOCep12p4ZCB+JKTHe2WMK9a0vCp57qgLv4kKqX6Z3dMvkdSkrAaV/IKfaLl/4i2lTqCiXyEr6B/kr3FeEq/FsNh8xBZIIeq9RnsGj2D04ezuz3hrtxOpnZ5cxaNu1xlBnqiNTn/RVQ0F10X9LI29qks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PU/jmzo0; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PU/jmzo0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9843B1F000E9; Thu, 9 Jul 2026 07:07:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580834; bh=O5J6jaowkeNJ242hH254q9beB+wqJ3DbHDRPc/RCIIA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PU/jmzo0rShAQpn1aYWT/bBrOL+FjWXmP2VHuAw4DG87IXHVEjxVaCMh/ZVorOafz a/lFQvvpVkvZNCxcvLylWB+nyKkXAta2sy31TsTGaZGAgselmM/hTzL/vmUtBccKqL p2p88Lm7bmKm5deVaAkDOfWyFmm7CnFdC8Qxq1JlEW+2KPs5ai8jyGXckTPSVPNhzc wAL9Gbs2t2yQe6r/bs3jkN1vc10H6A5BqrYOizDsq+WR/AzAygCJ4eCgjnBdsSYzS+ F5i5rM1ArHWaFIWNU3S69ZcKlKqlFTSp/oAT+yAa89j1liyigPfmdEieZMPsxgOKTq rsoLXS4UUNjkw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 10/12] selftests: mptcp: sockopt: skip MPTCP opts for TCP tests Date: Thu, 9 Jul 2026 15:06:19 +0800 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Enhance compatibility with TCP tests in mptcp_sockopt.c by skipping MPTCP getsockopt checks during TCP tests since MPTCP socket options are not available. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 1674b660848d..13d10a606501 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -584,6 +584,9 @@ static void do_getsockopt_mptcp_full_info(struct so_sta= te *s, int fd) =20 static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { + if (proto_tx !=3D IPPROTO_MPTCP || proto_rx !=3D IPPROTO_MPTCP) + return; + do_getsockopt_mptcp_info(s, fd, w); =20 do_getsockopt_tcp_info(s, fd, r, w); @@ -741,7 +744,8 @@ static void connect_one_server(int fd, int unixfd) if (eof) total +=3D 1; /* sequence advances due to FIN */ =20 - assert(s.mptcpi_rcv_delta =3D=3D (uint64_t)total); + assert(!s.mptcpi_rcv_delta || + s.mptcpi_rcv_delta =3D=3D (uint64_t)total); =20 if (inq) server_huge_transfer(fd, unixfd, len); @@ -895,7 +899,7 @@ static void process_one_client(int fd, int unixfd) xerror("expected EOF, got %lu", ret3); =20 do_getsockopts(&s, fd, ret, ret2); - if (s.mptcpi_rcv_delta !=3D (uint64_t)ret + 1) + if (s.mptcpi_rcv_delta && s.mptcpi_rcv_delta !=3D (uint64_t)ret + 1) xerror("mptcpi_rcv_delta %" PRIu64 ", expect %" PRIu64 ", diff %" PRId64, s.mptcpi_rcv_delta, ret + 1, s.mptcpi_rcv_delta - (ret + 1)); =20 --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 163E835C188 for ; Thu, 9 Jul 2026 07:07:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580838; cv=none; b=u7U0nfGfDdCX74a/CbG44N0xDu5aMBd6B6tX32di5/ob4Pei/Lj5u7s1wtEXQ4Y7tX1srG1/u+WCsp/Um2kr+OucrEFfQv+aXSq3Db+ZSIGP+ayeSza8Y8s7sYKWjdbCogJeXD75W1Zog0HJUnS5Q84AEnQQdY9WkBHcbgvOEcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580838; c=relaxed/simple; bh=dkswvKAJgsFlLMS6lsBQBdAZ4JCDJw4TKohPfNsvdZs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GqdfJYIeWfbZvCbZuhkqA5tHrmaMhQsJEQKan4tL7O9372JBG1YUggSuDkqZaut5Fy4bXlZQ44vU1vd4t4GjPUQcnWXVPiLsu3j4y8L5JA8VEqoBchosxmAO5KgSnXm7jRXNJVArEX3toDQ7HV24m8IATJQ7HFm6NnAxmChUbso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=d5lW1E3y; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="d5lW1E3y" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 717041F00A3A; Thu, 9 Jul 2026 07:07:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580836; bh=rQTSREqO3gUx94N6Vmsnt/A16wDKySyE0U+0g66ryk4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=d5lW1E3yqXgxmzo/8ZpvtbQ9/CTAuSBZ/DVaVh5LQZPH2AFIyOpIdPFaIxxdkA9QX CSrUkHKcDLU2OkKT4RQNDYOZ46NGOWOifwYBNSaUzzi8+GxzeFGgN9T8N25VzTveLW pXMWZMGFSJVa4oa3mYwBPXHyunS8cVmx+0WvsFcaNSG57iFY7Kc0Nu5bdP/oDxUviT UHyZgUQmIbCIiZucm5BdYJ3m6D/qlQX35X7zFDuBByP8ayklG/ZO9d9xjlf3t6irlx Rpi41oaIa7LrJBPLuNhClfh3lk67kYmuMruXp2yBrGBfj1dGq4Mj2xBeSq0eU1kRP5 ph73Gf0F0BECA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 11/12] selftests: mptcp: sockopt: replace mptcp_inq with sockopt Date: Thu, 9 Jul 2026 15:06:20 +0800 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Update mptcp_sockopt.sh to use mptcp_sockopt binary instead of mptcp_inq. This consolidates TCP_INQ testing into a single test binary while maintaining equivalent test coverage. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index e850a87429b6..a39265555438 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -308,7 +308,7 @@ run_tests() do_tcpinq_test() { print_title "TCP_INQ cmsg/ioctl $*" - ip netns exec "$ns_sbox" ./mptcp_inq "$@" + ip netns exec "$ns_sbox" ./mptcp_sockopt "$@" local lret=3D$? if [ $lret -ne 0 ];then ret=3D$lret @@ -334,19 +334,19 @@ do_tcpinq_tests() =20 local args for args in "-t tcp" "-r tcp"; do - do_tcpinq_test $args + do_tcpinq_test $args -i lret=3D$? if [ $lret -ne 0 ] ; then return $lret fi - do_tcpinq_test -6 $args + do_tcpinq_test -6 $args -i lret=3D$? if [ $lret -ne 0 ] ; then return $lret fi done =20 - do_tcpinq_test -r tcp -t tcp + do_tcpinq_test -r tcp -t tcp -i =20 return $? } --=20 2.53.0 From nobody Thu Jul 9 14:54:34 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8226233955 for ; Thu, 9 Jul 2026 07:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580840; cv=none; b=JczTdFijd2XdnwVdDiTEDYgBSXgsyG355f8A8H3PFp/8aBhE9bhx21BHddeMF3cYuZm2qDgJ8mX1Spl5m4M82Se0nSlQDGNCv+yXVW1BBVUQqgBpVD17axh9r8V+9SoVszuPh9XS96iBwr8+JpGoedXUDTK5xqBhiHYTLmeh8bw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783580840; c=relaxed/simple; bh=6t53jlO/sNkqZF/Wnz8/6HuF9DM0yT5WVlFAA2T+h2Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hY14mSnJFV4b27gWuHV/taifdlVUkY3exJ99JUgBXudOt2obrfIHkG72WbNLpPkgsrl7QNASSureyfhiosJZFz99bf1TN95hjBBAWkkFkQWlcodh1HflHS0WUxBZZIfDg/o2UzRotNsxx7I2xO6tiHmaPM1Ua9wS5zH0e6iVCC8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FYCec8Cd; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FYCec8Cd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 49A9A1F000E9; Thu, 9 Jul 2026 07:07:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783580838; bh=5JsvO+KNv/SBxIH3k4f5bvU7x0SQMQ/5iWnQzA0ZKyk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=FYCec8CdbtoCRE5NK9Ycbq7cl9oRgS6vxnZNbQvy7JY1RNsAwuzW9zE+ZO6GorU9x a8jnMvyp21ufkovVUD4B04z2xnU3UptDv+eBTovPec3Wp9mLnxJDJSj50HUzVqscdQ sqG9GR6UWePs4PAgXFxto9zEhVS8iYeENS9gB0MgcLAHIc7Z14xM4WB/7FOGxuMCRD PdpK4KqsC+VqzD+ymyaJ0UFk02ycZcNYRnGaHJ/1mtLA3jTgLhOZd5RmfIAysw+H2d 3DcvoS0GIUDSDOfRQBl1K74QdVbPq/w/CqGSWnrgFmRZ3uNqMBKNBMTrpXXfTDzMsO uF+bfI90BnYYA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 12/12] selftests: mptcp: sockopt: remove obsolete mptcp_inq Date: Thu, 9 Jul 2026 15:06:21 +0800 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Delete mptcp_inq binary and references since its functionality has been fully integrated into mptcp_sockopt. This simplifies the test suite structure and reduces maintenance overhead. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/.gitignore | 1 - tools/testing/selftests/net/mptcp/Makefile | 1 - tools/testing/selftests/net/mptcp/mptcp_inq.c | 614 ------------------ 3 files changed, 616 deletions(-) delete mode 100644 tools/testing/selftests/net/mptcp/mptcp_inq.c diff --git a/tools/testing/selftests/net/mptcp/.gitignore b/tools/testing/s= elftests/net/mptcp/.gitignore index 833279fb34e2..c62e91ce385d 100644 --- a/tools/testing/selftests/net/mptcp/.gitignore +++ b/tools/testing/selftests/net/mptcp/.gitignore @@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only mptcp_connect mptcp_diag -mptcp_inq mptcp_sockopt pm_nl_ctl *.pcap diff --git a/tools/testing/selftests/net/mptcp/Makefile b/tools/testing/sel= ftests/net/mptcp/Makefile index 22ba0da2adb8..fa80e6448728 100644 --- a/tools/testing/selftests/net/mptcp/Makefile +++ b/tools/testing/selftests/net/mptcp/Makefile @@ -22,7 +22,6 @@ TEST_PROGS :=3D \ TEST_GEN_FILES :=3D \ mptcp_connect \ mptcp_diag \ - mptcp_inq \ mptcp_sockopt \ pm_nl_ctl \ # end of TEST_GEN_FILES diff --git a/tools/testing/selftests/net/mptcp/mptcp_inq.c b/tools/testing/= selftests/net/mptcp/mptcp_inq.c deleted file mode 100644 index 5716998da192..000000000000 --- a/tools/testing/selftests/net/mptcp/mptcp_inq.c +++ /dev/null @@ -1,614 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 - -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#ifndef IPPROTO_MPTCP -#define IPPROTO_MPTCP 262 -#endif -#ifndef SOL_MPTCP -#define SOL_MPTCP 284 -#endif - -static int pf =3D AF_INET; -static int proto_tx =3D IPPROTO_MPTCP; -static int proto_rx =3D IPPROTO_MPTCP; - -static void __noreturn die_perror(const char *msg) -{ - perror(msg); - exit(1); -} - -static void die_usage(int r) -{ - fprintf(stderr, "Usage: mptcp_inq [-6] [ -t tcp|mptcp ] [ -r tcp|mptcp]\n= "); - exit(r); -} - -static void __noreturn xerror(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - fputc('\n', stderr); - exit(1); -} - -static const char *getxinfo_strerr(int err) -{ - if (err =3D=3D EAI_SYSTEM) - return strerror(errno); - - return gai_strerror(err); -} - -static void xgetaddrinfo(const char *node, const char *service, - struct addrinfo *hints, - struct addrinfo **res) -{ - int err; - -again: - err =3D getaddrinfo(node, service, hints, res); - if (err) { - const char *errstr; - - if (err =3D=3D EAI_SOCKTYPE) { - hints->ai_protocol =3D IPPROTO_TCP; - goto again; - } - - errstr =3D getxinfo_strerr(err); - - fprintf(stderr, "Fatal: getaddrinfo(%s:%s): %s\n", - node ? node : "", service ? service : "", errstr); - exit(1); - } -} - -static int sock_listen_mptcp(const char * const listenaddr, - const char * const port) -{ - int sock =3D -1; - struct addrinfo hints =3D { - .ai_protocol =3D IPPROTO_MPTCP, - .ai_socktype =3D SOCK_STREAM, - .ai_flags =3D AI_PASSIVE | AI_NUMERICHOST - }; - - hints.ai_family =3D pf; - - struct addrinfo *a, *addr; - int one =3D 1; - - xgetaddrinfo(listenaddr, port, &hints, &addr); - hints.ai_family =3D pf; - - for (a =3D addr; a; a =3D a->ai_next) { - sock =3D socket(a->ai_family, a->ai_socktype, proto_rx); - if (sock < 0) - continue; - - if (-1 =3D=3D setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, - sizeof(one))) - perror("setsockopt"); - - if (bind(sock, a->ai_addr, a->ai_addrlen) =3D=3D 0) - break; /* success */ - - perror("bind"); - close(sock); - sock =3D -1; - } - - freeaddrinfo(addr); - - if (sock < 0) - xerror("could not create listen socket"); - - if (listen(sock, 20)) - die_perror("listen"); - - return sock; -} - -static int sock_connect_mptcp(const char * const remoteaddr, - const char * const port, int proto) -{ - struct addrinfo hints =3D { - .ai_protocol =3D IPPROTO_MPTCP, - .ai_socktype =3D SOCK_STREAM, - }; - struct addrinfo *a, *addr; - int sock =3D -1; - - hints.ai_family =3D pf; - - xgetaddrinfo(remoteaddr, port, &hints, &addr); - for (a =3D addr; a; a =3D a->ai_next) { - sock =3D socket(a->ai_family, a->ai_socktype, proto); - if (sock < 0) - continue; - - if (connect(sock, a->ai_addr, a->ai_addrlen) =3D=3D 0) - break; /* success */ - - die_perror("connect"); - } - - if (sock < 0) - xerror("could not create connect socket"); - - freeaddrinfo(addr); - return sock; -} - -static int protostr_to_num(const char *s) -{ - if (strcasecmp(s, "tcp") =3D=3D 0) - return IPPROTO_TCP; - if (strcasecmp(s, "mptcp") =3D=3D 0) - return IPPROTO_MPTCP; - - die_usage(1); - return 0; -} - -static void parse_opts(int argc, char **argv) -{ - int c; - - while ((c =3D getopt(argc, argv, "h6t:r:")) !=3D -1) { - switch (c) { - case 'h': - die_usage(0); - break; - case '6': - pf =3D AF_INET6; - break; - case 't': - proto_tx =3D protostr_to_num(optarg); - break; - case 'r': - proto_rx =3D protostr_to_num(optarg); - break; - default: - die_usage(1); - break; - } - } -} - -/* wait up to timeout milliseconds */ -static void wait_for_ack(int fd, int timeout, size_t total) -{ - int i; - - for (i =3D 0; i < timeout; i++) { - int nsd, ret, queued =3D -1; - struct timespec req; - - ret =3D ioctl(fd, TIOCOUTQ, &queued); - if (ret < 0) - die_perror("TIOCOUTQ"); - - ret =3D ioctl(fd, SIOCOUTQNSD, &nsd); - if (ret < 0) - die_perror("SIOCOUTQNSD"); - - if ((size_t)queued > total) - xerror("TIOCOUTQ %u, but only %zu expected\n", queued, total); - assert(nsd <=3D queued); - - if (queued =3D=3D 0) - return; - - /* wait for peer to ack rx of all data */ - req.tv_sec =3D 0; - req.tv_nsec =3D 1 * 1000 * 1000ul; /* 1ms */ - nanosleep(&req, NULL); - } - - xerror("still tx data queued after %u ms\n", timeout); -} - -static void connect_one_server(int fd, int unixfd) -{ - size_t len, i, total, sent; - char buf[4096], buf2[4096]; - ssize_t ret; - - len =3D rand() % (sizeof(buf) - 1); - - if (len < 128) - len =3D 128; - - for (i =3D 0; i < len ; i++) { - buf[i] =3D rand() % 26; - buf[i] +=3D 'A'; - } - - buf[i] =3D '\n'; - - /* un-block server */ - ret =3D read(unixfd, buf2, 4); - assert(ret =3D=3D 4); - - assert(strncmp(buf2, "xmit", 4) =3D=3D 0); - - ret =3D write(unixfd, &len, sizeof(len)); - assert(ret =3D=3D (ssize_t)sizeof(len)); - - ret =3D write(fd, buf, len); - if (ret < 0) - die_perror("write"); - - if (ret !=3D (ssize_t)len) - xerror("short write"); - - ret =3D read(unixfd, buf2, 4); - assert(strncmp(buf2, "huge", 4) =3D=3D 0); - - total =3D rand() % (16 * 1024 * 1024); - total +=3D (1 * 1024 * 1024); - sent =3D total; - - ret =3D write(unixfd, &total, sizeof(total)); - assert(ret =3D=3D (ssize_t)sizeof(total)); - - wait_for_ack(fd, 5000, len); - - while (total > 0) { - if (total > sizeof(buf)) - len =3D sizeof(buf); - else - len =3D total; - - ret =3D write(fd, buf, len); - if (ret < 0) - die_perror("write"); - total -=3D ret; - - /* we don't have to care about buf content, only - * number of total bytes sent - */ - } - - ret =3D read(unixfd, buf2, 4); - assert(ret =3D=3D 4); - assert(strncmp(buf2, "shut", 4) =3D=3D 0); - - wait_for_ack(fd, 5000, sent); - - ret =3D write(fd, buf, 1); - assert(ret =3D=3D 1); - close(fd); - ret =3D write(unixfd, "closed", 6); - assert(ret =3D=3D 6); - - close(unixfd); -} - -static void get_tcp_inq(struct msghdr *msgh, unsigned int *inqv) -{ - struct cmsghdr *cmsg; - - for (cmsg =3D CMSG_FIRSTHDR(msgh); cmsg ; cmsg =3D CMSG_NXTHDR(msgh, cmsg= )) { - if (cmsg->cmsg_level =3D=3D IPPROTO_TCP && cmsg->cmsg_type =3D=3D TCP_CM= _INQ) { - memcpy(inqv, CMSG_DATA(cmsg), sizeof(*inqv)); - return; - } - } - - xerror("could not find TCP_CM_INQ cmsg type"); -} - -static void process_one_client(int fd, int unixfd) -{ - unsigned int tcp_inq; - size_t expect_len; - char msg_buf[4096]; - char buf[4096]; - char tmp[16]; - struct iovec iov =3D { - .iov_base =3D buf, - .iov_len =3D 1, - }; - struct msghdr msg =3D { - .msg_iov =3D &iov, - .msg_iovlen =3D 1, - .msg_control =3D msg_buf, - .msg_controllen =3D sizeof(msg_buf), - }; - ssize_t ret, tot; - - ret =3D write(unixfd, "xmit", 4); - assert(ret =3D=3D 4); - - ret =3D read(unixfd, &expect_len, sizeof(expect_len)); - assert(ret =3D=3D (ssize_t)sizeof(expect_len)); - - if (expect_len > sizeof(buf)) - xerror("expect len %zu exceeds buffer size", expect_len); - - for (;;) { - struct timespec req; - unsigned int queued; - - ret =3D ioctl(fd, FIONREAD, &queued); - if (ret < 0) - die_perror("FIONREAD"); - if (queued > expect_len) - xerror("FIONREAD returned %u, but only %zu expected\n", - queued, expect_len); - if (queued =3D=3D expect_len) - break; - - req.tv_sec =3D 0; - req.tv_nsec =3D 1000 * 1000ul; - nanosleep(&req, NULL); - } - - /* read one byte, expect cmsg to return expected - 1 */ - ret =3D recvmsg(fd, &msg, 0); - if (ret < 0) - die_perror("recvmsg"); - - if (msg.msg_controllen =3D=3D 0) - xerror("msg_controllen is 0"); - - get_tcp_inq(&msg, &tcp_inq); - - assert((size_t)tcp_inq =3D=3D (expect_len - 1)); - - iov.iov_len =3D sizeof(buf); - ret =3D recvmsg(fd, &msg, 0); - if (ret < 0) - die_perror("recvmsg"); - - /* should have gotten exact remainder of all pending data */ - assert(ret =3D=3D (ssize_t)tcp_inq); - - /* should be 0, all drained */ - get_tcp_inq(&msg, &tcp_inq); - assert(tcp_inq =3D=3D 0); - - /* request a large swath of data. */ - ret =3D write(unixfd, "huge", 4); - assert(ret =3D=3D 4); - - ret =3D read(unixfd, &expect_len, sizeof(expect_len)); - assert(ret =3D=3D (ssize_t)sizeof(expect_len)); - - /* peer should send us a few mb of data */ - if (expect_len <=3D sizeof(buf)) - xerror("expect len %zu too small\n", expect_len); - - tot =3D 0; - do { - iov.iov_len =3D sizeof(buf); - ret =3D recvmsg(fd, &msg, 0); - if (ret < 0) - die_perror("recvmsg"); - - tot +=3D ret; - - get_tcp_inq(&msg, &tcp_inq); - - if (tcp_inq > expect_len - tot) - xerror("inq %d, remaining %d total_len %d\n", - tcp_inq, expect_len - tot, (int)expect_len); - - assert(tcp_inq <=3D expect_len - tot); - } while ((size_t)tot < expect_len); - - ret =3D write(unixfd, "shut", 4); - assert(ret =3D=3D 4); - - /* wait for hangup. Should have received one more byte of data. */ - ret =3D read(unixfd, tmp, sizeof(tmp)); - assert(ret =3D=3D 6); - assert(strncmp(tmp, "closed", 6) =3D=3D 0); - - sleep(1); - - iov.iov_len =3D 1; - ret =3D recvmsg(fd, &msg, 0); - if (ret < 0) - die_perror("recvmsg"); - assert(ret =3D=3D 1); - - get_tcp_inq(&msg, &tcp_inq); - - /* tcp_inq should be 1 due to received fin. */ - assert(tcp_inq =3D=3D 1); - - iov.iov_len =3D 1; - ret =3D recvmsg(fd, &msg, 0); - if (ret < 0) - die_perror("recvmsg"); - - /* expect EOF */ - assert(ret =3D=3D 0); - get_tcp_inq(&msg, &tcp_inq); - assert(tcp_inq =3D=3D 1); - - close(fd); -} - -static int xaccept(int s) -{ - int fd =3D accept(s, NULL, 0); - - if (fd < 0) - die_perror("accept"); - - return fd; -} - -static int server(int unixfd) -{ - int fd =3D -1, r, on =3D 1; - - switch (pf) { - case AF_INET: - fd =3D sock_listen_mptcp("127.0.0.1", "15432"); - break; - case AF_INET6: - fd =3D sock_listen_mptcp("::1", "15432"); - break; - default: - xerror("Unknown pf %d\n", pf); - break; - } - - r =3D write(unixfd, "conn", 4); - assert(r =3D=3D 4); - - alarm(15); - r =3D xaccept(fd); - - if (-1 =3D=3D setsockopt(r, IPPROTO_TCP, TCP_INQ, &on, sizeof(on))) - die_perror("setsockopt"); - - process_one_client(r, unixfd); - - close(fd); - return 0; -} - -static int client(int unixfd) -{ - int fd =3D -1; - - alarm(15); - - switch (pf) { - case AF_INET: - fd =3D sock_connect_mptcp("127.0.0.1", "15432", proto_tx); - break; - case AF_INET6: - fd =3D sock_connect_mptcp("::1", "15432", proto_tx); - break; - default: - xerror("Unknown pf %d\n", pf); - } - - connect_one_server(fd, unixfd); - - return 0; -} - -static void init_rng(void) -{ - unsigned int foo; - - if (getrandom(&foo, sizeof(foo), 0) =3D=3D -1) { - perror("getrandom"); - exit(1); - } - - srand(foo); -} - -static pid_t xfork(void) -{ - pid_t p =3D fork(); - - if (p < 0) - die_perror("fork"); - else if (p =3D=3D 0) - init_rng(); - - return p; -} - -static int rcheck(int wstatus, const char *what) -{ - if (WIFEXITED(wstatus)) { - if (WEXITSTATUS(wstatus) =3D=3D 0) - return 0; - fprintf(stderr, "%s exited, status=3D%d\n", what, WEXITSTATUS(wstatus)); - return WEXITSTATUS(wstatus); - } else if (WIFSIGNALED(wstatus)) { - xerror("%s killed by signal %d\n", what, WTERMSIG(wstatus)); - } else if (WIFSTOPPED(wstatus)) { - xerror("%s stopped by signal %d\n", what, WSTOPSIG(wstatus)); - } - - return 111; -} - -int main(int argc, char *argv[]) -{ - int e1, e2, wstatus; - pid_t s, c, ret; - int unixfds[2]; - - parse_opts(argc, argv); - - e1 =3D socketpair(AF_UNIX, SOCK_DGRAM, 0, unixfds); - if (e1 < 0) - die_perror("pipe"); - - s =3D xfork(); - if (s =3D=3D 0) { - close(unixfds[0]); - ret =3D server(unixfds[1]); - close(unixfds[1]); - return ret; - } - - close(unixfds[1]); - - /* wait until server bound a socket */ - e1 =3D read(unixfds[0], &e1, 4); - assert(e1 =3D=3D 4); - - c =3D xfork(); - if (c =3D=3D 0) - return client(unixfds[0]); - - close(unixfds[0]); - - ret =3D waitpid(s, &wstatus, 0); - if (ret =3D=3D -1) - die_perror("waitpid"); - e1 =3D rcheck(wstatus, "server"); - ret =3D waitpid(c, &wstatus, 0); - if (ret =3D=3D -1) - die_perror("waitpid"); - e2 =3D rcheck(wstatus, "client"); - - return e1 ? e1 : e2; -} --=20 2.53.0