From nobody Sat Aug 15 20:32:02 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 47B3F37E5F2 for ; Sat, 8 Aug 2026 03:41: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=1786160479; cv=none; b=keQ1VtZw6z5bM5BRji9fZBNkATQFlIsuCwwoc/NMe93buWMd+4RtQJbCAo1JqYR/U4WJf2B9GskBMETHY9UzSmosf02SiZ1twtrltXXwjshadIFaRywaiV8sLiNuQzn1lGdiDacAOFPwQigH7VetMLRfGycN/e5FaNVjrB1nVbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160479; c=relaxed/simple; bh=Lo/luMwGvhUXzB0lM5mpPl2mhqNVI54+T8/eMm3zDA4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YIYYViz6lBKPyp7yf3SnaxohWf7hE3uGyLHp3hav9IEP9JvUdHxbJo1eaP02DtoWrIZmoQQtS6Aji5NenX70EycIQ+fR9Xa4plWW/qgVEQ5tZLSRVBHYKA64uiB1nAtpsy1JOq4cTxKSmgJ+n5ZifZWcQBVdDQh1xAR864i5c0U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PI0+02Ev; 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="PI0+02Ev" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EFE441F00A3A; Sat, 8 Aug 2026 03:41:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160478; bh=vO8H1WhN7OHYWalQwbdJxYUxmWafoBJbqxlYf63qE8A=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PI0+02EvRzvL/AuEfSh50KfFArpsyZABH/KkxmE9EGVGPItjRtQaxVDIMctsOv+Sg ebeDzcMWDu1sfYCgzpj8RE9to/RGef/tBfrbX4JQs8TyYp2Nu/lZu2C+uW08fCT8R/ es3SS9T9looNXnTfxEI4ajiKpJmp4A7cuwBgpscBKNDcYY3eP0vKx9KXPh2ZdZTyl2 Tw2QH8y3KOYNMftMO1A+aGB4CImEIyt0xLWa3MXPWWshiyf6PPdfcXK+9g0Xp0Q4BW eLlN8z2rajxqa1vYE6u4FZVCRc+ZkWYjuYI6tQhxzfdcCOVbL4ODbL2T9hC8aCTmkn fLIwMnBxM6LFA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 01/11] mptcp: handle TCP_MAXSEG getsockopt in common case Date: Sat, 8 Aug 2026 11:40:31 +0800 Message-ID: <657c875f689e7d3249f0cdcfa6a840fa026ffc4d.1786159812.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 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 922f6ae5c80c..2c1eaf66202a 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -1499,6 +1499,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: @@ -1523,9 +1524,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 Sat Aug 15 20:32:02 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 234DC37E5F2 for ; Sat, 8 Aug 2026 03:41: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=1786160481; cv=none; b=b2pqFwniqZYXmIjUOZONklzf3P2jaKzPioX5z2PIAhyK0i1OZtbwx0S+u6/m+rh2hFgf8O6AIPUZ/TEr7iap81DizKWnlOWGqG617295gNlSk5RVVFHB/LtHL195pWsB8y5SczgcC3P0V2Y7+Ke/RDwjFuG15bUAXEN9fLIFGmE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160481; c=relaxed/simple; bh=12+apjuioBC8N62eTgEHwNuUizgwxX00zkAyPACTVRg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p4SpiDHZHIUnFntcaV1vVblIfo5D19va5kziYSaaIjRD0TcH/5W64u807EFqZP+X9l2CwkEKTPJFQKN+wwy0ypaWmcOmLjmisfT58hoUa244L2D2rhMI/fIju8AnStnr6UJf2h5HThidRGp1hx/7IujgIhhhedZZg4M5CV1zuPY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=h0IAib7+; 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="h0IAib7+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 972481F000E9; Sat, 8 Aug 2026 03:41:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160479; bh=HSIVj8uxv01MAdlABgCTwQ/hQsJ3+MOdestkgSTkj7s=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=h0IAib7+ExmPfq0f2AWWAYOUqhlJvZ+Dm+43bUrKBIkXaTj9vK3seB499MYrFKOX6 EW5FY1bxkGudF0ZxmpUEFTAYFsILJcH9EhsN9ITsA3Oz6Uv8DhrCnt5jIlMQnyYyTc XQCWijLHt3D5U7TmyuKyRKI/il1VwFDWPeB+qNrUtXOJUH5M2QvLMjjmOm+czCS3vo ZzZxyDQnT4sPIS6EoI0yM6Bby5vgfPshzkXXyXe3ZnidvE0fXWAKSaZJYIsExC35yx ctJBqHi5bHMcsii8JxvHLJv4njfFll+H1sVg7v/q/5GG2gYOcNXEuPSTLutLnCjfk6 9RHDUlMjREdbA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Gang Yan , Geliang Tang Subject: [PATCH mptcp-next v5 02/11] mptcp: take TCP_MAXSEG handling into setsockopt_set_val Date: Sat, 8 Aug 2026 11:40:32 +0800 Message-ID: <7098d1c0ba657fd29963f0a5bc1e4931875494bf.1786159812.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: Gang Yan Replace mptcp_setsockopt_all_sf() with __mptcp_setsockopt_set_val() for TCP_MAXSEG option handling. This aligns the implementation with other socket options that use the same helper and simplifies the code. Co-developed-by: Geliang Tang Signed-off-by: Geliang Tang Signed-off-by: Gang Yan --- net/mptcp/sockopt.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 2c1eaf66202a..5de371e29721 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -968,9 +968,9 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *= msk, int optname, val); break; case TCP_MAXSEG: - msk->maxseg =3D val; - ret =3D mptcp_setsockopt_all_sf(msk, SOL_TCP, optname, optval, - optlen); + ret =3D __mptcp_setsockopt_set_val(msk, MAX_TCP_WINDOW, + &tcp_sock_set_maxseg, + &msk->maxseg, val); break; default: ret =3D -ENOPROTOOPT; --=20 2.53.0 From nobody Sat Aug 15 20:32:02 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 A6A3337E5F2 for ; Sat, 8 Aug 2026 03:41: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=1786160482; cv=none; b=H4IkRmT3QODgW57DRjxYAwfCDQB+0f421IZ8B1WC+GkFZzg4nGuiMLxEGqLrcDGSuIQVKfmUV/fx1QjnZXziKfjlC3MMlzZXtNwsZGz/XOraR2gKg8iMC1i/P3TgtJACb2nN8Rz+oEodFlnZcBZNgxdJbo42YlIZF2O7THTc/aM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160482; c=relaxed/simple; bh=uU2ubTbjmwcZNrSzEOXBAAmtiq0X3ijL6W654BWwMEY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iP84ABoh6/rXi7ZcwIUmk3pN5dawjbbMvHmay8WBczlFWJYpT1cFNI2zZiBX43RE/6w131rZHtKCK279dGCpqRyGYFcSE2nJdSxWq/cBTIWPIC1gef2QbfUARQHa95jUD+aezELqXRnzXTPzkKvLpySoajluwI9z7xx2q76PQKk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G0EwR2ep; 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="G0EwR2ep" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70F231F00A3A; Sat, 8 Aug 2026 03:41:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160481; bh=c20Mpmv3QU/CCWfP13eRgQrAO/5fSVs0PfiMsAYb3k4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=G0EwR2epzayRfsKEcd3zP2OeR7QKaJoyzqeEIYbByfJYNKmv2CCfZDnGKzktE8hN3 AflB6pBV3KaV1hX+G1MZl7Dfuk9IFpYECP17QqJ/IVnIUHezau4W+q4fEDbL661nQ6 V4VkgBNoH38qEN7pTXz3IgsbzlVKVbVLzGJQ4pdFdlZh7KcKf/E2jmJwz1tDMhhtZQ C7AyJs1F+6JebaUnUFtBrhloKMcfZCz755IfeMBA+XL2swihvlJ1CvGAsWlC49QbPy 9RhDMkX0lYQWqMFyQq+CWgzyOGk86zAD7RJ81aEQRcaNsagiiKfBgmTi5geX4WU858 9C1xIuW4CjxBA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 03/11] mptcp: inherit sk_reuse/sk_reuseport and fix dev bind override Date: Sat, 8 Aug 2026 11:40:33 +0800 Message-ID: <445023840741fb5afb83eeb97fee4f3a9afc935d.1786159812.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 master socket to subflows, and bump setsockopt_seq so later subflows pick up the changes. This patch also fixes unconditional sk_bound_dev_if override in __mptcp_subflow_connect(): only set it when local->ifindex is non-zero, otherwise preserve the value inherited from the master socket via sync_socket_options(). Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 5 +++++ net/mptcp/subflow.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 5de371e29721..d79139eb5b8a 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -335,6 +335,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; @@ -1704,6 +1706,9 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) assign_bit(b, &inet_sk(ssk)->inet_flags, src & BIT(b)); =20 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) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index af81ad5e699d..47ff736c4d66 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1672,7 +1672,9 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct 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. */ + 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 Sat Aug 15 20:32:02 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 AAEB037E5F2 for ; Sat, 8 Aug 2026 03:41:23 +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=1786160484; cv=none; b=ULsALDgcULNH9v+H+7Bx+rRZdeKd0BSWcs3kOQheMznZp2TavtlXSLKt4dIr3d0IcxhnwSZnfDNh/NW37fgMS7NldPrSVeUD6+OMAjk26d+k9RTBVrSOEdlsSUbIx+x+jRUhj02QVy852ucbB6FnkMTx1JId9mR6LKDx6tR6qcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160484; c=relaxed/simple; bh=KsayPQyy3JkDykZxbp8I+EG2Wn/U605aW48cDfRJakE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AcvwR/2AqmlkNFbNsBhonaXWrPcUxFrLxr95+80asneDXPMPPf/UrcJCk3cc4WgJsNdfNiQOxRwWihkmfXpFHBaNXqq5M6KgTcgzgGjL+CVuvx8dUPLniKZFZZNNybUPi6j4Vb7ZyWWlPHuQ4zWDCaCrvWrYT5J8MNkJNRixg1E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Wt6fHVxT; 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="Wt6fHVxT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 31D261F000E9; Sat, 8 Aug 2026 03:41:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160483; bh=nMiYk/3i44vwtUMiX4It2n7H7sh19n2cyGT9in1iBZE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Wt6fHVxTl7HIX/NOdDySA/BVyh0NkKLZvbOd7R7T9ipS8xtYtyGVZIX+cJYPFlK7z f4lX+vk246tJQ9/guWEcY2XEtzUNa5+TThSZpejzAnvGRHv0jYR+V8bWdA3PrVbNN1 5gDDcc+EaJRMaNU90Z8CffJwzJt3BhQ/8RJqaFlsrZhhG2DrsusTduanMRROiLss9L 0K4KT0wAGhOBcyt9/18SMb11pO5rNg6aP4ezsgEJzeaCD0WS3+vnGdB1qFRiyE8vuE uefHG9PGHU+95FQrPce0lhh08mqSZz3CIcSkBR+fsCOikQOq+wXWXJtNz66SNfDAJZ i9Him7WwlqKRA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 04/11] mptcp: add TCP_SYNCNT setsockopt/getsockopt Date: Sat, 8 Aug 2026 11:40:34 +0800 Message-ID: <41d5b746f9b2b557a8de3a0d0f0def412cef905e.1786159812.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 d79139eb5b8a..71a4a2aaa838 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -974,6 +974,13 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock = *msk, int optname, &tcp_sock_set_maxseg, &msk->maxseg, val); 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; } @@ -1526,6 +1533,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; } @@ -1646,6 +1657,7 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) struct sock *sk =3D (struct sock *)msk; unsigned long src; bool keep_open; + int syncnt; int b; =20 keep_open =3D sock_flag(sk, SOCK_KEEPOPEN); @@ -1709,6 +1721,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 Sat Aug 15 20:32:02 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 61FE337E5F2 for ; Sat, 8 Aug 2026 03:41:25 +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=1786160486; cv=none; b=cg54ghBSWgwciI17YuFbaVgWcyVKsP46Z05GLEqI1TetG2rDTgFN2uTGmSqBmsjM/mfWqUR18FcjKzz4qWdPPjohe7U8LKI/XKliDZFAuoouwuLzhuc+TmsZUbV/tQNL3YKYCI3wIjvuV8WR6SEHkgTlD6h7nYpWc119nCu+FSU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160486; c=relaxed/simple; bh=DSQT6F5PcffIqxBLWKy7Ua+WpXRORF7ScrGp+LXv+i4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CDnHAbDYCW/4C9EUqrrW2zFK5Yfa+F6C5y6KTd3xwkzVjrhAURM0Ucn9SiHLbqBckq9l2zR78DYICAB5ZC0JDjVRdp8GXVXw3JC0Ma3P27znym0jyyFtQbmng6zaquYZlVHbgna032rj2JdvFapSaOJ4GJPRzgA1Xo140gN11iM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JZv6meBv; 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="JZv6meBv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6DCE1F00A3A; Sat, 8 Aug 2026 03:41:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160485; bh=znu+rjDLrIvZE6/B7n+hCwCiEa5QO+72sQV4VPFREWQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JZv6meBvSlvgnz1gyiKlo4lolF7kn2DBD0714/K3YPw0hWc+LVwwfODPuA8XRJL4/ rL/a7OU7w7H03FEgSqcoRA2l+m/WLTEQxiSB/jgYJcqo9rg+aB5Uz+DTPe1EIyEgBA 1WwQOiiuKrr8bkSI96AOExvTrlzrCti6fT3CY/MEwnynhsYNbD0caYag1Ozrgdonn+ atDKQ3dyvavxioWk4rIxiTR1p+gCDSFVPHK4oG5fhE9DgExFfhbaGJe+itQvbRfWob YwuCuQG16EuEBMcl5jABQqMg1YpKomGqDMVYfqEHLJCUB7M4pfKfo9SUdNWPRR5U80 gaXoBY3k9bFlA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 05/11] mptcp: skip ip6 options on v4-mapped clone Date: Sat, 8 Aug 2026 11:40:35 +0800 Message-ID: <93de8a870e49441c35ef2f2836613d5f91a24b67.1786159812.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 v4-mapped IPv6 destinations carry no IPv6-specific options, so skip mptcp_copy_ip6_options() when sk_v6_daddr is in ::ffff:0:0/96. Native IPv6 subflows are unchanged. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index c2762d74f29d..f19777c04d32 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3750,7 +3750,8 @@ struct sock *mptcp_sk_clone_init(const struct sock *s= k, __mptcp_init_sock(nsk); =20 #if IS_ENABLED(CONFIG_MPTCP_IPV6) - if (nsk->sk_family =3D=3D AF_INET6) + if (nsk->sk_family =3D=3D AF_INET6 && + !ipv6_addr_v4mapped(&nsk->sk_v6_daddr)) mptcp_copy_ip6_options(nsk, sk); else #endif --=20 2.53.0 From nobody Sat Aug 15 20:32:02 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 1F54C37E5F2 for ; Sat, 8 Aug 2026 03:41: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=1786160488; cv=none; b=Vz3aDrCkYlK50tC7fl2rwXMNNDIXJsfxQEpuQ7Vhc1QHpVittoQ2T3QEWA7NgtP90OTGgwenBdQ9JN9593LgN7wlIYEy1M+dPDtDK5dQ1v3MSM/Gkh1ikv9u6KNMRKpknIQvBP6KqTp0rlQbAeWciEvkIorA/bSZk3CcdAjw8Rw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160488; c=relaxed/simple; bh=aNhh2466VEw/g9sVKM/2S9cwmj5cYQTlXEY3d2PymLM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qtx4UeKUWD+atf6usN41iKLxZgKB7urAB7v3BLOzj7yEPRi2Li9HqRxgaygLGm6y7ow59DlmNuX+EEZcObVXdQpTWsHQKGBT1eYfWoR/dsd3R1Qw0p1/QdjrRwe0VyQLMUVxKR/RQJZEcKVfyjiICEO4Ohck6QmyA6MRhWwKSf0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R3sMfIXl; 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="R3sMfIXl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A70761F000E9; Sat, 8 Aug 2026 03:41:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160486; bh=+egxvkdob2ePNh9QOLEcmeK3Dls+Mn404Ma5F4xXm4Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=R3sMfIXlswlzCy/oO8yFAemPQ3jZ0rir6qFdRnZRhtmfONAPBBSB7MrkudUmh68df 85lxOU/539Cu1NiGX9dq3KqhgOkfmQqFknoqxm6gLIDbByvqDXJ33aYb5U/NPhSNDA 3s5/qLrvf1eoyh0+kLwWvRGZkyEbuicG+fcHNKrMk4z0dFD6dQiqqN0ybA2EYba+al aFM1AVhP555gXpxlWzT8jxU6+ceNJiVrvUa+wpjOhry4jQUmh4KFzAk0JEn/VaLiZ8 Vf1v5DkwJ9IYnXPb9mKvTuvCs0pSjDbwGzfMhrhxcWNMohCxhoJIzyLN47/8bfE447 LhxhjOgEnAI7Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 06/11] mptcp: report v4-mapped subflow addrs as IPv4 Date: Sat, 8 Aug 2026 11:40:36 +0800 Message-ID: <933ec45a29ec3764446ef462cef3813d5cdf2689.1786159812.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 mptcp_get_sub_addrs() currently fills sin6_* for any AF_INET6 subflow. Detect v4-mapped destinations (guarded by CONFIG_IPV6) and reuse the IPv4 branch so MPTCP_SUBFLOW_ADDRS reports match userspace's view. Signed-off-by: Geliang Tang --- net/mptcp/sockopt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 71a4a2aaa838..43a8d1c37137 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -1256,10 +1256,15 @@ static int mptcp_getsockopt_tcpinfo(struct mptcp_so= ck *msk, char __user *optval, static void mptcp_get_sub_addrs(const struct sock *sk, struct mptcp_subflo= w_addrs *a) { const struct inet_sock *inet =3D inet_sk(sk); + bool is_v4 =3D sk->sk_family =3D=3D AF_INET; =20 memset(a, 0, sizeof(*a)); =20 - if (sk->sk_family =3D=3D AF_INET) { +#if IS_ENABLED(CONFIG_IPV6) + if (!is_v4 && sk->sk_family =3D=3D AF_INET6) + is_v4 =3D ipv6_addr_v4mapped(&sk->sk_v6_daddr); +#endif + if (is_v4) { a->sin_local.sin_family =3D AF_INET; a->sin_local.sin_port =3D inet->inet_sport; a->sin_local.sin_addr.s_addr =3D inet->inet_rcv_saddr; --=20 2.53.0 From nobody Sat Aug 15 20:32:02 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 9E06537E5F2 for ; Sat, 8 Aug 2026 03:41:28 +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=1786160489; cv=none; b=tHgj38X2PZGSmcJ2342bP0hlFFPmXNDSrN+u1NPH+26IDwHVjupEsnh5v9DGY77qQPjK4FaB/gAiAx9/PqUOlJ4k49Osd3AmiA1WOn+xZ6RQi48WxbKcc80ENYfGoAHJrD2e4GWSlV55i7K/d27K2O+sK99zVJw+xP9HZslEDts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160489; c=relaxed/simple; bh=C9mYyO7qxj8YvjUdR4FXom/eD4KslfnHvcgYxG89tVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OFSeq0gVjVzBTO83jBePigmOJi6yhvDcYjUfd/m+naqFaZWi/I4QMXtcIQQpIkJoCHgD87Do83gJ7II24XFqlu60LUlVDtq8muzTz5Hj+c52AY1gsL395s6sREJkD6ZmsfF8pHExt0QybsDoSB/cjlwJgxVTFQYwsqkPbKpJvNU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JrKs6Yqn; 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="JrKs6Yqn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67B281F00A3A; Sat, 8 Aug 2026 03:41:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160488; bh=bdpU5bkv5EDXMSRKKRe14O+/iRuTrTAescYnIhdNy64=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JrKs6Yqn8XiokPktGanUZNeFnumJu+nNP5xm0Iq0tNQxOSEdCQDZx4V0DTQ9kBJSv F1Ps/BM+RqIW1d69eUv1Ho8SrUQBeJ/HF3RUFRvlJNLijKVRdFvlu+eIHqgw9Sp8ys Kq/J/V5rK6zlWqgu0O/p7YvBXHNFhDzMdP5Jo/q04Eltd8I1GaoOSHLU+Pq5MHWKWY NgdORGkGIWzrAvLz7dRAlaTXacvKWc1/23DWDQtcBhAn68tdQ/mtAL0p7488L5UEwO OC8l+J+rZ3FKBv2fP1UD6TRl682+UnV68AWq4HU23T2+knI9TNG8NNLUnnV9TgEw8C gLgdgwRyh+Ejw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 07/11] ipv6: extract and export ip6_sock_set_tclass helpers Date: Sat, 8 Aug 2026 11:40:37 +0800 Message-ID: <8056b3dd4ac242ac68eab36e9bc0f01ac2061186.1786159812.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 Sat Aug 15 20:32:02 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 903D537E5F2 for ; Sat, 8 Aug 2026 03:41:31 +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=1786160493; cv=none; b=rGXwxZXNQ0JCoTU/aYgD/+iPOMCdlfgJTClegDo1pFQpDFtzyy62I/WoqbK0jXMEOMbRfxajf7vMHDILJygwvXVNZZP4rYBJDZHwuA5eBe5jRvyovekOkdp0JW3qyi98dFjS/P3xTTAZ7vMCiF5uI2ck4Oz7i6gPBm57QOaJWOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160493; c=relaxed/simple; bh=qPOS48vWO0ThFPApFseoiG0gsENX1eZurcq3WKwTBwo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f9tTIH/xh9Oto1K7Sl0fdg/sOob5hOJKT+bfRIFNZXMzy4MDYRdVwo+KcqadDQm7me2F9Ohoh+iIVnJsIl4xJsP90aNEvHmYZt2zQlnFCpgmA9GqOVoLIqfmc5uYFs2TtOHcej+vLIt8SmN80QPbwlVbzWhiKDio6tVjkVTitik= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZX/1Ttkb; 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="ZX/1Ttkb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 28FDF1F000E9; Sat, 8 Aug 2026 03:41:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160491; bh=V4CSAw6pqeeeL5RmCbjsXgbGLccOBcQ2NxtKW14BdzA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZX/1TtkbL1QxFkjlnHAE3qerG8ajS1v2dq3lvZBwzhO4/ElHf21Q4ri7q8R1jncaZ rb1xV9s6etRLHhRmy31rhbdzRy+ffllmWUELZRETcsgvh8qe2AKm4Ry2/hYasvitY9 uaHgvY9ikIVPgM2KOkB+hRImeE+FzMgg4d/ZeWPH27b5H/qE9emK8ZCyKvtgyvOi+P KZVMsrTbwf3+D9BnIq+8MCWjLlVzz2NY72j8kPgnbSk7y3q0up+St3fHe+gk7ro7kH 3GcOunLn37SKnXvZEU9N4ZGw/A7vLw/k2fG8NWuFvTLDw8lBEeqBiocMFqnFhXr2c2 I+tbLvEnl5i8A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: David 'equinox' Lamparter , Mat Martineau , Matthieu Baerts , Geliang Tang Subject: [PATCH mptcp-next v5 08/11] mptcp: sockopt: implement IPV6_TCLASS Date: Sat, 8 Aug 2026 11:40:38 +0800 Message-ID: <819f1fcd22f08a0b294b9a211d13da9fee94ec4b.1786159812.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 43a8d1c37137..ac326e3f289e 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -485,6 +485,42 @@ static int mptcp_setsockopt_recverr(struct mptcp_sock = *msk, int level, return ret; } =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) { @@ -532,6 +568,11 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk,= int optname, ret =3D mptcp_setsockopt_recverr(msk, SOL_IPV6, optname, optval, optlen); break; +#if IS_ENABLED(CONFIG_IPV6) + case IPV6_TCLASS: + return mptcp_setsockopt_v6_set_tclass(msk, optname, optval, + optlen); +#endif } =20 return ret; @@ -1602,6 +1643,13 @@ static int mptcp_getsockopt_v6(struct mptcp_sock *ms= k, int optname, return -ENOPROTOOPT; return mptcp_put_int_option(msk, optval, optlen, inet6_test_bit(RECVERR6_RFC4884, 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; @@ -1729,6 +1777,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 Sat Aug 15 20:32:02 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 581E437E5F2 for ; Sat, 8 Aug 2026 03:41:33 +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=1786160494; cv=none; b=f9+uFwWONVih1HkhoPvO1iC/qjh+d4C5S/n4h4Irg6fNPYnerlqgzpanRDrHvL0BEqwHmzbynJsguOkX0ckrZmrAdRx5T3YRZ6y2P7Q1s0MWOhB+JPoq7M0xyFOpZfv4fi6l/dibW/rawV8LzZfrXxAEIW3cKFSp45COJBjjJvQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160494; c=relaxed/simple; bh=BwRUT2O93ZD2cksMJGvWO5dYxYsMTEByoRGICSy3CD4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S8sPM+erJuvtWW01duqD26DInVIO+WzXPOzbx4q83U4shl5MMZLBQuoRKBfFAtfQ/oZaJj2amUxPpcmZydRAX0bCb4c5oxhWt7V1OR78SIKoBjd3kAhwYHNiDrDYFxIIuqFQ86fjNiklFR0f7OFYrcNRECeGC2YhOiq09hBH6hg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hWhNznwJ; 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="hWhNznwJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E37661F00A3A; Sat, 8 Aug 2026 03:41:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160493; bh=MqME45l+0rzeGJj0dgXYg9B3mx5+9lLV/xWFrD/bozg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hWhNznwJEO8GEgU22P1Llf3itETo7kAR0vCg9dWZz16lW9gBmWL8LiSr4ZvdROp7h uG6MJSFuby+YTjEc/AXMEGWBLkVew1Plkdv4uJhLhqniQk9JlFcZZb/6KvJDw0EtqJ Hd2VUCxIxMRHkd3Jczaas1Zf/IlAIaAKjH8Zv+etWvQkDx9zFj4PB2JlVglV8f+bcc zLj2wK+mk5HvVRUgmTxrSvjvj5ulFwBdm4EtksqGWcg24l8Qf/GX8Tt3yv46oVI2lG wP8+mIqjNT1gkgieMGtqKEmD1HuOGn1BSuO4ZpFth3GUT1LryIwhhF741TGndZEPJC 2qAaWb1E6Mogw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 09/11] mptcp: copy the subflow's tos/tclass to the msk on accept Date: Sat, 8 Aug 2026 11:40:39 +0800 Message-ID: <43e947bb70e402ada9d0292c95cd3f3c2cdc56e3.1786159812.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 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 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index f19777c04d32..e4fc929abe55 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3757,6 +3757,23 @@ 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); + inet6_sk(nsk)->rcv_flowinfo =3D 0; + } + 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 Sat Aug 15 20:32:02 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 E247237E5F2 for ; Sat, 8 Aug 2026 03:41:34 +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=1786160496; cv=none; b=sag0loHvDA2DhG7livlIt/nuhj8Y7xQnxH69xSZssN/Pe5hXWu9nZgkjQb7NiZUYufFIELoWj6Ue97AI8i8QGtkPL93czwGt7kz5z9nEgDFzAb6ksb0AK2S0sA11n5dmtl2tUVApyo0NAhMzAyy9rSeymY7Sl+Kdw7ySThkyMfk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160496; c=relaxed/simple; bh=hhCIURNC+LAUD0hvbcVJnJclG9LApujDepDP6o9d6A8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mxe8Q7HdA5Vv6qlmKOPEwqiIl05w7Pukzf2On/ix5QYkJvLw7cxp1LENCgG0fjAqOLDe0GF0Z6XYza9/WmnBbC3ZKPCRsmfwUekSC2S6vWm11Hk2rU0m/cZ/7NlsEDs3o6M9sqZlDapDnGLMtVQE/y5M71f7US1zjABzD3ttIJE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Nd47vvx5; 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="Nd47vvx5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8D4E11F000E9; Sat, 8 Aug 2026 03:41:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160494; bh=bSJcrshk9pMImz1aRnkL+JcH54NcegLybWsRd1vENL4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Nd47vvx5+2DINKBnU/oHi4eo+8prUkTbwlJdpo2gAah6CNlie8RXetPWPa+swhowP 6LFG3K+i7rxmmaMYQu5u2T77RrUHG7Sk/c1dgJhM0rfeTN4hHeAWh6B1/XzDbHDW+3 uXcN/45hC5XgB56/mrjN4fzYt/asXqOh/dYwEFOCnjNaOFQRNsv2V+PamH7GVUscJi lnPW6pflV/mc296JGQfEaGYYpdkrwh7Z5B3vIik7q8hoFrVnDyN5RbEXNfDcKmHOvh Reg4t1oCIL+OtmXKamyu/FGziovk328aOfzCBvwp5Gi1o8j6/ATHPyzODqUGdxj11s r+XfbS72RJSOQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 10/11] nvme-tcp: support IPv6 traffic class Date: Sat, 8 Aug 2026 11:40:40 +0800 Message-ID: <5f82f0aac4bf1f879c5ff01bd0f8310c20738f09.1786159812.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. 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/fabrics.c | 18 ++++++++++++++++++ drivers/nvme/host/fabrics.h | 3 +++ drivers/nvme/host/tcp.c | 8 +++++++- 3 files changed, 28 insertions(+), 1 deletion(-) 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 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 Sat Aug 15 20:32:02 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 9AFC637E5F2 for ; Sat, 8 Aug 2026 03:41:36 +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=1786160497; cv=none; b=rx8d5nMj+W60wlHhEjcBVIte++wRGQw4TjPXez8GboGO0SDSm/sH1U7fN+4lhZavtoJHIftv9bmidzYuUsjsT53tWbHdjYwn16U6MiazbiZ5SWawLmgJXC+y4hM8/4veg8vPGfDLWtQ+MNF6Z44ez/jHLAI6el1ZFCfi1hZZD4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786160497; c=relaxed/simple; bh=8vg2WGr9hEIywdtIeTvOSrU/IjHQ2RPpSpzBWlm855w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kc5PhTEJhwOkGZzYtmFzd5JAxflH74xJlmwNvPtGMKUzzVIZjyLkQc6T8ugK/2iNPAMqBw+YGZsRRz38PpZrnKAzlcadv0qGQR/Z0vlqOyK21OExnNtqtSYJQTw6rH4At1wR89MDtjrSYZsjmXrcUrCKZ48a163VWEIU4aqhuVM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=D6IO/nBx; 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="D6IO/nBx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3318E1F00A3A; Sat, 8 Aug 2026 03:41:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786160496; bh=5Xei/qy1FGyVm5DbbVth3b6+3M6xr4VqNW3HpY2bZqs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=D6IO/nBxCNSMZ87eoaXu6oLoeWWD4+bNg+Pgfjv8WxK2+Sl937EXYYJx3ZZqFn/Jr FH6tk/P7m76HXpMZ/qySFgvrtuIVzuyAKetPKb04d2VtP3lKtKTmxh6DwcbEmfWqjb EQDdYlLO9G1SQ/w3dYOXqs7FtRgpu0yUvfuCauwDYOdg+ooailPIV/JZUuAfV1GLNC KyftB2oQAM2lk+YdE2tAwTy+MR+nCLdK2ddwx8Sz2GRunLaR+v1uPo7N+oc7JSbsZZ K3DjIK872pyhRaMjckMbKyM63rmCrlh3Oa5mJgbeGvRRZeEbddyVr1eJHXtKaogcGQ 1SZQF9kNzW5Sw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v5 11/11] nvmet-tcp: support IPv6 traffic class Date: Sat, 8 Aug 2026 11:40:41 +0800 Message-ID: <6ef81d4719c74d61becac8693bd7d66b417a938a.1786159812.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..1d65519ebc0f 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) { + u8 rcv_tclass =3D ip6_tclass(inet6_sk(sock->sk)->rcv_flowinfo); + + if (rcv_tclass > 0) + ip6_sock_set_tclass(sock->sk, rcv_tclass); + } +#endif =20 ret =3D 0; write_lock_bh(&sock->sk->sk_callback_lock); --=20 2.53.0