From nobody Mon May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375710jas; Thu, 27 Jan 2022 16:38:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJxf2c86dLBMqzfNE/Zac+ICRTvEFsSH8LsUYdz5tCJtQkLMZjvHfXjKtIT876mengsbxPEF X-Received: by 2002:a17:903:1250:: with SMTP id u16mr5905708plh.126.1643330329259; Thu, 27 Jan 2022 16:38:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330329; cv=none; d=google.com; s=arc-20160816; b=UnO81QpMgIS0E4ZcvHq25YzZm2rmrA9aCyiu1Zgw3cwFRYOJ8d1+UQh/1csBX3htV0 ME9Dw++rX7MGX4Psz6GWBcBaIOFu+Ml35xw9ZGuqtTJGb4W9cvMYaGXmT5Dh6NKdIt/7 85Z0rxCab2W/dp53QK7aiPh+Iwys17eJ9Icnmc05UV/jTKCS6BLEhzfXwHxKKtScqNko L7+Ztldt2GHtuU0+JwT255o9cPLDMHKNfzNoKsTWeCFBEhDKjJ9RHO8yGiO3lvP7TdHu eXlYML4Bq71cQn+KvNmq449iPXUxTDpVfUjtFSYpFiXQuzTNLD8O3SmrjOOLHcyPfFvG 8ieA== 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=w+9RFBh5/2gz+M7+eiXD70geCAboqcLECW187hI3JhE=; b=EJtr58UkWWkBnzTvwq1GwHCJeAgFWPYEbNfKasR3Jwq+YH/NHdWPcU0sb5AGrm6eJI ABepgjI+gui6eZn/kY/DzGZLDo6W068MjSTq2vtWsJT627MxweFYxVcNHQ2kjSDCljfd nhB7PHbqkJ5OlrGfQAe36IvT3cKkDEYv/0oZ23gPxSMB/oMLxb1z0z5bH7itEPUIX983 +HcigMV/H4CTK6dH7wjyoY/ZEbeIDwBe8SF8p3smxjLtpwGh8/IkWtJBy8m3E2kPDqJM Ka1tbC25ahW14PNpxHrY+pBJw5ClDise4ZJVWzFm9LpX37wQOaxnuBsmfEl9x5KEpq5o v/0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=eo7kpJjp; spf=pass (google.com: domain of mptcp+bounces-3340-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-3340-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. [147.75.197.195]) by mx.google.com with ESMTPS id v8si4277823pgi.789.2022.01.27.16.38.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:49 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3340-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=eo7kpJjp; spf=pass (google.com: domain of mptcp+bounces-3340-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-3340-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 C1E621C0F06 for ; Fri, 28 Jan 2022 00:38:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 53ED42CB0; Fri, 28 Jan 2022 00:38:46 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 0F21E2CAC for ; Fri, 28 Jan 2022 00:38: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=1643330324; x=1674866324; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=sa72yrPBqKXhPZ16dGGP/HtQ1q4TOd82BWQ+bNO9jK4=; b=eo7kpJjpiU3y+T1w5/AfZT+DKk1ftlQ6Eqapc07yacrWYSnTGRL+TKjt lpir/MHopTCIC31UO88BfYA4jDBwgPdH14nWKins9g31DsewDF+0BStxN t9ky0nq7ALoCKGIAAsT1vWhIPLYX7+48f/kvzjFMK3+L4ke0QRajGOiTr xap7n7HAx1C7/bVjU6y+ZZjmPIsAOKxzvgxfEaNUVD6NdTbYRSPHaKgs3 nsVJDFYHh6ehYpNqrg3prq9FGd6YhNrnYMdvtx5WOrY4qM0S+sCzZeu+2 KCB3+JA4UmVzGH8h9VgJfs3muhV+VpoL11BqDmQrhwJbdEAQvZ8eKGEQy w==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846912" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846912" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:24 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564000993" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:19 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 1/8] mptcp: do not restrict subflows with non-kernel PMs Date: Thu, 27 Jan 2022 19:38:05 -0500 Message-Id: <20220128003812.2732609-2-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 subflows must apply only to in-kernel PM managed sockets. Thus this change bypasses such limitations for connections overseen by non-kernel (e.g. userspace) PMs. Signed-off-by: Kishen Maloor --- net/mptcp/pm.c | 3 +++ net/mptcp/subflow.c | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1f8878cc29e3..6b6220895929 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 (READ_ONCE(pm->pm_type) !=3D MPTCP_PM_TYPE_KERNEL) + 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, diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index c8126986793e..a7b2d6fd1c1e 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); + ((READ_ONCE(msk->pm.pm_type) !=3D MPTCP_PM_TYPE_KERNEL) || + 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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375648jas; Thu, 27 Jan 2022 16:38:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJyYvzPWIkzsf0F49BoGvWj8B4xJ/1+Z1CG30MU4r7C8UCbXA+1kvafw/Qb4L6lXJV6v9gkn X-Received: by 2002:a05:6a00:be4:: with SMTP id x36mr5165297pfu.77.1643330324970; Thu, 27 Jan 2022 16:38:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330324; cv=none; d=google.com; s=arc-20160816; b=0TmPH164mebPzog5d5RqihWjDv3meOoxycjUcGjhun5H17tFJuOR7X0rz2BQJ3qlAK sGX6UYCuIRUuRg4m+Pks/VtQzwed3DAv1ZteeXu1W8MhhK+3Xy3gMNCJc4npChZr0g15 n0qpsGH1fBbfAgpmT8Lay7ADsqlGomlzo8KNUGy9fz2R84wYAggNEFSUsFQ8bE2GsyIk d8ZHdAyEyURcPm0y6bjZWKpo62CxFdq6jr2do112UcRgwm9gIgsWBpT0ljOe2PhGjzhi czJxlvtKs48l0/RqmNxnKyYMtl5hig2oflQL+atIMPPAgMTHR5ZQ4WwaCku58KYsL2do LRgw== 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=HM/8E8/ucVOfUrX1ee50owYubYwlvokzvRIHgvR1ASI=; b=WlwsqpPxrsdrEUY/b8HsGXD4iAMdX/9pQpuuW/3TtBP1IoLt46TohB8I3tqD/c+330 uUQfSMw2t9jHDmTpCVdNtRpM0nFhh/gOC4hg0coeh6Jb1ysV78TFgIchfddQsaBrPjDN UB/ydbRPwFqLpWtOR7R732g4yFsVIa402zq1ngx7F7WSNfhq83fDBOz0UePPoPGFA1Hw jG1N83rb/CQCZtW23QqtCWfsEjOuZRF3E6NP+G/90cspysTq3oXRW3iYNaFyVIzqmBdD T8RrNfnA8Q6HnpXOahg/UZkwWDbBVbqcCvWorJKeZJ3UPhoYWnf42uXEpVf/EwI9mvQl XFKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=b+QIVWC+; spf=pass (google.com: domain of mptcp+bounces-3336-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-3336-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. [147.75.197.195]) by mx.google.com with ESMTPS id m194si3827271pga.618.2022.01.27.16.38.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:44 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3336-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=b+QIVWC+; spf=pass (google.com: domain of mptcp+bounces-3336-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-3336-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 176D51C0CBD for ; Fri, 28 Jan 2022 00:38:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E9B152CA6; Fri, 28 Jan 2022 00:38:41 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 C1D862C9D for ; Fri, 28 Jan 2022 00:38:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330320; x=1674866320; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=PwE0NguYM09Sq5YI4hK1jOZyJZjZSRflvISwfqFUO10=; b=b+QIVWC+yN2ASTxAMHgmZgevl4SabSHYyf9St9XUUeSi4W0lKCNFSx7H ZpnsT6GglDRQ01mv9jlReC5yYcFmf1xOnvBCqHzTasyg89DQy+cxProlm qmW1LYJ99WRI+STVXk7Q01h2elUaYZQdlA4QVojgVFBYb9T6fCvJr7ncQ C71iNFBLwPbQlLrYwdwi02a13ZhVVmAtnlYH33JvDSoqnCiSwq/4hK7BZ Xu2A1z6Do2sov4r7bnFItAl1JrW5YkazyG90EHLYbiNWVcfr2vNtAQa+P L4upIPp1pKZpmu1+LLQNH2oQCtARLtwbZXC0xXgTXtwg/hxJOOkdmpY9I A==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846910" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846910" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:24 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564000996" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:19 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 2/8] mptcp: store remote id from MP_JOIN SYN/ACK in local ctx Date: Thu, 27 Jan 2022 19:38:06 -0500 Message-Id: <20220128003812.2732609-3-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 a7b2d6fd1c1e..479a4f53bbdd 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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375679jas; Thu, 27 Jan 2022 16:38:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJx3/xDAgRoIjY1tfAEnKi/nh8WJFES2tDAtTk4Eus8F+YHywCV4sRlYja4LwqN0f3s11Cqz X-Received: by 2002:a05:6a00:140d:: with SMTP id l13mr5304608pfu.22.1643330327479; Thu, 27 Jan 2022 16:38:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330327; cv=none; d=google.com; s=arc-20160816; b=mgfe/YYigGqf6RqXLa4m/NgrKiu2SIaGpPtEByjPqD6qarW9yivrSyX4NdFYz+9O9Y s7GcMG9VCW5+2ufNJD9FCzXF+IqVH6k22JKjf0XKJJfVg6I2Iq3PCPY0CUoY1byr2gkh h0Ry6prddd1pmyRLm0EyVzv8QEIOumBQviXD5SrR0p3F6UDsHqVMAUZKFlayAt6ZSKcT shlwXjv80keb+iumKf8X2QWqwHWG7fB4dwA71qNPbKh/GXtzzt+AUZC0ZSPEMg8BckTs qdxn/0ez/Nm++54RSH4uSW83AGF8YzoZHKan9TAg92GVF99yj1scfwz1U6CzjX1wZFxW x6tA== 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=uhbf2xrlYF5pPPqNhh2qLmdACx+ZsgqlOAlGc1WYjoI=; b=rMHv/wh1x/EGD3XuJkEMyMLPbnBMy13UYys6XH7Jekewyq9XXk/es3E2M57SyJnUgl XU3lIStT6VcY+LIBoC39hbDgSByqqXfAv8ZPvvCIrMcN5MBkQ4+H32no06TRvznRSENz N9Knz4/W9ai4hZpeHigFWsPZYX59GlFEnXms4jdecAhLBrlVQ+eqTDpLseLJeIVPO6jZ vim/Jj59qIJTa+kxuBRJUglxfkFKDvt1xp70TRCXyf01lnkZ1LknTfGnYB49Rr3DlJvI lrsdLDY06QVfycvT5yENOlfjFnrnaD2enjrIfZrOuT5FlJgx4ZW6diVGiPZUE4w122CN /oaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=MzR8h9Zk; spf=pass (google.com: domain of mptcp+bounces-3339-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3339-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 o9si3363199plc.371.2022.01.27.16.38.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:47 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3339-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=MzR8h9Zk; spf=pass (google.com: domain of mptcp+bounces-3339-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3339-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 485603E0F66 for ; Fri, 28 Jan 2022 00:38:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 21F272C9D; Fri, 28 Jan 2022 00:38:46 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 04CF42CA8 for ; Fri, 28 Jan 2022 00:38:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330324; x=1674866324; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=cYeX4s+nxyI9LTlzy6F5vVs2+ZHT91AU5jh/Uoo/C5I=; b=MzR8h9ZknljFsHdPCNvs1XeMHC6/MgJe6tFaciBL4L8J/XHKJSOX/pko k7qKFpGY2Mvb0itVpXFu6lVkAswyOQlGymJVdaJIcP4gAAZpceuET6IrY 0aOebeiVb++lZEv11jBq86yS5m8fE6FxWtmPooXHT5pZaCJ8/lukaNtUN sn8akiCnYasx6UtXhHfTwBQ2Q0q4aBXCwthCXXJt0Qr9RUydTryymAgfz Pa6BbsrBYou9ClI39BN6/toplepN+EoTq1aNw8U+3z9peoGZDUvgCQhur BKJM/UwKQZ14anPewYA1qTJyIRowMIJYQyPf8bSp7BvmmKQlCjXyd4uZ6 A==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846914" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846914" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:24 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564000997" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:20 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 3/8] mptcp: reflect remote port (not 0) in ANNOUNCED events Date: Thu, 27 Jan 2022 19:38:07 -0500 Message-Id: <20220128003812.2732609-4-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 5 +++-- net/mptcp/pm_netlink.c | 8 ++++++-- net/mptcp/protocol.h | 6 ++++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 0d0d2eb8c8ca..0d3c8f7e5be6 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1132,7 +1132,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(msk, &mp_opt.addr, sk); 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 6b6220895929..e5d5cb847209 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -200,14 +200,15 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *m= sk, const struct sock *ssk, } =20 void mptcp_pm_add_addr_received(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) + const struct mptcp_addr_info *addr, + const struct sock *ssk) { 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(msk, addr, ssk); =20 spin_lock_bh(&pm->lock); =20 diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 93800f32fcb6..f90e77c3775d 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1972,7 +1972,8 @@ void mptcp_event_addr_removed(const struct mptcp_sock= *msk, uint8_t id) } =20 void mptcp_event_addr_announced(const struct mptcp_sock *msk, - const struct mptcp_addr_info *info) + const struct mptcp_addr_info *info, + const struct sock *ssk) { struct net *net =3D sock_net((const struct sock *)msk); struct nlmsghdr *nlh; @@ -1996,7 +1997,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 c47d69a42fcb..d20c65fcba89 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -753,7 +753,8 @@ 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, - const struct mptcp_addr_info *addr); + const struct mptcp_addr_info *addr, + const struct sock *ssk); void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, struct mptcp_addr_info *addr); void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); @@ -781,7 +782,8 @@ 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 mptcp_sock *msk, const struct= mptcp_addr_info *info, + const struct sock *ssk); 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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375772jas; Thu, 27 Jan 2022 16:38:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJytynL+IivXu83iu/uvKFX5BWG1u8YMv412/0/JiFNUA2O7gCTfxB9hFoH3/6TdSjRVEeRe X-Received: by 2002:a17:90a:d983:: with SMTP id d3mr16819702pjv.56.1643330333796; Thu, 27 Jan 2022 16:38:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330333; cv=none; d=google.com; s=arc-20160816; b=qHd/7Sboj8QKIvwG3oqP3lFz3FBhsa6XGtZT/n1/SKFKxJTQUslPZZ6TgO6+Puu2A9 GGTweIkIJ/KvBZkX4TjgEl2VHj6A6HCpiJ2YiH2rxmkey87YikYze3GzKkuAsxdUYZff /hQiWaQMcfo9gZfqqQ8RMIu6apGn3og0vOFJoFMlJAJL/pLW3y8ILsLYgyyswu9ECe2v TC7aitSBMbwYPajFFFRa9KqhCF3fR2QYHUi/ucNqbULtOP3+q1dplt3vdveDj4QFGUg+ 3SHJvmYsREEWVtM0tYaGGwJP/RPfiCMV/xACiqLureCzIMz1QbRnG25VATjDFD0N6BHY Aycg== 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=nnVnW7NaexvyA7lvCOyH5Jqm5PuLyK59mZLESe1/gUk=; b=wJJ5GrKG11sM+/RphFvlVBt+Rt9+MAwEnWB1iucwEb807P0THXpFa9D3hX6m4bvxJz wrJUTaJXRiNhlG1WDj4j7IO+IqLCexWDxFc3TXFoRUh8HYGlQelvoLH1pDyJ7A2cpP1W IBhVEaPGXZ/766fTXwGrMEwWMb67ZJEhZ8haTQehtoNqxPhrmn77ZtSgh2QqkGhHkX8k WsNspGzHULyfYjKnkAZfE/YXbFk4EPS4c3KJvpgkP6S+GDNPCnOu4nVv5h6CkrmpGDGy MKOwlkjuJnhsLxzj0CD/cm3XKIsB8sNvJdD3uRK9G6X0h9IRZ2Dhi3gwvM3rjRRJNbgr 3uWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="Jcf/CQ3M"; spf=pass (google.com: domain of mptcp+bounces-3344-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3344-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 h13si3683978pfi.361.2022.01.27.16.38.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:53 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3344-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="Jcf/CQ3M"; spf=pass (google.com: domain of mptcp+bounces-3344-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3344-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 571F93E0F20 for ; Fri, 28 Jan 2022 00:38:53 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5F0B62CAE; Fri, 28 Jan 2022 00:38:47 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 4CF582CA8 for ; Fri, 28 Jan 2022 00:38:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330326; x=1674866326; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=bKdXD6vgqKi6AwN+Uu8BGYp9THOjdb5gywK9XfblEa4=; b=Jcf/CQ3MqqNO0vi0fYUct0lm8QpyyMGUAoWWUOSjcLyHfBwiJj03P41o 5HGBO1jgOgALPH4tSBK9g2a9OrPc8Wqn6hGvjYuByjW3JLtpAhHZ1FRHq hl+KLKdKfmJ1KlxXYMPlY02VCSTQy6Qe9yA83jZgBk8M4X0CD91bttABN C2IpIJ5dHQPbTZOWe7vGouAp1zwYzSKZ2pwpjBHb+FwNwPrbKtRL3rj3J mC3REcXcZEMNVwfjT9SJTTLSMwYuN/Tco+FErAuLAc8yfVxOUma5EOw3t bBtBBTlU6LOoaDjSXmemxnci2Hap4Z2UypJhLCzTIf0a+0rx921SNuXSl Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846915" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846915" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:24 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564000999" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:20 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 4/8] mptcp: establish subflows from either end of connection Date: Thu, 27 Jan 2022 19:38:08 -0500 Message-Id: <20220128003812.2732609-5-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 0d3c8f7e5be6..947820a9da0d 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -930,7 +930,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 526a0f5ba415..7c591177c3e8 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3256,15 +3256,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 d20c65fcba89..30006735afb7 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -906,13 +906,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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375658jas; Thu, 27 Jan 2022 16:38:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJyGzmzMiD53u3+bnl7WY1QFZPFK+FZ4VKZFlhFiIWWtanZEulIll2qT4cInbTvrGQW7+hff X-Received: by 2002:a17:902:f683:: with SMTP id l3mr6089169plg.39.1643330325512; Thu, 27 Jan 2022 16:38:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330325; cv=none; d=google.com; s=arc-20160816; b=p+3sDzzDLqGMvPm0Q2sbOP1PUf6nv0YDKfkvLP0N35R1CoPhUANzh4beDcBsAouuVW 4Ji6KX9luFfoFSnClEbtOha78rbfiuZBkuJTrt5dqsuwH97GfoHpbmaFmfCoYHgYwcAL PqXu7IL4a1JamNnkM4rs7R38rBr2DA6ire4sQpG6lveYxpUJ6ivFB5WXbyU0nu9TmzhR snmJhn5QnZqDS7kM09WEGORRLDlc+0XDTt1riwwti30yqepD9+1izFnunCoKa+xhuMLY YyPvZcDBaE95ats7I8aB6pjtTEad8NNXdUrFn1UPLt7BKK+NcdfqbcOig0zag+p6i1dl qGVw== 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=zRSmGfgnG0IAWKrqLjC7lAbUXMDI5Tw//Yc7nrj6eaY=; b=pvOx9zLqbYCFa79se3Etok8MNiXQOIiDLLKB9gQoPCCHGpPeUDvFVkbJwyGMVGlBLs N7NZgxQa4YIaqpa99Z17Ul2r9DOedpvAUbbpj81tpP1mSDySjm4NX99IEkuUt0DJWOjJ fmpN1EMlhxTa+wkcrcAcsH73r5oVju/eQODVSmpUf+qnIUSq4dombudZtKdYsTNkdn6+ 62lm3Jxrv7moTiXxfXzIuez/CEJ5UYO9ib2LNRrpQV8CE9GK7ms46iwUWamTCzUBB4U7 A5dVbH1iV/iMuwlVCeHXt/EQVx14SeWGwbh/kzWDeLt4AubRnCYLg7FAYZtUc9cpHzvt 3jyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Cbe61ZTn; spf=pass (google.com: domain of mptcp+bounces-3337-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3337-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 i62si2401582pge.369.2022.01.27.16.38.45 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:45 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3337-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=Cbe61ZTn; spf=pass (google.com: domain of mptcp+bounces-3337-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3337-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 EECE83E0F66 for ; Fri, 28 Jan 2022 00:38:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 643742C9D; Fri, 28 Jan 2022 00:38:42 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 62C132CAA for ; Fri, 28 Jan 2022 00:38:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330321; x=1674866321; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=Gr13AAUhe5eTCkooVg6zrYFWSbdk1t9Q+M9BsCv7uS4=; b=Cbe61ZTn8PH2HcJrfDvvcslHnfzyaUtQGygQXOxLU4UGP98dQIAUTEJY aTUnQ/l3IZY0zsubUfEgPW2L0UPrQED4dNl2GH1la8NSCPSIE01yQumQx 6n+Lu8ov+Xw1cWJyj+gyiBTYxafEy4LeUT1LIuvozo03vzos5kxi2eS+J oLDKL3obOC2AAnatvanFUzCiOLbkeRDFEIqtF359Yx/Xn83sE+bExqvXl 0jI7QhjcJ6jbq0SnaVAFkRshknB3Yi+4ERCL4e2w6re7mCLg6CqDBieG7 2gOdavswTXHrJIKJ1yY6EYBQNrDVd7L+v8JnT3yzDEEkN4YIZO7wjU3RV w==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846917" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846917" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:25 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564001002" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:20 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 5/8] mptcp: netlink: store per namespace list of refcounted listen socks Date: Thu, 27 Jan 2022 19:38:09 -0500 Message-Id: <20220128003812.2732609-6-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 f90e77c3775d..aac9438dbf6c 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; @@ -2137,12 +2211,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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375802jas; Thu, 27 Jan 2022 16:38:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJxqRnyUVXyfcKAsnO0X9pnd2g9xJFhdCwmOmktYlwDImi7OVsZ2ExeUp8R/zIHfkxIqc5LO X-Received: by 2002:a17:90a:31c5:: with SMTP id j5mr7028633pjf.200.1643330335812; Thu, 27 Jan 2022 16:38:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330335; cv=none; d=google.com; s=arc-20160816; b=gEwGrESlgngmzDRFnMJRXlZbzQ1HGWCUjG293I32YYddXrclfQMyRU5cDiQcVnVa2n Fuka4Ge/Bo8QfL2bKQ/2g3RBN2WL37mlsM8tzqYmqfktFq/KBmCoedi9IcVfumK/Bdoc LU4M6AnoT1gTXc0mg7ejyVQ2Rs62qpZieQeCOjwAMG0KDCyrhfLdll5VTOvznIHXV8i4 vQPlmGNL1tLY+2yUEX6veZvnc4ZV0MXvTSooXmynLYXvjHLgaOL0/U//XBaw74Ier5zr d6dE+BoACez4WxtuhUpoMvGOHVRo8LyhuBQD2qeED/qZTQDVVFrceuRrMhSrktail/lU oSLg== 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=Ge89qZhsSIdK9lHYQeOPZZF0xeby7yYfPdd2utUodsU=; b=TE0izlWlxr8i/ZjCZ0OtM3A1OoCkbY/H6BWwNVC+EMTcWOCDJgKd+fAvACDSwelcqu Gl5Srg+BSoDCYAa12fFPGKVG7Jdj8+OP4cq75chRvhK5Ej9CL28C1RJLGj/ypisvU5+i R8Xj2awWtzS5Kh56h/xLj01QSnHtHe61h7Wj2/Q8jiX5YarNaoxkWbjAB8NUXwciyaRb pCVkQrYMtyr+Y/CuMKNKsmH6AjGMq0eVR8jFPGC96qYZqJmFg+/H2IUxQ6E/kebFSXYo onMBx/rQmGAT9Q/ZcPNT4vKA0HnOEO/zQKdkdsNuJPcyP2eqVTlXNc8SRpzavqQB2m4x xTZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Oab5mk0C; spf=pass (google.com: domain of mptcp+bounces-3345-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3345-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 i16si3904671pla.141.2022.01.27.16.38.55 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:55 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3345-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=Oab5mk0C; spf=pass (google.com: domain of mptcp+bounces-3345-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-3345-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 CB67E1C0F2A for ; Fri, 28 Jan 2022 00:38:54 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9509B2CA8; Fri, 28 Jan 2022 00:38:47 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 785FC2CAC for ; Fri, 28 Jan 2022 00:38:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330326; x=1674866326; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=1ygwdNCsBwBTfGarMxsXv4uoSIYQmz0oqMvO/5mXc4A=; b=Oab5mk0Cx9MwFvbZzp/V/t+81mCe0tKYrMYhYOrs6mSsv7hvVQJiHcgV VYdgzYkxSmNThYsIB+rosnVRWENl9BpVXQExxETpdATRaSJT+X4bEjA9+ 2ARr35URR+iKFrFgN30Pe1p1N2QDCaLdE4ioyZnF/SXr0OdN8t9RAJLPq +D/HvGD6ks0zWUOkoei8wjllrRV/k6Ka+bIBvzustIQSmYtQb3rCNnv0t AUR5CICzCZnunuRwxod7nMUG+Z0F4r454k6OBlUGg4D9wvdarhLDdWjxU 45PpDUc0TnbhoOXHVAGJP+nIbrC1XLdYD4uenDOkUo9Q5vCZwod7MEJNB g==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846919" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846919" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:25 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564001005" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:20 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 6/8] mptcp: netlink: store lsk ref in mptcp_pm_addr_entry Date: Thu, 27 Jan 2022 19:38:10 -0500 Message-Id: <20220128003812.2732609-7-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 --- net/mptcp/pm_netlink.c | 76 ++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 21 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index aac9438dbf6c..dc02dfe917e1 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; @@ -996,8 +1023,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; @@ -1006,12 +1034,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; @@ -1043,7 +1071,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 @@ -1092,7 +1121,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); @@ -1301,18 +1330,22 @@ 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) { + 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; } @@ -1415,10 +1448,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 @@ -1500,7 +1534,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; } @@ -1556,7 +1590,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; @@ -1564,7 +1598,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 @@ -1589,7 +1623,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 @@ -2238,7 +2272,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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375733jas; Thu, 27 Jan 2022 16:38:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJx+l2IxW+OCbmZ/R9PAU21e/gC6uAvFYvVhLaYXd4UlKeRQmXhJjkqMKu/iaDolhsVkhje9 X-Received: by 2002:a17:903:234c:: with SMTP id c12mr5496324plh.55.1643330331694; Thu, 27 Jan 2022 16:38:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330331; cv=none; d=google.com; s=arc-20160816; b=INo3kxOMLXjMQZ6QhZHNjtwVSbe2kyUXpkdrv+yo678I00chtgcm1tXmFIQRja+VLF bdLfaNZeyaYyr9mVPUAWjlMsPKl1f6k2YD4uKAqSYriPQqVzLFEJgf3b01UNAeeQtTj4 jf7o2kcHy9IwXRgmAvhQHvlDL0Rv/Fab/1+GxRjE4t2rpuOebtNJC43J3KmgM62FXXTs EZcVgBWV65kMWpqpRiuXUFHvdqFZ0UBOkf0RoSBLpROv38adjmKYs2D/6p2lVGHd3Z+d aQPW/uO0hbe4zSyoF7LQaAvSfS0CYd60xzi/NhOTxn92PCEGFsZcv32jPOGbGHT/bEmh lVfw== 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=/I6sdsr12qOkOzWDV9utJVm0JuRvyVHNtI4gXaS6XZQ=; b=R8ZlH+DOpA03dEB9396AwuvLvAEfqUwyE3miivfQLkdhnUmBk5gG00AvU2hvfLccrT Hlb6WDJFpi9NKuaPNwoQKjXsBERHr2wk4JP45QoeL+qoGpaBbd1+EvxGEHpRVEq9gKIy YoNLhQg8+ymUlQxIx6xI3CJAI/OwdAQdinLbZWgiW2+mnXzQbzlq/NBjBJS+0pfg05ia KzBUY4QvhUP+ow7a0iKAjY4QcFgCrv6Hty7N+ytUvgmf510gybr+WcXbBtQf0e2+WN3/ +y52tS/9hmruUR/p2pHutbD7fTxLnTuTLURGyKGUUmncpbd6XeU9k23LdLSO9Que8lM2 pdXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=DvYmNPpo; spf=pass (google.com: domain of mptcp+bounces-3342-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-3342-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. [147.75.197.195]) by mx.google.com with ESMTPS id mh18si1077132pjb.31.2022.01.27.16.38.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:51 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3342-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=DvYmNPpo; spf=pass (google.com: domain of mptcp+bounces-3342-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-3342-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 2DB101C0F06 for ; Fri, 28 Jan 2022 00:38:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8D0A52CB4; Fri, 28 Jan 2022 00:38:46 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 04D222CAA for ; Fri, 28 Jan 2022 00:38:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330324; x=1674866324; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=M06S7bs3hor2JxrN6EUh4dkLHusxQZUhYmstAzmLhH4=; b=DvYmNPpo7zKT36RtrpG02D15nFPYG2h7NQThHAKvcV5+HV27RdaugtEC c9B1rOpnCkYCbmfcuAkmnG5sOvljk8/b2j86nOjKQJ+GZEzKYfRAD/Sue LLg6Jwtgnv/fCKY2vsyAxA+2VJM+wRwox9FT74fJW/3qJNQr2nJPaNe24 wOaWf4yEoeoF5LVrsY+PX1jeh/glfe653HHeNlSl9dIijAE/NE1iybT+z ciZz6coJg+vVeE15jB3BaXWvjeeNFSYwIcIsqa4qqdrVX7Jtdg4vg5Uyk 3/avDykW/8DcbMxcM/+YLZzy6gtXyet3b6nU8DX+SK+HP0dNOxA0vGU6n g==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846918" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846918" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:25 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564001007" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:20 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 7/8] mptcp: attempt to add listening sockets for announced addrs Date: Thu, 27 Jan 2022 19:38:11 -0500 Message-Id: <20220128003812.2732609-8-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_netlink.c | 47 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 46 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 dc02dfe917e1..ceb4517a6e2b 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,31 @@ 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); + + 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 +781,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; @@ -1379,11 +1416,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 May 6 09:14:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:2248:0:0:0:0 with SMTP id m8csp375622jas; Thu, 27 Jan 2022 16:38:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJzdktiHxrjpdIRlqjMPrEPm0+1Z4xyFMa25C2pEXVkul4MPh+rzOSXP+LC24uCIrKiWMlFM X-Received: by 2002:a05:6a00:1409:: with SMTP id l9mr5642342pfu.23.1643330323245; Thu, 27 Jan 2022 16:38:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643330323; cv=none; d=google.com; s=arc-20160816; b=E6U2/GHqNZoWqPktDfFL9bmYxaPQpdFl97JdPauSUsreDr3goRw5b8WjpQzviT6qjJ 5jL2fhz5ZAQIuddeX4PO31O2t2Okrq6//CAhi4Hf5mnh33bA7tndgGZO0WVUI0ppEzYM u6VjDgzN0DKKhxt1JClUsNUD1pY+FuqtjcsSwHbx+GLs6HZAuNjaPPDnci+MDdVlGrqj GenKXqF/dg7MZjKoDSR5zkR3uTdSejc2aT3u4et58qCh4HJeSIff2n4LuQj6PNHUKUGG BwiyKLlG/EviD26tyz0sRyafybD3ynYN5CxXME5Kzy8EUjOolfovzEkV4R5oPUttpkfb H6ng== 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=CYbv5r1SgRI3dzs8w5hjVv2zRi9eXs5k2+qfPphlOpw=; b=Xla5xHnjRV3dSz6b/HCUNbIVswxbAYykd29jRMNFgXFa+ODpHR0cb2e4I+7qjSuaVD rCAmJ95vys7/dmBK5R5eLZBxKTwXiXAmhz+XZXtmyYPDiTgTCu/Ia9zX7h2nAEMsVCmp fvz5o+0GZMvesrOcqidmIvcQZsWKupiTqHcs1lrut/ooKa8uVIZOVGsDdxA2wRZrwNVb W/dOYumTaP6EUac/8G4PvyS/+N2jZd5FvjJpa0P46owSe61LiiPBuXh+u0gry0YyhdFQ HrSocdmk71qLxEeSjezViDqvIdP28SXsW6FsIf8/SSnjyNQKVkAImcsq47l6fnqB3cbY R2PA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="n/uMz9K1"; spf=pass (google.com: domain of mptcp+bounces-3335-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3335-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 r11si3770201pgr.796.2022.01.27.16.38.43 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Jan 2022 16:38:43 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-3335-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="n/uMz9K1"; spf=pass (google.com: domain of mptcp+bounces-3335-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-3335-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 BD56E3E0F33 for ; Fri, 28 Jan 2022 00:38:42 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7200C2CAC; Fri, 28 Jan 2022 00:38:41 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 18AE52CA6 for ; Fri, 28 Jan 2022 00:38:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643330320; x=1674866320; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=Pv5XPI6mFK1R6TZbJ7SXEaAetvJS1zzj0bO3OELOvCY=; b=n/uMz9K1JSOrgklS8MaeeL1z5s7BCUY/iwwXSpYHytAyu+TEdZdtsSlS IOwN5oJrzx4UcVhxMzMLNwQrw39VYMC0jgDJtZYZ4lQJKA+rndX6ObFnI gmYT5KSeMU064GGV57G1WJ6mzOV7KFJlvRki7jeLSD+z0LuFCnuraHhrb HDCeczYrM+X1/EW5v+fpiKgcGLGqKP3uEP4GwxkJSML8RhAlb6hvRwwxv V91eSZkJs9Jg6LyrrpmQEuGIRjHZ9Lu2z54i2m5978H7+mOAFII3M40Sc jsNBzyFMHTPDl9iiZJNp9sFm8CccJaS15tnFudheO+FIfrIzLMvkQmjTD w==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="245846916" X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="245846916" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:24 -0800 X-IronPort-AV: E=Sophos;i="5.88,322,1635231600"; d="scan'208";a="564001008" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 16:38:20 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v3 8/8] mptcp: expose server_side attribute in MPTCP netlink events Date: Thu, 27 Jan 2022 19:38:12 -0500 Message-Id: <20220128003812.2732609-9-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220128003812.2732609-1-kishen.maloor@intel.com> References: <20220128003812.2732609-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 ceb4517a6e2b..126cc961a4fd 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -2088,6 +2088,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