From nobody Mon Feb 9 08:11:51 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp1060524jap; Wed, 17 Nov 2021 17:30:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJz9GPfkgZZMTGsmJroFsa8ynzoAii4q1SoFm0N8PYpJ6x/0AHxD4QGjLH41em2nc+zEjoCU X-Received: by 2002:a05:6102:a4c:: with SMTP id i12mr76885873vss.41.1637199023387; Wed, 17 Nov 2021 17:30:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637199023; cv=none; d=google.com; s=arc-20160816; b=D+ObGXEV4CowtOjGu26ZmQdCZh7UYBQXbN8j5gIqTexi/tRYUBfLPMqv8R+0H5+LzI VQCNyUSDY/XqEPzWf7SnAyZ9YiQClXDDO8Aa+1V7bhGEzekEEu95w+bhQdSmaMuEmnr3 3PW1VWWwf6E+Gl47/qSpi2jU7I1u81PtuU7wYiAoJe8p7CfLfRpm/rb17+2AnfWXIXVw 0vOAHE2SeAM4t4FG0dASc2tNdcI1dbG+b4qzPnn2YCv1bAK5Tu2UXfoSCy5n6elBRKU9 sXSJBxX0r5qbsKKhE1iwrdcGfU2zEUj2bXgBDWXTjDX3TliyAyYkbWOIa4dBR4TnoxRc 7s7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=0RhzAMMRxxTCv1rts7DxlvGrUExw6lUnSH+crUfaRw4=; b=Pl4RkywzBNZ6iv8cJHcoWnWJ1j8IAIpEXZy8VTZP1hEu/PTVSIUwPQtazvD4qcduCI UFK9oufsZjhsch+KxMbKY8LTpS4mCg9ia5U687OfLGx+3+8wJiBXpMakzKsl+KFCE/02 5W7z8AKAyDDOxsGp5ymrfN9i7p6tFy4777266ZCXN2mTSVIv2A+1K37h5ufoIyrT0Dwf vz8Hp6CF6ufpKaBgJ91AFKx5TUPq/z866yPuuanJ/Ml8HCk29AxT8IXLozSDhNYSjqCu XLYhSM1dEvSd5jGOzgTGU3g/9703QDf+ju9I8T/gHy+vrm0rGRGBkmZY8czER6CG80RN gqKg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2462-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2462-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id b9si4552554vsu.235.2021.11.17.17.30.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Nov 2021 17:30:23 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2462-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2462-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2462-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ewr.edge.kernel.org (Postfix) with ESMTPS id 97C601C0F22 for ; Thu, 18 Nov 2021 01:30:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 946662C9B; Thu, 18 Nov 2021 01:30:18 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (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 9048C2C95 for ; Thu, 18 Nov 2021 01:30:17 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10171"; a="231577916" X-IronPort-AV: E=Sophos;i="5.87,243,1631602800"; d="scan'208";a="231577916" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2021 17:30:15 -0800 X-IronPort-AV: E=Sophos;i="5.87,243,1631602800"; d="scan'208";a="568294751" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.251.27.251]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2021 17:30:14 -0800 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau Subject: [PATCH mptcp-next 5/6] mptcp: Add a per-namespace sysctl to set the default path manager type Date: Wed, 17 Nov 2021 17:30:04 -0800 Message-Id: <20211118013005.263660-6-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211118013005.263660-1-mathew.j.martineau@linux.intel.com> References: <20211118013005.263660-1-mathew.j.martineau@linux.intel.com> 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" The new net.mptcp.pm_type sysctl determines which path manager will be used by each newly-created MPTCP socket. Signed-off-by: Mat Martineau --- Documentation/networking/mptcp-sysctl.rst | 18 ++++++++++++++++++ net/mptcp/ctrl.c | 18 ++++++++++++++++++ net/mptcp/pm.c | 13 +++++++++---- net/mptcp/protocol.h | 1 + 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/netw= orking/mptcp-sysctl.rst index b0d4da71e68e..e263dfcc4b40 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -46,6 +46,24 @@ allow_join_initial_addr_port - BOOLEAN =20 Default: 1 =20 +pm_type - INTEGER + + Set the default path manager type to use for each new MPTCP + socket. In-kernel path management will control subflow + connections and address advertisements according to + per-namespace values configured over the MPTCP netlink + API. Userspace path management puts per-MPTCP-connection subflow + connection decisions and address advertisements under control of + a privileged userspace program, at the cost of more netlink + traffic to propagate all of the related events and commands. + + This is a per-namespace sysctl. + + * 0 - In-kernel path manager + * 1 - Userspace path manager + + Default: 0 + stale_loss_cnt - INTEGER The number of MPTCP-level retransmission intervals with no traffic and pending outstanding data on a given subflow required to declare it stale. diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 8b235468c88f..64f1366aec5e 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -16,6 +16,8 @@ #define MPTCP_SYSCTL_PATH "net/mptcp" =20 static int mptcp_pernet_id; +static int mptcp_pm_type_max =3D __MPTCP_PM_TYPE_MAX; + struct mptcp_pernet { #ifdef CONFIG_SYSCTL struct ctl_table_header *ctl_table_hdr; @@ -26,6 +28,7 @@ struct mptcp_pernet { u8 mptcp_enabled; u8 checksum_enabled; u8 allow_join_initial_addr_port; + u8 pm_type; }; =20 static struct mptcp_pernet *mptcp_get_pernet(const struct net *net) @@ -58,6 +61,11 @@ unsigned int mptcp_stale_loss_cnt(const struct net *net) return mptcp_get_pernet(net)->stale_loss_cnt; } =20 +int mptcp_get_pm_type(const struct net *net) +{ + return mptcp_get_pernet(net)->pm_type; +} + static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) { pernet->mptcp_enabled =3D 1; @@ -65,6 +73,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet= *pernet) pernet->checksum_enabled =3D 0; pernet->allow_join_initial_addr_port =3D 1; pernet->stale_loss_cnt =3D 4; + pernet->pm_type =3D MPTCP_PM_TYPE_KERNEL; } =20 #ifdef CONFIG_SYSCTL @@ -108,6 +117,14 @@ static struct ctl_table mptcp_sysctl_table[] =3D { .mode =3D 0644, .proc_handler =3D proc_douintvec_minmax, }, + { + .procname =3D "pm_type", + .maxlen =3D sizeof(u8), + .mode =3D 0644, + .proc_handler =3D proc_dou8vec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D &mptcp_pm_type_max + }, {} }; =20 @@ -128,6 +145,7 @@ static int mptcp_pernet_new_table(struct net *net, stru= ct mptcp_pernet *pernet) table[2].data =3D &pernet->checksum_enabled; table[3].data =3D &pernet->allow_join_initial_addr_port; table[4].data =3D &pernet->stale_loss_cnt; + table[5].data =3D &pernet->pm_type; =20 hdr =3D register_net_sysctl(net, MPTCP_SYSCTL_PATH, table); if (!hdr) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 7f96a888e2d5..7ef27d41ad56 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -368,8 +368,12 @@ void mptcp_pm_subflow_chk_stale(const struct mptcp_soc= k *msk, struct sock *ssk) =20 void mptcp_pm_data_init(struct mptcp_sock *msk) { - bool subflows_allowed =3D !!mptcp_pm_get_subflows_max(msk); + u8 pm_type =3D mptcp_get_pm_type(sock_net((struct sock *)msk)); struct mptcp_pm_data *pm =3D &msk->pm; + bool subflows_allowed; + + subflows_allowed =3D !!mptcp_pm_get_subflows_max(msk) && + pm_type =3D=3D MPTCP_PM_TYPE_KERNEL; =20 pm->add_addr_signaled =3D 0; pm->add_addr_accepted =3D 0; @@ -377,13 +381,14 @@ void mptcp_pm_data_init(struct mptcp_sock *msk) pm->subflows =3D 0; pm->rm_list_tx.nr =3D 0; pm->rm_list_rx.nr =3D 0; - WRITE_ONCE(pm->pm_type, MPTCP_PM_TYPE_KERNEL); + WRITE_ONCE(pm->pm_type, pm_type); /* pm->work_pending must be only be set to 'true' when * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL */ WRITE_ONCE(pm->work_pending, - (!!mptcp_pm_get_local_addr_max(msk) && subflows_allowed) || - !!mptcp_pm_get_add_addr_signal_max(msk)); + pm_type =3D=3D MPTCP_PM_TYPE_KERNEL && + ((!!mptcp_pm_get_local_addr_max(msk) && subflows_allowed) || + !!mptcp_pm_get_add_addr_signal_max(msk))); WRITE_ONCE(pm->addr_signal, 0); WRITE_ONCE(pm->accept_addr, !!mptcp_pm_get_add_addr_accept_max(msk) && subflows_allowed); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index edaf0cc75474..b56ad45703dd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -563,6 +563,7 @@ unsigned int mptcp_get_add_addr_timeout(const struct ne= t *net); int mptcp_is_checksum_enabled(const struct net *net); int mptcp_allow_join_id0(const struct net *net); unsigned int mptcp_stale_loss_cnt(const struct net *net); +int mptcp_get_pm_type(const struct net *net); void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow, struct mptcp_options_received *mp_opt); bool __mptcp_retransmit_pending_data(struct sock *sk); --=20 2.34.0