From nobody Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129918jaa; Wed, 2 Feb 2022 23:25:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJxUJFfZwDPNKnLim16m0GKKbwQuOnqKd8JMNXs9RftTW2k8WcRhLfQP+0M1CQl29a+l/U3o X-Received: by 2002:a17:90a:c250:: with SMTP id d16mr12366570pjx.244.1643873119814; Wed, 02 Feb 2022 23:25:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873119; cv=none; d=google.com; s=arc-20160816; b=UV2lMf87Lc9TamttcxHYdwIn7uE6V8whj9KlBDhuBvXud97Z6yonxcKceoQwAnWvUZ kCOM4SLO/6do73JSXKEWqy0ewzON4NNuSaDPmEJyPNOA85zRLneubM3kZQngbu+VoeBN UtMoH7p7rksNf2hfmINVUyhps1K+D+9801OtIiIfEM80RaZSpGhaU1KeVrXCro3jyAvO +GunojTkU6n1xVvqNyOLIdc3/nREaE5ZHHM9/CzfEh37Fs9diyT/kuYbE/bWcGUTWQOY yA5CA1GzQtJ7OVhWr4pMKYalLSJ0JyPFClhNCA9ZAzlUTy+V5UyJ5uGPhAk/gNXAJKIu +QnQ== 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=UBFfSZf7NY/yZx6+9FqVy5JmKLKIyogy0lgSURBKSdYpayYoLzjEiEs8oTmiZVckdM dwL2H4r9FwXadyr8idIR7kd+g975824+wlVJLunjVvxjzoDwwFXhIuO91+5VSgVjPy0Q yaaxamPA4nAEMtothdc9WE0t5+ll3QxAyb/1rEs8MNrYZPHCh2w5cW0+OWtTzbB6NO6o VyTFHdCyiUT1pW1CgyWTtc5BOMEsnSw5YhLGkhPm5Rl6flVxHDUgPOkc7OHlPPNKjy+c xnRCz69QCcQUULVxSyDAlZ78A4LGgv7uD2EGzryiBTLBxKwCNJIotUwgRxfYPZ4v0ZQn ntKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dMwnQ9NK; spf=pass (google.com: domain of mptcp+bounces-3443-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3443-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 n11si23361320plc.83.2022.02.02.23.25.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:19 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3443-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=dMwnQ9NK; spf=pass (google.com: domain of mptcp+bounces-3443-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3443-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 9FDBD3E1028 for ; Thu, 3 Feb 2022 07:25:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F2E132CA4; Thu, 3 Feb 2022 07:25:17 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 A9CB82C9D for ; Thu, 3 Feb 2022 07:25:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873116; x=1675409116; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=31Rn1fVGrhzOGv3WF3Z/oTSCRdUAxWa4OxdrNJxlX2M=; b=dMwnQ9NKhs+9pCgDLX/HKjCOMM7YgG0OWUWe5qsfW/xJk2wddW7aYMCQ iwsgArHWShwjKmu5JQqir0HAI9J6iFsEmjVjOUu5VYVNhdSdofqRzF7Ed 2Wg7ecXngRmMnDe6buEYCXnv1iYHGCB5dJArJtBcb1ebuy1vyZ0lfS9yU BrcYlktTp8W+XE6nwUEvRUr54tsQfWJVY9MnbuW0khaflHbRoNU+xmOBx zfQhila75P5uZjCezIwl/gP8qojDEEdfta9JY+nSurJmvyKv/3kBFf4kL Sb8z2fA3z/c8AJoGlfiBOjuT27YFvxCFh7Z6q4TSep5dxahjd9viE1LWL w==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580769" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580769" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118714" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 1/8] mptcp: bypass in-kernel PM restrictions for non-kernel PMs Date: Thu, 3 Feb 2022 02:25:01 -0500 Message-Id: <20220203072508.3072309-2-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129909jaa; Wed, 2 Feb 2022 23:25:18 -0800 (PST) X-Google-Smtp-Source: ABdhPJzPOvOGw/K4LYhMm3HRY+t07oNFVnFPjf64Zb4i3XT1Dl1jGpof8v7M8YE+CsSGbPU9xQlw X-Received: by 2002:a05:6a00:181f:: with SMTP id y31mr32960705pfa.35.1643873118670; Wed, 02 Feb 2022 23:25:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873118; cv=none; d=google.com; s=arc-20160816; b=tM8W7G7/DmZJPRufSCiSByh5t7NbRe0xY9FkjDqd4omnwS5RiMNiQaUTWcO7jIhQdp XvDJVSNqdWFnKCQp0jqNPIaHf1ryptN6AdiyWhtYekBpX2bfFmV6r7UXrpLsH2sUDcU5 U6XuWf9PoQdTC8QtAFH2yt64+v5UhUyWtOOXSbvxCEZLopT6KaUisStea69gLpnE+87d aunkqcCUKfawz2ACsTx9DmTGVnKqgw4JhIqBo9RgjD9LJfApfS0xcjwmHBstDCYPSFhW XeYjslh7b3t7owZJpH1lKSTsqIk5Z1mtOqK6CmeqqdCswYSAYRrSb3CjQ8d6yVUr4bUm b2jw== 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=fi1fRYr574ut09yM/i/E5AlQBF6dA1kytgvmyPAV046weN/0OOGFTgB2OjN8TamoOf pjsHo95FQoNr11Z46QPyZc9BsHoydWcTR6p16Pew8O3BT029cehCiy53Q0m0OeOCACJn CnmzROy7LoxWXmhucuxohdHzaP3hWk3Bb4GEOvzB2xwRiMrfExQQNMCUgRdaPDR+kfHt T/d+kcxmENmF9IO1TLhrX0vrK0sLpoXtdAMaxWM/OmLK9ZH0xaaAmkNPIjJoIKRVKMXD fJAx2odSfvq+HSrzbYz4825mlFrlKizk1HQgr2oNjq0r9q59t/PWJbSA33R/6v2VoTS2 HJ9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=TBl6e94g; spf=pass (google.com: domain of mptcp+bounces-3442-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3442-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 bc8si20693654plb.570.2022.02.02.23.25.18 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:18 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3442-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=TBl6e94g; spf=pass (google.com: domain of mptcp+bounces-3442-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3442-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 590E43E102C for ; Thu, 3 Feb 2022 07:25:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DACB62CA2; Thu, 3 Feb 2022 07:25:17 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 BB1F12CA1 for ; Thu, 3 Feb 2022 07:25:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873116; x=1675409116; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=t0F+LtZuBQhBzOAqb3kTvTyZmkbo6vTLqs3duOIuOUY=; b=TBl6e94gHuSWLjiAUrdOArLZahDxqUAtwmnMawUpFlbXXk0HL5KSspq+ JHAXjRFFOLKoohW3VLpWA6mqyuujK4rQ6+6NjTPtKBOS3H1YHQlMGsSps 8fTk80cpKfw29HlUpprOvxoa6QmUvLmejST18c1jEc8SWHgFJHmYTTHk8 XxwL/tuDI/+oCC9E+TxqmeMqWuBNEIcpbqcQoIInmpFlrWMD+5HzUqqWN PcfukvfKHEAD79TFAZS0YGze2azVvYxJVMtqpw/+rULMgBE56/mGS6gCt Bhu6/KZeBCJ08EjA/agAO20eE2RtUxOTmckRh/Ea6DEoEbckyAvaLj90C A==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580770" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580770" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118717" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 2/8] mptcp: store remote id from MP_JOIN SYN/ACK in local ctx Date: Thu, 3 Feb 2022 02:25:02 -0500 Message-Id: <20220203072508.3072309-3-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129953jaa; Wed, 2 Feb 2022 23:25:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJzIJ6V2mNYw1+Jgb4QtOp5Efjql8zXWNd8dvwkSDx6/2JjVbOOErun7gQdSebtQX56hawXn X-Received: by 2002:a17:902:7fc7:: with SMTP id t7mr33924810plb.47.1643873122380; Wed, 02 Feb 2022 23:25:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873122; cv=none; d=google.com; s=arc-20160816; b=FdGhgvmBKrdN8F87/J7VNLdhFz1xqmo/ix02QSieSBX7GwPWG/dwNcqP8HClz/XGRV frpnhAAYRscb1Uc7EW1YX6VQaVavyKws/PA0Bi3+op+xKwbfh+fRS1/0IJ1E0S/aqDSy oaDrev9bomX3RahjMphskPjbh0QLTNawo4pXq5dCI0qU6MYvY1UAbgWdMC/tlULfHGzd o32Zp1qPHac3smF9G9VPRu/y2Aq0U23uEK7Yilw6AKdGyKtRmygFlxX1eMU3HZxZUQ7t PGXj9077X6V+AeJ+9gcKK6kPQg9TKbqH39aRg+i9UHuO+bN9ZPgyCA5VQ+ACbpT6akBL nh2g== 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=OeMPGF0rLE+YKA2oS3Kn534d/TifatLb8LFl4iIUKNPsRBjbUTjq16Bbnu9NXc4seD jKWiV7/AVqebA4VB5SUQqy8Mtcn25mFVEwNePH93EYikdFVQpxzgEsXspWD/OspEwEyH c4YoCK/WxN/MyZaMFnRpHvm3FAIguaV9ldNhE8jIHh5R26pvo/+FdiUW/JOTazut+1gJ J2NiznZNb8LHrNMTExYNjmn3gHH0DkvpB9+ThZq7quqzH0LeH55RpXEPmzXTDnhFhtbC J2OyiHUqhOr7kJkpmcrFpcNvcZmFo51fr6y3LXzSS/F+2rbuy1Hmrm8fTXnzXEBmVTGs 8fxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dnEPQ73j; spf=pass (google.com: domain of mptcp+bounces-3445-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3445-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 ip7si7808055pjb.14.2022.02.02.23.25.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:22 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3445-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=dnEPQ73j; spf=pass (google.com: domain of mptcp+bounces-3445-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3445-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 AB70F3E1042 for ; Thu, 3 Feb 2022 07:25:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 444792CA6; Thu, 3 Feb 2022 07:25:19 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 E40E72CA1 for ; Thu, 3 Feb 2022 07:25:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873117; x=1675409117; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=lb+/sjxrVOCu6IaiElGnADZNu5LQc1FIjY+PPW9x2pc=; b=dnEPQ73jHTxhagxkymoWEHOgGPva4k4gH4ctxatwxS4f+f/M/QOn/fqm M0TnQUosc2kWgD0ztid755r13EtEbYiOAacDXK+BMXfz9L6xN+31+ufbE o/3Hi8ruwFscW4Mc6tHC/HiLlGX1JL9q60NP/tjj5LwjHuBJSznV67uPK J9KSx3osd+pp9GV0VpGpCn+6ECnT2WGkl4bcAJEnM1pRt8eXjBEk4KjVT gfSfyrVBIFS2uGSBnR3cUx8B4Mq33tA3cneQ53mOplQbR9wwkqs9/Xf62 c1+kfL3SoOpzlSNGQl+Tu3I6WVHCGsMwR8dXXA3dRdVLb0F/cQLrxLolo w==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580772" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580772" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118720" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 3/8] mptcp: reflect remote port (not 0) in ANNOUNCED events Date: Thu, 3 Feb 2022 02:25:03 -0500 Message-Id: <20220203072508.3072309-4-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129933jaa; Wed, 2 Feb 2022 23:25:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJwiVWb5V5qoVLB71YvEvKvr0gY4Sl4TBDtst/yYhvsZ4ItwNLh9eAvU+dC0giVy4pnL5lKz X-Received: by 2002:a17:90b:4d05:: with SMTP id mw5mr12276812pjb.218.1643873121109; Wed, 02 Feb 2022 23:25:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873121; cv=none; d=google.com; s=arc-20160816; b=OS/z8KtcSX4dt31ASNS3RyiE+OBIPPrW9Ss2+WG2D7SPYjgce1veEgDBneiZQrA7QA PoeKthTEfAO6Fv32nF3DT2bLIKRff4DyR/ZlolnMWwC7WGxUilx2gYKqiG9oWyOThtzA E393QssczVIsjNCl0RzpoKf3fhn2/2KnCWAFXn1S4ViJIxN/sVGXYKGNPQFme5ijQ13/ y2W9GF7YrnHazOqYnY/GTgtBAbWGeTy1360D/xBB5WXwjJ4j1LwA84Q1vFaGg5R6gtXU Fjbp25wfwZUdqjPvxbIPwAOj3LJcEWvZfocqMcd7ariuYL2oVVRRyvsgKmNiJN1dAQ5I 18YA== 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=Kw2YPM+kpZZfvdqrsBGfQJJdlVEnQH4oJfgOK7b/uDj25Py3dc7TlFtvsr8urUKZWv ByPJIYZ/9xx2g4zChJ8LG6SFL/RoLxWvSjjX8WYPpLvHD65eQIWJfHeRyqswdiCkZ1ZB dFj6mdgU0DSHfavvyNYOYUi7rxvyw8SKIT38dc3yoQVw2T0S3AREqxepsdHQd4JRwzZa PzfuYrOsqCAg+KAilj4+mWNlM98TcDSA+ox8X7dLXYFwmQR4UhruVMXw3gjlpG73sr1T mzdOYihNfdaevjNsjJPVlBYwIEMHTWoO0gRxRNH6uKt4f5IB33mA7ZXSi5UqBDkt+o0D 8oZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=n2LI3hzQ; spf=pass (google.com: domain of mptcp+bounces-3444-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3444-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 pf9si8034405pjb.125.2022.02.02.23.25.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:21 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3444-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=n2LI3hzQ; spf=pass (google.com: domain of mptcp+bounces-3444-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3444-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 A10783E102D for ; Thu, 3 Feb 2022 07:25:20 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 366C62C9C; Thu, 3 Feb 2022 07:25:19 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 05FC22C9D for ; Thu, 3 Feb 2022 07:25:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873117; x=1675409117; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=OACnXn1oJrS2hLkA30+p19VlWoYRQSzgjIal5iKRlMc=; b=n2LI3hzQBmGj0mlvcnkxUZM3tQJlFAyiYS1XupP2iqIYz5/sUICDJKP7 x40A0S4iUPZx1TZKWUyzKNIOZVBy0zqccnxT86H/9gywQ4Jrf5+yM8JZr +k+X5LX/dYym+/9aEHzRGQQBHS3/uuaLFiduveVhmu5J3AdZeI47QRxjt V8OW+4Gk+arM/H+LR0kajUgobAz1W77Yte3udkwqupPRWQvwKoZmTf3F/ tCnt99fq+6IXvIAE+jOCgmGbJrCoDkD12nXx0gkDd4207eTgYv6/WtUMk /VUr4Z1s3IWbob7cTSuFsHC9F3IwfNmGtLX+DNCP1RZbpW434dbbQdlBC Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580773" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580773" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118723" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 4/8] mptcp: establish subflows from either end of connection Date: Thu, 3 Feb 2022 02:25:04 -0500 Message-Id: <20220203072508.3072309-5-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129960jaa; Wed, 2 Feb 2022 23:25:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJzb7ejCoENAK8mKQrkzxRgomCrXoA1g4Ki53XM4pyX+R0S4w73FLDgtTq/VDWFXL1UyUOeU X-Received: by 2002:a63:7882:: with SMTP id t124mr27129974pgc.406.1643873123045; Wed, 02 Feb 2022 23:25:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873123; cv=none; d=google.com; s=arc-20160816; b=sFbdtUtjR8lKFSFMSAU9WDB5TX+/46RYWBX+tvHCqDDSxkMSMkuMGrIummJpPjgWGP qtzzz4vpMwGWk9WuHsSfgMs7RZXNsf4e3ZPWpLYxpUKguTtJ7QCsi0ZAI8PjkWgt2Lb/ V2Ba7mSeZdGOgpXPse1UinEBIiyN+yPIxz/d0FOeXh9gS+MPyO36nBx537AqlydVhs45 5oELO7xeQoKkly8NWQc+WLAttn29ss0OjtOi75U1EH8x9oR1aBhwFdzlaxegYXO7H+12 jatbX3VVNbBPupe9pU7PxHUhd7IIrBlMJ8hZwxXq+DynyjEwtRvB8dVN7vwC2IeEw407 uBDA== 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=oauOCKnHXddPW3HpSWu1/WRKxcLOfOsx7it1W0t8prcK3DdG4RsOd8pNzJn6Lk8FFf YOezHIUCathzbhLdDBubXeDQaTYX9v7/GY5L8DBiCDtsJAvY8b7csA2Z5dND9tGQDf2d 75G3DEdhMnbZfy1tuxi/U5J9BXM1qnUyq/bDIMeKwpjrf7ir0YbXBKVWgBIKFevUdFHG bbYbcHkdVfT3CTPAfHcE/ctOKKms8CnlS95z/kzagVa4tf9rn1OeYOCrflgH7LCigh9L olCoWc+wxv3vUWNcUEneRKwipJtQMulXZN6+vJWGiNNiSrVF9SkfrqhW3EbiCi0KRWxe ze0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=OObXnGMj; spf=pass (google.com: domain of mptcp+bounces-3446-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3446-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 s207si2796361pgs.44.2022.02.02.23.25.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:23 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3446-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=OObXnGMj; spf=pass (google.com: domain of mptcp+bounces-3446-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3446-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 B2C2A3E1041 for ; Thu, 3 Feb 2022 07:25:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 39A312CA2; Thu, 3 Feb 2022 07:25:20 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 258112CA5 for ; Thu, 3 Feb 2022 07:25:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873118; x=1675409118; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=gxuX5nBfNjm3eDOIguVloVSnnpRcwqw5nK5LrBxglK0=; b=OObXnGMjhHdslNm3V83HkXKeYivrN7ZvBLE8hNiSFMAXr1FC5GMNSMGi MPqdxTjUzgJGKHTSLeLGnTyz0wyVMxBitd6k/l85m6AyfanKO1VW0+KRR oyxRfvYDmHggDB2DiddP1jhIUQK/vtlckxEpD3SUwvhBVp5H2L45NThQH aKbcK6R2Aj44bkd58XQ/DVh39dCtUQCyyqtqStvIY9Z4cVSNa0bbnFuq7 p3VkbmooLxdnFz4lUcbIXmI5qGTDB6RPlt5cu+x0pxWQGeIosdZ2lorWG oQzuG3AEL37W5AsXeonWCFI/AA9XBTTE0PAoeiDgfHuZMVpb8Nx1g2E/d A==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580774" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580774" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118726" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:13 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 5/8] mptcp: netlink: store per namespace list of refcounted listen socks Date: Thu, 3 Feb 2022 02:25:05 -0500 Message-Id: <20220203072508.3072309-6-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129973jaa; Wed, 2 Feb 2022 23:25:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJxgUIcp/nmkCYYfIaKRy33fKHZpX1tjymjuw3HRQvTm0ahk84Al8ESGReCJlj/wSciJdAtJ X-Received: by 2002:a05:620a:7e7:: with SMTP id k7mr22782564qkk.268.1643873124598; Wed, 02 Feb 2022 23:25:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873124; cv=none; d=google.com; s=arc-20160816; b=pZPXm7nsy/2Qv4M/yQKiY/F4FBmmnrm2EQTcy8KdpTJlWGXRe2g1CMjOpCHj8VOkDg A+jkAKowiPMIIMeIrObtKIFEHykDKQrGrQSJ5nn+5wKXBkmCaprsRm48ygJt+zna6zHb U7/7imcLA4cXZnn5CwTm/ChNP8yW0bPVbO4ty+Q9Ikv9syQMAgMEDxxidHwktxql1D5J Yn/m9BXGlIRmlztdNnkxGyxj1sYqMJy8rYhlQSNMmM8gpmB3T3w0ZIiFjB8Xu0tkntkq 0FOCY7wWbeztLW0qNxrwEdW7QpBsJtP/tI76VTU7RQ9SIIzw544CWd+BSqxEuqy6LahF jDQg== 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=2EgxlikbHqVOD+iv8BuVGnL65o4xBN/7AwO6T3NsqCQ=; b=oE9+nGXyiI2n54c2T4kM3pEEd7bW5aP5KMeUyH25ItswfJ99GFYOR86iMJ3syhRN+D R2coVNDAGO5B2x5rxJVj+2rPaHBi1ESm6Ur2lj5Czh37pBOIPSUIV4qpO49m2DGQuhSm 8SqslKSviWrIbGaTjkgGQlLvCLhGw8h4nHH9TuNnoH3v4OQfev3Q5ybqcurn5L7E5JpM DiZyTsoVkeiOyntSJ187XBtn25Ov7SR3V4Hy6yM+L1UN7D7qols6ZpEjah5vge1WnF45 9hjgffCL7tDurWhy0waGclw3LPPUEeImTld4PqpurmB0l/CCDblZpk7THveeS5eN5B0B 7usg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=k4UbdTwC; spf=pass (google.com: domain of mptcp+bounces-3447-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3447-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 101si15708756qtg.338.2022.02.02.23.25.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:24 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3447-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=k4UbdTwC; spf=pass (google.com: domain of mptcp+bounces-3447-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3447-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 3E1E11C0425 for ; Thu, 3 Feb 2022 07:25:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C36442CA4; Thu, 3 Feb 2022 07:25:20 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 437B32C9D for ; Thu, 3 Feb 2022 07:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873119; x=1675409119; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=EtJNFBe+tNKy51yk4DnKNVwStlaZ9uX06yyF25qBonE=; b=k4UbdTwCsJF9/yhXvKYMExTgH8Vg/UYbFI7KzWW19IbR6tFrvE6rkMMx 8OhoDvr80WgRGcewvri60zjyc6VF1UPATe8fZ1BuRJ/vP68eiGKO0kMLO OstzROlZB6DccKsc8BL/4Y0tWPWWWaUQhhZMf2QR9DciVTgFFdQxUqEXw roUG1fbbojA0DaCHymWTcUSUNnxjZelThKwVtmhRM3m3ojD2dTzhy4gpM ac77ezGX55/Izk9F/xWkAwzhtFem/3L03/W2W02Lf7hpQDvTsaBpOzFxu MElNyQE4YTFZ70zj6bpux0B12K5pR+qIfLNMhb9on5B8/dY+WS2+D/mgI Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580775" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580775" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:14 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118729" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:14 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 6/8] mptcp: netlink: store lsk ref in mptcp_pm_addr_entry Date: Thu, 3 Feb 2022 02:25:06 -0500 Message-Id: <20220203072508.3072309-7-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 v5: fixed implicit declaration error --- net/mptcp/pm_netlink.c | 83 +++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 21 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 3d6251baef26..a4fb9acbba51 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 { @@ -66,6 +66,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) { @@ -157,6 +161,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 +1030,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 +1041,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 +1078,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 +1128,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 +1337,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 +1458,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 +1544,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 +1600,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 +1608,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 +1633,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 +2283,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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129976jaa; Wed, 2 Feb 2022 23:25:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJw4TLg3rY8a78uJQ/oONlUsi47IUx4UkYRHwB/MQnbW6PTPqEBXdcUCxa8yFiSkCi8Z2n/5 X-Received: by 2002:a17:902:e5c3:: with SMTP id u3mr34993224plf.43.1643873125638; Wed, 02 Feb 2022 23:25:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873125; cv=none; d=google.com; s=arc-20160816; b=BnhzM6ifTN6O4jrzuVASzpDuww4xXfPh+StiyUiGr+2oWuLx+4gD3WSXBhoKx8deko KYI82x9OTBvMTCyVSelyh/tg9KUQvAx7RxLgFxUla6xg3VMSqqVi/xqdZMU1+P567Spz vHUF/7HjRNqHjAGJxuDFGJJSJ2cN63/59b7ZTGkYlftu6UlnKhHWFWwRmjFIEGCKkXcw I3h4f2ro3IRhPdG+XJdUgUCr273VXxVTAyL6vNCUtcp/atakbnXZc7eNEfpN+sLOXr7m sUXWUjKKZArdAhOOlG6qJ6EZLonixYLXKC8l+cab9WhBNu768bXST7j/qKL8/esmtPBS ikNw== 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=tk7NBShPKp8YCNa3wMHm+PjxGPhVGhWClS9xEDTarS8=; b=d8UWWUvXpOlpd6VBSdZCpSLjGywRIG1nomndWE2wukFPRxOITTPeX1IYVeKovPVGeB QPZcWF/fyqs6W5b8TKRZ6acvMcw/Y0j2r0zgsPI770bZOst2SuOvHfVn9H3ojqgGnGL/ E/idiRNgMg2Hekn2wkvz9QMYtO7CD1TJ0uhNmqqfsglSFLtyfQT3Rr4jR0Kk501ATwFi 71ora61mjYpOWtrKe/Bdzk1ZKwMLrEF4cwNbURorzoj/W+K6BzS/4/LcnVKmJSbcWtLM IsKTow6a3ZW8FJ0+Md899WXu7REPLbpEUFd7WBLAZ3gnTCzMFklDp8Hfqmltp7a9l5oJ /ExA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=QgOczU8M; spf=pass (google.com: domain of mptcp+bounces-3448-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3448-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 f11si4010604plg.184.2022.02.02.23.25.25 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:25 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3448-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=QgOczU8M; spf=pass (google.com: domain of mptcp+bounces-3448-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3448-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 1963D3E1040 for ; Thu, 3 Feb 2022 07:25:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D13762C9D; Thu, 3 Feb 2022 07:25:20 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 B43CF2CA1 for ; Thu, 3 Feb 2022 07:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873119; x=1675409119; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=OM51OlNI4UM843dpo4EL8un5G66rQEcWF4rAEz4dh1o=; b=QgOczU8MULUlvXhQO/cO/7bchyvsXrZ4ij7NZwvuDv9Gg+OpEBP19fNc B9Y10JC/w74a1nZw/6obYrGUj8VsUacfoMX2BuMIIk6cUjtKDN9gpFFNC vQfoIY9FOJr5EHLfEEfxn5Gr8DkuP/qD/gnUWx3KsKsp3iSg6Tz40Jdh/ x7/dout8HJ7Wa2C5+77LW1/M9tqgFapanO2yf1bjkLN06aGhQc4Y0pYVL y9Tw4vvlzqvhraZ6Q5nL0pvCKT0pE98kEB9FWP72UMizOpWgGH57QVDYZ AAu1EcWL0tdCed/3hOM0DaWY0pmaAT3M3QS5GA9MBQSq+Cwr2qvkqWB9/ Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580776" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580776" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:14 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118732" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:14 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 7/8] mptcp: attempt to add listening sockets for announced addrs Date: Thu, 3 Feb 2022 02:25:07 -0500 Message-Id: <20220203072508.3072309-8-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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 | 46 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 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 a4fb9acbba51..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 @@ -469,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; @@ -489,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, @@ -501,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); @@ -511,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); } } @@ -615,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; @@ -652,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 @@ -749,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; @@ -1389,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 Mon Apr 29 13:35:43 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:3b21:0:0:0:0:0 with SMTP id c33csp2129982jaa; Wed, 2 Feb 2022 23:25:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJx2gTDxKluaE9IIy83SYtKzm+FMrzr0Mo8nZXSXtlX/kf+ONOV2pBDNE+3Eq1s6XC3ZW4OK X-Received: by 2002:a63:2bd1:: with SMTP id r200mr20051323pgr.68.1643873126669; Wed, 02 Feb 2022 23:25:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643873126; cv=none; d=google.com; s=arc-20160816; b=jW3yfcsonSHp8NR5qpgNyPlU5IFRsl93aLA3FUlAF0+OK5vKpyEAApw/xJ/4hbdDAr 9sXgPD+uSrrT+c0MMv/fzUC2e15mdqFL9RtEIx/UscYTaKMTo/vl1n/MOLI0lwyzLIoW KArhyXeEZ0KkZELWt/q+2DF7UirMq56FqTCDpkvS/sxURLYrX4gLgDZ25X3K6JzG7MR0 uzbShiKxxnVRhdnj8kQUVgw48f2FU5l6iyS8EeiVKMIutJoXxhxlIiYsxE/can/Kx9sS p2TAzOQuE/1sR4Ff8Bw9ELr7oZ+N7HvIO1QY2IjbTT0K7XYxhnajRVuRpS9f2texFAMh ZkYg== 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=iZssIDjKTJdZrVWC5zD39kImhuOvdrCicRGDlHmQ8JUf1Q3nOW26VxeuPIi2thtdEu eGOQtTbzUHvTQKl5vlvbm5PDPi5HSrsuW0zSAUa6uLHf95AHntkwMRzwPMgnN5PcMY58 nwRE5+4roCU+X5WOH+eneoHIFrVrkZ/RbFdO+/iiOr98HXAJpyozXDwYLZcmEK1X5Z3A lf2GuvT6GpKg/63lxS1DtIpJitaNTR6IP7oWhbr608SMk/2DR1Jf/8eo3DvkGy1sykKi j775KnvEXPOV9Z/oQVoogZCgITX3qO3Z6IdiQALFwuUa8rgkPfs0zEj5mrak7LVXb+0P RcHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XoXVE9Qx; spf=pass (google.com: domain of mptcp+bounces-3449-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3449-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 u22si6883210pjx.70.2022.02.02.23.25.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Feb 2022 23:25:26 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3449-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=XoXVE9Qx; spf=pass (google.com: domain of mptcp+bounces-3449-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3449-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 55E543E103C for ; Thu, 3 Feb 2022 07:25:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 609452CA1; Thu, 3 Feb 2022 07:25:21 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 7CE5E2CA5 for ; Thu, 3 Feb 2022 07:25:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643873120; x=1675409120; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=GWC00DGcOIXpenWBtT7VMMPLeYZ8SNQrpkt8jAQUe5k=; b=XoXVE9Qxnhj0cT+y+BLfYOaTwFVbg3wyXJWUG1ZVdFOXU0+9fpN4r4Jx xrY1IHrPH+6dLPNy96NLpGdMjNpmsUkD2wa/QtQ0v7zgGMJts6d7dI3Bg qKLhsJ8KcQiFM57BY6jw9VEaVsCC9YKghexqIMzwrAZEwo3aJ2GtNn3oN E9D6plVjFQ+vAJjOUxuTiL1YlxcXNpo0qvvko/Hwh+arwiaQ8Pfz2y0Ch JNaSNTm5F+V3Xst3TWYW3MotbYrPHTLoY1D0Wy17DTjkMdufM23zhu04s 4d6YyPAIb9/IRu3SC7jtj2ufr/b3X8LhVsDlcxPSrDUyZFv4Dlh5/5M79 A==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="272580777" X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="272580777" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:14 -0800 X-IronPort-AV: E=Sophos;i="5.88,339,1635231600"; d="scan'208";a="535118736" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2022 23:25:14 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v5 8/8] mptcp: expose server_side attribute in MPTCP netlink events Date: Thu, 3 Feb 2022 02:25:08 -0500 Message-Id: <20220203072508.3072309-9-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220203072508.3072309-1-kishen.maloor@intel.com> References: <20220203072508.3072309-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