From nobody Sun May 5 06:34:13 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp412585uau; Fri, 24 Jun 2022 09:38:52 -0700 (PDT) X-Google-Smtp-Source: AGRyM1u4V1gv6Kuh1MdrhDq3WCnnxUw/6Izw77/qdlapQ4OwF6jka+9jHY75QXeTHQgG8TkGo0N1 X-Received: by 2002:a05:6808:1514:b0:32f:5668:b7c3 with SMTP id u20-20020a056808151400b0032f5668b7c3mr19156oiw.7.1656088732124; Fri, 24 Jun 2022 09:38:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656088732; cv=none; d=google.com; s=arc-20160816; b=mtf0XD885N3uEUkpxHgk6BEVYNPgLM+htYxTEvkYfz63iIMMYZmiiclzOYHyQo5HlM iuddXUd0TLNURpPMXPWVrS450OLWNhv0uQ59biktqTvk1VMsopVmJH3hgo0Q9H+kN8Mh JGSGpEug6FkJYneHFPt1ZgK5SGnwVnTH18xVzKGYaJ/PQiD4f7RMpD63JCsMPvBbykmQ seBnwoZTVa7WsFXboOAu0RnZlqS2X5vwGc40u89BeDCZFQQ19gD6Df5crSPAkl6GbLgU NxwMYFqTI4qt/MuM30aiSG+VEs2Za0dGCBlNCSPY1p0hiBOXCCzVg0HGionixE7wmvOB r+Tw== 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=g7OkVUbfttfEym+rk9UuMQIvrm4/ED6RhiPAR/EIjS0=; b=m0JgpQDDsuuOP2aG1iyyOV1qKCAapuQqOI+XNQ+5QpqLXaMpltPbE7HXxp9KGOrI63 PA6p+iaLfFvGmHJu7Twjhn5DKwOT3aQ6G9mLgJnMtXAWALoubu6KXjV7YhYyJ1aRZT6I GOPk6JK2GAmPg1uzZEHfmyp2FykKksS7MTJK4f7nPZxQR9wKKs5S/jWeiBmDh9o9BgMq WdUxB0iC0lcp7HjvlAG753mH65SUis0okIpoUHt4xlinnw/oWKx2Hf9qupc56jiXP+hW OvY/P413tCdwhe4DLcjSiwqHCbhHEuoTFg1j60wRDYSSn/6Cn/QgaExPCGOIVgSE1Jzb S3dA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Z14Qzomg; spf=pass (google.com: domain of mptcp+bounces-5821-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5821-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id z133-20020aca338b000000b003353826ab77si2602652oiz.99.2022.06.24.09.38.52 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jun 2022 09:38:52 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5821-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Z14Qzomg; spf=pass (google.com: domain of mptcp+bounces-5821-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5821-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 da.mirrors.kernel.org (Postfix) with ESMTPS id 4478C2E0C76 for ; Fri, 24 Jun 2022 16:38:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 387C93D65; Fri, 24 Jun 2022 16:38:29 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 0FD987C for ; Fri, 24 Jun 2022 16:38:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1656088706; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=g7OkVUbfttfEym+rk9UuMQIvrm4/ED6RhiPAR/EIjS0=; b=Z14Qzomgq6+NuIWKbbBUXpTMtDP6w/m3iSuDlay4gtEgpU4YlYH6WPyieu1xQoPwL2omOg oyHXnUOuJKebqQoyFYM6vWfJ/4GBNnZLi/3lPWZK/d9lQez7QjDrFbUkM6WhBG4amtdXqe jzfxcoNxAU2xuibmzUw34EQt+WAIIz8= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-15-n3FLh6Y4Mmil_NALgEvKKw-1; Fri, 24 Jun 2022 12:38:16 -0400 X-MC-Unique: n3FLh6Y4Mmil_NALgEvKKw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8850C101AA46 for ; Fri, 24 Jun 2022 16:38:16 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.192.243]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1BC132026D64 for ; Fri, 24 Jun 2022 16:38:15 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH RFC 1/4] mptcp: fix local endpoint acconting. Date: Fri, 24 Jun 2022 18:38:07 +0200 Message-Id: <211c8536d4776abdb86e60a154d5fc6c140a6535.1656088406.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8"; x-default="true" In mptcp_pm_nl_rm_addr_or_subflow() we always mark as availble the id corresponding to the just removed address. The used bitmap actually tracks only the local IDs: we must restrict the operation when a (local) subflow is removed. Fixes: a88c9e496937 ("mptcp: do not block subflows creation on errors") Signed-off-by: Paolo Abeni --- net/mptcp/pm_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index e099f2a12504..2b2bb3599781 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -801,7 +801,8 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, removed =3D true; __MPTCP_INC_STATS(sock_net(sk), rm_type); } - __set_bit(rm_list->ids[i], msk->pm.id_avail_bitmap); + if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) + __set_bit(rm_list->ids[i], msk->pm.id_avail_bitmap); if (!removed) continue; =20 --=20 2.35.3 From nobody Sun May 5 06:34:13 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp412373uau; Fri, 24 Jun 2022 09:38:24 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tSGQjEY9V72ooNSS7rHiZ5G23ADkUW6hN3XmfoYK+baWqGyWQ0u4sUxOFNZX7las5ENmFV X-Received: by 2002:a05:6a00:140b:b0:4e1:2cbd:30ba with SMTP id l11-20020a056a00140b00b004e12cbd30bamr48834pfu.46.1656088704589; Fri, 24 Jun 2022 09:38:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656088704; cv=none; d=google.com; s=arc-20160816; b=fTCs5BGLKJy5uHSo8SXa4mva9Zz6fLYLwsxD4mJTeDKDEtJ4TeyYkj+IuW5bZK2Bcm vC5fcUVhZvdGfksRiVb+XwAju99RuniqujV7aPtzSY5Emt+doxd5HyNgNX33cQxBODFQ EkMs5+saYKgrgPGZDHI5VqOHKsK4kpaXKUrMjE4zZAywWCCR2QdSQnv3TVnSWJ0XJOt9 lYp5z8ybRGL5DTqD8BBxx7XX2z6TxdWHvcwoZ3zSWb1v5/PwtulU2nyRXkPwphws9x0m BiS0i4O4EVYv8UzfPMQ6JxZn3gaNqwhDDf8UA/13tuM18U43WGpG2KaZAMX5vOXhldEW YCXA== 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=o/KXnaRDceVKGvSF2PXEkNM1NbH19YquXzFEqGc6IuY=; b=fKr2msE1orHaduF7VKmbObHEyKVkOCO1mcEJmHStuKoo1wUsOY84GmcnW9SA/VoMRb n6xVivrTd2zy9P+Ied3PaAGYszv2Y2MwjpPoytz5fDtsJRK7jH7G3ZqGKzbV5JsYBApm PdsC6Txc/OF97r52Dr+HDIYCa/coQPgo7oxgnvtz0kT5MD9DE/vrZcWkahDUzw9rRexC 0A6DhBQxGMjvN6pfETuaW84BnbE1kpWfMQ95oL3NgsalnfEWAgJ4aqW4CuZLsTafF+oY nbBxG8GdgqLvuiKl6doGxhOSxUZDA2JKWaUy59WwKR+SobG/2t7ZuImt18FfcX1LEgO4 aYMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="L0GeI/v+"; spf=pass (google.com: domain of mptcp+bounces-5819-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5819-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id h2-20020a17090a2ec200b001e2f5701113si6878905pjs.25.2022.06.24.09.38.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jun 2022 09:38:24 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5819-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="L0GeI/v+"; spf=pass (google.com: domain of mptcp+bounces-5819-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5819-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 19907280C7E for ; Fri, 24 Jun 2022 16:38:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 221613FE1; Fri, 24 Jun 2022 16:38:22 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 B2F1E3D9D for ; Fri, 24 Jun 2022 16:38:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1656088699; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=o/KXnaRDceVKGvSF2PXEkNM1NbH19YquXzFEqGc6IuY=; b=L0GeI/v+lulJADOddsQTt72MFLH9Kn4NcnUguhVyzY6d9CNU8yc4PXkDQhZKvG06kLxi1V F3U6yN4J+CwMWzh1NzAuEG4y20CfOco/rJ4SmADLO9FrVABoNEUeKxHbutX359u4f569B5 icrXYWW8c37UX28mHJjcj5oa7UsA4L4= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-43-3EHx58E8NYWegcI_UzkD4w-1; Fri, 24 Jun 2022 12:38:17 -0400 X-MC-Unique: 3EHx58E8NYWegcI_UzkD4w-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4AE1B2919EB2 for ; Fri, 24 Jun 2022 16:38:17 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.192.243]) by smtp.corp.redhat.com (Postfix) with ESMTP id CD60D2026D64 for ; Fri, 24 Jun 2022 16:38:16 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH RFC 2/4] mptcp: introduce and use mptcp_pm_send_ack() Date: Fri, 24 Jun 2022 18:38:08 +0200 Message-Id: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8"; x-default="true" The in-kernel PM has a bit of duplicate code related to ack generation. Create a new helper factoring out the PM-specific needs and use it in a couple of places. Note that this additionally moves a few unsafe subflow socket access under the relevant socket lock. Signed-off-by: Paolo Abeni --- net/mptcp/pm_netlink.c | 45 ++++++++++++++++++++++++------------------ net/mptcp/protocol.c | 11 ++++++++--- net/mptcp/protocol.h | 2 +- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 2b2bb3599781..91f6ed2a076a 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -463,6 +463,29 @@ static unsigned int fill_remote_addresses_vec(struct m= ptcp_sock *msk, bool fullm return i; } =20 +static void mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow= _context *subflow, + bool prio, bool backup) +{ + struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); + bool slow; + + spin_unlock_bh(&msk->pm.lock); + pr_debug("send ack for %s", + prio ? "mp_prio" : (mptcp_pm_should_add_signal(msk) ? "add_addr" : "rm_= addr")); + + slow =3D lock_sock_fast(ssk); + if (prio) { + subflow->send_mp_prio =3D 1; + subflow->backup =3D backup; + subflow->request_bkup =3D backup; + } + + __mptcp_subflow_send_ack(ssk); + unlock_sock_fast(ssk, slow); + + spin_lock_bh(&msk->pm.lock); +} + static struct mptcp_pm_addr_entry * __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) { @@ -705,16 +728,8 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk) return; =20 subflow =3D list_first_entry_or_null(&msk->conn_list, typeof(*subflow), n= ode); - if (subflow) { - struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); - - spin_unlock_bh(&msk->pm.lock); - pr_debug("send ack for %s", - mptcp_pm_should_add_signal(msk) ? "add_addr" : "rm_addr"); - - mptcp_subflow_send_ack(ssk); - spin_lock_bh(&msk->pm.lock); - } + if (subflow) + mptcp_pm_send_ack(msk, subflow, false, false); } =20 static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk, @@ -736,16 +751,8 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_s= ock *msk, =20 if (subflow->backup !=3D bkup) msk->last_snd =3D NULL; - subflow->backup =3D bkup; - subflow->send_mp_prio =3D 1; - subflow->request_bkup =3D bkup; __MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPPRIOTX); - - spin_unlock_bh(&msk->pm.lock); - pr_debug("send ack for mp_prio"); - mptcp_subflow_send_ack(ssk); - spin_lock_bh(&msk->pm.lock); - + mptcp_pm_send_ack(msk, subflow, true, bkup); return 0; } =20 diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index b1fae2f747c9..874344f7e0fa 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -502,13 +502,18 @@ static inline bool tcp_can_send_ack(const struct sock= *ssk) (TCPF_SYN_SENT | TCPF_SYN_RECV | TCPF_TIME_WAIT | TCPF_CLOSE | TCP= F_LISTEN)); } =20 -void mptcp_subflow_send_ack(struct sock *ssk) +void __mptcp_subflow_send_ack(struct sock *ssk) +{ + if (tcp_can_send_ack(ssk)) + tcp_send_ack(ssk); +} + +static void mptcp_subflow_send_ack(struct sock *ssk) { bool slow; =20 slow =3D lock_sock_fast(ssk); - if (tcp_can_send_ack(ssk)) - tcp_send_ack(ssk); + __mptcp_subflow_send_ack(ssk); unlock_sock_fast(ssk, slow); } =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 95c9ace1437b..a92b6276a03c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -609,7 +609,7 @@ void __init mptcp_subflow_init(void); void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how); void mptcp_close_ssk(struct sock *sk, struct sock *ssk, struct mptcp_subflow_context *subflow); -void mptcp_subflow_send_ack(struct sock *ssk); +void __mptcp_subflow_send_ack(struct sock *ssk); void mptcp_subflow_reset(struct sock *ssk); void mptcp_subflow_queue_clean(struct sock *ssk); void mptcp_sock_graft(struct sock *sk, struct socket *parent); --=20 2.35.3 From nobody Sun May 5 06:34:13 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp412365uau; Fri, 24 Jun 2022 09:38:23 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tIfRbrboDXbiVSMxhN8I74xC501PiYQyiipSWEpyL2JIXCqIQAdcdcEkDGvhC8MNgq9FnU X-Received: by 2002:a17:902:f114:b0:16a:133a:b1fe with SMTP id e20-20020a170902f11400b0016a133ab1femr33368808plb.66.1656088703557; Fri, 24 Jun 2022 09:38:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656088703; cv=none; d=google.com; s=arc-20160816; b=b5GW4/5JkBgU89n1aIo5hmIUEk/wYyvIJ0XmzdUo+Q+0+VwsOA3G9noLsV+yyi+qCF 0t/UE6i52UbfJLYfvUJf6bWFY3UmL6NCS6A6b+umxwyTEO2MfO717Zadh4JJ+W/M1DM2 In4q/tsoBH/CRRB5MHKEHh1jBjvGQCrk/gbwajFadhMWNRlrsVEIMnA4xO5zXabOEHh1 F8GuraFf2Urznrmp8RVuZTwry9VrKZYBlMDfqPJ1rF8EdbJaCnV71rWd8vgge1ujTOuh droYq4z/X8EVJolOn01ZEEfOrjVjLwqSv3Pt0TrttDCtM3YBCKL7Eif+cNoq7MKHIgLn WQFg== 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=pXMCy+nIpSmrgqNJN+8DnoYqilodAvmKSi1TZI1d8Ng=; b=YzwwIO5QeOOj3zOpXxOso7E0QJjgUP+VScKzul1PyoNGhYGHHNBADR55zCZtqbG7ft 8twaCL3eXM96u6tBdHHpPibnfbRJNGO9KrRUCT1oSdq4MisDAoEVwSrb/pheKBuQq7Bj zV5pBE/LQdgeTxDN4vlHHzzxUPrkDg1/TAV9lvTf4VD3wA1bWoPiIR+KZrz3HRPfrEgZ Zglydam/nsZrouhBdGqrwkqcVcBc02HeOT2dKIy6CKqE3MNPrWDWZxROAS4l4pGwX+HA cx5kUMe5b0nBY3PZi1IOIAqNFvxP0XgXH4+H/k1ETh4HH47nfAXgSEsTXcnx6xX5xwv6 8TxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fB0a+8Tz; spf=pass (google.com: domain of mptcp+bounces-5818-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5818-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id h2-20020a17090a2ec200b001e2f5701113si6878905pjs.25.2022.06.24.09.38.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jun 2022 09:38:23 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5818-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fB0a+8Tz; spf=pass (google.com: domain of mptcp+bounces-5818-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5818-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sv.mirrors.kernel.org (Postfix) with ESMTPS id E670F280C83 for ; Fri, 24 Jun 2022 16:38:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DB9263D65; Fri, 24 Jun 2022 16:38:21 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 76E077C for ; Fri, 24 Jun 2022 16:38:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1656088699; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pXMCy+nIpSmrgqNJN+8DnoYqilodAvmKSi1TZI1d8Ng=; b=fB0a+8Tz5dhDE+78JS9qOPGt92w80b3OiaIXQRNeyVHN4j6MzsEXmkIz+1ukRzNtpcueg7 3ExJoWFFwVQ3tDprjPok5sHDK/JgNW7413NghDZbeyDnFVBoF3bkBCscWkSDnWoKVmB1jI mHZtpbi0+49+dMPou3/Wl5BiwQv9/Uk= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-479-bWKM-CyiPW-J6vkE6YPjLg-1; Fri, 24 Jun 2022 12:38:18 -0400 X-MC-Unique: bWKM-CyiPW-J6vkE6YPjLg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 05ECC811E75 for ; Fri, 24 Jun 2022 16:38:18 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.192.243]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8EA112026D64 for ; Fri, 24 Jun 2022 16:38:17 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH RFC 3/4] mptcp: allow the in kernel PM to set MPC subflow priority Date: Fri, 24 Jun 2022 18:38:09 +0200 Message-Id: <8a80c3bf12e43985e00b4fb04beccd38d69e505b.1656088406.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8"; x-default="true" Any local endpoints configured on the address matching the MPC subflow are currently ignored. Specifically, setting a backup flag on them has no effect on the first subflow, as the MPC handshake can't carry such info. This change refactors the MPC endpoint id accounting to additionally fetch the priority info from the relevant endpoint and eventually trigger the MP_PRIO handshake as needed. As a result, the MPC subflow now switches to backup priority after that the MPTCP socket is fully established, according to the local endpoint configuration. Signed-off-by: Paolo Abeni --- net/mptcp/pm_netlink.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 91f6ed2a076a..a6eb501e5031 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -505,30 +505,14 @@ __lookup_addr(struct pm_nl_pernet *pernet, const stru= ct mptcp_addr_info *info, struct mptcp_pm_addr_entry *entry; =20 list_for_each_entry(entry, &pernet->local_addr_list, list) { - if ((!lookup_by_id && mptcp_addresses_equal(&entry->addr, info, true)) || + if ((!lookup_by_id && + mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) || (lookup_by_id && entry->addr.id =3D=3D info->id)) return entry; } return NULL; } =20 -static int -lookup_id_by_addr(const struct pm_nl_pernet *pernet, const struct mptcp_ad= dr_info *addr) -{ - const struct mptcp_pm_addr_entry *entry; - int ret =3D -1; - - rcu_read_lock(); - list_for_each_entry(entry, &pernet->local_addr_list, list) { - if (mptcp_addresses_equal(&entry->addr, addr, entry->addr.port)) { - ret =3D entry->addr.id; - break; - } - } - rcu_read_unlock(); - return ret; -} - static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) { struct sock *sk =3D (struct sock *)msk; @@ -546,13 +530,22 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) =20 /* do lazy endpoint usage accounting for the MPC subflows */ if (unlikely(!(msk->pm.status & BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED))) &&= msk->first) { + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(msk->first); + struct mptcp_pm_addr_entry *entry; struct mptcp_addr_info mpc_addr; - int mpc_id; + bool backup =3D false; =20 local_address((struct sock_common *)msk->first, &mpc_addr); - mpc_id =3D lookup_id_by_addr(pernet, &mpc_addr); - if (mpc_id >=3D 0) - __clear_bit(mpc_id, msk->pm.id_avail_bitmap); + rcu_read_lock(); + entry =3D __lookup_addr(pernet, &mpc_addr, false); + if (entry) { + __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); + backup =3D !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP); + } + rcu_read_unlock(); + + if (backup) + mptcp_pm_send_ack(msk, subflow, true, backup); =20 msk->pm.status |=3D BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED); } --=20 2.35.3 From nobody Sun May 5 06:34:13 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp412582uau; Fri, 24 Jun 2022 09:38:52 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s5z7Hcv0Zd0DWESKK8m3CRCgRQ5E+9IiF3jHRIxWaEZ4e3R75nUjLY2xdu3VWHHC6M7hxV X-Received: by 2002:a05:6870:c105:b0:101:a1d6:fbb2 with SMTP id f5-20020a056870c10500b00101a1d6fbb2mr2666028oad.66.1656088731944; Fri, 24 Jun 2022 09:38:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656088731; cv=none; d=google.com; s=arc-20160816; b=J//RqHQGJmbCzPlDQys+j8BZiQ3gDfxf5tovnPmoxkXGeOtgFzwpVuIW6nCloEIZ2X jOS+CzFOo0HvAF/onAD0jrTDde/L7fBAxqaB10tXod23A1jTCyaBp6gTDawK4C4ZMAxT EBB5N337EHRdzmW07+eWHnklPbGJDZjSDfzj3iHURpcDoZ4nywFEOtvjA86kaTbXbs4m JuajALnZMpFJ+sXchiUIYjZPF6fVL5oaG9cNcbYlfog79Bjf4IwXcsvn++JMiFYsW02V wJvduAC1CkgkASSQsgLcTM0rBK73qGfJlt+6l6D92UCuatVzSSpL2+jZbTKyivRqD1eC vdDQ== 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=hby7L1tgly8ED5o+KmGz7tjD892ck5ORtnujVbBFiMg=; b=XY7QiDxojKw9WBnAgnYX7SnpOiw75fYFAiR8pYesAra29nVyKyDW32fs8lafzLizjK ouNglTS8kEZ+Y5ElBruKIF8N54KnBr0gJVxG3PhuzTqdc4TNr95ZHgMHvT7i18tDhSzM 5LFueMZqPDLXOKV9l9tiz2G+vIRwlh9TxLDBv3q0D7enQegACHU6WKTp8G1psFOcH2KF K9saqnb4rw4BZexmjZVy2xnRwwT4dMR3Fnunp9BfUBaH3LWGyyqCkO8XNlBy6D4bYRFI AEdYnwjn0IgnoF+D4nR+lyiPxSl6slN9lQQoCOFMV1wk2WK5/8O2u4kG5QdLRsd8iAb4 Lu7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=KgOsat3F; spf=pass (google.com: domain of mptcp+bounces-5820-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5820-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id j7-20020a056830270700b0060c20cf594esi4044240otu.190.2022.06.24.09.38.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jun 2022 09:38:51 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5820-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=KgOsat3F; spf=pass (google.com: domain of mptcp+bounces-5820-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5820-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 da.mirrors.kernel.org (Postfix) with ESMTPS id 95B982E0C38 for ; Fri, 24 Jun 2022 16:38:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4CD523D9D; Fri, 24 Jun 2022 16:38:23 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 E8E837C for ; Fri, 24 Jun 2022 16:38:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1656088700; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hby7L1tgly8ED5o+KmGz7tjD892ck5ORtnujVbBFiMg=; b=KgOsat3F/uVsBXjY/zURc9wakYQZnknr/S5XrakV5mpMbV7GkpIjC91YbI0CLQ6lbxIi59 j8hVgBuqhoQ35r3u57AUxn7tm/49Zpy/Au8U+4p4T7P/PHKZVumibOcenxZpse0IbHKSHR yhVcMnDKyVt6efIIYHrJBQ9vmKw4V4c= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-209-poj616DZPsiuqiWYpVjB5A-1; Fri, 24 Jun 2022 12:38:19 -0400 X-MC-Unique: poj616DZPsiuqiWYpVjB5A-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BC3CB3C0D1A7 for ; Fri, 24 Jun 2022 16:38:18 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.192.243]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4A4EE2026D64 for ; Fri, 24 Jun 2022 16:38:18 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH RFC 4/4] mptcp: more accurate MPC endpoint tracking Date: Fri, 24 Jun 2022 18:38:10 +0200 Message-Id: <25ad186319f6b464aee3286c0386f2851f9a1f8f.1656088406.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8"; x-default="true" Currently the id accounting for the ID 0 subflow is not correct: at creation time we mark (correctly) as unavailable the endpoint id corresponding the MPC subflow source address, while at subflow removal time set as available the id 0. With this change we track explicitly the endpoint id corresponding to the MPC subflow so that we can mark it as available at removal time. Additionally this allow deleting the initial subflow via the NL PM specifying the corresponding endpoint id. Signed-off-by: Paolo Abeni --- net/mptcp/pm_netlink.c | 20 +++++++++++++------- net/mptcp/protocol.h | 1 + 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index a6eb501e5031..cd0093ff1103 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -540,6 +540,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) entry =3D __lookup_addr(pernet, &mpc_addr, false); if (entry) { __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); + msk->mpc_endpoint_id =3D entry->addr.id; backup =3D !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP); } rcu_read_unlock(); @@ -752,6 +753,11 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_s= ock *msk, return -EINVAL; } =20 +static bool mptcp_local_id_match(const struct mptcp_sock *msk, u8 local_id= , u8 id) +{ + return local_id =3D=3D id || (!local_id && msk->mpc_endpoint_id =3D=3D id= ); +} + static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list, enum linux_mptcp_mib_field rm_type) @@ -775,6 +781,7 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, return; =20 for (i =3D 0; i < rm_list->nr; i++) { + u8 rm_id =3D rm_list->ids[i]; bool removed =3D false; =20 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { @@ -782,15 +789,14 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mpt= cp_sock *msk, int how =3D RCV_SHUTDOWN | SEND_SHUTDOWN; u8 id =3D subflow->local_id; =20 - if (rm_type =3D=3D MPTCP_MIB_RMADDR) - id =3D subflow->remote_id; - - if (rm_list->ids[i] !=3D id) + if (rm_type =3D=3D MPTCP_MIB_RMADDR && subflow->remote_id !=3D rm_id) + continue; + if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW && !mptcp_local_id_match(msk, id= , rm_id)) continue; =20 - pr_debug(" -> %s rm_list_ids[%d]=3D%u local_id=3D%u remote_id=3D%u", + pr_debug(" -> %s rm_list_ids[%d]=3D%u local_id=3D%u remote_id=3D%u mpc_= id=3D%u", rm_type =3D=3D MPTCP_MIB_RMADDR ? "address" : "subflow", - i, rm_list->ids[i], subflow->local_id, subflow->remote_id); + i, rm_id, subflow->local_id, subflow->remote_id, msk->mpc_endpoint_id= ); spin_unlock_bh(&msk->pm.lock); mptcp_subflow_shutdown(sk, ssk, how); =20 @@ -802,7 +808,7 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, __MPTCP_INC_STATS(sock_net(sk), rm_type); } if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) - __set_bit(rm_list->ids[i], msk->pm.id_avail_bitmap); + __set_bit(rm_id ? rm_id : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap= ); if (!removed) continue; =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index a92b6276a03c..ec91776f9b18 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -282,6 +282,7 @@ struct mptcp_sock { bool use_64bit_ack; /* Set when we received a 64-bit DSN */ bool csum_enabled; bool allow_infinite_fallback; + u8 mpc_endpoint_id; u8 recvmsg_inq:1, cork:1, nodelay:1; --=20 2.35.3