From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012510jaa; Wed, 2 Feb 2022 19:13:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJzSbwQzUFrZOyob5ODo0diUc31lif05erpn+P5JvQmCRdhMprGT0k1Ztbr+fCCtbXvDqWYw X-Received: by 2002:ad4:5f0d:: with SMTP id fo13mr28688263qvb.56.1643858026489; Wed, 02 Feb 2022 19:13:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858026; cv=none; d=google.com; s=arc-20160816; b=fCanz1Z4OKx4Y45WwdnBO7l/4UK2OqDEop+x1LkTNvgYJsEcGj81h6S4M08IWN3oap so+k+Bqsqg03Ci9N1eApRqjl3mINc/070lzAs8bmPNYWYhz0X4SHhv1O2USqdF84ytHK XTW3zKLFgcov6xISj/NgqWmb2OHN9ai0aIsxrniNgb70cPDVDYTrj4kPqut3bEbwGtCy bFSdj+VnzS9zWsi4v3cIYCyEKHAWswvjxU5ajCbndRGoZ6jczmUcFZGuCz0a2GU9GZsy Ven/JdwNfkKn/TTWA4aXer0z7/ah/GvWE6+8LgFRc04OrhRGEvxwDYgiYZNTFHv0+D8l 4euA== 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=dUMrNdmf5f/gIaleDNVc/tNJOgyBBZU/o2yPWeP8DO8=; b=tmQLOa8JyzYRlsWsrrxbI1dmm6Eqe1kILDLI6Imm4Vm3gKjfhJKF86wkiesskeCCpb Vnrm9x/KSOZIdVkAS1fVIEKsfXvnPmafBTarvSArDdSna1JcKkRoqq3EIq40ry/dr6a3 8hAUMqjWIwhPQWX5KsuogtlFKQCV9w3udrhTNLN3kXArPZYDPtWI2WdUlEzJVDW9Vfyh AJ2pUytf3MjhCQiwhhSc6hRYbJgTWbbFEmDCOEPSLOV9oZQToQbWtDQgW1kr9fq1KGlC Pl2UueUG3aTOZldUyl5O1kk5Cc1Thm0h92A61YSI3dTz1FfUJwDGdlIsWxHFAVg2hSnG x0og== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mko7COpC; spf=pass (google.com: domain of mptcp+bounces-3419-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3419-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 s28si6929066qtc.256.2022.02.02.19.13.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:46 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3419-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=mko7COpC; spf=pass (google.com: domain of mptcp+bounces-3419-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3419-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 21BC11C0ECA for ; Thu, 3 Feb 2022 03:13:46 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 56E322CA5; Thu, 3 Feb 2022 03:13:44 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 CD4532C9D for ; Thu, 3 Feb 2022 03:13:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858022; x=1675394022; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=31Rn1fVGrhzOGv3WF3Z/oTSCRdUAxWa4OxdrNJxlX2M=; b=mko7COpC3LIdxu0SQNvhDqlB5ewtceVfqsohzQyYUe3jz1THTt42FSUr 8jMCTf/QZ/HZJYlaZpKeODn235gydkPfCzpQXikzN5QDFzfiYLpJVdu6k 1KVhHzRmH7tV2KIdn8GeYV/gHjutUCZWqQdBm9r/7OAcNMPUX+JdgXsa/ mIB8kT5oPD0IlT6SqVk5QfdSCqbrQRDCgyXejLx01TDNbBPYMlcO47UiR z8I6DgXD4YhmheOykUXjBi/oNWitJjwQBsfNEust+5yujHezyq69BSvgo A0f53A3VxJzO3hPTIR5ywe10piFnxL52a7l4KaRpD234Lq8vdBujccRtj g==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795477" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795477" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658250" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:39 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 1/8] mptcp: bypass in-kernel PM restrictions for non-kernel PMs Date: Wed, 2 Feb 2022 22:13:24 -0500 Message-Id: <20220203031331.2996457-2-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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" Current limits on the # of addresses/subflows must apply only to in-kernel PM managed sockets. Thus this change removes such restrictions for connections overseen by non-kernel (e.g. userspace) PMs. This change also ensures that the kernel does not record stats inside struct mptcp_pm_data updated along kernel code paths when exercised by non-kernel PMs. Signed-off-by: Kishen Maloor --- v4: rephrased commit message, add API mptcp_pm_is_kernel(), bypass accounting fo non-kernel PM managed connections --- net/mptcp/pm.c | 6 +++++- net/mptcp/pm_netlink.c | 3 +++ net/mptcp/protocol.h | 9 +++++++-- net/mptcp/subflow.c | 3 ++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1f8878cc29e3..3e053b759181 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -87,6 +87,9 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) unsigned int subflows_max; int ret =3D 0; =20 + if (!mptcp_pm_is_kernel(msk)) + return true; + subflows_max =3D mptcp_pm_get_subflows_max(msk); =20 pr_debug("msk=3D%p subflows=3D%d max=3D%d allow=3D%d", msk, pm->subflows, @@ -179,7 +182,8 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *msk= , const struct sock *ssk, bool update_subflows; =20 update_subflows =3D (ssk->sk_state =3D=3D TCP_CLOSE) && - (subflow->request_join || subflow->mp_join); + (subflow->request_join || subflow->mp_join) && + mptcp_pm_is_kernel(msk); if (!READ_ONCE(pm->work_pending) && !update_subflows) return; =20 diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 93800f32fcb6..bf24c1a74e1d 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -795,6 +795,9 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, if (!removed) continue; =20 + if (!mptcp_pm_is_kernel(msk)) + continue; + if (rm_type =3D=3D MPTCP_MIB_RMADDR) { msk->pm.add_addr_accepted--; WRITE_ONCE(msk->pm.accept_addr, true); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index f37f087caab3..ac8b57d4f853 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -804,9 +804,14 @@ static inline bool mptcp_pm_should_rm_signal(struct mp= tcp_sock *msk) return READ_ONCE(msk->pm.addr_signal) & BIT(MPTCP_RM_ADDR_SIGNAL); } =20 -static inline bool mptcp_pm_is_userspace(struct mptcp_sock *msk) +static inline bool mptcp_pm_is_userspace(const struct mptcp_sock *msk) { - return READ_ONCE(msk->pm.pm_type) !=3D MPTCP_PM_TYPE_KERNEL; + return READ_ONCE(msk->pm.pm_type) =3D=3D MPTCP_PM_TYPE_USERSPACE; +} + +static inline bool mptcp_pm_is_kernel(const struct mptcp_sock *msk) +{ + return READ_ONCE(msk->pm.pm_type) =3D=3D MPTCP_PM_TYPE_KERNEL; } =20 static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool = port) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 88ee94adc38c..8c25a1122bfd 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -62,7 +62,8 @@ static void subflow_generate_hmac(u64 key1, u64 key2, u32= nonce1, u32 nonce2, static bool mptcp_can_accept_new_subflow(const struct mptcp_sock *msk) { return mptcp_is_fully_established((void *)msk) && - READ_ONCE(msk->pm.accept_subflow); + (!mptcp_pm_is_kernel(msk) || + READ_ONCE(msk->pm.accept_subflow)); } =20 /* validate received token and create truncated hmac and nonce for SYN-ACK= */ --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012492jaa; Wed, 2 Feb 2022 19:13:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJzBJ5hotPg0VXoR23RX6zZWYZjbi1wCWyTChFcCeps7b7DCBZFWyu5xg6hKP3m75JsLQ0Rq X-Received: by 2002:a17:902:a5c1:: with SMTP id t1mr33913566plq.106.1643858025021; Wed, 02 Feb 2022 19:13:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858025; cv=none; d=google.com; s=arc-20160816; b=F39lFZ+HSF/R4QlWzF+jQA9bTFapIxq7wbGqjZPJzxcocTl8W4cY67YpF1oCrEh5Pd 5l83FAsTQgM5PlU4HYPiF5IkNUJehv5lwQ/cq+ktZxsF9ESI/vR/zkXFmlTIXj5t53TW He/tpkJATLysXmhjjzTocV9RLnCd7nyt9EYoZCHOXo9r64cFUWZTlKtiO7nr6EAZ4vi/ yFxGHo1i69duOHeFlGAUIbJT2ultpthZ4K3bSZ4NoAvtamfxwVCH8kwqjTzBn/uJ57Wa f2+9XNVYI4lLpzBZbq+qU6t7/ZmZ4+DQDatzsOAqRmfuIlUszLVyf+EDb305mBSGgCgb 0vXQ== 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=x3mmO8fo+9R7KuTfd4lnITrNu3cJ+0cgCqC+Yh44atI=; b=WI3MxAAnGcOJoYMTvVSSWYP8ATTZKWXYasafJFhXbxqoilq9JIThwJWG6Mt277RdzQ tjdS+Q3+jFyuivuh/T7kh3x8JUbXeVln9h3UYiiwiXqnhjGgUv2l9YTnxs5g0rmvAEjz FfKQ1aKHkG9d2OgvDZgdkYv/tte0ecJOBYSi7FA/JZY2A9fnnObX60Iec1uQ2UzvAyg+ g6T2yFlnLRZL+ENSj5LS0NZvAz968XLijZwXbOFqF0sTtCo/jGL5/RVAZxanKKz98KdU bFbcAuL8e/JZbdMUg8+WmBleNzjBdVdRV5zLkRX/xYRbtk2wZRM6ifgxhsNHFu+Z0+5e RLXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=U+FQPvOK; spf=pass (google.com: domain of mptcp+bounces-3418-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3418-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id b9si22593186plz.460.2022.02.02.19.13.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:45 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3418-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=U+FQPvOK; spf=pass (google.com: domain of mptcp+bounces-3418-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3418-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 sjc.edge.kernel.org (Postfix) with ESMTPS id C9E453E1010 for ; Thu, 3 Feb 2022 03:13:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1F8B62CA2; Thu, 3 Feb 2022 03:13:44 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 E9B822CA1 for ; Thu, 3 Feb 2022 03:13:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858022; x=1675394022; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=t0F+LtZuBQhBzOAqb3kTvTyZmkbo6vTLqs3duOIuOUY=; b=U+FQPvOKaC23ciWDyiWPcbA/fzqd9NeEFzeBVDMTDbt+RMj8oR6lyQeF qg03m2U7AWHjbqn7M+knfcDI4hm/hIbCTMup/KJiuETU9R/0rz+EguxqY d5GG1aOzwLkyLs2ZKopIpKgHnZRvqjAIZanuWGBORNoWIK2bX6fZIchl2 dL3u61HN9qmrh3IltPW1NvRZ/riSdKjQEn9gr85eODzVi6j9eakajKia8 w3Rp7swQewqYEF/mSP/SvLWduzz7JoOuZMd1lADIZFrnQbFd7tWsEZtJl ThrIQtDmMg6OVLlzpu/4EqjzSaJkGso/V90M/v5HbPWnVBfT48X2FV3RW A==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795478" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795478" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658253" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:39 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 2/8] mptcp: store remote id from MP_JOIN SYN/ACK in local ctx Date: Wed, 2 Feb 2022 22:13:25 -0500 Message-Id: <20220203031331.2996457-3-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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 reads the addr id assigned to the remote endpoint of a subflow from the MP_JOIN SYN/ACK message and stores it in the related subflow context. The remote id was not being captured prior to this change, and will now provide a consistent view of remote endpoints and their ids as seen through netlink events. Signed-off-by: Kishen Maloor --- net/mptcp/subflow.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 8c25a1122bfd..d3691b95401a 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -444,6 +444,7 @@ static void subflow_finish_connect(struct sock *sk, con= st struct sk_buff *skb) subflow->backup =3D mp_opt.backup; subflow->thmac =3D mp_opt.thmac; subflow->remote_nonce =3D mp_opt.nonce; + subflow->remote_id =3D mp_opt.join_id; pr_debug("subflow=3D%p, thmac=3D%llu, remote_nonce=3D%u backup=3D%d", subflow, subflow->thmac, subflow->remote_nonce, subflow->backup); --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012527jaa; Wed, 2 Feb 2022 19:13:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJxe6Kn0MigNgcqu1HHXMBSyJJbjs2qnZgRA+/0hfKS4HXLSPvxkgaEWDLUWnxqOhvR05H2Z X-Received: by 2002:ad4:4ea6:: with SMTP id ed6mr29539305qvb.113.1643858027612; Wed, 02 Feb 2022 19:13:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858027; cv=none; d=google.com; s=arc-20160816; b=IQbs3yFl1aZLSz4joeIDpWCQlcVTUTCliPp21aE4W/MSfTXdkWt5sZWc5R8saVuHuW 60Yl0+Qtjy1rdTgOho9Ulg8Y89pG8G7PDdTu1kuxQacqwIPKBVEUa5BCbYeHTyhE9PXU c+JroyaUeTr5x9sMX1NLS2gNAGwq2/7Coo/0Rhu41TydVymIYlc/0WD0crNAPlwvVVS3 MHiaCt7MlHa01swwD/p9j9FiuwmeY0Zk0otAPgYJI6U9c2W3YWtVniNllf1M0wZ+U+My MI5hH2Wu4tb5OThSiPa0D+LIPu+GUDHjWw0yfxXC6Xb3+HlQfqpUHN+xQ2F+tDYUU3M0 jU4w== 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=0bqlUsUB7YbpC0RXkWPKPa331xVmtb2Y+shNPLshg/8=; b=jB2wmX7205f8P9w7ldPmqhV2u+luOXzZg6srF1Ar9FCIoYViEZwjJ0JeJ/6rdXeMFM ezUVljYOeKm3cz6VAhfl31yo03TBynGATNKyVmIvVEc6H0Epk7j9PbsIQam47/Gx1/wN e8BaO6GM0J+vFV0PGD+V/b5VC1WOpBlKzh0b/P5wy/i6Y/dqjNcE0nTVwpFbnHSNFvfy iD4wKLc0Fw//KmbvyUNiZ3yDpOWbG53YVh+Xnz5LARvcZOMrLqRuW4N1iSsUJh1y1vjM K4LTuG/joe111Fj6Igjk4OTlmY3WXIW8FAgENpfUbuDkho5GKrD9661CcsdOYlGIymJb oi3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=D+LE5D63; spf=pass (google.com: domain of mptcp+bounces-3420-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3420-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 22si8114048qtw.95.2022.02.02.19.13.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:47 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3420-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=D+LE5D63; spf=pass (google.com: domain of mptcp+bounces-3420-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3420-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 510E31C0E85 for ; Thu, 3 Feb 2022 03:13:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3144A2C9C; Thu, 3 Feb 2022 03:13:45 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 2756D2CA1 for ; Thu, 3 Feb 2022 03:13:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858024; x=1675394024; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=lb+/sjxrVOCu6IaiElGnADZNu5LQc1FIjY+PPW9x2pc=; b=D+LE5D633rF7r3Beofjs+6UHdmmvJryeW7TW64VlrvM15ZYZaiVhTQSr vpvK+a+7JVfmmb+JuFmNYRtXtxB1qo1WDQ2MrUZAGIYGg6zPQclCTYkCV DMeaUl0o62Zo7/eJ7mn8UmRPO8CYZXBmtdyZ9GdYAvbSrMqaaj7n19nCY nKwqiJqPYqMKt4OmB8TmynGuiamGHXj5I4X/rn0HzcDOIfD3Qwy/Lha89 xIqqMylawPamgtug42NRvI/B1G1bNvxvUt2CkKscyj0M5Kile5X4nvx/F cJjxz1SEjUWnQ5UqV94Y8I/5SqhS8tQZGiBos6v2nBxTI4Xq1dXU7mg7/ Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795479" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795479" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658257" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 3/8] mptcp: reflect remote port (not 0) in ANNOUNCED events Date: Wed, 2 Feb 2022 22:13:26 -0500 Message-Id: <20220203031331.2996457-4-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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" Per RFC 8684, if no port is specified in an ADD_ADDR message, MPTCP SHOULD attempt to connect to the specified address on the same port as the port that is already in use by the subflow on which the ADD_ADDR signal was sent. To facilitate that, this change reflects the specific remote port in use by that subflow in MPTCP_EVENT_ANNOUNCED events. Signed-off-by: Kishen Maloor --- v4: refactor mptcp_pm_add_addr_received() and mptcp_event_addr_announced() to eliminate a param --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 6 ++++-- net/mptcp/pm_netlink.c | 11 ++++++++--- net/mptcp/protocol.h | 4 ++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 7b615dc10897..6dfaa8e11331 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1131,7 +1131,7 @@ bool mptcp_incoming_options(struct sock *sk, struct s= k_buff *skb) if ((mp_opt.suboptions & OPTION_MPTCP_ADD_ADDR) && add_addr_hmac_valid(msk, &mp_opt)) { if (!mp_opt.echo) { - mptcp_pm_add_addr_received(msk, &mp_opt.addr); + mptcp_pm_add_addr_received(sk, &mp_opt.addr); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR); } else { mptcp_pm_add_addr_echoed(msk, &mp_opt.addr); diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 3e053b759181..94f008b2d624 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -200,15 +200,17 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *m= sk, const struct sock *ssk, spin_unlock_bh(&pm->lock); } =20 -void mptcp_pm_add_addr_received(struct mptcp_sock *msk, +void mptcp_pm_add_addr_received(const struct sock *ssk, const struct mptcp_addr_info *addr) { + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk); + struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); struct mptcp_pm_data *pm =3D &msk->pm; =20 pr_debug("msk=3D%p remote_id=3D%d accept=3D%d", msk, addr->id, READ_ONCE(pm->accept_addr)); =20 - mptcp_event_addr_announced(msk, addr); + mptcp_event_addr_announced(ssk, addr); =20 spin_lock_bh(&pm->lock); =20 diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index bf24c1a74e1d..ff13012178ae 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1974,10 +1974,12 @@ void mptcp_event_addr_removed(const struct mptcp_so= ck *msk, uint8_t id) kfree_skb(skb); } =20 -void mptcp_event_addr_announced(const struct mptcp_sock *msk, +void mptcp_event_addr_announced(const struct sock *ssk, const struct mptcp_addr_info *info) { - struct net *net =3D sock_net((const struct sock *)msk); + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk); + struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); + struct net *net =3D sock_net(ssk); struct nlmsghdr *nlh; struct sk_buff *skb; =20 @@ -1999,7 +2001,10 @@ void mptcp_event_addr_announced(const struct mptcp_s= ock *msk, if (nla_put_u8(skb, MPTCP_ATTR_REM_ID, info->id)) goto nla_put_failure; =20 - if (nla_put_be16(skb, MPTCP_ATTR_DPORT, info->port)) + if (nla_put_be16(skb, MPTCP_ATTR_DPORT, + info->port =3D=3D 0 ? + ((struct inet_sock *)inet_sk(ssk))->inet_dport : + info->port)) goto nla_put_failure; =20 switch (info->family) { diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index ac8b57d4f853..4371ac3fbde1 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -751,7 +751,7 @@ void mptcp_pm_subflow_established(struct mptcp_sock *ms= k); bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk); void mptcp_pm_subflow_check_next(struct mptcp_sock *msk, const struct sock= *ssk, const struct mptcp_subflow_context *subflow); -void mptcp_pm_add_addr_received(struct mptcp_sock *msk, +void mptcp_pm_add_addr_received(const struct sock *ssk, const struct mptcp_addr_info *addr); void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, struct mptcp_addr_info *addr); @@ -780,7 +780,7 @@ int mptcp_pm_remove_subflow(struct mptcp_sock *msk, con= st struct mptcp_rm_list * =20 void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk, const struct sock *ssk, gfp_t gfp); -void mptcp_event_addr_announced(const struct mptcp_sock *msk, const struct= mptcp_addr_info *info); +void mptcp_event_addr_announced(const struct sock *ssk, const struct mptcp= _addr_info *info); void mptcp_event_addr_removed(const struct mptcp_sock *msk, u8 id); =20 static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012536jaa; Wed, 2 Feb 2022 19:13:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJxAmT/HJb4A932B3j2kMJofioemTMastUeRw8DUak1TYBV09AHYZtDybPJE9/YssCvmDA09 X-Received: by 2002:a05:6214:2b0c:: with SMTP id jx12mr29781866qvb.17.1643858028833; Wed, 02 Feb 2022 19:13:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858028; cv=none; d=google.com; s=arc-20160816; b=l4CZYyqbkidcQMsUIrmirvLdKaey5Q/zeY5w5UTzuERhqBEX8B9QkuoFT0bIjJGCYg 3LpiJNXCLU88smPoBQjF/vWwsEHwogydKiaM4l2q4sa/corhOYfCfkuuhYY/SsP262xF wV8Kp/zkDN4P93lDa6QEVG2NTtqgIWz13V65XZ2mncUUxxDNfRLzyUIcT7SkP879jJKh 3OahNrrL0m9SFK+hIyRf9iP6JOIwOzjNcdhvRVrIkr5KEP2B3GLis06XJsCmmluFQJpw N3H1BUVYwDXPOJ0hV+nRCHcWt0AspMoyixqMNWrRZGi0yHw46XzfLs0SPCiO5tLaLEPI hgOg== 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=VuZkPke1xmMFAD4Vcttah6H3Rm9ey+8JZoX80L+hEug=; b=n0gtd32EoKJTmFXNRoMlo6N0iew8k3GoAyoHUXgSXPFDHHNq7+t4FEgYgfoxnCBgGF jzMKu543loK4ozTvIyvQWkQW1yUnctBrEqwEDEtXdxpuO9GVfXzMuSpPOT7Rdx7z4OKg LbEFuLEQ5hOpoLRQLLzJqBuFnlf7Hr6Vgu45pyrcGGrsX9al4EeRCtU/ufQkzkUlpbSY nhnV5ds/zB5Q+vtZYWYHn29sgpeV0NQuqtxQoylXiAhU6NkR+wXg0XJ9whbWpobcp1K8 dtar44DhWKjDM386p1/mFMlved0ZPD66V8CaswtJJSZTEizCue8jF051DucPhdyUsTAD lRig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=X4eWZ8PT; spf=pass (google.com: domain of mptcp+bounces-3421-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3421-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 e22si9892765qkm.86.2022.02.02.19.13.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:48 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3421-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=X4eWZ8PT; spf=pass (google.com: domain of mptcp+bounces-3421-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3421-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 605D41C0EC4 for ; Thu, 3 Feb 2022 03:13:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 417702CA1; Thu, 3 Feb 2022 03:13:45 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 453D32CA4 for ; Thu, 3 Feb 2022 03:13:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858024; x=1675394024; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=OACnXn1oJrS2hLkA30+p19VlWoYRQSzgjIal5iKRlMc=; b=X4eWZ8PTHW7Z7N/It3Lcb+UR2ZUbBgMTtPqOOmRGdVqPmsZd5/LTih/M 1R5qjfo6YrKQPtfPrJND5CW8l9OwGCV1zH2fnF+8hXGlejrb0wflIjX68 rbF4YI+xCH9PZVLsWSwvZn+otjsgY9JzVH5Vh9K318cQYUZQ6cdHfWPXR lTZrEsQOQwDosSJ8sB7Oe/JV1i+N6bBEBuaRbNKFvihiq3dYGP3NpUDcb YMf2EKg9VYDGFK7ksDmv87/9CAr8Yoh89b7Q7AnKYvI+p4P5rAZybF8YL TBr2D2iTXrCWC7oQrnCwt9SMJGxHGcg/A6AM6mbSO6wBGAwwJTpjut61+ g==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795480" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795480" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658260" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 4/8] mptcp: establish subflows from either end of connection Date: Wed, 2 Feb 2022 22:13:27 -0500 Message-Id: <20220203031331.2996457-5-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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 updates internal logic to permit subflows to be established from either the client or server ends of MPTCP connections. This symmetry and added flexibility may be harnessed by PM implementations running on either end in creating new subflows. The essence of this change lies in not relying on the "server_side" flag (which continues to be available if needed). Signed-off-by: Kishen Maloor --- v2: check for 3rd ACK retransmission only on passive side of the MPJ handshake v3: check for active subflow socket in subflow_simultaneous_connect --- net/mptcp/options.c | 2 +- net/mptcp/protocol.c | 5 +---- net/mptcp/protocol.h | 8 ++++++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 6dfaa8e11331..4f56e874c542 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -929,7 +929,7 @@ static bool check_fully_established(struct mptcp_sock *= msk, struct sock *ssk, if (TCP_SKB_CB(skb)->seq =3D=3D subflow->ssn_offset + 1 && TCP_SKB_CB(skb)->end_seq =3D=3D TCP_SKB_CB(skb)->seq && subflow->mp_join && (mp_opt->suboptions & OPTIONS_MPTCP_MPJ) && - READ_ONCE(msk->pm.server_side)) + !subflow->request_join) tcp_send_ack(ssk); goto fully_established; } diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 3324e1c61576..6142b4b25769 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3255,15 +3255,12 @@ bool mptcp_finish_join(struct sock *ssk) return false; } =20 - if (!msk->pm.server_side) + if (!list_empty(&subflow->node)) goto out; =20 if (!mptcp_pm_allow_new_subflow(msk)) goto err_prohibited; =20 - if (WARN_ON_ONCE(!list_empty(&subflow->node))) - goto err_prohibited; - /* active connections are already on conn_list. * If we can't acquire msk socket lock here, let the release callback * handle it diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 4371ac3fbde1..1a8d09796627 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -908,13 +908,17 @@ static inline bool mptcp_check_infinite_map(struct sk= _buff *skb) return false; } =20 +static inline bool is_active_ssk(struct mptcp_subflow_context *subflow) +{ + return (subflow->request_mptcp || subflow->request_join); +} + static inline bool subflow_simultaneous_connect(struct sock *sk) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); - struct sock *parent =3D subflow->conn; =20 return sk->sk_state =3D=3D TCP_ESTABLISHED && - !mptcp_sk(parent)->pm.server_side && + is_active_ssk(subflow) && !subflow->conn_finished; } =20 --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012553jaa; Wed, 2 Feb 2022 19:13:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJxmlRGmPw79g9/IWcUhMTjFVzrOC9dzpdADfffs9ID4NtP7HGt6kvUOeOLB4ADHHFuNnVOo X-Received: by 2002:a63:6a49:: with SMTP id f70mr18147123pgc.55.1643858029750; Wed, 02 Feb 2022 19:13:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858029; cv=none; d=google.com; s=arc-20160816; b=aCKkJclrN9VAsU6p96KRnPfEL+M4D+OUjTKFN7ULmuM+2MAnJeR/4z72+wZO/LXe80 29tCs5t/xZkIL4RUcunLCAVmJ8Aj04dqdyIZqu4m5Osc+nqN8UpDCmFi4fX9sGYkdTJf 9dea585ixQsArBZkN2sIjzoDQrS76avKzTP/Q/9eOeKtpW3xbcHxWLx+F63YcgjgH8XI J2rrLcKNcBIw2CtLNd/cr8YKCZBWi9EM6gQHxmK2ZuYsema3EpK4brdXr3KqK8tqKMNa 8svZazl4TBToulzU9471HaBoUVwXytTKm41AZn+hPfjPDntljcNuuuDDqZwqo76Jgjz2 L0HQ== 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=j/Tn43ZqcFS/s3SwD29JI4pBjQ/pPU6OdJc/oGNZ0rE=; b=h+rngg8mj0AHwwyLWOxs3w2+NODD04OX/PepxDjK/AgJEPVCKjcW+M+kJ8PGePMtOB TtETxnEae8U8zbY14vyhmshyaxR+2qRBZC99nLa7z+dvOqslhe38ky778p+Dkq2v7zPX cDpDhmcnrsAZLIHF8srhKkAPW+5qHyPN0kvOWckpte4BS+ZykUhLG8WatfCIeNLVBGZa uNPl/l9LDBwFvSSp3q/e+Bxk4wB6vCCG53UN8WfysRGusC2U7DY26wt2yBZuHZjmq2qW P52wu0OxIY8EZSO98L8iNgQZf2JE+cwCf5RJCTiIq/drG9ArJ5QfMztlvDJ4hAWEuYVi u5vw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Viw74cj1; spf=pass (google.com: domain of mptcp+bounces-3422-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3422-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id 6si22176033pgi.55.2022.02.02.19.13.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:49 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3422-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Viw74cj1; spf=pass (google.com: domain of mptcp+bounces-3422-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3422-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 sjc.edge.kernel.org (Postfix) with ESMTPS id 4031D3E104B for ; Thu, 3 Feb 2022 03:13:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9E0252CA7; Thu, 3 Feb 2022 03:13:45 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 5A75C2CA6 for ; Thu, 3 Feb 2022 03:13:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858024; x=1675394024; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=gxuX5nBfNjm3eDOIguVloVSnnpRcwqw5nK5LrBxglK0=; b=Viw74cj12VPQDiioVJANyuCA1CURjAzmHnwt0GRvQfNXU9qfZKNdtah9 nv57L6VMF1+OYFIH82UCTHJBWsHmpJNJpN9XWnhPbzFNAD4mqzCyHdKFL yxrdkLy9TSf3JaJpaJwuHzm86ne/02CcEs4V9I9NhV2yCkO7TMduV+5QI HieKiF9A8xHKh5WOIFaJ1c/GTrnIlGGFu6WiCiS3HgYHRTbb+gaeFK8B+ BPYDBno+Y0Vo6MKdK1w8c5MgecKMsTDCptEznYzGlmYWGTlswo6kuahKo 0bWYv8hvqspkWxvu9rVelNSpGYlOFWQLiTvOh7LR+Q06fiGUMYdAdDpjq g==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795481" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795481" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658263" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 5/8] mptcp: netlink: store per namespace list of refcounted listen socks Date: Wed, 2 Feb 2022 22:13:28 -0500 Message-Id: <20220203031331.2996457-6-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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" The kernel can create listening sockets bound to announced addresses via the ADD_ADDR option for receiving MP_JOIN requests. Path managers may further choose to advertise the same addr+port over multiple MPTCP connections. So this change provides a simple framework to manage a list of all distinct listning sockets created in the kernel over a namespace by encapsulating the socket in a structure that is ref counted and can be shared across multiple connections. The sockets are released when there are no more references. Signed-off-by: Kishen Maloor --- v2: fixed formatting --- net/mptcp/pm_netlink.c | 76 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index ff13012178ae..3d6251baef26 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -22,6 +22,14 @@ static struct genl_family mptcp_genl_family; =20 static int pm_nl_pernet_id; =20 +struct mptcp_local_lsk { + struct list_head list; + struct mptcp_addr_info addr; + struct socket *lsk; + struct rcu_head rcu; + refcount_t refcount; +}; + struct mptcp_pm_addr_entry { struct list_head list; struct mptcp_addr_info addr; @@ -41,7 +49,10 @@ struct mptcp_pm_add_entry { struct pm_nl_pernet { /* protects pernet updates */ spinlock_t lock; + /* protects access to pernet lsk list */ + spinlock_t lsk_list_lock; struct list_head local_addr_list; + struct list_head lsk_list; unsigned int addrs; unsigned int stale_loss_cnt; unsigned int add_addr_signal_max; @@ -83,6 +94,69 @@ static bool addresses_equal(const struct mptcp_addr_info= *a, return a->port =3D=3D b->port; } =20 +static struct mptcp_local_lsk *lsk_list_find(struct pm_nl_pernet *pernet, + struct mptcp_addr_info *addr) +{ + struct mptcp_local_lsk *lsk_ref =3D NULL; + struct mptcp_local_lsk *i; + + rcu_read_lock(); + + list_for_each_entry_rcu(i, &pernet->lsk_list, list) { + if (addresses_equal(&i->addr, addr, true)) { + if (refcount_inc_not_zero(&i->refcount)) { + lsk_ref =3D i; + break; + } + } + } + + rcu_read_unlock(); + + return lsk_ref; +} + +static void lsk_list_add_ref(struct mptcp_local_lsk *lsk_ref) +{ + refcount_inc(&lsk_ref->refcount); +} + +static struct mptcp_local_lsk *lsk_list_add(struct pm_nl_pernet *pernet, + struct mptcp_addr_info *addr, + struct socket *lsk) +{ + struct mptcp_local_lsk *lsk_ref; + + lsk_ref =3D kmalloc(sizeof(*lsk_ref), GFP_ATOMIC); + + if (!lsk_ref) + return NULL; + + lsk_ref->lsk =3D lsk; + memcpy(&lsk_ref->addr, addr, sizeof(struct mptcp_addr_info)); + refcount_set(&lsk_ref->refcount, 1); + + spin_lock_bh(&pernet->lsk_list_lock); + list_add_rcu(&lsk_ref->list, &pernet->lsk_list); + spin_unlock_bh(&pernet->lsk_list_lock); + + return lsk_ref; +} + +static void lsk_list_release(struct pm_nl_pernet *pernet, + struct mptcp_local_lsk *lsk_ref) +{ + if (lsk_ref && refcount_dec_and_test(&lsk_ref->refcount)) { + sock_release(lsk_ref->lsk); + + spin_lock_bh(&pernet->lsk_list_lock); + list_del_rcu(&lsk_ref->list); + spin_unlock_bh(&pernet->lsk_list_lock); + + kfree_rcu(lsk_ref, rcu); + } +} + static bool address_zero(const struct mptcp_addr_info *addr) { struct mptcp_addr_info zero; @@ -2141,12 +2215,14 @@ static int __net_init pm_nl_init_net(struct net *ne= t) struct pm_nl_pernet *pernet =3D net_generic(net, pm_nl_pernet_id); =20 INIT_LIST_HEAD_RCU(&pernet->local_addr_list); + INIT_LIST_HEAD_RCU(&pernet->lsk_list); =20 /* Cit. 2 subflows ought to be enough for anybody. */ pernet->subflows_max =3D 2; pernet->next_id =3D 1; pernet->stale_loss_cnt =3D 4; spin_lock_init(&pernet->lock); + spin_lock_init(&pernet->lsk_list_lock); =20 /* No need to initialize other pernet fields, the struct is zeroed at * allocation time. --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012563jaa; Wed, 2 Feb 2022 19:13:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJygaoee4mz/aP6r9mfdjuVyO0GLsoo6+h/iQSiDpBMfIZkuRLRxDYiHwiMX6oaNRMrTs+9F X-Received: by 2002:ac8:5f88:: with SMTP id j8mr26079846qta.223.1643858030954; Wed, 02 Feb 2022 19:13:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858030; cv=none; d=google.com; s=arc-20160816; b=lFfMp0nJ/PCnMlITnUgLXcmc4MUAcBRUueKHZTyrf9g03SNpfvmJ9c+0GuoGjxqztp jrDc4cc4jan/kDLPpmbGujlM4vUyW/ZBCvRfhsfhQJSZrlq4y88dQMB6e1Zf9rXNmi0e bIGkfnCBrQ4xf9YFuG6jkapyw+wZJUeou+r2YiSqx3AhIcyX6ZzEQFbgeeW9108lHdvu AMRgNQf4QLi/Ub/Zuzx8OH+rUdRijQKbR3oxB40T4r8FRiiRFyOT8TkoaFIXfZgzZbsP w/M+fpHJLlb0Pq2iqk+1uQ1FVMeu0RJCvNfs+OBuZ2aprAnFiPLVGRNE/6CNlUu28asK FH4A== 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=dY1ZiuLdF8kKpGJCTCcEziQIrhuG/gzYfwpTDg9Hxhg=; b=Mdfh1W9bU7RUB+hzOnXZECTS/p/aHb8jcIHHOurjSAw98Hp1bX5z8vptk6shfyR8mw 68KCWOek5mU33bywjaqmdB0AvvGIEYkxIdIzNYZJuu5rhXxSZL+QEff4ApO+WzneOKop Q8rJeZIF+KsvC/Njb+G0GfzCefV9FN5+XUGq6i4y28/6POd3+gc1gg8QiQ53AfIqZwML 5ZuZQXxyjfVsDWgn6XAtye68NEnWkNd845CAGpgxQTYuJ9D/4UUiWoTkgN7kfsbIHBlZ ZDoF6V87zKq2kOj/0FXEJ7WdyUCPbqxNh0apNGf8uMoxC+CFDGQAH8H5//uTMycb1mwY 7PhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IFX6c4lJ; spf=pass (google.com: domain of mptcp+bounces-3423-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3423-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 s28si6929066qtc.256.2022.02.02.19.13.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:50 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3423-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=IFX6c4lJ; spf=pass (google.com: domain of mptcp+bounces-3423-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3423-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 BF0871C0EE1 for ; Thu, 3 Feb 2022 03:13:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5112D2CA2; Thu, 3 Feb 2022 03:13:46 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 3517A2C9D for ; Thu, 3 Feb 2022 03:13:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858025; x=1675394025; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=g/x4Lyd02IWROGIZPOELi9G/bO8vO8QW8MjnKsw/N/0=; b=IFX6c4lJTV7K37H8fO6wZ5QgdyVJk05lCMGz4dFGuBwmIRciNgUIjnp8 SGk0/QKufyeahit01S6aeSVKxAZF55eydQq26fzGCbrc5lkE7QB1uKVDD VpkPIOkXtic2Mh9NGSU+ae7FdwDjd5rGe1XhWcrw45/tGmyLQlmxSItsa 3K+/3y6mOUYS2uGxMIXdxBb1OSpFacYt5Juzvb4xpp/xralJK7KyE/vH8 EIYSV/loJ2cLR/9StR6Vq6Kf0+v/qfnBflwR7soMOkeUE23c7H5w9GfQy B95/cKLDtyEIdGSBx3yH9iKkrmSaihbt1Cb0FQTYf2vHJWruhN9EgCIEU g==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795482" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795482" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658266" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 6/8] mptcp: netlink: store lsk ref in mptcp_pm_addr_entry Date: Wed, 2 Feb 2022 22:13:29 -0500 Message-Id: <20220203031331.2996457-7-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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 updates struct mptcp_pm_addr_entry to store a listening socket (lsk) reference, i.e. a pointer to a reference counted structure containing the lsk (struct socket *) instead of the lsk itself. Code blocks that previously operated on the lsk in struct mptcp_pm_addr_entry have been updated to work with the lsk ref instead, utilizing new helper functions. Signed-off-by: Kishen Maloor --- v2: fixed formatting v3: added helper lsk_list_find_or_create(), updated mptcp_pm_nl_create_listen_socket() to take struct net* as param v4: call lsk_list_find() after a failed lsk_list_find_or_create() for a chance to retrieve a recently created lsk by a simultaneous call --- net/mptcp/pm_netlink.c | 79 +++++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 3d6251baef26..4c9567db56ff 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -35,7 +35,7 @@ struct mptcp_pm_addr_entry { struct mptcp_addr_info addr; u8 flags; int ifindex; - struct socket *lsk; + struct mptcp_local_lsk *lsk_ref; }; =20 struct mptcp_pm_add_entry { @@ -157,6 +157,33 @@ static void lsk_list_release(struct pm_nl_pernet *pern= et, } } =20 +static struct mptcp_local_lsk *lsk_list_find_or_create(struct net *net, + struct pm_nl_pernet *pernet, + struct mptcp_pm_addr_entry *entry, + int *createlsk_err) +{ + struct mptcp_local_lsk *lsk_ref; + struct socket *lsk; + int err; + + lsk_ref =3D lsk_list_find(pernet, &entry->addr); + + if (!lsk_ref) { + err =3D mptcp_pm_nl_create_listen_socket(net, entry, &lsk); + + if (createlsk_err) + *createlsk_err =3D err; + + if (lsk) + lsk_ref =3D lsk_list_add(pernet, &entry->addr, lsk); + + if (lsk && !lsk_ref) + sock_release(lsk); + } + + return lsk_ref; +} + static bool address_zero(const struct mptcp_addr_info *addr) { struct mptcp_addr_info zero; @@ -999,8 +1026,9 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm= _nl_pernet *pernet, return ret; } =20 -static int mptcp_pm_nl_create_listen_socket(struct sock *sk, - struct mptcp_pm_addr_entry *entry) +static int mptcp_pm_nl_create_listen_socket(struct net *net, + struct mptcp_pm_addr_entry *entry, + struct socket **lsk) { int addrlen =3D sizeof(struct sockaddr_in); struct sockaddr_storage addr; @@ -1009,12 +1037,12 @@ static int mptcp_pm_nl_create_listen_socket(struct = sock *sk, int backlog =3D 1024; int err; =20 - err =3D sock_create_kern(sock_net(sk), entry->addr.family, - SOCK_STREAM, IPPROTO_MPTCP, &entry->lsk); + err =3D sock_create_kern(net, entry->addr.family, + SOCK_STREAM, IPPROTO_MPTCP, lsk); if (err) return err; =20 - msk =3D mptcp_sk(entry->lsk->sk); + msk =3D mptcp_sk((*lsk)->sk); if (!msk) { err =3D -EINVAL; goto out; @@ -1046,7 +1074,8 @@ static int mptcp_pm_nl_create_listen_socket(struct so= ck *sk, return 0; =20 out: - sock_release(entry->lsk); + sock_release(*lsk); + *lsk =3D NULL; return err; } =20 @@ -1095,7 +1124,7 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, = struct sock_common *skc) entry->addr.port =3D 0; entry->ifindex =3D 0; entry->flags =3D 0; - entry->lsk =3D NULL; + entry->lsk_ref =3D NULL; ret =3D mptcp_pm_nl_append_new_local_addr(pernet, entry); if (ret < 0) kfree(entry); @@ -1304,18 +1333,25 @@ static int mptcp_nl_cmd_add_addr(struct sk_buff *sk= b, struct genl_info *info) =20 *entry =3D addr; if (entry->addr.port) { - ret =3D mptcp_pm_nl_create_listen_socket(skb->sk, entry); - if (ret) { - GENL_SET_ERR_MSG(info, "create listen socket error"); + entry->lsk_ref =3D lsk_list_find_or_create(sock_net(skb->sk), pernet, en= try, &ret); + + if (!entry->lsk_ref) + entry->lsk_ref =3D lsk_list_find(pernet, &entry->addr); + + if (!entry->lsk_ref) { + GENL_SET_ERR_MSG(info, "can't create/allocate lsk"); kfree(entry); + ret =3D (ret =3D=3D 0) ? -ENOMEM : ret; return ret; } } + ret =3D mptcp_pm_nl_append_new_local_addr(pernet, entry); + if (ret < 0) { GENL_SET_ERR_MSG(info, "too many addresses or duplicate one"); - if (entry->lsk) - sock_release(entry->lsk); + if (entry->lsk_ref) + lsk_list_release(pernet, entry->lsk_ref); kfree(entry); return ret; } @@ -1418,10 +1454,11 @@ static int mptcp_nl_remove_subflow_and_signal_addr(= struct net *net, } =20 /* caller must ensure the RCU grace period is already elapsed */ -static void __mptcp_pm_release_addr_entry(struct mptcp_pm_addr_entry *entr= y) +static void __mptcp_pm_release_addr_entry(struct pm_nl_pernet *pernet, + struct mptcp_pm_addr_entry *entry) { - if (entry->lsk) - sock_release(entry->lsk); + if (entry->lsk_ref) + lsk_list_release(pernet, entry->lsk_ref); kfree(entry); } =20 @@ -1503,7 +1540,7 @@ static int mptcp_nl_cmd_del_addr(struct sk_buff *skb,= struct genl_info *info) =20 mptcp_nl_remove_subflow_and_signal_addr(sock_net(skb->sk), &entry->addr); synchronize_rcu(); - __mptcp_pm_release_addr_entry(entry); + __mptcp_pm_release_addr_entry(pernet, entry); =20 return ret; } @@ -1559,7 +1596,7 @@ static void mptcp_nl_remove_addrs_list(struct net *ne= t, } =20 /* caller must ensure the RCU grace period is already elapsed */ -static void __flush_addrs(struct list_head *list) +static void __flush_addrs(struct pm_nl_pernet *pernet, struct list_head *l= ist) { while (!list_empty(list)) { struct mptcp_pm_addr_entry *cur; @@ -1567,7 +1604,7 @@ static void __flush_addrs(struct list_head *list) cur =3D list_entry(list->next, struct mptcp_pm_addr_entry, list); list_del_rcu(&cur->list); - __mptcp_pm_release_addr_entry(cur); + __mptcp_pm_release_addr_entry(pernet, cur); } } =20 @@ -1592,7 +1629,7 @@ static int mptcp_nl_cmd_flush_addrs(struct sk_buff *s= kb, struct genl_info *info) spin_unlock_bh(&pernet->lock); mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list); synchronize_rcu(); - __flush_addrs(&free_list); + __flush_addrs(pernet, &free_list); return 0; } =20 @@ -2242,7 +2279,7 @@ static void __net_exit pm_nl_exit_net(struct list_hea= d *net_list) * other modifiers, also netns core already waited for a * RCU grace period. */ - __flush_addrs(&pernet->local_addr_list); + __flush_addrs(pernet, &pernet->local_addr_list); } } =20 --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012586jaa; Wed, 2 Feb 2022 19:13:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJxyQs9L2wh8qr7z5KorMiVsSmd6ysO8ecjXUVOI0EnHYnm957qbrSe69+6i5Ho2BFBEDdiz X-Received: by 2002:a17:902:ed89:: with SMTP id e9mr34263183plj.88.1643858033150; Wed, 02 Feb 2022 19:13:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858033; cv=none; d=google.com; s=arc-20160816; b=Nu4ew2LJnS1RbUrZJpucOxZqMUVJb6JkD9TqJnptgn4Jb1O6DVbBHRKtMMiV5nkiHP gCSaW+gxegcCzD3ALz1Lopu1VyKP/ESt7AuN1JJ3gvfUkjHUxf6pTqwO9cyAxZrgSEq4 oxyUyMpsjuUCGoMK8vzRYKOUmUqFmoBwe/O4AFKw23CZdCUrRRp1ZHAaSkEpkg0PK6Or 8NZfDM7gV+dVoDXWF3yxS5q/1beJ3h8BQrSbRz5hoAbQeRfij5MMTlOuJhXKJiKWVSLu Y4qiPS1c/wO5r3Ty0RW23zsSNx4ghW0naddC6TF5SFyQ7gcTfx3Br9RU2FetMCLAvJ+g gkig== 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=5qWVK3ZrMPh+KLIh8zdXXo5ynGbBJ3rlL7tmfOYH7Mo=; b=bTBlsbyqYsDQabC99Cy+v8eQpLWLoOROP/MVqJLYvCYEAnfyfYQjS5tpT7ayUdChD0 Xb+3e870t9v43jJbe4bVqcRHPC9Cyf5eoex7knAUYS+hWJOyiIyb6otzGS9ReYb8Pp4f c6nOKD+rrVbImqI6wRdEDCPXiKKst9UueJEo5b3s5ulxaM7MKeCGLq3gLMRe0LPdIZSL s1P05xXPHnQ78qjV2DqX2S/5f5elU4a1BBi5X5IVMQXLAjMmiBOR0VmuGab09K7CFu2y ML6NO22pM+UlrSxMkuA4YoqVdVNkQpK0kLvoosdBTUNMZjaCbMlPR3GxfyQ1xkysq1eu 4lHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=X4foyi4f; spf=pass (google.com: domain of mptcp+bounces-3425-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3425-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id a3si23325869pgv.252.2022.02.02.19.13.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:53 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3425-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=X4foyi4f; spf=pass (google.com: domain of mptcp+bounces-3425-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3425-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 sjc.edge.kernel.org (Postfix) with ESMTPS id 959C73E0F60 for ; Thu, 3 Feb 2022 03:13:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8EF642CA6; Thu, 3 Feb 2022 03:13:46 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 44BDC2CA4 for ; Thu, 3 Feb 2022 03:13:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858025; x=1675394025; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=wZFF3l+YSojCqKSBtZHHf5PFM+bc+2bVtw2OO5X4ovc=; b=X4foyi4f5K1XEdGUZZQ4tuFduBzfGTaUTS0zh4x3ZXFOJdVbl3CBEga6 ucJydGyhno67Xh1HKdF2XUNHIEBDdv25ZWh51JN+WMKnl1bZ08MHRCL3W 4CJcOs/ZS1tAcaTAhmDQF6oDOQ5dFyT43TcKdZVWHDTkHCcVTQWve5Vk3 btNu0fihYzli43PjdaHDJpcIkyZ8UuOHVz5p6XHkE7AIsE+Di9OgyMbcG dFHLxkW8YkU31Rw7KdJH2fR2X5m5ZqVvyx5/D6bQzISx8rm+v2N+FvJpB H9XLjWv09C6f7NT9wHh0q+BEcCz1hC0eqmhyp5rqI0o5Mskj2srQ/Tf9l w==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795483" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795483" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658271" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 7/8] mptcp: attempt to add listening sockets for announced addrs Date: Wed, 2 Feb 2022 22:13:30 -0500 Message-Id: <20220203031331.2996457-8-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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" When ADD_ADDR announcements use the port associated with an active subflow, this change ensures that a listening socket is bound to the announced addr+port in the kernel for subsequently receiving MP_JOINs. But if a listening socket for this address is already held by the application then no action is taken. A listening socket is created (when there isn't a listener) just prior to the addr advertisement. If it is desired to not create a listening socket in the kernel for an address, then this can be requested by including the MPTCP_PM_ADDR_FLAG_NO_LISTEN flag with the address. When a listening socket is created, it is stored in struct mptcp_pm_add_entry and released accordingly. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/203 Signed-off-by: Kishen Maloor --- v2: fixed formatting v3: added new addr flag MPTCP_PM_ADDR_FLAG_NO_LISTEN to skip creating a listening socket in the kernel during an ADD_ADDR request, use this flag along the in-kernel PM flow for ADD_ADDR requests (Note: listening sockets are always created for port-based endpoints as before), use the lsk_list_find_or_create() helper v4: call lsk_list_find() after a failed lsk_list_find_or_create() for a chance to retrieve a recently created lsk by a simultaneous call --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_netlink.c | 50 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index f106a3941cdf..265cabc0d7aa 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -81,6 +81,7 @@ enum { #define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1) #define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2) #define MPTCP_PM_ADDR_FLAG_FULLMESH (1 << 3) +#define MPTCP_PM_ADDR_FLAG_NO_LISTEN (1 << 4) =20 enum { MPTCP_PM_CMD_UNSPEC, diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 4c9567db56ff..9b3d871d3712 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -43,6 +43,7 @@ struct mptcp_pm_add_entry { struct mptcp_addr_info addr; struct timer_list add_timer; struct mptcp_sock *sock; + struct mptcp_local_lsk *lsk_ref; u8 retrans_times; }; =20 @@ -66,6 +67,10 @@ struct pm_nl_pernet { #define MPTCP_PM_ADDR_MAX 8 #define ADD_ADDR_RETRANS_MAX 3 =20 +static int mptcp_pm_nl_create_listen_socket(struct net *net, + struct mptcp_pm_addr_entry *entry, + struct socket **lsk); + static bool addresses_equal(const struct mptcp_addr_info *a, const struct mptcp_addr_info *b, bool use_port) { @@ -465,7 +470,8 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, } =20 static bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *entry) + struct mptcp_pm_addr_entry *entry, + struct mptcp_local_lsk *lsk_ref) { struct mptcp_pm_add_entry *add_entry =3D NULL; struct sock *sk =3D (struct sock *)msk; @@ -485,6 +491,10 @@ static bool mptcp_pm_alloc_anno_list(struct mptcp_sock= *msk, add_entry->addr =3D entry->addr; add_entry->sock =3D msk; add_entry->retrans_times =3D 0; + add_entry->lsk_ref =3D lsk_ref; + + if (lsk_ref) + lsk_list_add_ref(lsk_ref); =20 timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0); sk_reset_timer(sk, &add_entry->add_timer, @@ -497,8 +507,11 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk) { struct mptcp_pm_add_entry *entry, *tmp; struct sock *sk =3D (struct sock *)msk; + struct pm_nl_pernet *pernet; LIST_HEAD(free_list); =20 + pernet =3D net_generic(sock_net(sk), pm_nl_pernet_id); + pr_debug("msk=3D%p", msk); =20 spin_lock_bh(&msk->pm.lock); @@ -507,6 +520,8 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk) =20 list_for_each_entry_safe(entry, tmp, &free_list, list) { sk_stop_timer_sync(sk, &entry->add_timer); + if (entry->lsk_ref) + lsk_list_release(pernet, entry->lsk_ref); kfree(entry); } } @@ -611,7 +626,9 @@ lookup_id_by_addr(struct pm_nl_pernet *pernet, const st= ruct mptcp_addr_info *add } =20 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) + __must_hold(&msk->pm.lock) { + struct mptcp_local_lsk *lsk_ref =3D NULL; struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_addr_entry *local; unsigned int add_addr_signal_max; @@ -648,12 +665,34 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) local =3D select_signal_address(pernet, msk); =20 if (local) { - if (mptcp_pm_alloc_anno_list(msk, local)) { + if (!(local->flags & MPTCP_PM_ADDR_FLAG_NO_LISTEN) && + !local->addr.port) { + local->addr.port =3D + ((struct inet_sock *)inet_sk + ((struct sock *)msk))->inet_sport; + + spin_unlock_bh(&msk->pm.lock); + + lsk_ref =3D lsk_list_find_or_create(sock_net(sk), pernet, + local, NULL); + + spin_lock_bh(&msk->pm.lock); + + if (!lsk_ref) + lsk_ref =3D lsk_list_find(pernet, &local->addr); + + local->addr.port =3D 0; + } + + if (mptcp_pm_alloc_anno_list(msk, local, lsk_ref)) { __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); msk->pm.add_addr_signaled++; mptcp_pm_announce_addr(msk, &local->addr, false); mptcp_pm_nl_addr_send_ack(msk); } + + if (lsk_ref) + lsk_list_release(pernet, lsk_ref); } } =20 @@ -745,6 +784,7 @@ static unsigned int fill_local_addresses_vec(struct mpt= cp_sock *msk, } =20 static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk) + __must_hold(&msk->pm.lock) { struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX]; struct sock *sk =3D (struct sock *)msk; @@ -1385,11 +1425,17 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct net= *net, unsigned int id, static bool remove_anno_list_by_saddr(struct mptcp_sock *msk, struct mptcp_addr_info *addr) { + struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_add_entry *entry; + struct pm_nl_pernet *pernet; + + pernet =3D net_generic(sock_net(sk), pm_nl_pernet_id); =20 entry =3D mptcp_pm_del_add_timer(msk, addr, false); if (entry) { list_del(&entry->list); + if (entry->lsk_ref) + lsk_list_release(pernet, entry->lsk_ref); kfree(entry); return true; } --=20 2.31.1 From nobody Sun Apr 28 21:40:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2012571jaa; Wed, 2 Feb 2022 19:13:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJxgNyNC7pP8GzaIFYpeMmlNQa1A4u3LiHJLXGlJEaNIyW546LTeAnDteR05weUlAakbwa+D X-Received: by 2002:a62:7656:: with SMTP id r83mr33096424pfc.26.1643858031719; Wed, 02 Feb 2022 19:13:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643858031; cv=none; d=google.com; s=arc-20160816; b=BgSxvssHl6fXe623NajBLw+1mosjwpa2I/u9ZvCbKcFOoABgGyZZ831Uuwtw8nTamZ l3P6SdSL+bpwlFs/KJq9a59jxYNzvigyYOQdN6QFUtRvMWJEdZujTnS5XS4ZdSLZCKrr DSBNq6s3thBE1rAXRzog6uQHrkHQefLDSpC9qojZI2oG6jJf2bPvGnYkTMt+juepnRI6 qq1PAFRo9wpKicjmf9B8bV+UdhK5VqEehYvPAkYysJnWXb8z8D+0DlTH7hY/odtJBUOu ssfV4ZfMapELJcDv+l6uHE/12P7ZJRNvXUYh55b4waH2fayZXgKvgWFasw+oqYXsyACy 8p3Q== 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=2v4sr7tYI8j1Bp/uboNIoET31kzRh8vd8os++8O8A7Y=; b=04uRkuNlNZjWwq0wbB19XVTtlfvmrGWzENQkz7l+dr+gaDwJWcZ1QHphSwKTlVysKB 8L1HtdfT7LbOnj7p3zOv0mmdey1k8P6yTUJkznIEK9q+RUs37PprgUXYcjFmMRvkHkEz C+125nwvD1N9Vo9UB576HCDQbjCpgMB8pYL5DGB6SrLaBeo4LiimAUS9M1qfdejjlbHG 254yN4OdZXiSh8tEzc9jgOb2XtqcZocO5DSAVTLKr8PKbz8WNsCynbiOn9tOFpbJEbW+ aNCZnwgyRQPgOdCLE8tlaFwEv3xw389ZnG9g3Up/Vl7coII/XFU9KfEODPmpu/2WALKy /11g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=c60xaXqV; spf=pass (google.com: domain of mptcp+bounces-3424-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3424-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id 2si19108231pli.600.2022.02.02.19.13.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 19:13:51 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3424-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=c60xaXqV; spf=pass (google.com: domain of mptcp+bounces-3424-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3424-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 sjc.edge.kernel.org (Postfix) with ESMTPS id 6E5653E1061 for ; Thu, 3 Feb 2022 03:13:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 799252C9D; Thu, 3 Feb 2022 03:13:46 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 A19062CA6 for ; Thu, 3 Feb 2022 03:13:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643858025; x=1675394025; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=GWC00DGcOIXpenWBtT7VMMPLeYZ8SNQrpkt8jAQUe5k=; b=c60xaXqVJ7aOJZ4PBDO9IBu17bs/zOHjAfzqLMMfLcUrnXquPOVpANgo Hwsld/uZwI2zPQO8Ckr6yL+RL4HfjmgB+nT/YL+mVPeKM2GLF8llPcnaI DK1JABQtAuQCLzljpVIAxBrkmk19hmoTWSYC3ch5s5o9ldbb5iC8vI9AR oMrQcQi1y1gzT7D7Bt1lg9uBNtNRaSiWhV+j30HuJPewuQxI6QXZNmznc YqTyONZKmpOpVkNjrQR32KTHs1m7H2CK/VFKKLiZYmBT5mWzabdshhCus ggebu1DMHdc/ablJAk9CPM94bJy+lO0W0WNpRSD+VzxwD1UEQKiJL7BQi Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="308795486" X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="308795486" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:41 -0800 X-IronPort-AV: E=Sophos;i="5.88,338,1635231600"; d="scan'208";a="771658274" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 19:13:40 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v4 8/8] mptcp: expose server_side attribute in MPTCP netlink events Date: Wed, 2 Feb 2022 22:13:31 -0500 Message-Id: <20220203031331.2996457-9-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203031331.2996457-1-kishen.maloor@intel.com> References: <20220203031331.2996457-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 records the server_side attribute in MPTCP_EVENT_CREATED and MPTCP_EVENT_ESTABLISHED events to inform the recipient of the role of the associated MPTCP application (Client/Server) that is handling it's end of the MPTCP connection. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/246 Signed-off-by: Kishen Maloor --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_netlink.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index 265cabc0d7aa..0df44a116a31 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -188,6 +188,7 @@ enum mptcp_event_attr { MPTCP_ATTR_IF_IDX, /* s32 */ MPTCP_ATTR_RESET_REASON,/* u32 */ MPTCP_ATTR_RESET_FLAGS, /* u32 */ + MPTCP_ATTR_SERVER_SIDE, /* u8 */ =20 __MPTCP_ATTR_AFTER_LAST }; diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 9b3d871d3712..eaa1a5a21192 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -2097,6 +2097,9 @@ static int mptcp_event_created(struct sk_buff *skb, if (err) return err; =20 + if (nla_put_u8(skb, MPTCP_ATTR_SERVER_SIDE, READ_ONCE(msk->pm.server_side= ))) + return -EMSGSIZE; + return mptcp_event_add_subflow(skb, ssk); } =20 --=20 2.31.1