From nobody Sat Apr 20 11:15:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899537jap; Thu, 6 Jan 2022 16:20:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJy2FPCYHF3Aa3klNjafdXams1AFlxVHVoja9S9jJHrAfgvHIUb97q5naxe2eKCN9SKR8gmg X-Received: by 2002:a25:d913:: with SMTP id q19mr308580ybg.244.1641514851992; Thu, 06 Jan 2022 16:20:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514851; cv=none; d=google.com; s=arc-20160816; b=zs8X+saTfIVRghe2ODgWMVvBhc612hp5rkpnV/HSkbC6VeFcyvtskOyFYEidNEUdY1 bqQ01tByIfNn5Lweu7SdCD4C0kYQCq7vrm5jildwTW2N4dKB9QuSB0OJ3TG/OIeJiKNU TEtwaXmC/1nxuEgBLej44wrQ3J7vKOktUiof5/xFysPT0Zh4WvMcSwrQhO5GN/SykTrg l1mM0mK1J1OsOu3xObSFl/W9OZXW7GE8bKkaKf2nO9uoDu5VPJABCc1F0oUPVtAdw9fD Ky559UcNw0708lqCxvtGeurOf5Limpzals6YV5D0AjwS1/2IENjbdEaEnRc9EOFWNgC2 Nz0g== 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:cc:to:from:dkim-signature; bh=1+XKtsIwhTZwoyobUIdRYulUx1q0DvRR9CTz1AKWkBo=; b=jCnph4x+ph6xP9+ggXokcntRhmfSPVWYKAh5bxtM6ja54EZwQN+V610DlmrtATaBTP go12UwcM0hwlEFXfmsOTxU3jLRqpX5TaaXEXHOTwVTv6DMorlSxGSK6oT8BTIs9VaA5a kYvEPe7LT4KR2c0PiQoR57g0yC07tzwGoxSQrf6MTY9BuXg7u1KxoJ5J9UVjws/Q22Ea HyFNC/Pyl9guwtT0rkdrRIdN/IUpAN36aFXRPPMFgAz7Q5cbNmkLrbK9JpYWOwuDZd0j jmKhjWaWU2AZIE/b/VJRpefQ63XAqOZgRHJx0/L/bmzNEFNX1WLYOTmsPOEdSV7OY2hJ FGsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=WsMIzPyz; spf=pass (google.com: domain of mptcp+bounces-2945-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2945-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 r13si126595ybb.454.2022.01.06.16.20.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:20:51 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2945-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=WsMIzPyz; spf=pass (google.com: domain of mptcp+bounces-2945-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2945-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 38CA71C0C58 for ; Fri, 7 Jan 2022 00:20:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B0A7F2CA8; Fri, 7 Jan 2022 00:20:49 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27752168 for ; Fri, 7 Jan 2022 00:20:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514848; x=1673050848; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Wc56x3z89MoqMhqYjlsOIeQJY/RWfoCH4DjPm2rYDaM=; b=WsMIzPyzxgfZ9Jkzm2RqCwsnZmpXfl1YDdcV+/7qRNukq6nGiJgRxMDP ao+Ku1AqlPyXISd4vvHZ0ItqxrBEUUkzVDapU2yStK5LA5j9ey7gLb+YU mcGWQ92jqV9ALUqnQy/7P2aI8+zGX5wb/ic54KkSFlnWIdtwXmrL9g+Me jQa5sWg8JM81DyaiLqNEtawktt9CdbOpFwBlJRYo0aKv8lYxS31Vla+L0 1PU1dO/Qokhq3QEVMGMQooEtMORDk4RB1n/OT01U7cmKMuqFvsqXwzGf6 1FZVDN2CVs+nrsetSwK8NiNJ521O88hhOFkqGe68/j3EBBguSNVlCWoox w==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111019" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111019" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508492" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:33 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 01/13] mptcp: keep snd_una updated for fallback socket Date: Thu, 6 Jan 2022 16:20:14 -0800 Message-Id: <20220107002026.375427-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.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" From: Paolo Abeni After shutdown, for fallback MPTCP sockets, we always have write_seq =3D=3D snd_una+1 The above will foul OUTQ ioctl(). Keep snd_una in sync with write_seq even after shutdown. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index df5a0cf431c1..f6fc0f0f66f0 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2666,6 +2666,7 @@ static void __mptcp_check_send_data_fin(struct sock *= sk) * state now */ if (__mptcp_check_fallback(msk)) { + WRITE_ONCE(msk->snd_una, msk->write_seq); if ((1 << sk->sk_state) & (TCPF_CLOSING | TCPF_LAST_ACK)) { inet_sk_state_store(sk, TCP_CLOSE); mptcp_close_wake_up(sk); --=20 2.34.1 From nobody Sat Apr 20 11:15:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899574jap; Thu, 6 Jan 2022 16:20:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJw+x+bBcwI0ombI1BAyfg55siOyDfIGTESOYTfwaVSYfbPda0kBCNgEtJEeVhcWtmaLpxnY X-Received: by 2002:a25:d142:: with SMTP id i63mr68540641ybg.253.1641514854024; Thu, 06 Jan 2022 16:20:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514854; cv=none; d=google.com; s=arc-20160816; b=T6bHbFsWxJm0T6r47A5jn+MW/nD7ioberNn+CspKrlIN4m1T9OHS1dhgr+CK5tN2fb Dk51tGg/UzQ0nmoM8fcWbaDf7w2ANeOfbCU3sqOJvU3PM+LdTntlJ/bM+vSJ5QZWM9Q+ rGkV//6shEK+eG62EglpkITZ4ICrR4xu5fqcNxb7uZ3Tye9nxAv/qFpPkN9RIUqpcKQ1 /vhfonhrshisjRxLxm0WA5w4MuWK/Tq+UKVsQCw3EalM1v1XvlcTv8TbdWoxh/OwYGUd dgc04tHZw3gfZm/GNH0wxbDSTMU/hPs3xp8HajOcMh40UeQRHyFKVMlZTPcHMDMQPoJU 7b2A== 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:cc:to:from:dkim-signature; bh=K48eyw5fjuAVZre/g5ndUBqJK3HcGIMFWbnxcooGleE=; b=0/iB81J6jhrrAwZPdftn/C/vN2gAWmAHImpIgcOvPTfguUmfk/TIbVXolivODZq7uq lKgdYBjqntETbEQVncyA46EWB9laN+qnH/zr33APas9IAmgQ3Toj7iFXG5QXwGHxtU7K tO8B9BgIR8TEe5i++kB4EmI3deJo3oNzOojf0NRVIxFZU+TlqvE9rg9Yt9xzO5zd2T+3 3Nk/muUcxebMdzsbcqA1tnHPBkenpmhWWF2Gs1AJAAOnhtgoOWHisiohfw7uy7oZpVEh hcNVI53KJKGExYWoJ1nX3fTxpTSvPxpWB/DFQc1QX6mNi5hMAbTMUVZcsZF2sSkTSjNP /8/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=QhZBFbrI; spf=pass (google.com: domain of mptcp+bounces-2947-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2947-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 x10si2976360ybq.698.2022.01.06.16.20.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:20:54 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2947-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=QhZBFbrI; spf=pass (google.com: domain of mptcp+bounces-2947-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2947-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 C01481C0F0C for ; Fri, 7 Jan 2022 00:20:53 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F19D02CAD; Fri, 7 Jan 2022 00:20:50 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CB262C9D for ; Fri, 7 Jan 2022 00:20:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514849; x=1673050849; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UtZL9lW6Z7vfWdyQtIYFyHhpXBqpKoVl0bB1B2rjZSc=; b=QhZBFbrIyBWibl1Rt6EsJkRTONeHM1IykGUkIzc/R4uEt2rBZfNFA+R7 8l9ji9KRs53k3jE7h9ob5NNDzvAy3XOoAslCq8tracbA4lkZiAFGvR5JY NUIGhiWPqgiLkPa68IAVl4DFYc2rgxihWe1gVbbPpWn6YGS9ENQw8ePtU PtijtLzr9J6xFqimcjiHY0UJnBXae3rrSrf3Kfu+359XL3ndE96W0pYBN usUYcICH4ZHtUNeQWukFE+r9+hdsO4k7a/f3LSDWhkv8HyykBHL5t0/Sd 7BMSRCMTo0PfQ4FxHoaongVUnlo8uMefglmN80b4T/v8ObsTencJjG1rJ Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111022" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111022" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508494" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Geliang Tang , Mat Martineau Subject: [PATCH net-next 02/13] mptcp: implement fastclose xmit path Date: Thu, 6 Jan 2022 16:20:15 -0800 Message-Id: <20220107002026.375427-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.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" From: Paolo Abeni Allow the MPTCP xmit path to add MP_FASTCLOSE suboption on RST egress packets. Additionally reorder related options writing to reduce the number of conditionals required in the fast path. Co-developed-by: Geliang Tang Signed-off-by: Geliang Tang Co-developed-by: Matthieu Baerts Signed-off-by: Matthieu Baerts Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/options.c | 57 ++++++++++++++++++++++++++++++++++---------- net/mptcp/protocol.h | 1 + 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index fe98e4f475ba..46d35a235f35 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -768,6 +768,28 @@ static noinline bool mptcp_established_options_rst(str= uct sock *sk, struct sk_bu return true; } =20 +static bool mptcp_established_options_fastclose(struct sock *sk, + unsigned int *size, + unsigned int remaining, + struct mptcp_out_options *opts) +{ + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); + struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); + + if (likely(!subflow->send_fastclose)) + return false; + + if (remaining < TCPOLEN_MPTCP_FASTCLOSE) + return false; + + *size =3D TCPOLEN_MPTCP_FASTCLOSE; + opts->suboptions |=3D OPTION_MPTCP_FASTCLOSE; + opts->rcvr_key =3D msk->remote_key; + + pr_debug("FASTCLOSE key=3D%llu", opts->rcvr_key); + return true; +} + static bool mptcp_established_options_mp_fail(struct sock *sk, unsigned int *size, unsigned int remaining, @@ -806,10 +828,12 @@ bool mptcp_established_options(struct sock *sk, struc= t sk_buff *skb, return false; =20 if (unlikely(skb && TCP_SKB_CB(skb)->tcp_flags & TCPHDR_RST)) { - if (mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { + if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) = || + mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { *size +=3D opt_size; remaining -=3D opt_size; } + /* MP_RST can be used with MP_FASTCLOSE and MP_FAIL if there is room */ if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { *size +=3D opt_size; remaining -=3D opt_size; @@ -1251,17 +1275,8 @@ void mptcp_write_options(__be32 *ptr, const struct t= cp_sock *tp, ptr +=3D 2; } =20 - /* RST is mutually exclusive with everything else */ - if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { - *ptr++ =3D mptcp_option(MPTCPOPT_RST, - TCPOLEN_MPTCP_RST, - opts->reset_transient, - opts->reset_reason); - return; - } - - /* DSS, MPC, MPJ and ADD_ADDR are mutually exclusive, see - * mptcp_established_options*() + /* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive, + * see mptcp_established_options*() */ if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { struct mptcp_ext *mpext =3D &opts->ext_copy; @@ -1447,6 +1462,24 @@ void mptcp_write_options(__be32 *ptr, const struct t= cp_sock *tp, ptr +=3D 1; } } + } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) { + /* FASTCLOSE is mutually exclusive with others except RST */ + *ptr++ =3D mptcp_option(MPTCPOPT_MP_FASTCLOSE, + TCPOLEN_MPTCP_FASTCLOSE, + 0, 0); + put_unaligned_be64(opts->rcvr_key, ptr); + ptr +=3D 2; + + if (OPTION_MPTCP_RST & opts->suboptions) + goto mp_rst; + return; + } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { +mp_rst: + *ptr++ =3D mptcp_option(MPTCPOPT_RST, + TCPOLEN_MPTCP_RST, + opts->reset_transient, + opts->reset_reason); + return; } =20 if (OPTION_MPTCP_PRIO & opts->suboptions) { diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 0486c9f5b38b..f177936ff67d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -423,6 +423,7 @@ struct mptcp_subflow_context { backup : 1, send_mp_prio : 1, send_mp_fail : 1, + send_fastclose : 1, rx_eof : 1, can_ack : 1, /* only after processing the remote a key */ disposable : 1, /* ctx can be free at ulp release time */ --=20 2.34.1 From nobody Sat Apr 20 11:15:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899547jap; Thu, 6 Jan 2022 16:20:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJxOCsKQ+PT4itLVkZqzsYPnsxiQbyj8RYBdhXBKs5WCBq09pLEbWfLa7riLp1hVapZJPahS X-Received: by 2002:a05:6a00:1485:b0:4bb:317a:a909 with SMTP id v5-20020a056a00148500b004bb317aa909mr63081907pfu.29.1641514852467; Thu, 06 Jan 2022 16:20:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514852; cv=none; d=google.com; s=arc-20160816; b=DIQh0l7s4rQgM0vAVF52qQCyJpy9a6PWSiSPnXCX6Ra7s1sNQ13Jf7MbX3mTOwsBr/ arxC0Ak+AGxGtSsxQXCHbliEdj4LC1eRvxac/07Qg8heWc7uqEl35gp3nzfAiQpl4I/h hEpApItnXxQv0eV+cLj9vnyowtC+f6pMvzuAHI5yQOh6a/9jhGN1VF5UkyvXZCkuk4WP YWvsBifSzb20Y6DMrW4kPV2jRQvVoLLVRzmq+L58BjusjIQ8i2wON1AemaiiOjANZyuZ xJm/Hg6meNGSyfnwr9dIxAmaImqPirmgZ1CKfYSAM+tOyUX/H/qp9YDwqTMoSsSvK1ht TqYA== 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:cc:to:from:dkim-signature; bh=T7TgEQ0YNB09ccyXaEYJONuPhBngJiHX1DigYQ4WCJw=; b=W8d7jnenZwVemCDuz50Su211UvNUESlTWQURovwAOtDgLnLF46R7ZBGAM+5sfurlLR iH75NeonFYEgPakXHrUx5vTztHNoZFj2jstJbJsiI7tCKcEy0uD0rMyke4BdjHAQY95r zNvu2InTpLl8UkxTkKPB3HyIv0DBmrGvIVw7txej1BMH8polCUyQo+gBzZmRqp6qYtVK xGJONHCvESWCx7yFz5w2CFM+LWl6Syq3eqhWcaEROVCb2DgRuCTAIm6kaV9cLVK2aLvE hoxWXZLmNBOgxTypmUEgJX2asWlOrqRDITdveRxWdbYflgeNalU/hX203yBzDxNE7Wn8 xEag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Yo7P3Av5; spf=pass (google.com: domain of mptcp+bounces-2946-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2946-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 v71si3324745pgd.176.2022.01.06.16.20.52 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:20:52 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2946-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=Yo7P3Av5; spf=pass (google.com: domain of mptcp+bounces-2946-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2946-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 06F4C3E0F05 for ; Fri, 7 Jan 2022 00:20:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3C3F42CAC; Fri, 7 Jan 2022 00:20:50 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6059B2C9C for ; Fri, 7 Jan 2022 00:20:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514848; x=1673050848; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pqOieQkFJK/df3FIuxP2JeoTUef4jBU5My1op3wP8ds=; b=Yo7P3Av5Z0zzyI+tXUBahUzbdZYgSM4lNVPoNOlgWs9Mcox22g4QUWn5 SbVYPsU/MkvCFKd1gSyBTnO7QMMBREGFNs4mFOQXmjtqKEEcW4i7hMoEv 1UoKfUQVokDZ2ZN7RwgE7IdJHN0EhC0euKQ3FW1bwPvTM+S9Wuz0IFMXb 76cJLNrDlYEHI30Rl4/79uwnGPkoayZCC1KK5APNFTwZZ/JahQa2+gW1W XEq6k+6UjlB344PMrbJvoLbl2N1E43IBG5tAyUP8lqWIaeom82TZHI1gs rpsncdDP8LKbooyFWwLXe5FxOIHA8It7cr2DcVhWTp5bqP/72ClmjqQHn g==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111026" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111026" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508497" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 03/13] mptcp: full disconnect implementation Date: Thu, 6 Jan 2022 16:20:16 -0800 Message-Id: <20220107002026.375427-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.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" From: Paolo Abeni The current mptcp_disconnect() implementation lacks several steps, we additionally need to reset the msk socket state and flush the subflow list. Factor out the needed helper to avoid code duplication. Additionally ensure that the initial subflow is disposed only after mptcp_close(), just reset it at disconnect time. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm.c | 10 +++-- net/mptcp/protocol.c | 101 ++++++++++++++++++++++++++++++++----------- net/mptcp/protocol.h | 14 ++++++ net/mptcp/token.c | 1 + 4 files changed, 98 insertions(+), 28 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 6ab386ff3294..6b2bfe89d445 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -356,7 +356,7 @@ void mptcp_pm_subflow_chk_stale(const struct mptcp_sock= *msk, struct sock *ssk) } } =20 -void mptcp_pm_data_init(struct mptcp_sock *msk) +void mptcp_pm_data_reset(struct mptcp_sock *msk) { msk->pm.add_addr_signaled =3D 0; msk->pm.add_addr_accepted =3D 0; @@ -371,10 +371,14 @@ void mptcp_pm_data_init(struct mptcp_sock *msk) WRITE_ONCE(msk->pm.remote_deny_join_id0, false); msk->pm.status =3D 0; =20 + mptcp_pm_nl_data_init(msk); +} + +void mptcp_pm_data_init(struct mptcp_sock *msk) +{ spin_lock_init(&msk->pm.lock); INIT_LIST_HEAD(&msk->pm.anno_list); - - mptcp_pm_nl_data_init(msk); + mptcp_pm_data_reset(msk); } =20 void __init mptcp_pm_init(void) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index f6fc0f0f66f0..83f6d6c3e3eb 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2253,6 +2253,10 @@ bool __mptcp_retransmit_pending_data(struct sock *sk) return true; } =20 +/* flags for __mptcp_close_ssk() */ +#define MPTCP_CF_PUSH BIT(1) +#define MPTCP_CF_FASTCLOSE BIT(2) + /* subflow sockets can be either outgoing (connect) or incoming * (accept). * @@ -2262,22 +2266,37 @@ bool __mptcp_retransmit_pending_data(struct sock *s= k) * parent socket. */ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk, - struct mptcp_subflow_context *subflow) + struct mptcp_subflow_context *subflow, + unsigned int flags) { struct mptcp_sock *msk =3D mptcp_sk(sk); - bool need_push; + bool need_push, dispose_it; =20 - list_del(&subflow->node); + dispose_it =3D !msk->subflow || ssk !=3D msk->subflow->sk; + if (dispose_it) + list_del(&subflow->node); =20 lock_sock_nested(ssk, SINGLE_DEPTH_NESTING); =20 + if (flags & MPTCP_CF_FASTCLOSE) + subflow->send_fastclose =3D 1; + + need_push =3D (flags & MPTCP_CF_PUSH) && __mptcp_retransmit_pending_data(= sk); + if (!dispose_it) { + tcp_disconnect(ssk, 0); + msk->subflow->state =3D SS_UNCONNECTED; + mptcp_subflow_ctx_reset(subflow); + release_sock(ssk); + + goto out; + } + /* if we are invoked by the msk cleanup code, the subflow is * already orphaned */ if (ssk->sk_socket) sock_orphan(ssk); =20 - need_push =3D __mptcp_retransmit_pending_data(sk); subflow->disposable =3D 1; =20 /* if ssk hit tcp_done(), tcp_cleanup_ulp() cleared the related ops @@ -2297,14 +2316,12 @@ static void __mptcp_close_ssk(struct sock *sk, stru= ct sock *ssk, =20 sock_put(ssk); =20 - if (ssk =3D=3D msk->last_snd) - msk->last_snd =3D NULL; - if (ssk =3D=3D msk->first) msk->first =3D NULL; =20 - if (msk->subflow && ssk =3D=3D msk->subflow->sk) - mptcp_dispose_initial_subflow(msk); +out: + if (ssk =3D=3D msk->last_snd) + msk->last_snd =3D NULL; =20 if (need_push) __mptcp_push_pending(sk, 0); @@ -2315,7 +2332,7 @@ void mptcp_close_ssk(struct sock *sk, struct sock *ss= k, { if (sk->sk_state =3D=3D TCP_ESTABLISHED) mptcp_event(MPTCP_EVENT_SUB_CLOSED, mptcp_sk(sk), ssk, GFP_KERNEL); - __mptcp_close_ssk(sk, ssk, subflow); + __mptcp_close_ssk(sk, ssk, subflow, MPTCP_CF_PUSH); } =20 static unsigned int mptcp_sync_mss(struct sock *sk, u32 pmtu) @@ -2533,9 +2550,20 @@ static int __mptcp_init_sock(struct sock *sk) return 0; } =20 -static int mptcp_init_sock(struct sock *sk) +static void mptcp_ca_reset(struct sock *sk) { struct inet_connection_sock *icsk =3D inet_csk(sk); + + tcp_assign_congestion_control(sk); + strcpy(mptcp_sk(sk)->ca_name, icsk->icsk_ca_ops->name); + + /* no need to keep a reference to the ops, the name will suffice */ + tcp_cleanup_congestion_control(sk); + icsk->icsk_ca_ops =3D NULL; +} + +static int mptcp_init_sock(struct sock *sk) +{ struct net *net =3D sock_net(sk); int ret; =20 @@ -2556,12 +2584,7 @@ static int mptcp_init_sock(struct sock *sk) /* fetch the ca name; do it outside __mptcp_init_sock(), so that clone wi= ll * propagate the correct value */ - tcp_assign_congestion_control(sk); - strcpy(mptcp_sk(sk)->ca_name, icsk->icsk_ca_ops->name); - - /* no need to keep a reference to the ops, the name will suffice */ - tcp_cleanup_congestion_control(sk); - icsk->icsk_ca_ops =3D NULL; + mptcp_ca_reset(sk); =20 sk_sockets_allocated_inc(sk); sk->sk_rcvbuf =3D sock_net(sk)->ipv4.sysctl_tcp_rmem[1]; @@ -2720,9 +2743,13 @@ static void __mptcp_destroy_sock(struct sock *sk) sk_stop_timer(sk, &sk->sk_timer); msk->pm.status =3D 0; =20 + /* clears msk->subflow, allowing the following loop to close + * even the initial subflow + */ + mptcp_dispose_initial_subflow(msk); list_for_each_entry_safe(subflow, tmp, &conn_list, node) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); - __mptcp_close_ssk(sk, ssk, subflow); + __mptcp_close_ssk(sk, ssk, subflow, 0); } =20 sk->sk_prot->destroy(sk); @@ -2733,7 +2760,6 @@ static void __mptcp_destroy_sock(struct sock *sk) xfrm_sk_free_policy(sk); =20 sk_refcnt_debug_release(sk); - mptcp_dispose_initial_subflow(msk); sock_put(sk); } =20 @@ -2769,6 +2795,9 @@ static void mptcp_close(struct sock *sk, long timeout) =20 sock_hold(sk); pr_debug("msk=3D%p state=3D%d", sk, sk->sk_state); + if (mptcp_sk(sk)->token) + mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); + if (sk->sk_state =3D=3D TCP_CLOSE) { __mptcp_destroy_sock(sk); do_cancel_work =3D true; @@ -2779,9 +2808,6 @@ static void mptcp_close(struct sock *sk, long timeout) if (do_cancel_work) mptcp_cancel_work(sk); =20 - if (mptcp_sk(sk)->token) - mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); - sock_put(sk); } =20 @@ -2815,13 +2841,36 @@ static int mptcp_disconnect(struct sock *sk, int fl= ags) =20 mptcp_do_flush_join_list(msk); =20 + inet_sk_state_store(sk, TCP_CLOSE); + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 - lock_sock(ssk); - tcp_disconnect(ssk, flags); - release_sock(ssk); + __mptcp_close_ssk(sk, ssk, subflow, MPTCP_CF_FASTCLOSE); } + + sk_stop_timer(sk, &msk->sk.icsk_retransmit_timer); + sk_stop_timer(sk, &sk->sk_timer); + + if (mptcp_sk(sk)->token) + mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); + + mptcp_destroy_common(msk); + msk->last_snd =3D NULL; + msk->flags =3D 0; + msk->recovery =3D false; + msk->can_ack =3D false; + msk->fully_established =3D false; + msk->rcv_data_fin =3D false; + msk->snd_data_fin_enable =3D false; + msk->rcv_fastclose =3D false; + msk->use_64bit_ack =3D false; + WRITE_ONCE(msk->csum_enabled, mptcp_is_checksum_enabled(sock_net(sk))); + mptcp_pm_data_reset(msk); + mptcp_ca_reset(sk); + + sk->sk_shutdown =3D 0; + sk_error_report(sk); return 0; } =20 @@ -2961,9 +3010,11 @@ void mptcp_destroy_common(struct mptcp_sock *msk) __mptcp_clear_xmit(sk); =20 /* move to sk_receive_queue, sk_stream_kill_queues will purge it */ + mptcp_data_lock(sk); skb_queue_splice_tail_init(&msk->receive_queue, &sk->sk_receive_queue); __skb_queue_purge(&sk->sk_receive_queue); skb_rbtree_purge(&msk->out_of_order_queue); + mptcp_data_unlock(sk); =20 /* move all the rx fwd alloc into the sk_mem_reclaim_final in * inet_sock_destruct() will dispose it diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index f177936ff67d..1a4ca5a202c8 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -395,6 +395,9 @@ DECLARE_PER_CPU(struct mptcp_delegated_action, mptcp_de= legated_actions); /* MPTCP subflow context */ struct mptcp_subflow_context { struct list_head node;/* conn_list of subflows */ + + char reset_start[0]; + unsigned long avg_pacing_rate; /* protected by msk socket lock */ u64 local_key; u64 remote_key; @@ -442,6 +445,9 @@ struct mptcp_subflow_context { u8 stale_count; =20 long delegated_status; + + char reset_end[0]; + struct list_head delegated_node; /* link into delegated_action, protect= ed by local BH */ =20 u32 setsockopt_seq; @@ -473,6 +479,13 @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_cont= ext *subflow) return subflow->tcp_sock; } =20 +static inline void +mptcp_subflow_ctx_reset(struct mptcp_subflow_context *subflow) +{ + memset(subflow->reset_start, 0, subflow->reset_end - subflow->reset_start= ); + subflow->request_mptcp =3D 1; +} + static inline u64 mptcp_subflow_get_map_offset(const struct mptcp_subflow_context *subflow) { @@ -713,6 +726,7 @@ void mptcp_crypto_hmac_sha(u64 key1, u64 key2, u8 *msg,= int len, void *hmac); =20 void __init mptcp_pm_init(void); void mptcp_pm_data_init(struct mptcp_sock *msk); +void mptcp_pm_data_reset(struct mptcp_sock *msk); void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock = *ssk); void mptcp_pm_nl_subflow_chk_stale(const struct mptcp_sock *msk, struct so= ck *ssk); void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ss= k, int server_side); diff --git a/net/mptcp/token.c b/net/mptcp/token.c index e581b341c5be..f52ee7b26aed 100644 --- a/net/mptcp/token.c +++ b/net/mptcp/token.c @@ -384,6 +384,7 @@ void mptcp_token_destroy(struct mptcp_sock *msk) bucket->chain_len--; } spin_unlock_bh(&bucket->lock); + WRITE_ONCE(msk->token, 0); } =20 void __init mptcp_token_init(void) --=20 2.34.1 From nobody Sat Apr 20 11:15:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899658jap; Thu, 6 Jan 2022 16:20:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJyv2w4sg5QIr6cd5obCDlK7Qnk1HRDmHrFlraaVVgLp1DArTZehAmGmfJWTiN22cV5mVav4 X-Received: by 2002:a25:a463:: with SMTP id f90mr83721770ybi.52.1641514858934; Thu, 06 Jan 2022 16:20:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514858; cv=none; d=google.com; s=arc-20160816; b=u5J4Y00jNx/9Pw5gbU9OtPovHO/gnQ1GGuKWfkgksxFY/LHBPobNvDOt7X5MeZlC/I 9He5uIFaZ5JYTJqjSipi3bEydLDjaAcs3QYPyQ+WHuptGd36mg7Bax1cJKe0QjlOoCNV b5PqKJWgQi6DAZ/gnfZxfoym63DrLHpcs8HdUfsV11GRka1jx338ZNbyOuaHFtlz40eS NnzECp2j8d3y35L0LhHUWc8iLj92tzNwOd108seqvbg3h54A9h1tUn9mW4wk5BGaFsYy q3ZSAvK5uXu3vKHA82Ec6MXJxOUUw9Yyko9j4bHTM1Ht9KlrfsdxJB0XqSRC+XFunQw1 +32Q== 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:cc:to:from:dkim-signature; bh=c1gi0LQ9T9d3tXG4uegxwJ0rMhUhM76a9oj0nYTlgQg=; b=Vb8+jXkKfkH487jAKH3eKVC10zuT3JVD8UbKOj6Cq7iEWco5bENnQ1v3NcBhIdAOpj RpQMahlkqwLfnPMkyD1dmIAuuIkzeJPOz2Flc/ec+ez8eFvcXuY06gtTcDGsigx2Kzhz y36JoG8Ue7F82XzchpibRLh8gd6dlVHowS41P0Gm3M83Tyaa1ZKSUP0VttF7EU3Ts3I1 7BP43ifT0hn6dIF3BiSH5viX1LnYGedyWGzcV8aieU6k6s1qwp3Yt1mUeSuUY37hUwsu 7fnnvFZJego/xm1KF3E2pD4npOWFtIUtDRGjjgm8pMtaswzkrK9bV34ZeEwk0AveVN6+ Gm6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bF3RcCjO; spf=pass (google.com: domain of mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2951-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 t9si4099800ybu.97.2022.01.06.16.20.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:20:58 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2951-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=bF3RcCjO; spf=pass (google.com: domain of mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2951-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 731501C0F21 for ; Fri, 7 Jan 2022 00:20:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5DE572CB0; Fri, 7 Jan 2022 00:20:52 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4632D2CAA for ; Fri, 7 Jan 2022 00:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514851; x=1673050851; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nEUaOYMjQqfID6wwgBBxgtsFSt7zKq2ozbBAjHuOQhk=; b=bF3RcCjOu5jQO21btATmGbLANLF8seBdUPPpzf/2mTphcqJeAdXiNimu LVzHs4Owohic9qptyt3itdpdTJSr1xXo9KIPBTZnA0EFoQeo07u63V4L/ xctXkuEz5q5+9EWE8keQoSIzKIxBSc9A1P8hBnbppQqx/G/xEcPW+rNW7 53NPp90SPuCeU8qhxtdIBXDPJuTxuHJdE6mhJckxdutmRs7NJMZz3zLKg NF+9jqlHrC4g4/9elhke+wfz7KVZ4+1pT0TcmCDKV9xNv+p60aAcd803M EwVJ4tqfCp3z682W++UTG+QL21O9Dxp/RtnyJvjcg4OpD+O4yrTEGDvHQ g==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111028" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111028" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:35 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508498" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 04/13] mptcp: cleanup accept and poll Date: Thu, 6 Jan 2022 16:20:17 -0800 Message-Id: <20220107002026.375427-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.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" From: Paolo Abeni After the previous patch, msk->subflow will never be deleted during the whole msk lifetime. We don't need anymore to acquire references to it in mptcp_stream_accept() and we can use the listener subflow accept queue to simplify mptcp_poll() for listener socket. Overall this removes a lock pair and 4 more atomic operations per accept(). Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 25 +++++++------------------ net/mptcp/protocol.h | 1 - net/mptcp/subflow.c | 1 - 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 83f6d6c3e3eb..628cd60c9d0f 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3493,17 +3493,9 @@ static int mptcp_stream_accept(struct socket *sock, = struct socket *newsock, =20 pr_debug("msk=3D%p", msk); =20 - lock_sock(sock->sk); - if (sock->sk->sk_state !=3D TCP_LISTEN) - goto unlock_fail; - ssock =3D __mptcp_nmpc_socket(msk); if (!ssock) - goto unlock_fail; - - clear_bit(MPTCP_DATA_READY, &msk->flags); - sock_hold(ssock->sk); - release_sock(sock->sk); + return -EINVAL; =20 err =3D ssock->ops->accept(sock, newsock, flags, kern); if (err =3D=3D 0 && !mptcp_is_tcpsk(newsock->sk)) { @@ -3543,14 +3535,7 @@ static int mptcp_stream_accept(struct socket *sock, = struct socket *newsock, release_sock(newsk); } =20 - if (inet_csk_listen_poll(ssock->sk)) - set_bit(MPTCP_DATA_READY, &msk->flags); - sock_put(ssock->sk); return err; - -unlock_fail: - release_sock(sock->sk); - return -EINVAL; } =20 static __poll_t mptcp_check_readable(struct mptcp_sock *msk) @@ -3596,8 +3581,12 @@ static __poll_t mptcp_poll(struct file *file, struct= socket *sock, =20 state =3D inet_sk_state_load(sk); pr_debug("msk=3D%p state=3D%d flags=3D%lx", msk, state, msk->flags); - if (state =3D=3D TCP_LISTEN) - return test_bit(MPTCP_DATA_READY, &msk->flags) ? EPOLLIN | EPOLLRDNORM := 0; + if (state =3D=3D TCP_LISTEN) { + if (WARN_ON_ONCE(!msk->subflow || !msk->subflow->sk)) + return 0; + + return inet_csk_listen_poll(msk->subflow->sk); + } =20 if (state !=3D TCP_SYN_SENT && state !=3D TCP_SYN_RECV) { mask |=3D mptcp_check_readable(msk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 1a4ca5a202c8..386d1a98ff1d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -111,7 +111,6 @@ #define MPTCP_RST_TRANSIENT BIT(0) =20 /* MPTCP socket flags */ -#define MPTCP_DATA_READY 0 #define MPTCP_NOSPACE 1 #define MPTCP_WORK_RTX 2 #define MPTCP_WORK_EOF 3 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 24bc9d5e87be..d861307f7efe 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1293,7 +1293,6 @@ static void subflow_data_ready(struct sock *sk) if (reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue)) return; =20 - set_bit(MPTCP_DATA_READY, &msk->flags); parent->sk_data_ready(parent); return; } --=20 2.34.1 From nobody Sat Apr 20 11:15:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899708jap; Thu, 6 Jan 2022 16:21:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJzp+ptECpNwAK50qLd9lgndYqQ1Q+pZ+RbIBPu+4JABDDDw79H8yxutMHL7qNoD3V3GGlKR X-Received: by 2002:a17:902:c40f:b0:148:f2e0:3f6e with SMTP id k15-20020a170902c40f00b00148f2e03f6emr60101775plk.65.1641514861309; Thu, 06 Jan 2022 16:21:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514861; cv=none; d=google.com; s=arc-20160816; b=v/2SDQHnEfq+2eLeU+GKMM2H3eiy/chdaf4zIreQOMLLDEiL598/OjRTp4uUPjVkSi /BFXdac+Vg24+lavYr9/lfNkWPsEP6WK38KHr0ANE/KBFkaC87srG11v9cUjpJ0yFlcS y/JcZdTZtrTPavTBMzWJYEJeCLnoEa9fiNzBQKR7EzYDE2HJcy0SQOMcAGwtnxMoFU0o eEogummYFRsEmXJA/cMvgLPKAUyu3GB+Jrlj0zMa4JHfBpuSeNF2xro25zLPZ7tuuvxn NN/quzSKyGFvuEL3j9iVEDtbB14RrDlZlwTFWDZi9k8sbUXr7U5aBS1MWlYbFnGE0H/d RnWQ== 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:cc:to:from:dkim-signature; bh=evmOYvSc2O9/rpc2Mq4eUldmi3V/wl0FSUDZeZ432vc=; b=a4yo/rq4oTmxxMVCSFapB7nLHWNu5bYIi8h+/bri9ChiPinOW3dezqRZH75PhbzPjK ZA0QBBCOEoZNuAjmx5oY706HNKpeOIYtjoSKA3byTcIY+6MQFdpuKHfUtnMxn0Tbo4wM V/Ub9BKKCRfsXiu2hNZemHjMGJmTJjQadT5tKBhuHAgvKw33x0+bBzp9otFuj54qL1Xy rLetxMXu/55P77hzd3PDvT5CUKfTACmVWyIDLjudzWWWFLBReDj77+AIeD5KnBu4Nnx3 QIxAO+QoLFgg49XeZL74fy75wEZSf9hXL8JaiEXBDJjzAMbNPTdZdtWqJqmeDPz44Qpz ZW5g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=JAwRomtz; spf=pass (google.com: domain of mptcp+bounces-2953-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2953-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 my14si3829864pjb.2.2022.01.06.16.21.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:21:01 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2953-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=JAwRomtz; spf=pass (google.com: domain of mptcp+bounces-2953-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2953-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 654353E0FE8 for ; Fri, 7 Jan 2022 00:21:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6EDF12CAF; Fri, 7 Jan 2022 00:20:53 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D9DB2C9D for ; Fri, 7 Jan 2022 00:20:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514852; x=1673050852; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=oCyq5RZUHo1umQP1x3X959pDNQKh7V3k2L2OZJIpa1w=; b=JAwRomtzhGt2es+0IA4h2NZ5QOc6dInRoEsoTNxUeeNLeUa7tou2MpVj hcXa3wz8552olofdR/XgScC9AsRMcIXRfTwDtOL/3q6JRE86KWbRPglM/ Tzfp+dag7f4Py412+Q0o0wx55SHvfIAIKTznopGdh1w1bD8Uq70L6U3XI qoKimKfD1+vdtZYQEYtk6CBkUanbC2WlnVaw11ytCI326WgvGzW+zFlG9 oDITarhmWcNzo/zSJ9Oi6tMHLnmCFe3O95/TqSodALSp3ekvL9GAF/jWG 5+bHUTTqXQJP9as3CK0dChp6aMGlw4XkU/pGQSU6sG0QsgInNnry5Q/87 A==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111031" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111031" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:35 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508504" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:35 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 05/13] mptcp: implement support for user-space disconnect Date: Thu, 6 Jan 2022 16:20:18 -0800 Message-Id: <20220107002026.375427-6-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.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" From: Paolo Abeni Handle explicitly AF_UNSPEC in mptcp_stream_connnect() to allow user-space to disconnect established MPTCP connections Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 628cd60c9d0f..667e153e6e24 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3404,9 +3404,20 @@ static int mptcp_stream_connect(struct socket *sock,= struct sockaddr *uaddr, struct mptcp_sock *msk =3D mptcp_sk(sock->sk); struct mptcp_subflow_context *subflow; struct socket *ssock; - int err; + int err =3D -EINVAL; =20 lock_sock(sock->sk); + if (uaddr) { + if (addr_len < sizeof(uaddr->sa_family)) + goto unlock; + + if (uaddr->sa_family =3D=3D AF_UNSPEC) { + err =3D mptcp_disconnect(sock->sk, flags); + sock->state =3D err ? SS_DISCONNECTING : SS_UNCONNECTED; + goto unlock; + } + } + if (sock->state !=3D SS_UNCONNECTED && msk->subflow) { /* pending connection or invalid state, let existing subflow * cope with that @@ -3416,10 +3427,8 @@ static int mptcp_stream_connect(struct socket *sock,= struct sockaddr *uaddr, } =20 ssock =3D __mptcp_nmpc_socket(msk); - if (!ssock) { - err =3D -EINVAL; + if (!ssock) goto unlock; - } =20 mptcp_token_destroy(msk); inet_sk_state_store(sock->sk, TCP_SYN_SENT); --=20 2.34.1 From nobody Sat Apr 20 11:15:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899614jap; Thu, 6 Jan 2022 16:20:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJyzyY8c2wpgRBJMR9KSDm2tItWVmSVW1Pq4pbwjYp3zOCBhc1be2KxC5vcnxYtrTO8L4Zbx X-Received: by 2002:a17:902:e881:b0:149:1fa9:a178 with SMTP id w1-20020a170902e88100b001491fa9a178mr59952502plg.160.1641514856290; Thu, 06 Jan 2022 16:20:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514856; cv=none; d=google.com; s=arc-20160816; b=AtGQhsibj29WVzqtyh01YGxGtnb9MAFsr/zKCJh7ROoKOPSi5P8bHdpeX7E0b6KkCA GIPPa4kC6xJ1TkD7hVWKi5aZID7s7dq9mdeDtnwU2BM051cP7bfRBZKGt2IOWMWXNrEf zpCtHUPnbqZx6BvilNOwI3RTExMw+HgvGdNPL8/R9DAK/cHWB7qXhvZLr1e+Xvr7ky1A tsAIuv4XqVN+3Wc7Npno0mbF0Gjky7x/5wIbcBucLFB/KikDEbN7NiLYaTuvMzE1B3Zs 0EQH5CUjswVl7ijT8hfYWIBwzWlCGK7OPaA5LXfoyMlQXkDq4+1IoE1UVDU8I/frTa+F 3Hlg== 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:cc:to:from:dkim-signature; bh=0ccMMBFV7Fw4g74Zy878kdjLwnLxGNj5TKl+KSpYsY4=; b=EGgLr/i26Y47SY9ECHGJwET6EeKobX4/E3TUsRNWexV8ltRp9rfk3dz3gi6ydni4b1 Yw+19gPQfs2lR9OLukdOTd+3yw4iL8Pyyvl7PgEpIq7OB3sCihHT42pwNmg+mMFsRddO zuQB9MwfY/TSYS1iU6ntcb6rzYaT2DP7pf0qRlzzjltsCSWaMXTvhu/kHJJQNUdM4h2q kCUpcCdPVLiJDiFrcKVuOKDEHmXBk1Ip9QoZZg+ORozL65nhQRElJzvVumNIzyk3266F oUBcFBW1R4z7o0pD5XfkqgkN8iIqYR8B2FFxJ6V9vRg8ocjDlt5k/SWGX9aA/OGEBOi1 nePQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=TIPe2TD4; spf=pass (google.com: domain of mptcp+bounces-2949-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2949-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 d11si3784517pfv.21.2022.01.06.16.20.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:20:56 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2949-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=TIPe2TD4; spf=pass (google.com: domain of mptcp+bounces-2949-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2949-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 932083E0F4C for ; Fri, 7 Jan 2022 00:20:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 11F042CA8; Fri, 7 Jan 2022 00:20:52 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D7172C9C for ; Fri, 7 Jan 2022 00:20:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514850; x=1673050850; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GEiziFj9hLtn+hCNdBI0ex/Bw2NH7MM12Q0R7f04+7w=; b=TIPe2TD4vSYWuJnXuICll5eqUlrzYQrSnDXfis+OYZijFcLx/59veBqh YIP+9iM1pStNvgdjkE+mGFTWgwuHJQsi9F0ON6sBaOBBcUNlS5WMFxdBv wu3IMD1wabXNFLW12CuedBKev6bU5BYGdTcA7RoWZzxtPtMGSdBGDLe+M yiid7fVbyWS18AQkmXUX1TCZeNSR2ytnmWcFxlvUghl+qkPMf+WzpdHNQ zKRWR/46wCQ5Z9GH5RUk8wgThbs4WqScWvWB4ikX7X3lSFTZOp+fXrxku 5xtHIZPrkEbNSGj/S6TFlqpSifC/45kk7nE2reCz0BrFbAI8Yoyupc9V7 Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111035" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111035" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:35 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508505" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:35 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 06/13] selftests: mptcp: add disconnect tests Date: Thu, 6 Jan 2022 16:20:19 -0800 Message-Id: <20220107002026.375427-7-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.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" From: Paolo Abeni Performs several disconnect/reconnect on the same socket, ensuring the overall transfer is succesful. The new test leverages ioctl(SIOCOUTQ) to ensure all the pending data is acked before disconnecting. Additionally order alphabetically the test program arguments list for better maintainability. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- .../selftests/net/mptcp/mptcp_connect.c | 148 +++++++++++++++--- .../selftests/net/mptcp/mptcp_connect.sh | 39 ++++- 2 files changed, 160 insertions(+), 27 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/test= ing/selftests/net/mptcp/mptcp_connect.c index a30e93c5c549..8628aa61b763 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c @@ -16,6 +16,7 @@ #include #include =20 +#include #include #include #include @@ -28,6 +29,7 @@ =20 #include #include +#include =20 extern int optind; =20 @@ -68,6 +70,8 @@ static unsigned int cfg_time; static unsigned int cfg_do_w; static int cfg_wait; static uint32_t cfg_mark; +static char *cfg_input; +static int cfg_repeat =3D 1; =20 struct cfg_cmsg_types { unsigned int cmsg_enabled:1; @@ -91,22 +95,31 @@ static struct cfg_sockopt_types cfg_sockopt_types; =20 static void die_usage(void) { - fprintf(stderr, "Usage: mptcp_connect [-6] [-u] [-s MPTCP|TCP] [-p port] = [-m mode]" - "[-l] [-w sec] [-t num] [-T num] connect_address\n"); + fprintf(stderr, "Usage: mptcp_connect [-6] [-c cmsg] [-i file] [-I num] [= -j] [-l] " + "[-m mode] [-M mark] [-o option] [-p port] [-P mode] [-j] [-l] [-r num] " + "[-s MPTCP|TCP] [-S num] [-r num] [-t num] [-T num] [-u] [-w sec] connec= t_address\n"); fprintf(stderr, "\t-6 use ipv6\n"); - fprintf(stderr, "\t-t num -- set poll timeout to num\n"); - fprintf(stderr, "\t-T num -- set expected runtime to num ms\n"); - fprintf(stderr, "\t-S num -- set SO_SNDBUF to num\n"); - fprintf(stderr, "\t-R num -- set SO_RCVBUF to num\n"); - fprintf(stderr, "\t-p num -- use port num\n"); - fprintf(stderr, "\t-s [MPTCP|TCP] -- use mptcp(default) or tcp sockets\n"= ); + fprintf(stderr, "\t-c cmsg -- test cmsg type \n"); + fprintf(stderr, "\t-i file -- read the data to send from the given file i= nstead of stdin"); + fprintf(stderr, "\t-I num -- repeat the transfer 'num' times. In listen m= ode accepts num " + "incoming connections, in client mode, disconnect and reconnect to the s= erver\n"); + fprintf(stderr, "\t-j -- add additional sleep at connection start and= tear down " + "-- for MPJ tests\n"); + fprintf(stderr, "\t-l -- listens mode, accepts incoming connection\n"= ); fprintf(stderr, "\t-m [poll|mmap|sendfile] -- use poll(default)/mmap+writ= e/sendfile\n"); fprintf(stderr, "\t-M mark -- set socket packet mark\n"); - fprintf(stderr, "\t-w num -- wait num sec before closing the socket\n"); - fprintf(stderr, "\t-c cmsg -- test cmsg type \n"); fprintf(stderr, "\t-o option -- test sockopt