From nobody Mon Aug 24 20:41:15 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 78F612459DD for ; Sat, 25 Jul 2026 13:14:10 +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=1784985251; cv=none; b=IsYrXThuUktU/2Trx3xI+BSw5lDE21/us11dADgR9PAYZN33qQgtJ5vfMUmCVUtA57/qYdrTjJJjqG1qvulvZ2QMZoDtp08UW6TcGKPjmHEcirEJ5ffkBf0k6bhcZr+hBOgJ9TW93xDrelZGja298cWGsRjuanFlM8yBOK6YwfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784985251; c=relaxed/simple; bh=h19MppLedVsX1Ds15hz0Pe+O4tVFqGLXYICSVC30XbU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Lv72JfWkkAVSVYOYM+fd1Pcj8bu/lQB9DZwoUuJd32jlwP7ieehqIO1sUH2VfnkMQ+1KxzuB5i+euaapfz6FdJkVuy/4tOabanDTs6M9pToA5Pv+He3Aw6fcKLxGt5kDfk4TMe2tq8P0/HHvJKpbBAJYWKjk9krmRXDkn4Yr/zI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bXWn1em3; 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="bXWn1em3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 16EA61F00A3A; Sat, 25 Jul 2026 13:14:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784985250; bh=jyhh3FSG7/pumiagk/fTo7BJPLJDBvO3Xz7ejsM7DrU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=bXWn1em3bD32QAeQegTrKQvEkexuQVtHSFI9EEzPsoh9YvYERg/QC7ed9FrBzsS8B 6TBAZrtK5LJwlQTL+1aWWsbZDwhkLUqPyQUraDqFNAdqUea2vkpUd1MBS9yz6e9jSY AjRsphaS/GiimmPhljL80PGx7fPb6nxLeIHZscg8jDnfp7oG0yjvPwNfUZK2FbgdNE KXSATpJCekQxsI2B4i09NP79WXVub7KtsRaED7DnUewsyTyq3xTXa+LGrmIxVq6TwJ s+Ux0gWPrgeWuNIiEZkMJ+1POORSaFa2kwr+JiB9n++xwadBOHanr5Hb9KkEmxkX+7 J6HscJ5lAvQzQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 1/6] mptcp: copy the subflow's rcv_tos to the msk on accept Date: Sat, 25 Jul 2026 21:13:38 +0800 Message-ID: <8ea981071171105d5688a5c4a182a9c1f25624eb.1784985085.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 The server-side master socket never inherited the tos seen in the peer's SYN. mptcp_sk_clone_init() now copies ssk->rcv_tos onto nsk so inet->rcv_tos on the accepted msk reflects the peer's tos byte (matching plain TCP). Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 954e20bb27de..178cd8de990b 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3699,6 +3699,8 @@ struct sock *mptcp_sk_clone_init(const struct sock *s= k, #endif mptcp_copy_ip_options(nsk, sk); =20 + inet_sk(nsk)->rcv_tos =3D inet_sk(ssk)->rcv_tos; + msk =3D mptcp_sk(nsk); WRITE_ONCE(msk->local_key, subflow_req->local_key); WRITE_ONCE(msk->token, subflow_req->token); --=20 2.53.0 From nobody Mon Aug 24 20:41:15 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 71071253958 for ; Sat, 25 Jul 2026 13:14: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=1784985253; cv=none; b=nQXeKEvS0HQdk3owOd+2suOxcvK7GMjCsygWT2N42Nij1JYv2vCnD9w3w8yKp9letq1lN9XUfwP4VTyAbSD9mLypjJReFVjwZp4pT6h8yOCzu1d7f8XHTjN2i9ZQgSAJ2WZmE0H9lDJ1Fy6vh0v8qLAOvui9I0SylIE1P5KN+SE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784985253; c=relaxed/simple; bh=9qU4Vb2AP1lR+FkMg2hxSUxiBrxulIXnxEZVAWX86/c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TQl7MMmD7J2s5umxR1hpHox7BGxVD9kbOze/AGX3/UIdRzepB2lLYLQ1k6s7MnY/MyagjfJ58l3hfPvs+OWu8MpWLUPpkiFIu/Ki1ASsAjTTL94/r6zzBmvdIwRXSY8rTwIwKtBF/5XBj70ogS5k3JtuENbhow/z3zLGrm8tPIE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Y2ZAwaiA; 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="Y2ZAwaiA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CF66A1F000E9; Sat, 25 Jul 2026 13:14:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784985252; bh=Ep5w7qcPFEaguSGfLYzCUc0XaQhWMbbQ5Ekt3QGueuM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Y2ZAwaiA/IJDYwerbPRl/Wq4732+V6vyq8ekUfYg2fYruxsDplynujeznPqw4DvqJ 0cm97AYBQPRC+ASLK9IxcTa/aiasdnBwTJ5il815gqSfl/gy6XrD1LRq9deHyisgpA uz94mK6a+pCehZ7XrHT8ArMtBxJnD5ztjhnBaiT0kZjVhJS6WrOKzWZcY/nMphiROZ ib16CMNuKBqCIL1L1fyHmfmwd0Cym1TR3pmQjkQHilOJfxH+gK9nn8xPqCiRYtBYTf DgoVBUKmtTHX1cy0g8nGC940mePqWoWkEewMYbSYLkReWI/wJ8N35UxcPZHnKVWclU 3KQbGFCCpDVOg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 2/6] mptcp: don't reset dst when setting default 0 tos Date: Sat, 25 Jul 2026 21:13:39 +0800 Message-ID: <80a22df256550b7bbed7a7e06b8d8c6a6019fee0.1784985085.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 __ip_sock_set_tos() is called unconditionally during setsockopt and on each sync_socket_options() pass, even when inet_sk(sk)->tos is 0 (the default). On SOCK_STREAM the helper masks out the ECN bits and writes sk_tos2prio(), which leaves priority=3D0 alone but still calls sk_dst_reset() unconditionally, forcing a route lookup on the next packet. Guard both call sites with 'if (val > 0)' so the default-0 case is a no-op. Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index fcf6feb2a9eb..1b2487a5ae2f 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -762,7 +762,8 @@ static int mptcp_setsockopt_v4_set_tos(struct mptcp_soc= k *msk, int optname, bool slow; =20 slow =3D lock_sock_fast(ssk); - __ip_sock_set_tos(ssk, val); + if (val > 0) + __ip_sock_set_tos(ssk, val); unlock_sock_fast(ssk, slow); } release_sock(sk); @@ -1562,7 +1563,8 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) ssk->sk_bound_dev_if =3D sk->sk_bound_dev_if; ssk->sk_incoming_cpu =3D sk->sk_incoming_cpu; ssk->sk_ipv6only =3D sk->sk_ipv6only; - __ip_sock_set_tos(ssk, inet_sk(sk)->tos); + if (inet_sk(sk)->tos > 0) + __ip_sock_set_tos(ssk, inet_sk(sk)->tos); =20 if (sk->sk_userlocks & tx_rx_locks) { ssk->sk_userlocks |=3D sk->sk_userlocks & tx_rx_locks; --=20 2.53.0 From nobody Mon Aug 24 20:41:15 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 2A60B2459DD for ; Sat, 25 Jul 2026 13:14: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=1784985255; cv=none; b=bFQRAVRZWhkguMVCWoY0VVrtL5MihxzSbpuIM+YQ11WvjJqEEJSWX//DQnEJekVqfuctYlX+M3W8vazfzqAX01duH1szort7YvXDjPM3vBpAHLWGVbAb/IakEcd/BrVCWc8tmxjETgXW6K0a/R5ExtUiuzsp4JDlw+lhmjt0QqE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784985255; c=relaxed/simple; bh=MnUUPbvgRWLBW3H0TRwqFdI7VpHcbuKPYoATHp8Eozg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p6ThS8DmtPBNRBktXJ0ryZG+pu+eFdM53gjmlf2oezrPQMY4VWzligAW/Y0gRWvFnLHdpchv/exhwXUfBmHaQdDGZA1ttgHyvbaSl2moB3Hj/Im3zuUTc1mKkDVlCPAaYAd9JLtkN7/K3wNaRBydSALRjO612+oSLv7p1gVIrXU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lPciFFHa; 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="lPciFFHa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A67E31F00A3A; Sat, 25 Jul 2026 13:14:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784985253; bh=RE1Cqk2Ezk8fjSzTnDbDcIxnX2r/UFAV/PuAyWcUx5U=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lPciFFHa20wr5Cqpu8UOID1YKiHqDAfr6E+iB0Hjl5rMfeu8Kk3recyw5kczB00qy jR8PFuhSNEZSYRTZ2L2RxWKqhNDep+EAD8NqsDdsMkIGsb9E9jGzKD0QqjWak7+5D2 rNJ1pZAq6L1rdXWk7QCWUEjKlDR6cC/55upa+feDcMoHUMiX5I5olfCjLzZQiJsyKY D1FKg2mLaRs8+UGfoQRCYBftUQ7HbIJlakA3kjVJ37jNaRx9JDGUDcyXmM/iLeomkH swPzJErbSePVIknOxTKr+ak+ZT2HPmm38WLOlHL6C0CVAyJi3j8XE7AwXsrkgbHaB0 22PAsmcRTJM5Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 3/6] mptcp: inherit sk_reuse on subflow creation Date: Sat, 25 Jul 2026 21:13:40 +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 Propagate sk_reuse from the MPTCP master socket to newly-created subflows in sync_socket_options(), mirroring how sk_reuseport and sk_reuse are already handled for the subflow. Without this, a subflow started after the master toggled SO_REUSEADDR would not inherit the setting, leading to inconsistent reuse semantics between msk and ssk. Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 1b2487a5ae2f..594ce3b4b707 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -1603,6 +1603,8 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) inet_assign_bit(FREEBIND, ssk, inet_test_bit(FREEBIND, sk)); inet_assign_bit(BIND_ADDRESS_NO_PORT, ssk, inet_test_bit(BIND_ADDRESS_NO_= PORT, sk)); WRITE_ONCE(inet_sk(ssk)->local_port_range, READ_ONCE(inet_sk(sk)->local_p= ort_range)); + + ssk->sk_reuse =3D sk->sk_reuse; } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) --=20 2.53.0 From nobody Mon Aug 24 20:41:15 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 8BE7D2459DD for ; Sat, 25 Jul 2026 13:14:15 +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=1784985257; cv=none; b=YMMiIIoGdMSYXWi76ObpgdRc4+z4VCc3V5/oaz0pBoiL7behErIuyEaH7KulmCqeuh2Na7ssTsLhtYf5dyo97mqFtJqQvTKeFAAVxzklmM7YfjvneBrovEst7RysWto1cOfdrDFQkKNbFEZWD4RuGzGm04nqwJzsK+wkZ8LAXx8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784985257; c=relaxed/simple; bh=YOM5MjXboZK1nLzWp3OsjphcndpHvkkZZUgVWgt1nBg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=feyQnq888WWUQhnrXmVEKjAk8vue8TnM+R5iRJJNnuATUpZpn6BghxYJuLxjBkL+rSohfBaXkfetxeYkJP5zYJ2fe14+eShw0p6C/8gvC+FodUGWWf2LG25z7y9S62R4mgcjBcL7izWtkXE+R8iXx6MepN/b8Er2tMXdtRZbMAg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nOrorQsn; 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="nOrorQsn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6581B1F000E9; Sat, 25 Jul 2026 13:14:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784985255; bh=Cl9pTw0HjAbY0gvvuGYcQeZqNEak9Xi4elcNPT35Efs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=nOrorQsnAY/3DBX8lMs6Qdv7QWndTrjmL98Q2yPTZVBS7llIQSu2S1FIiZa2WCkmY FN+uEI/TBRddCeFhR9tKgmbWtTRGM87fNq0gOEe0TohmeRlPTBMJu9gpgpSczo+QfD f/GjgNvjdXEuA4XIGYLDr4bxflm4MWObcdHy/qC2HHWlIWChppP4PzKgVs9gZCbIs4 lD89ujTBYwT2KizlWobD42hALrZOLaQ/TpoRoEVZPk1gvrV+/v4850QKdtLfVxcYhq AMbx+E6hGFs57RI8ZImJXvtSlwxZ/36Ro+HuEXC1oUZZkdRu6b0XUfhCJXLrjO/zdM oPCOtBuemEmUQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 4/6] mptcp: handle TCP_MAXSEG getsockopt in common case Date: Sat, 25 Jul 2026 21:13:41 +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 The TCP_MAXSEG getsockopt() case was a tail-clause returning mptcp_getsockopt_first_sf_only() while every other "first subflow only" option (TCP_FASTOPEN_*) was already grouped in the common case. Move it next to its peers so the dispatch reads uniformly. No behavioural change; the lookup still returns the cached MSS on the first subflow. Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 594ce3b4b707..e40a5a23d1c9 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -1424,6 +1424,7 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock= *msk, int optname, case TCP_FASTOPEN_CONNECT: case TCP_FASTOPEN_KEY: case TCP_FASTOPEN_NO_COOKIE: + case TCP_MAXSEG: return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen); case TCP_INQ: @@ -1448,9 +1449,6 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock= *msk, int optname, return mptcp_put_int_option(msk, optval, optlen, msk->notsent_lowat); case TCP_IS_MPTCP: return mptcp_put_int_option(msk, optval, optlen, 1); - case TCP_MAXSEG: - return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, - optval, optlen); } return -EOPNOTSUPP; } --=20 2.53.0 From nobody Mon Aug 24 20:41:15 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 8459123AE62 for ; Sat, 25 Jul 2026 13:14:17 +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=1784985258; cv=none; b=FlFmiMHPbd8eyS21zp9Fq/o44eopsW+UPlGuEjtEpstj4jtls67k0Hy3b+dnQSPuTO0loHVSrB9KxarXxhdM1CaALyHJkd6/b86CDNGLjeIxVo5xCoMXxPe+kI+Km77ICY6MqTunN7bTVh2HvwB7Rmh58yMFnD0tih45oc3BEig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784985258; c=relaxed/simple; bh=NzgcNt7WrZxLxb3fl/I7ol8GF5gHfSsOHfIe+oSc4tc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lu7HkaqkKBGMwj7KMdsTAhTXuG+L54xYMv/GryVdr7iSnRfmUcziCyxjjAoDOiEHNkDqh9zkoC3BsB3cMDzSTIPgScq3IE/JyNiebxWi1ourqcHogNSmoNP3PvsCihbg3vgFTXWZ6yP4nbiygz95tzTD6vdWWqdHG87XR9OkFBs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=o0PC+7NN; 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="o0PC+7NN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D324D1F00A3A; Sat, 25 Jul 2026 13:14:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784985257; bh=iDUwgc3YWb0PTSj+Lt3liXAYK/Yjf3lkzFfN87TDiIY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=o0PC+7NNOyyqi73a8E4/k0yEAPRhmwx/xHt7viLaTWLGYJbt08KoiIRRD36VvhvAJ ysn+whDR309Tp7Vwvn5SVfRgT6sh1HUeipGxoaiNyOFpwSG6yZPPViIl2DDrcQkk2W CIg7qhLTmqQF8RmROhzYQRppE4iRVeNejgOkTcEXlAktL3MP4gaZMdXM2Eedqxfpnk JCrYzlsuvMObxqgOovMK3nRWYIS/Zm5QXwrAhqS8rx138HvRXBZ7WHvW6pwe8Uy5IS BrRV18rcWEhkC8AgvqfWIFbUv98bP/Il6+V67dhba3C5X9xIy2grmardhXcOtkiqID e9WcqtnWJGdTA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 5/6] mptcp: add TCP_SYNCNT setsockopt/getsockopt Date: Sat, 25 Jul 2026 21:13:42 +0800 Message-ID: <7b893aca2bfc58dfd9992ed3eb3de61ce7b20a9f.1784985085.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 Surface TCP_SYNCNT to userspace on the MPTCP master socket. setsockopt(TCP_SYNCNT) validates the value via __mptcp_setsockopt_set_val() and stores it in inet_csk(sk)->icsk_syn_retries on the msk. getsockopt() reads the same field back. A newly created subflow picks up the master socket's syn_retries through sync_socket_options(), so the setting takes effect for outgoing SYNs without further plumbing. Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index e40a5a23d1c9..50dcb53effe2 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -897,6 +897,17 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock = *msk, int optname, ret =3D mptcp_setsockopt_all_sf(msk, SOL_TCP, optname, optval, optlen); break; + case TCP_SYNCNT: { + int syncnt =3D inet_csk(sk)->icsk_syn_retries; + + ret =3D __mptcp_setsockopt_set_val(msk, MAX_TCP_SYNCNT, + &tcp_sock_set_syncnt, + &syncnt, + val); + if (ret =3D=3D 0) + inet_csk(sk)->icsk_syn_retries =3D syncnt; + break; + } default: ret =3D -ENOPROTOOPT; } @@ -1449,6 +1460,9 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock= *msk, int optname, return mptcp_put_int_option(msk, optval, optlen, msk->notsent_lowat); case TCP_IS_MPTCP: return mptcp_put_int_option(msk, optval, optlen, 1); + case TCP_SYNCNT: + return mptcp_put_int_option(msk, optval, optlen, + inet_csk(sk)->icsk_syn_retries); } return -EOPNOTSUPP; } @@ -1603,6 +1617,8 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) WRITE_ONCE(inet_sk(ssk)->local_port_range, READ_ONCE(inet_sk(sk)->local_p= ort_range)); =20 ssk->sk_reuse =3D sk->sk_reuse; + if (inet_csk(sk)->icsk_syn_retries > 0) + tcp_sock_set_syncnt(ssk, inet_csk(sk)->icsk_syn_retries); } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) --=20 2.53.0 From nobody Mon Aug 24 20:41:15 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 B90C02E8DE3 for ; Sat, 25 Jul 2026 13:14: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=1784985259; cv=none; b=CYakAha5IBsJKTODrwncVfzFjpV+EtDN0+3/B7c+WGEgOEIjVIL6sGsCyTUoZAAI3LVK7WCfzzSOwf3bDCREvAr2u7pMPahXUML1+k1XRMk8lTPlDZpn8F5pevHlG+47++1P3qV3RnjIlur80tKP27gRu1O58O/axQ3vEA3qMzk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784985259; c=relaxed/simple; bh=wj8lVo6tzFkl+Vy0qQBqCoY9i8jUX7m+o8IQAreL0e4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nRwE7FtoujcLacxDzgGvFhWpkJns6wyUM5lKomMQ/RORhWOZtIFLMz/AAuN6hz7Pvo4gZ82gXOL01hIn+xyCSpiAPLeC+UwznjMi94j5bgHGt1LtkmPkdt5zAkrYjB7dp6QozbNZfoU7yIwbeu7Ttr8TNcZlVUEclOKzyvzyjvA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WPYVyb5R; 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="WPYVyb5R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C4E881F000E9; Sat, 25 Jul 2026 13:14:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784985258; bh=rQKUOQwkGHcYW9n0GP3LeQK8QxSnFVbnQZ+xUmXIhJI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WPYVyb5R3ap/UNNYFTpa3HWzBCzj0PYy+buZDgwnIQCKBSXslUXN+9YIoi/zqUOej +YhdPwiopRFScmnTYLDyxNinXP5LZxXvh1+5I/GYtioPadG96OiKk+1FlhGyv2V/9W /qqm/JQ8HVTXsXsooFj2vwZSEC1P7H6OciFZUN1szeL1wIWu9lO4Rd1JXAaTZJE70Y jQjen1wlkfBeoPAoMsXsIOW+5sUmX7iMrzcxtWa1CELiHXreoqjnkHM/y+SdIfMtKE /fqE2YKRIrCEMIpbQ4NnikvvscQomdWhHeU+oxKCWtkGBIBGO84JEx+EcqKEGXkN79 eBOHqORniGJQA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 6/6] selftests: mptcp: sockopt: cover LINGER REUSEADDR PRIORITY NODELAY SYNCNT Date: Sat, 25 Jul 2026 21:13:43 +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 Extend mptcp_sockopt.c with tests for SOL_SOCKET (SO_REUSEADDR, SO_LINGER, SO_PRIORITY) and SOL_TCP (TCP_NODELAY, TCP_SYNCNT), each exercising both setsockopt() and getsockopt() on a connected MPTCP socket. SO_REUSEADDR on the msk reports 1 (SK_CAN_REUSE) once any non-zero value is set; this captures the documented behaviour where the master socket reflects the subflow's reuse state. TCP_SYNCNT coverage pairs with the kernel side that propagates icsk_syn_retries to the subflow. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index b6e58d936ebe..b04e24df9dfe 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -35,6 +35,9 @@ static int pf =3D AF_INET; #ifndef SOL_MPTCP #define SOL_MPTCP 284 #endif +#ifndef SOL_TCP +#define SOL_TCP 6 +#endif =20 #ifndef MPTCP_INFO struct mptcp_info { @@ -229,6 +232,30 @@ static int sock_listen_mptcp(const char * const listen= addr, return sock; } =20 +static void test_so_reuseaddr_sockopt(int fd) +{ + int val_in =3D 1, val_out, expected; + socklen_t s; + int r; + + r =3D setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val_in, sizeof(val_in)); + if (r !=3D 0) + die_perror("setsockopt SO_REUSEADDR"); + + s =3D sizeof(val_out); + r =3D getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val_out, &s); + if (r !=3D 0) + die_perror("getsockopt SO_REUSEADDR"); + + /* SO_REUSEADDR on MPTCP msk returns 1 (SK_CAN_REUSE) when set, + * regardless of the input value. The actual reuse semantics are + * applied to the nmpc subflow. + */ + expected =3D val_in ? 1 : 0; + if (val_out !=3D expected) + xerror("SO_REUSEADDR %d !=3D %d\n", expected, val_out); +} + static int sock_connect_mptcp(const char * const remoteaddr, const char * const port, int proto) { @@ -247,6 +274,8 @@ static int sock_connect_mptcp(const char * const remote= addr, if (sock < 0) continue; =20 + test_so_reuseaddr_sockopt(sock); + if (connect(sock, a->ai_addr, a->ai_addrlen) =3D=3D 0) break; /* success */ =20 @@ -769,6 +798,89 @@ static void test_ip_tos_sockopt(int fd) xerror("expect socklen_t =3D=3D -1"); } =20 +static void test_so_linger_sockopt(int fd) +{ + struct linger ling_in, ling_out; + socklen_t s; + int r; + + ling_in.l_onoff =3D 1; + ling_in.l_linger =3D 30; + r =3D setsockopt(fd, SOL_SOCKET, SO_LINGER, &ling_in, sizeof(ling_in)); + if (r !=3D 0) + die_perror("setsockopt SO_LINGER"); + + s =3D sizeof(ling_out); + memset(&ling_out, 0, sizeof(ling_out)); + r =3D getsockopt(fd, SOL_SOCKET, SO_LINGER, &ling_out, &s); + if (r !=3D 0) + die_perror("getsockopt SO_LINGER"); + + if (ling_in.l_onoff !=3D ling_out.l_onoff || + ling_in.l_linger !=3D ling_out.l_linger) + xerror("SO_LINGER %d/%d !=3D %d/%d\n", + ling_in.l_onoff, ling_in.l_linger, + ling_out.l_onoff, ling_out.l_linger); +} + +static void test_so_priority_sockopt(int fd) +{ + int prio_in, prio_out; + socklen_t s; + int r; + + prio_in =3D 5; + r =3D setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &prio_in, sizeof(prio_in)); + if (r !=3D 0) + die_perror("setsockopt SO_PRIORITY"); + + s =3D sizeof(prio_out); + r =3D getsockopt(fd, SOL_SOCKET, SO_PRIORITY, &prio_out, &s); + if (r !=3D 0) + die_perror("getsockopt SO_PRIORITY"); + + if (prio_in !=3D prio_out) + xerror("SO_PRIORITY %d !=3D %d\n", prio_in, prio_out); +} + +static void test_tcp_nodelay_sockopt(int fd) +{ + int val_in =3D 1, val_out; + socklen_t s; + int r; + + r =3D setsockopt(fd, SOL_TCP, TCP_NODELAY, &val_in, sizeof(val_in)); + if (r !=3D 0) + die_perror("setsockopt TCP_NODELAY"); + + s =3D sizeof(val_out); + r =3D getsockopt(fd, SOL_TCP, TCP_NODELAY, &val_out, &s); + if (r !=3D 0) + die_perror("getsockopt TCP_NODELAY"); + + if (val_in !=3D val_out) + xerror("TCP_NODELAY %d !=3D %d\n", val_in, val_out); +} + +static void test_tcp_syncnt_sockopt(int fd) +{ + int val_in =3D 3, val_out; + socklen_t s; + int r; + + r =3D setsockopt(fd, SOL_TCP, TCP_SYNCNT, &val_in, sizeof(val_in)); + if (r !=3D 0) + die_perror("setsockopt TCP_SYNCNT"); + + s =3D sizeof(val_out); + r =3D getsockopt(fd, SOL_TCP, TCP_SYNCNT, &val_out, &s); + if (r !=3D 0) + die_perror("getsockopt TCP_SYNCNT"); + + if (val_in !=3D val_out) + xerror("TCP_SYNCNT %d !=3D %d\n", val_in, val_out); +} + static int client(int pipefd) { int fd =3D -1; @@ -787,6 +899,10 @@ static int client(int pipefd) } =20 test_ip_tos_sockopt(fd); + test_so_linger_sockopt(fd); + test_so_priority_sockopt(fd); + test_tcp_nodelay_sockopt(fd); + test_tcp_syncnt_sockopt(fd); =20 connect_one_server(fd, pipefd); =20 --=20 2.53.0