From nobody Mon Feb 9 16:02:18 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:1624:b0:4ae:a3e3:8373 with SMTP id t4csp899629pip; Thu, 14 Apr 2022 14:19:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyLcdozB4yegZZo7m+xwohI01Jsh/PzcjTi63Qo9ee2kTos1dQP8vNqHKqLM/6c0UiGUNO5 X-Received: by 2002:a0d:ffc3:0:b0:2eb:2327:3361 with SMTP id p186-20020a0dffc3000000b002eb23273361mr3588692ywf.36.1649971174704; Thu, 14 Apr 2022 14:19:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649971174; cv=none; d=google.com; s=arc-20160816; b=bOvUtJcDCft/XKF9Vx36nWh1xWPQf9FNJEBAkQpeETPsQGZmUlnVTpTTMZqlgOimyr S3rLlc/tzpZUZlVLVqSmdJ/9bgq1g9AZBXOwSxNP/674xeou94afbNtzG/Jv3vte8HES thRZ0LzSilWTRCqvBMlCnalA8iXZTSaFnCSlIMMgYltoCd7WEsHptwuO4NuyDixy8enr r08Ny4qV5BMKXg2P68vOBJTwOFDb1CMmZZupG58m7+iPErERmqqtPt6YFgXj67Bn8w0L nk28B64Mj8cpfTxppJYj81nI3XVORXgtmONSZU+sSJMfZn/Lw5MsDuvXe9d//jqMLFah 0ftg== 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:to:from:dkim-signature; bh=29eW/2YxdHA+k8xEut6bX7hPcEDyC1dZJ2h92557aqo=; b=FFEbT08GATHXf0yqmd6Jgb2EfELwamqPuPJWPzkOaXPBDKh1RX3QeX+kfRWjXK8p2+ LAxIwwOcXmJmj8Ma2l53WRzmFXvS/wTDOSmIaXzs6zAlg6Mff3U0TN85UYUxVaHJRM8C ADdpeqiPa05U40L5jpgwf6+ohwnCmRWEHUoXeXDkJwahfcO+nSXFdZ5DPVqdxuWpekrX MJvWeC+jElLSJKT6jGDiJp89qFAro81+6rczoZYiS6nJ2P7zlzRnWj9DDVck+DXexgAn de2ErppssKXONoNQ1ECrfFYTb5nn5eFt51PDAJaFmj4yWGO54M0Ub3FIwpnv9NH7h4X1 T8aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lA+VQeLd; spf=pass (google.com: domain of mptcp+bounces-4734-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4734-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [2604:1380:1:3600::1]) by mx.google.com with ESMTPS id s184-20020a815ec1000000b002eb42879c9dsi1327471ywb.326.2022.04.14.14.19.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Apr 2022 14:19:34 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-4734-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) client-ip=2604:1380:1:3600::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lA+VQeLd; spf=pass (google.com: domain of mptcp+bounces-4734-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4734-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (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 6183A1C0B49 for ; Thu, 14 Apr 2022 21:19:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0D847322A; Thu, 14 Apr 2022 21:19:31 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 79493322C for ; Thu, 14 Apr 2022 21:19:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649971168; x=1681507168; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=cU4mDnfUAvkiTsCreg+MNcMQDY9hjXXA42yZUnVxXGw=; b=lA+VQeLdSjgSwUmPbtcH/Z5NkfupV2NzwZmSwN55cttXGV4GU6tJ16gH EIYsZjtyzO3K2VoDVb3Pt2CNjM6g0vxtnYKrfqJGRey7fFVml7OA17ON7 zleei037DSAnZxX9z/U9dC8VwzrglEswR7ICph5gEvfTl8Rfd9fF40kLv 0XGD8LtQGDgsr0dO9zhmUdPXBpVKLvz4vPa0Bq3p7PwWp6n0la/8Iij1p X32Ot750NPMXz4wM68dEsfEv06esDVhRIQ5clEIe2qet3+Ri7z5bGDbms 7oCiY5wv3SuroUGoI/o72PAet4+TdAaQffmL8MQlWl4XpiPmsS72EBhIT g==; X-IronPort-AV: E=McAfee;i="6400,9594,10317"; a="349467252" X-IronPort-AV: E=Sophos;i="5.90,260,1643702400"; d="scan'208";a="349467252" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Apr 2022 14:19:25 -0700 X-IronPort-AV: E=Sophos;i="5.90,260,1643702400"; d="scan'208";a="573998122" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Apr 2022 14:19:24 -0700 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v10 03/14] mptcp: read attributes of addr entries managed by userspace PMs Date: Thu, 14 Apr 2022 17:19:09 -0400 Message-Id: <20220414211920.1987961-4-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220414211920.1987961-1-kishen.maloor@intel.com> References: <20220414211920.1987961-1-kishen.maloor@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" This change introduces a parallel path in the kernel for retrieving the local id, flags, if_index for an addr entry in the context of an MPTCP connection that's being managed by a userspace PM. The userspace and in-kernel PM modes deviate in their procedures for obtaining this information. Signed-off-by: Kishen Maloor --- v7: -Move userspace PM specific handling into mptcp_userspace_pm_get_local_id() and mptcp_userspace_pm_get_flags_and_ifindex_by_id(). --- net/mptcp/pm_netlink.c | 13 +++++++++++- net/mptcp/pm_userspace.c | 43 ++++++++++++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 7 ++++++- net/mptcp/subflow.c | 2 +- 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 92d47e8e8983..ceb1c310d0c6 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1041,6 +1041,9 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, = struct sock_common *skc) if (mptcp_addresses_equal(&msk_local, &skc_local, false)) return 0; =20 + if (mptcp_pm_is_userspace(msk)) + return mptcp_userspace_pm_get_local_id(msk, &skc_local); + pernet =3D pm_nl_get_pernet_from_msk(msk); =20 rcu_read_lock(); @@ -1305,15 +1308,23 @@ static int mptcp_nl_cmd_add_addr(struct sk_buff *sk= b, struct genl_info *info) return 0; } =20 -int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id, +int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned = int id, u8 *flags, int *ifindex) { struct mptcp_pm_addr_entry *entry; + struct sock *sk =3D (struct sock *)msk; + struct net *net =3D sock_net(sk); =20 *flags =3D 0; *ifindex =3D 0; =20 if (id) { + if (mptcp_pm_is_userspace(msk)) + return mptcp_userspace_pm_get_flags_and_ifindex_by_id(msk, + id, + flags, + ifindex); + rcu_read_lock(); entry =3D __lookup_addr_by_id(pm_nl_get_pernet(net), id); if (entry) { diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index c50f8900ffba..910116b0f5b9 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -76,3 +76,46 @@ int mptcp_userspace_pm_append_new_local_addr(struct mptc= p_sock *msk, spin_unlock_bh(&msk->pm.lock); return ret; } + +int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, + unsigned int id, + u8 *flags, int *ifindex) +{ + struct mptcp_pm_addr_entry *entry, *match =3D NULL; + + *flags =3D 0; + *ifindex =3D 0; + + spin_lock_bh(&msk->pm.lock); + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (id =3D=3D entry->addr.id) { + match =3D entry; + break; + } + } + spin_unlock_bh(&msk->pm.lock); + if (match) { + *flags =3D match->flags; + *ifindex =3D match->ifindex; + } + + return 0; +} + +int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, + struct mptcp_addr_info *skc) +{ + struct mptcp_pm_addr_entry new_entry; + __be16 msk_sport =3D ((struct inet_sock *) + inet_sk((struct sock *)msk))->inet_sport; + + memset(&new_entry, 0, sizeof(struct mptcp_pm_addr_entry)); + new_entry.addr =3D *skc; + new_entry.addr.id =3D 0; + new_entry.flags =3D MPTCP_PM_ADDR_FLAG_IMPLICIT; + + if (new_entry.addr.port =3D=3D msk_sport) + new_entry.addr.port =3D 0; + + return mptcp_userspace_pm_append_new_local_addr(msk, &new_entry); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 40dabf9462a8..a6ee811e5d02 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -775,8 +775,12 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, struct mptcp_pm_add_entry * mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id, +int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, + unsigned int id, u8 *flags, int *ifindex); +int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, + unsigned int id, + u8 *flags, int *ifindex); =20 int mptcp_pm_announce_addr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, @@ -854,6 +858,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); +int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_a= ddr_info *skc); =20 void __init mptcp_pm_nl_init(void); void mptcp_pm_nl_work(struct mptcp_sock *msk); diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index a0e7af33fb26..6d59336a8e1e 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1468,7 +1468,7 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_addr_info *loc, if (local_id) subflow_set_local_id(subflow, local_id); =20 - mptcp_pm_get_flags_and_ifindex_by_id(sock_net(sk), local_id, + mptcp_pm_get_flags_and_ifindex_by_id(msk, local_id, &flags, &ifindex); subflow->remote_key =3D msk->remote_key; subflow->local_key =3D msk->local_key; --=20 2.31.1