From nobody Mon Aug 24 20:41:14 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 8364B305E28 for ; Thu, 30 Jul 2026 02:54: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=1785380056; cv=none; b=synqen9GZrPZB0593RqQN+AVGIekUTEGB03BMXbPO00PyMo6KlNf7CkGijW4cExxiQ4LlE8fu9QcMMCG5BF/71IMaXFArepcQo/ErXBvlNGO+OpD8bKjkA8CuDqdJW+QC8RKfN8GA3iEzWiOemd6ML/93pohu39u4Z0Rvcywx7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380056; c=relaxed/simple; bh=s8pq05OInwO8anMtKSeboSR9vH0O5yCtMQNiEBAcHsQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C3nUcYO32i9eGtNUB+l1LnDrUf0eaee/m+PyzcsmIApwqz3jcsQKwGhHJJyDXforpfFFgT5ZtnWBnjh/e27lRzGL1f2I7udnAjjpc3aVCBN7x9GAWAVkpIWRE12DJ5XLtSsUz/ZSoxhfhbz1x2vvl3W2eGlbQOzVHvhkn5NIoGQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b7S4yBSj; 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="b7S4yBSj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 639BC1F00A3A; Thu, 30 Jul 2026 02:54:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380055; bh=swZuJTtqz0JiPaHZ7U6Tc7cZUI0KHu5XATW4pxYnpZ4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=b7S4yBSjAOwTFvmf0RObG2ZWMmRZsC5mD+nh/HR975X/wi038pjS7RDw0JQGXbwUx p3NoM4sc+CAkAqow+paS5PXnSmxOL3a6q/5gYkeXwXW4NWiJdtzDIVeFyeg/5Kk/oI IGOKlrnAPPrCkccojXDVStZLuAsO77vJHXNeKGFMHLzudAzD3wXHokCJcBId5VJ2lD i36HZpdd36+DFiYhH/d/9WLALyKW9pFVOrlGyRyJDnnKzETBnf0PZV3ZKnVBNjVYDp dzYXDzzRx7N19T/hgsc4QLHIrYDOzJ9HniNdzjRxpeidJzSNhV6T+OgG8ih+M6Vicq 5kM46o90gpurg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 01/10] mptcp: preserve msk's sk_bound_dev_if on PM-default subflows Date: Thu, 30 Jul 2026 10:53:54 +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 When the path manager creates a new subflow via __mptcp_subflow_connect(), it currently writes local->ifindex to ssk->sk_bound_dev_if unconditionally. The value was previously synced from the msk by mptcp_sockopt_sync_locked() -> sync_socket_options(), so the unconditional write in the connect path overwrites that inheritance. When the path manager leaves local->ifindex at 0 (no interface pinned for this subflow), the write wipes the synced value and clears any SO_BINDTODEVICE / SO_BINDTOIFINDEX binding the user set on the msk. The subflow then becomes free to route over any interface, bypassing VRF and per-interface binding restrictions the user explicitly requested on the master socket. Only override sk_bound_dev_if when the path manager actually picked an interface for this subflow; otherwise keep the value inherited from the msk. Signed-off-by: Geliang Tang --- net/mptcp/subflow.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 8e386899ceb9..c39243c85f50 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1667,7 +1667,15 @@ int __mptcp_subflow_connect(struct sock *sk, const s= truct mptcp_pm_local *local, if (addr.ss_family =3D=3D AF_INET6) addrlen =3D sizeof(struct sockaddr_in6); #endif - ssk->sk_bound_dev_if =3D local->ifindex; + /* Only override the bound device if the path manager picked one. + * When local->ifindex =3D=3D 0 the subflow must inherit sk_bound_dev_if + * synced from the msk via mptcp_sockopt_sync_locked() - otherwise + * SO_BINDTODEVICE / SO_BINDTOIFINDEX set on the master socket would + * be silently cleared, letting traffic route over unintended + * interfaces (bypassing VRF / interface-binding restrictions). + */ + if (local->ifindex) + ssk->sk_bound_dev_if =3D local->ifindex; err =3D kernel_bind(sf, (struct sockaddr_unsized *)&addr, addrlen); if (err) { MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNTXBINDERR); --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 ECDE52BCF4C for ; Thu, 30 Jul 2026 02:54: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=1785380058; cv=none; b=YtfX464Ozfx54jpg9cpYdTcRtYAQH6Zm+8he6O+AcjR3Ad/jggdUTFqZ9+dfueHNM0RVHDrSMRF0NMnrAcUBVC3uawuCZaF3JNWTNRGmN3IEMWzcnNwUpPIgs8Lnxzrk5qsmF181dMOnkAP48QOfKbl4f5rqD0v1pfUHAAwrHtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380058; c=relaxed/simple; bh=hnRdmd3i4pMqRlq2KAW5JlOwu1gHDhXakz3I13cZSUM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k1jxo/KjL+HHppE5/0MnEs9ero4ijutMPzHAUAyC8zr654uoCbN9+nYagGAwnzxaK8o10szd5TfySYW8oi7aw1IFfNeAijb07BdJIaHIQq2Q7+yBokO11U8plIo/8m/s8Nic/MylZbGgFgJPsD2fBiLVCPdU2msiG2Ln2tHSXjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CA7ZzUFi; 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="CA7ZzUFi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6DD51F000E9; Thu, 30 Jul 2026 02:54:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380056; bh=YV0JXnpiXszaXfnHGLGoqUaEj8Uho1EeAyo0R88VJLo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=CA7ZzUFiLUVwJy9ku1tT9CMAQ2Loaa9SWZNMPSE0u3GY/BfB7Y5+TVHjDcN2Nvq5Q HkkmhWKyIgP4pN332+K9QHtpzbqPM3R7QAeNuBokqSkP3F8I8LLD8Uip19jSxb7bYr ZGs3xFsc2gdIhe6+J/+mlyYG/LWt8UN0lvjLBzVO+pdYsGAHPyPapR8hNGtIqv8Rwu o1LdWcrSkPUUrSAGN/p2DMvQX2lCBV947J5kPWo0J3Hpo61kIZjz64xKHMZfK60tuH KM8oqfgjvrWRicALgBULe94Pyz6e96vGKqKoUl81DJDRXxpIh5fuVt7pGSNZnuu67n ONv/aDBvVArfQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 02/10] mptcp: inherit sk_reuse/sk_reuseport on subflow creation Date: Thu, 30 Jul 2026 10:53:55 +0800 Message-ID: <7e0df1d3036d4eed4667c3997d04bf482b792e0d.1785378180.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 Propagate sk_reuse and sk_reuseport from the master socket to newly-created subflows. Without this, subflows created after the master toggles SO_REUSEADDR/SO_REUSEPORT would not inherit the setting. Also bump setsockopt_seq in the SO_REUSEPORT/SO_REUSEADDR path so that subflows created later (e.g. via MP_JOIN) trigger sync_socket_options() instead of skipping it. Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index fcf6feb2a9eb..37e65923f544 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -326,6 +326,8 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_soc= k *msk, int optname, sk->sk_bound_dev_if =3D ssk->sk_bound_dev_if; else if (optname =3D=3D SO_BINDTOIFINDEX) sk->sk_bound_dev_if =3D ssk->sk_bound_dev_if; + + sockopt_seq_inc(msk); } release_sock(sk); return ret; @@ -1601,6 +1603,9 @@ 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; + ssk->sk_reuseport =3D sk->sk_reuseport; } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 8DE533769FD for ; Thu, 30 Jul 2026 02:54: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=1785380059; cv=none; b=A3WAbai6r2qU0CX7SBWAUO6aAKD/2sVipYMxRNS1+s5060KGYuDwXsd7dmz/rPQd1F7SqOdI6gK/0CaBOHRwWAZe0J+SYHc+H4tA4iKeewiaHCnxxotCVkbP5zWTij2WvPUN2drcZ8JZc489ZEu7L4+j/H7uEdXCRxf7Su87NKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380059; c=relaxed/simple; bh=kk0D3Cu9w0/3UuowOtQsb7momeqoPNl2h1YDokcuBlo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VSBkQputXz5sEQ0yjLGYhlDu61Zmr/JPgtaSo6reH+e1Q98wTcV3aKGhVRbvFkJICKAr9YFeW8bf5CJu6rLJw7N3Xcjq1vi84ebUXs2Nf8+0IIATsOoxFRqlOoJhvPVNaVhl+y90UOlgqF1Xyu4z6qsNhRzl4O+v44zPukpQ7Ko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZBU4P58l; 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="ZBU4P58l" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3641A1F00A3A; Thu, 30 Jul 2026 02:54:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380058; bh=E1ea4hOszjWN+JFqnbAEFVGA8MgKCluidESeC82tVFo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZBU4P58lPeT3HDjLdD1XCd7vncVUfd36lEhCJCKZsZeL/Yh0fs7F3VwyqHWKmaYTN /EB9/E1SRI0KQVOXPco22Ki4+0nM+8CG2iSA9zDoA8lfTItcRLbt7wDJNv1xFv35jk b7DicVtWFFXhq4BtN5o7Dy3qyi6t1NXW6RwVLAqLdDKBLBSfp1Ds2dm1IV4vT7YU4l J3jAsks/1n/A23OatgmiWKvrk/3DrBauQCDWnMIxxsRpCvivxftZLh+U3Tq3qwRZc+ WDzBcD89SGE4a9LWoCadFMrLEsWxbOPKdgcFVKiyRH0Lo1gHW8Kym/4Af2h/5obPYp CBPALlR6XZ9ZQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 03/10] mptcp: handle TCP_MAXSEG getsockopt in common case Date: Thu, 30 Jul 2026 10:53:56 +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 Move TCP_MAXSEG from a tail-clause into the common case alongside other "first subflow only" options (TCP_FASTOPEN_*), making the dispatch logic more uniform. No behavioural change. 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 37e65923f544..34f6cd9c7967 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -1425,6 +1425,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: @@ -1449,9 +1450,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:14 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 F2CB2225788 for ; Thu, 30 Jul 2026 02:54:19 +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=1785380061; cv=none; b=kW484UZUeG9wNwSvkdkLh1flkQD6W9GmjsgwZupPHOEL980YSOUFGP4DttPAR90u9mFQDymqyu2KwgbSgwlCZsLKzYitTSaGboC+sNyf6vm+hI3Y8EVsKecO+ZUzrWYS/y7OiVNun8JKzIRqlN6svXMRWEpWOE2O17AjtnaRXog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380061; c=relaxed/simple; bh=wQp5VfFJvA13PPKqsWv11I5ieA+l3DUXfmDNCAjoJ98=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dMHNDkyF3/93yw5jwA5DX4E2vC2r1QVT3OB3IFtdMMkdM/KRQ47v33gZtcxpMzwYUCgBbFt4UtoiZiRcB2mvdFyam9tIVMlJBCQ2XG5oPm3uHDLPAzNI18kL0Z7pkynL+bv3Ay01TKYIKP1/J4vS6z7T2OjjoXZVYv2eGK9boHo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WV4coaGY; 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="WV4coaGY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B04021F000E9; Thu, 30 Jul 2026 02:54:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380059; bh=Zu8IQTFEIODpEKubo3ZwbUzbx/lCT8l9GOiU21sr7Bc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WV4coaGYEnMeCvItvk+usIXZDGD5G2OClaCKA9IyAC7eU1FDh2T+wDuLskxGGbU9D VhrLC9QEBGIvrxBYQ163YUc9hA8z30W+hlbCMMyNmHDyCf67LEYE8ypGmmBJYJC5gP M9yTOnY0lhk6E1o6F8r2Q+Q/xQoy8aKcxIIAGp/g8hEk8MhvPhas+mo6h9lDKgp0F5 PQhk4/2CkDFISOroII5jldcnW5h2KuwtJSJeW+4CT+UBpbk7t+Xz8voauakaC9eB53 uIvTvZGLvEAjt8xtIogquR76LW/iCwgf6iMB9mbIEAQ6NCUjeXy1UVfiY+qju8qmDr MBkCgK2way2GQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 04/10] mptcp: add TCP_SYNCNT setsockopt/getsockopt Date: Thu, 30 Jul 2026 10:53:57 +0800 Message-ID: <9cb37d4c246b79fd35f439c5bf9b60c5e18280c9.1785378180.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 This patch adds TCP_SYNCNT support on the MPTCP socket. The setsockopt() path stores the value in inet_csk(sk)->icsk_syn_retries on the msk and all subflow sockets. The getsockopt() path reads the same field back from the master socket. 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 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 34f6cd9c7967..3dbf8d27005c 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -898,6 +898,13 @@ 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: + ret =3D __mptcp_setsockopt_set_val(msk, MAX_TCP_SYNCNT, + &tcp_sock_set_syncnt, + &val, val); + if (ret =3D=3D 0) + ret =3D tcp_sock_set_syncnt(sk, val); + break; default: ret =3D -ENOPROTOOPT; } @@ -1450,6 +1457,10 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_soc= k *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, + READ_ONCE(inet_csk(sk)->icsk_syn_retries) ? : + READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_syn_retries)); } return -EOPNOTSUPP; } @@ -1552,6 +1563,7 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) static const unsigned int tx_rx_locks =3D SOCK_RCVBUF_LOCK | SOCK_SNDBUF_= LOCK; struct sock *sk =3D (struct sock *)msk; bool keep_open; + int syncnt; =20 keep_open =3D sock_flag(sk, SOCK_KEEPOPEN); if (ssk->sk_prot->keepalive) @@ -1604,6 +1616,9 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) =20 ssk->sk_reuse =3D sk->sk_reuse; ssk->sk_reuseport =3D sk->sk_reuseport; + syncnt =3D READ_ONCE(inet_csk(sk)->icsk_syn_retries); + if (syncnt > 0 && tcp_sock_set_syncnt(ssk, syncnt)) + pr_warn("Failed to sync TCP_SYNCNT=3D%u to subflow\n", syncnt); } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 6C171225788 for ; Thu, 30 Jul 2026 02:54:21 +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=1785380062; cv=none; b=DgflnEFZ4cOznqRgtAr3I3cXzY76+XiPJLMlwuPSMjkvsfbtCU8eRUR5ms2a3vYeF3/dh2uxUI5VaK4dt1lSYlJN+AGuM+rt+LH58MgWghuL/ldbs6xcU2a33OJHZ3iFKUAg5zj8z+wd9RG4UAxlMQ5u7nuwysRs0X5vlGZeV6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380062; c=relaxed/simple; bh=C9mYyO7qxj8YvjUdR4FXom/eD4KslfnHvcgYxG89tVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nU6r9S8kl3CMTibGIbhveEaSlq8FZMJ/iDaqWlefs/TFskgNbYPxYQV8r8JA/o1oATZW2jIBOLG7C8pAOxMwgz4+dYFHeuEr+PqjHwIkz+d7s7AFEdfYGLiRto9XkfMwjO/wx2g+2NrxbH3YRG804xbyCmb2Iinl4Tf3wOecZno= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aoAuRP1E; 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="aoAuRP1E" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 29B391F00A3A; Thu, 30 Jul 2026 02:54:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380061; bh=bdpU5bkv5EDXMSRKKRe14O+/iRuTrTAescYnIhdNy64=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=aoAuRP1E1Qc1YA5GTc9ZWjCJc+fZewD8gXCnShnBb5h5Vykyl6VaXRzsrRjrT00IJ 1TLYGP5RsHBGMhEFE8EjrYXvDpGaz5clIThMxyTQBIBEEQzPG5nw7JPfwjv7SzGg4C 0jOBZu19+224HnTGVoH+ytPJjNrcdpBAp3LokYGmWyp5sqizTxUY1Oth7fIAEV8ayE oifblta/vUZa1TThEMADHRv7wnls7Ai3m62mazEjHca7YN02eZq4bmNCJZy8xm7x3S tGtUuExEyI1mogHtUgD0Rq2Bcwz8EkSXx8KdXz0aymoPXPNKEn5yqsid03Lz3T914v OTk/Yo6+CrOlQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 05/10] ipv6: extract and export ip6_sock_set_tclass helpers Date: Thu, 30 Jul 2026 10:53:58 +0800 Message-ID: <38818ad1f4e454278de4542ea9a88cb4d2ec8c0a.1785378180.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 IPV6_TCLASS case in do_ipv6_setsockopt() inlined the same ECN mask handling and inet6_sk(sk)->tclass write that callers need to do when propagating a tclass value onto a freshly created socket. Pull this into small helpers exported via , so external modules (e.g. nvme-tcp, nvmet-tcp) can apply IPV6_TCLASS without duplicating the ECN handling. Signed-off-by: Geliang Tang --- include/net/ipv6.h | 3 +++ net/ipv6/ipv6_sockglue.c | 31 +++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 3de07e738538..82e57b34ba57 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -1252,6 +1252,9 @@ static inline void ip6_sock_set_recverr(struct sock *= sk) inet6_set_bit(RECVERR6, sk); } =20 +void __ip6_sock_set_tclass(struct sock *sk, int val); +void ip6_sock_set_tclass(struct sock *sk, int val); + #define IPV6_PREFER_SRC_MASK (IPV6_PREFER_SRC_TMP | IPV6_PREFER_SRC_PUBLIC= | \ IPV6_PREFER_SRC_COA) =20 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index b4c977434c2e..c59f25fbb336 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -373,6 +373,28 @@ static int ipv6_set_opt_hdr(struct sock *sk, int optna= me, sockptr_t optval, return err; } =20 +void __ip6_sock_set_tclass(struct sock *sk, int val) +{ + u8 old_tclass =3D inet6_sk(sk)->tclass; + + if (sk->sk_type =3D=3D SOCK_STREAM) { + val &=3D ~INET_ECN_MASK; + val |=3D old_tclass & INET_ECN_MASK; + } + if (old_tclass !=3D val) { + WRITE_ONCE(inet6_sk(sk)->tclass, val); + sk_dst_reset(sk); + } +} + +void ip6_sock_set_tclass(struct sock *sk, int val) +{ + sockopt_lock_sock(sk); + __ip6_sock_set_tclass(sk, val); + sockopt_release_sock(sk); +} +EXPORT_SYMBOL(ip6_sock_set_tclass); + int do_ipv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval, unsigned int optlen) { @@ -713,14 +735,7 @@ int do_ipv6_setsockopt(struct sock *sk, int level, int= optname, /* RFC 3542, 6.5: default traffic class of 0x0 */ if (val =3D=3D -1) val =3D 0; - if (sk->sk_type =3D=3D SOCK_STREAM) { - val &=3D ~INET_ECN_MASK; - val |=3D np->tclass & INET_ECN_MASK; - } - if (np->tclass !=3D val) { - np->tclass =3D val; - sk_dst_reset(sk); - } + __ip6_sock_set_tclass(sk, val); retv =3D 0; break; =20 --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 A6C3837A498 for ; Thu, 30 Jul 2026 02:54:24 +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=1785380066; cv=none; b=SoJgLgPEB64ST74o+Y6LZeW9XAKd7NuuiWhqGMa972tEnRYnqZoLaUePqIDXur+GjgBNdLCxcm4tvkFizfEvFgO6ZstLwRyDcYBSbsxuA6c2EnZgjPSLevWvGCs4ZqbrFP/gygwMK9U5Ilfk3s9syRKgT2jW/yymU8lVQNXCnQQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380066; c=relaxed/simple; bh=rwu8deKZGVe8SmyWi/hEuHJiiVBpvG7ZAk6fqto/KcM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YhYk91uxMzJsgPilpLb3miT6bTKc4ItuGZnM2SPcT0Rnh27hjbUEGnkPK8tqisS1MSXjUMoBeKtsu12jYHazqIkxH0uKTQAehX68bP9eYsY2ZBgumQOmr7rTkiVvT8K8e5MNrj5l22/i7qboDdZbRQvhVrk1+S+E6HcJoewDFPw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZHRy1vSO; 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="ZHRy1vSO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91F7D1F000E9; Thu, 30 Jul 2026 02:54:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380064; bh=XDX0U+/iVtt01S16tIoLgpUE3pgRThp7Vr4ImZoK42I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZHRy1vSOShrUDmwGppg8V8qRMZoMV4X/HFXz5DO0tLsSHCc40lBgmD4l2Jx/IOC/v KHfwDlwbtXEqpvz7sfAaJOujpkDmrk5sHdoXXH863npKedxRK3gtYl3OVKtnoDbqQA QPK5xY0WobTpTDeTSZyvmIaJWoatZKNflLFl/DO1mZOGXw7qgfKjk0XJLVgAi/QoFD hMAy/Puu2m30xev/ouF3mDnz85QFlPZRRixx1Zlf8OUT/RlSYtYHp5TcgYokO0xwk+ O9huxadCEuQUVaOhtqhPa31oxkg6KwaxSy+72NCrVKHv6Imgrkmo4tqsxjHE/vENaM yHKLA0iRFXkog== From: Geliang Tang To: mptcp@lists.linux.dev Cc: David 'equinox' Lamparter , Mat Martineau , Matthieu Baerts , Geliang Tang Subject: [PATCH mptcp-next v4 06/10] mptcp: sockopt: implement IPV6_TCLASS Date: Thu, 30 Jul 2026 10:53:59 +0800 Message-ID: <99dba4119e87c33b1da6055042efcacddf115419.1785378180.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: David 'equinox' Lamparter The IPV6_TCLASS setsockopt just needs to be forwarded to the individual TCP sockets, like IP_TOS is already handled for IPv4. Coincidentally, ssh uses this sockopt and prints an error in the middle of your ongoing SSH session when it doesn't work (very annoying when doing SCP/SFTP on a multiplexed session.) For setsockopt, the value is first applied to the MPTCP socket itself via ipv6_setsockopt(), then propagated to all existing subflows using __ip6_sock_set_tclass(). The setsockopt_seq is bumped to ensure that subflows created later will pick up the setting through sync_socket_options(). For getsockopt, the value is read directly from the MPTCP socket. Also add sync_socket_options() support for IPV6_TCLASS, so that new subflows created after the option is set inherit the correct tclass value. Cc: Mat Martineau Cc: Matthieu Baerts Co-developed-by: Geliang Tang Signed-off-by: Geliang Tang Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/568 Signed-off-by: David 'equinox' Lamparter --- net/mptcp/sockopt.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 3dbf8d27005c..676268f922b1 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -396,6 +396,42 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_so= ck *msk, int optname, return -EOPNOTSUPP; } =20 +#if IS_ENABLED(CONFIG_IPV6) +static int mptcp_setsockopt_v6_set_tclass(struct mptcp_sock *msk, int optn= ame, + sockptr_t optval, unsigned int optlen) +{ + struct mptcp_subflow_context *subflow; + struct sock *sk =3D (struct sock *)msk; + int err, val; + + if (sk->sk_family !=3D AF_INET6) + return -EOPNOTSUPP; + + err =3D ipv6_setsockopt(sk, SOL_IPV6, optname, optval, optlen); + + if (err !=3D 0) + return err; + + lock_sock(sk); + sockopt_seq_inc(msk); + val =3D READ_ONCE(inet6_sk(sk)->tclass); + mptcp_for_each_subflow(msk, subflow) { + struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); + bool slow; + + if (ssk->sk_family !=3D AF_INET6) + continue; + + slow =3D lock_sock_fast(ssk); + __ip6_sock_set_tclass(ssk, val); + unlock_sock_fast(ssk, slow); + } + release_sock(sk); + + return 0; +} +#endif + static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname, sockptr_t optval, unsigned int optlen) { @@ -438,6 +474,11 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk,= int optname, =20 release_sock(sk); break; +#if IS_ENABLED(CONFIG_IPV6) + case IPV6_TCLASS: + return mptcp_setsockopt_v6_set_tclass(msk, optname, optval, + optlen); +#endif } =20 return ret; @@ -1505,6 +1546,13 @@ static int mptcp_getsockopt_v6(struct mptcp_sock *ms= k, int optname, case IPV6_FREEBIND: return mptcp_put_int_option(msk, optval, optlen, inet_test_bit(FREEBIND, sk)); +#if IS_ENABLED(CONFIG_IPV6) + case IPV6_TCLASS: + if (sk->sk_family !=3D AF_INET6) + return -EOPNOTSUPP; + return mptcp_put_int_option(msk, optval, optlen, + READ_ONCE(inet6_sk(sk)->tclass)); +#endif } =20 return -EOPNOTSUPP; @@ -1619,6 +1667,10 @@ static void sync_socket_options(struct mptcp_sock *m= sk, struct sock *ssk) syncnt =3D READ_ONCE(inet_csk(sk)->icsk_syn_retries); if (syncnt > 0 && tcp_sock_set_syncnt(ssk, syncnt)) pr_warn("Failed to sync TCP_SYNCNT=3D%u to subflow\n", syncnt); +#if IS_ENABLED(CONFIG_IPV6) + if (sk->sk_family =3D=3D AF_INET6 && ssk->sk_family =3D=3D AF_INET6) + __ip6_sock_set_tclass(ssk, READ_ONCE(inet6_sk(sk)->tclass)); +#endif } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 3A1AB331EA8 for ; Thu, 30 Jul 2026 02:54:26 +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=1785380067; cv=none; b=pSf9bRWtdHrmDqcvCqLIeDrrwHM2r4WtZjDtQ1JddfttKeiRCpcGBwi0o5KHD6k4Ii8POTZXT/NWI9OJxennevT8RmTEGEd7xvyrbxUY4BxSk0MMJhdciICF4Hol2cpaiqPbN5DWCagd4f73jyCDto5jGClrDdvOJv3talLgjgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380067; c=relaxed/simple; bh=KRPh7fISW5NMLh5Vzahx09rCQt+9Yh5tDak4XkwJJiY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UMDoTHqqrjuGnrmY/jGofxm4Yvxa0z1dXbiMeePMQnXzfGLrS2v+vJNrzI/LqVgse7azfBnhqDBWvwKQCyNF3VPoE7d4cHF3aOtuqWZcIDMAEqLpMQRRfJ+XK1BApaInKpjd4med24juUoNI8YNw1P0vNGrZyMxKr1N9dRUyY60= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=afkO11/A; 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="afkO11/A" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E87BF1F00A3A; Thu, 30 Jul 2026 02:54:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380066; bh=9MRMLyR4gDDDsa0qYB4qq0t3wlbO7Eh+ftCeQ0k2BlY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=afkO11/ACYPb93bE/mx+5pdKSq5wAau5KaZM6j/zj+uagmy8biFJL0IMJeo0XLuGP +pNnnSlscVc+Vut8ITcpHqa89jo7Y03DlWUmXMsd5fDlEqZdZQYtd4Q4zHiEdresHb YozJSIGd0pd6PsTfm0CLZNkHg+thHaoOxCwK8nX5cNeDdrHMETLBjgi8Q+qYTp+4NB 7D3TfuSUM+87AWVtI1QhyzMsGTwr6lHmc129ptkCitlMP6iYQh/108fhiE1KkWAH78 LHpUwOUmk0ZDbzzKZ5fPlRIHnGCaOWa6jziHAcsaS6MRGBgCYst/x3We1kKjnnQHlo JrO62Yc9cV2pQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 07/10] mptcp: copy the subflow's tos/tclass to the msk on accept Date: Thu, 30 Jul 2026 10:54:00 +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 When a new MPTCP socket is accepted, copy the tos (and rcv_tos for IPv4) or tclass (and rcv_flowinfo for IPv6) from the first subflow to the newly-created msk. This mirrors what plain TCP does in tcp_v4_syn_recv_sock() and tcp_v6_syn_recv_sock(), where these values are copied from the incoming skb to the accepted socket. Without this, MP_JOIN subflows created later would inherit tos/tclass=3D0 from the msk and lose the peer's reflected value, causing inconsistent traffic class behavior. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 90dc894cb976..1544a4e411b5 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3706,6 +3706,22 @@ struct sock *mptcp_sk_clone_init(const struct sock *= sk, #endif mptcp_copy_ip_options(nsk, sk); =20 + if (ssk->sk_family =3D=3D AF_INET) { + inet_sk(nsk)->rcv_tos =3D inet_sk(ssk)->rcv_tos; + __ip_sock_set_tos(nsk, inet_sk(ssk)->tos); + } +#if IS_ENABLED(CONFIG_MPTCP_IPV6) + else if (ssk->sk_family =3D=3D AF_INET6 && + ipv6_addr_v4mapped(&ssk->sk_v6_daddr)) { + inet_sk(nsk)->rcv_tos =3D inet_sk(ssk)->rcv_tos; + __ip_sock_set_tos(nsk, inet_sk(ssk)->tos); + } + else if (ssk->sk_family =3D=3D AF_INET6) { + inet6_sk(nsk)->rcv_flowinfo =3D inet6_sk(ssk)->rcv_flowinfo; + __ip6_sock_set_tclass(nsk, inet6_sk(ssk)->tclass); + } +#endif + 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:14 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 285622BCF4C for ; Thu, 30 Jul 2026 02:54:27 +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=1785380069; cv=none; b=nVa+u/GQ1h9zWIFG0c2hdXm3RSVl0cD8xV7Gn29J2drgnfEjSiceyHRo7h8TA9J1vyPvId8RVaCu7qKw2gTlKtbF/cT2QUY4HVCvMymNHGPRTEbaS1ziQRHCWLuYQz6a7A1i7JT8KwlHnGvkkj3u2CmFP49b2HLm6oRfoPkz3dI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380069; c=relaxed/simple; bh=z+MT6iHR90MH7fR8Zl/cDG8NUYSXrnAPDc9MrmBqMnc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k6aG9cVPcS6kjrkTmqlXXonAsN7J49SAy0ZhrKK6EGsEjDfUGsm0PowcBIjZP+OAm2Ms/TWF8iHA26pStU7jrS0Gya306mxc9zkt9pKMRJ2G+yK4asophMVC7mBsJkNsR2KU3OzNb8I+vXAXN0mEdAxf0ypQmvAfFNP5wUHUi1E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=h3foItBY; 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="h3foItBY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B18091F000E9; Thu, 30 Jul 2026 02:54:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380067; bh=xwgSsv+t31v8M0nIbsj0ejN/HhnKtVUxm/+T4c2rE4M=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=h3foItBYRYaf6lqhEHdAZjK3zChuQTZMk7PY9WvjwL/gWN20CqN+kpojKrFocjR4B Tr7eD4jHeoxvH9hhlyw8MqUNIKKqU/ATH98mWrsKnDUeG+r+Rrp+kuOY3NI7LtcMq6 z4MH7uE9FdTFTuTQ6NRy+yIm+2nanHMTpNri97QVsw0j5K/8f7BHojiqNQZ82W0mdJ myXEz+93hY5SXq/Gj2GYDKqF9Avse3vHliC+0p9e0l9VdkOiq3u077iUnWuz4lQ01u eE1z+SNZNN/qWG0Dqd0ag6dvQrpbcfGFYdszDuC5sEBj/ut9Va5N2QdaukzNAlh5jA R9TWKL6LdmK/g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 08/10] nvme-fabrics: add IPv6 traffic class option Date: Thu, 30 Jul 2026 10:54:01 +0800 Message-ID: <7bdbc9a0e60a3688ca9c7ce2eab7396c82679a93.1785378180.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 NVMe/TCP transport needs to configure the IPv6 traffic class on its queue sockets, but the fabrics option parser currently has no corresponding option. Add the tclass option to the fabrics parser and store the validated value in struct nvmf_ctrl_options. Negative values are rejected, while values greater than 255 are clamped to 255, matching the valid range of the IPv6 traffic class field. Keep -1 as the default value to let the transport use its default traffic class. Signed-off-by: Geliang Tang --- drivers/nvme/host/fabrics.c | 18 ++++++++++++++++++ drivers/nvme/host/fabrics.h | 3 +++ 2 files changed, 21 insertions(+) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index ac3d4f400601..643c03dc7bcb 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -695,6 +695,7 @@ static const match_table_t opt_tokens =3D { { NVMF_OPT_NR_WRITE_QUEUES, "nr_write_queues=3D%d" }, { NVMF_OPT_NR_POLL_QUEUES, "nr_poll_queues=3D%d" }, { NVMF_OPT_TOS, "tos=3D%d" }, + { NVMF_OPT_TCLASS, "tclass=3D%d" }, #ifdef CONFIG_NVME_TCP_TLS { NVMF_OPT_KEYRING, "keyring=3D%d" }, { NVMF_OPT_TLS_KEY, "tls_key=3D%d" }, @@ -734,6 +735,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options = *opts, opts->hdr_digest =3D false; opts->data_digest =3D false; opts->tos =3D -1; /* < 0 =3D=3D use transport default */ + opts->tclass =3D -1; /* < 0 =3D=3D use transport default */ opts->tls =3D false; opts->tls_key =3D NULL; opts->keyring =3D NULL; @@ -991,6 +993,22 @@ static int nvmf_parse_options(struct nvmf_ctrl_options= *opts, } opts->tos =3D token; break; + case NVMF_OPT_TCLASS: + if (match_int(args, &token)) { + ret =3D -EINVAL; + goto out; + } + if (token < 0) { + pr_err("Invalid traffic class %d\n", token); + ret =3D -EINVAL; + goto out; + } + if (token > 255) { + pr_warn("Clamping traffic class to 255\n"); + token =3D 255; + } + opts->tclass =3D token; + break; case NVMF_OPT_KEYRING: if (match_int(args, &key_id) || key_id <=3D 0) { ret =3D -EINVAL; diff --git a/drivers/nvme/host/fabrics.h b/drivers/nvme/host/fabrics.h index caf5503d0833..3dfd40bd8960 100644 --- a/drivers/nvme/host/fabrics.h +++ b/drivers/nvme/host/fabrics.h @@ -67,6 +67,7 @@ enum { NVMF_OPT_KEYRING =3D 1 << 26, NVMF_OPT_TLS_KEY =3D 1 << 27, NVMF_OPT_CONCAT =3D 1 << 28, + NVMF_OPT_TCLASS =3D 1 << 29, }; =20 /** @@ -109,6 +110,7 @@ enum { * @nr_write_queues: number of queues for write I/O * @nr_poll_queues: number of queues for polling I/O * @tos: type of service + * @tclass: IPv6 traffic class * @fast_io_fail_tmo: Fast I/O fail timeout in seconds */ struct nvmf_ctrl_options { @@ -139,6 +141,7 @@ struct nvmf_ctrl_options { unsigned int nr_write_queues; unsigned int nr_poll_queues; int tos; + int tclass; int fast_io_fail_tmo; }; =20 --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 76F8220010A for ; Thu, 30 Jul 2026 02:54:30 +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=1785380071; cv=none; b=mQE5l2RLlHNJV4MTNTUxuxJpeD2Uqtx/zm4JKEuxj2QyoGIlOp4vpc10MDyXGmC86xvFNrSft5LlZzv9KlXhpio+Qj6z7+HsZK8G2bU7+xCmDFkgty/ByjoZjNe/YYN0BWdjf2qGE9PIsTVZzSUNERMwDcDWxJb9BVjTlHqnj+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380071; c=relaxed/simple; bh=dAwJbbhisv6c8gC2dzKTH4A5eovHKTrfWG2t/k3o9D0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nJdtRfap13MHAbGLa8SvS8SmDv/F8/RQlWbukUCHjpO/0PqxaALIQ+2cCJS6bTx4Ey/QPI5FPxqK8mSOVCqI2xK87YyLodRNLR5BTZMG2RoxUmCzcYVGFr51iftCuANRr9xPCI3aqRXmlM9gFwFsyOmBuZpG/lYUhYyHQf5X+YE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A5g1qbrl; 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="A5g1qbrl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8368E1F00A3A; Thu, 30 Jul 2026 02:54:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380070; bh=EcY26xIbpg9yQEhZyAIFjgmMcirRMjpwCQnvzov/sz4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A5g1qbrlUFCWupztMslbFePX4AWCDmi3F0x1h7lPVWOs+C1l/+QSwKx7bsPre/RAv CNs66Wpn8/+dLiFwGJrP+PpfCa8tAaWXBMhmIYfgRra/jggWaww2HGyDM08DGOOFuY ZBFWQsJx3Q3zeqp7OqZADfMU8bouk+6tXJewfm2CxGRuj2hCLk8zQfvZcYoncI+HwQ eXwKXnq1JdPC+VAs+lEoVNt7lbqV8GydTBeW27TqSRG5YHylgiMBlcXPEZj6s+ANOD KQdOflC+XZGkvuS/JrRfVA/UC2n6WSFtP7S7OukO27q3gRKuG5toVvytN/W3plqv7z 81fopVDAgaS2A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 09/10] nvme-tcp: support IPv6 traffic class Date: Thu, 30 Jul 2026 10:54:02 +0800 Message-ID: <938a9ae9f52e27a496db53948fc07138b9acfb3e.1785378180.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 fabrics layer now supports parsing the tclass option, but the NVMe/TCP transport does not currently advertise or apply it. Allow NVMe/TCP to use NVMF_OPT_TCLASS and set IPV6_TCLASS on each queue socket when a traffic class is specified. Keep the existing IPv4 TOS handling unchanged. Signed-off-by: Geliang Tang --- drivers/nvme/host/tcp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index ba5c7b3e2a7c..cabbf67d24f8 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -1837,6 +1837,11 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nc= trl, int qid, /* Set socket type of service */ if (nctrl->opts->tos >=3D 0) ip_sock_set_tos(queue->sock->sk, nctrl->opts->tos); +#if IS_ENABLED(CONFIG_IPV6) + if (nctrl->opts->tclass >=3D 0 && + queue->sock->sk->sk_family =3D=3D AF_INET6) + ip6_sock_set_tclass(queue->sock->sk, nctrl->opts->tclass); +#endif =20 /* Set 10 seconds timeout for icresp recvmsg */ queue->sock->sk->sk_rcvtimeo =3D 10 * HZ; @@ -3041,7 +3046,8 @@ static struct nvmf_transport_ops nvme_tcp_transport = =3D { NVMF_OPT_HOST_TRADDR | NVMF_OPT_CTRL_LOSS_TMO | NVMF_OPT_HDR_DIGEST | NVMF_OPT_DATA_DIGEST | NVMF_OPT_NR_WRITE_QUEUES | NVMF_OPT_NR_POLL_QUEUES | - NVMF_OPT_TOS | NVMF_OPT_HOST_IFACE | NVMF_OPT_TLS | + NVMF_OPT_TOS | NVMF_OPT_TCLASS | + NVMF_OPT_HOST_IFACE | NVMF_OPT_TLS | NVMF_OPT_KEYRING | NVMF_OPT_TLS_KEY | NVMF_OPT_CONCAT, .create_ctrl =3D nvme_tcp_create_ctrl, }; --=20 2.53.0 From nobody Mon Aug 24 20:41:14 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 3EDA936F8E7 for ; Thu, 30 Jul 2026 02:54:32 +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=1785380073; cv=none; b=QeK6/GSXxn1sS+tsQ8P/NXeUfT5F/r7DqO4fhL85sqc4kQWtIOVU4zjDjhOcQJwqmkz09BVHQc5Nf4EkRXbMfxwDIM8bjRxxD4+0V8HI5I5T02+2aUzMyKT9pHVFJfyuoiwDE8H7K20poX2XDnHCwXPutif+nQ7gfM+ExDhD7Ao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785380073; c=relaxed/simple; bh=ij2Yk5YhHFuMQr9YC3ophp+TBdFRNHp5ZfZRVq8iVWk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JSQxiAM82YsfEt2UTsTrErdYBh0/zmh3JQe0Zb/mKYaKyt9ku5tD1LNPUXRtl/zIB/ZoEAV31MRnszgtjN0Zjfr6hfVV6ZpcTTCDjAq+JBZh/5LoF4aVl1LgCAUu8CmimQRMFC/1x/g52WQwDk56+SXREcoAQarpO4RExHkC710= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AEbC9N6S; 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="AEbC9N6S" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C0A1A1F000E9; Thu, 30 Jul 2026 02:54:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785380072; bh=QFd3mQMcTQwAZXKmOniaBKEFZgoMzw5MyeZqqxsCm4k=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AEbC9N6S+GxgePz/7pTeaOmpMHBXqvFPwRYBacIcetokW6iD1LZARUOjg0Uuwb0cn xuUZ9kfbiIhdtKyX5NWUJk5d+KfsMuF9XrK0LEUJ6bA7pElrCKrBHdN2lgTPzTYAE/ U6MyxCsoqJs/J1cg9rzWHDqXe7EyqXHpW6yKvs1VZIJYPthKrQOxyCbntX9qJqF/dU MDzcrbH+aTr9l2Idx3NThBtJWmBQmsF/G0y9HjFbRxLwo1BIC7XgpEpW7dwuEen9qf uftD8rk6IUyxjxwOBc6L+oRs6Da6mcItVkKHpATvG3RYRJ9uAUs7eGr8HhPSPuwiVa 4NEx9OG9jl7dg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 10/10] nvmet-tcp: support IPv6 traffic class Date: Thu, 30 Jul 2026 10:54:03 +0800 Message-ID: <0fa74e2213b703f9680ad053196e799cc7111f7b.1785378180.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 nvmet-tcp currently applies the received IPv4 TOS value when setting up a queue socket, but does not handle the IPv6 traffic class. Extend the queue socket setup to handle AF_INET6 sockets. Obtain the traffic class from the IPv6 socket and apply it through IPV6_TCLASS. Keep the existing IPv4 TOS handling unchanged. Signed-off-by: Geliang Tang --- drivers/nvme/target/tcp.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c index 75a276d73be3..e775c4d3ede6 100644 --- a/drivers/nvme/target/tcp.c +++ b/drivers/nvme/target/tcp.c @@ -1725,6 +1725,14 @@ static int nvmet_tcp_set_queue_sock(struct nvmet_tcp= _queue *queue) /* Set socket type of service */ if (inet->rcv_tos > 0) ip_sock_set_tos(sock->sk, inet->rcv_tos); +#if IS_ENABLED(CONFIG_IPV6) + if (sock->sk->sk_family =3D=3D AF_INET6) { + struct ipv6_pinfo *np =3D inet6_sk(sock->sk); + + if (np->tclass > 0) + ip6_sock_set_tclass(sock->sk, np->tclass); + } +#endif =20 ret =3D 0; write_lock_bh(&sock->sk->sk_callback_lock); --=20 2.53.0