From nobody Wed Apr 24 20:53:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp10559794jap; Wed, 24 Nov 2021 08:22:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJyO3+F2t0L1B2TReOmRDhBfs46vWqmisOyg6XQgKaqv0poNGxuZ1AKrSNnJZxP4d5Dy4nJv X-Received: by 2002:a05:6638:339b:: with SMTP id h27mr17388548jav.4.1637770958244; Wed, 24 Nov 2021 08:22:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637770958; cv=none; d=google.com; s=arc-20160816; b=oJ2+i0qejBzw90isv0vsHoFv0hbBDMlHYBq5N/OR9HReBhzinsdSOAbhiMQSpM5dXi WleMCemI7x3fWqZtiAVc919uUHISR1RbY79JtsTSbGctBAHJ42k5mwPDcqjAtkJ0agZh gVgxBY92/m6EBPWstXlCm+K1eVJzIig06uNs4c1GZO0gfd+QXKV0AfTsQYEPhL7vnqzd TWJW1V+pElWEYxQ6nc1uAeW+ne2vUscQAnnPa7Exxn7lQxXohQwVFd4g/65fp6N35j51 B2SMkIJCJXIMuDvL9PgH/WzDyllnUA44x7kfmDS/8UVwqEQlrXgI2SnL1TbVNF8wguGx Etxw== 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=R1mY7UFdQVRSDeafvZWZ10zEPnX1i9Jjr2qNMeJH7g8=; b=px2iLWYAFvjE4jMB6NaNIDjYbL3zsfp76mXPvTRQU/GNWvlYT+8RKJdMnvNmC6bk0c 8NQPlsyZAhiE3NSzrTGgtiLfSUSdx+hYBsN8lx6llsn/9Sh0zvKxcJ5NoY9seE3WIqC4 eggsJA6q4zGoUh1uYvkRO9YmefRXZ9qz9luSRH4qkeg24JoBYjMfIC+AxwDECQdseHyG NR6T7xFkpXVFYhY/0WrBfkHQ0dwDkiPPv62rtZduiBCFvekQg1ZNv7pK2ayJ/kdcXg1a ry5cyrcCjanJKKTwyy1Gb9uFhQRLu15zMrJownGl/VyxzBdzuUCGsp180ksaXZiIYl+G KAxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=dlktGQVP; spf=pass (google.com: domain of mptcp+bounces-2532-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2532-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 201si408308pgb.382.2021.11.24.08.22.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Nov 2021 08:22:38 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2532-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=@redhat.com header.s=mimecast20190719 header.b=dlktGQVP; spf=pass (google.com: domain of mptcp+bounces-2532-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2532-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 sjc.edge.kernel.org (Postfix) with ESMTPS id 6DD9E3E1092 for ; Wed, 24 Nov 2021 16:22:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 503EB2C86; Wed, 24 Nov 2021 16:22:36 +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.133.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 1CBAC2C83 for ; Wed, 24 Nov 2021 16:22:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1637770954; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R1mY7UFdQVRSDeafvZWZ10zEPnX1i9Jjr2qNMeJH7g8=; b=dlktGQVPXDobL7HyuuCVsdBGyWqxlyGcxJVpnx9/mvuHhbdc3/ZdneUqaobyasQIVS9+Fl NTV8191GxZyAszdD02vnLLwqbybObo+CwGa++tobJwK4n/qVKgzKcu94stweNXlJjrNxQJ 9sjPIgSZLvgRbkiJ+b1uhadTYuN9G4I= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-494-PstaAEmtO26XtNzBU0PO_Q-1; Wed, 24 Nov 2021 11:22:31 -0500 X-MC-Unique: PstaAEmtO26XtNzBU0PO_Q-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2EEBA801B2A; Wed, 24 Nov 2021 16:22:30 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.194.176]) by smtp.corp.redhat.com (Postfix) with ESMTP id 548181002388; Wed, 24 Nov 2021 16:22:29 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Cc: Phil Greenland Subject: [PATCH mptcp-next v2 1/4] mptcp: clean-up MPJ option writing. Date: Wed, 24 Nov 2021 17:22:11 +0100 Message-Id: <5e98a57b75ff1d45305bc5b6ba7fcbd24d355b65.1637770883.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.84 on 10.5.11.22 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" Check for all MPJ variant at once, this reduces the number of conditionals traversed on average and will simplify the next patch. No functional change intended. Signed-off-by: Paolo Abeni --- net/mptcp/options.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 8a1020e4285c..7a6a39b71633 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1381,27 +1381,29 @@ void mptcp_write_options(__be32 *ptr, const struct = tcp_sock *tp, =20 /* MPC is additionally mutually exclusive with MP_PRIO */ goto mp_capable_done; - } else if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { - *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, - TCPOLEN_MPTCP_MPJ_SYN, - opts->backup, opts->join_id); - put_unaligned_be32(opts->token, ptr); - ptr +=3D 1; - put_unaligned_be32(opts->nonce, ptr); - ptr +=3D 1; - } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { - *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, - TCPOLEN_MPTCP_MPJ_SYNACK, - opts->backup, opts->join_id); - put_unaligned_be64(opts->thmac, ptr); - ptr +=3D 2; - put_unaligned_be32(opts->nonce, ptr); - ptr +=3D 1; - } else if (OPTION_MPTCP_MPJ_ACK & opts->suboptions) { - *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, - TCPOLEN_MPTCP_MPJ_ACK, 0, 0); - memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); - ptr +=3D 5; + } else if (OPTIONS_MPTCP_MPJ & opts->suboptions) { + if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { + *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, + TCPOLEN_MPTCP_MPJ_SYN, + opts->backup, opts->join_id); + put_unaligned_be32(opts->token, ptr); + ptr +=3D 1; + put_unaligned_be32(opts->nonce, ptr); + ptr +=3D 1; + } else if (OPTION_MPTCP_MPJ_SYNACK & opts->suboptions) { + *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, + TCPOLEN_MPTCP_MPJ_SYNACK, + opts->backup, opts->join_id); + put_unaligned_be64(opts->thmac, ptr); + ptr +=3D 2; + put_unaligned_be32(opts->nonce, ptr); + ptr +=3D 1; + } else { + *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, + TCPOLEN_MPTCP_MPJ_ACK, 0, 0); + memcpy(ptr, opts->hmac, MPTCPOPT_HMAC_LEN); + ptr +=3D 5; + } } else if (OPTION_MPTCP_ADD_ADDR & opts->suboptions) { u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; u8 echo =3D MPTCP_ADDR_ECHO; --=20 2.33.1 From nobody Wed Apr 24 20:53:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp10559890jap; Wed, 24 Nov 2021 08:22:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJz3fiofM9AKcVfrK2zG5zVDIPmemzQKCGx1ap9DNtyZqgsDKHeFKK5OjKC5/2Aiw778f8wZ X-Received: by 2002:a05:6808:1686:: with SMTP id bb6mr7381025oib.40.1637770961782; Wed, 24 Nov 2021 08:22:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637770961; cv=none; d=google.com; s=arc-20160816; b=hWA+2YpT/5HrA193VwJtSOmcW/QYsxuJf3Uz8hLGngp7T39eUORIIb5T67aAwhXNyF blGJ/gYfp2ChlH2Ls/OFdMhurmA3/X9fUhZ4w7zd1yvUd8CYjsiagZ5DcXGwOikqGJIz IJw0FMMRiw3Yjk9CXLH75IROUnQdhRnAXg2jOqN1Ub5nZbBedOmcXvot8NL8FT9NQA5t gD0KOPQS8VBpy8vQamZZgBjqp2DuzX6pCJEUZTK+Nx/DJnn29kBSZ80U9qWt5Qi+eDSt KRyTTPv5bbVTkdO9Fol9kVA+Lo6meWQ2gICFDUWC3uyM+lzJYVAUdLNiflYuBaOJ3ht9 870A== 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=jD308C1QiczBhX/LAxWPZcxwrxlTOMg31rQYGjXNCDY=; b=oZm11XkLSiqwfpsEqPGzG58C9YitC2ql3RYH44GvJq/FjFACexnrMXuboaAtIaysRa q4Vq1tJ+Yd8zZYX9veRcCJC4jqynYbx9N6t+wiB3Z3ja3hBN43SNqida/x3Oa/XBixK6 IRKUyJMbzvqcP2+N1Zbpf/yLFyjPY1HWtLIdAXfw6f4RzTZF/o6SgUuCH2+B6XuDKZXo h5ZQD6P1RuZ1ET8WdLrMA+sxQUhw+oW2tS0RUecjWcrayC/s9MPYx79QGfPBFXp6wuFa WzlEzpfpoVKVI9+6l4qE3BrQE7gPSdQ8OUBs7WsX1HGF1ni27Z+3T47hbAfnpJX5X83S X5/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=M2d9YShN; spf=pass (google.com: domain of mptcp+bounces-2535-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2535-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id g13si799443uap.37.2021.11.24.08.22.41 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Nov 2021 08:22:41 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2535-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=@redhat.com header.s=mimecast20190719 header.b=M2d9YShN; spf=pass (google.com: domain of mptcp+bounces-2535-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2535-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 ewr.edge.kernel.org (Postfix) with ESMTPS id 84FA81C0F64 for ; Wed, 24 Nov 2021 16:22:41 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A0B992C86; Wed, 24 Nov 2021 16:22:38 +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 7D0912C83 for ; Wed, 24 Nov 2021 16:22:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1637770956; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jD308C1QiczBhX/LAxWPZcxwrxlTOMg31rQYGjXNCDY=; b=M2d9YShNrTnsfac/UGwSVn5FliXfaQP1eGdWti3yRi/1JhrubowA+xwyR5lo2/H8LJDpIg xndqE4jEokixekRQAbhdb5PIj6xrHgUulNYmehCpFXKqXXaJjwOo6Io1lRaV65H3Nu6i4m BByapRcR27ks/btyn4gU2lOYf9aaRYI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-71-heUqkpEuMZimMbPvFqdIWA-1; Wed, 24 Nov 2021 11:22:32 -0500 X-MC-Unique: heUqkpEuMZimMbPvFqdIWA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5A49D801B04; Wed, 24 Nov 2021 16:22:31 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.194.176]) by smtp.corp.redhat.com (Postfix) with ESMTP id 898361002388; Wed, 24 Nov 2021 16:22:30 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Cc: Phil Greenland Subject: [PATCH mptcp-next v2 2/4] mptcp: keep track of used local endpoint Date: Wed, 24 Nov 2021 17:22:12 +0100 Message-Id: <233bddeb188c32873a14a59e4d8ede1a7f3873f7.1637770883.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.84 on 10.5.11.22 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" So that we can skip already used endpoint at local address selection time. This allows for fair local endpoints usage in case of subflow failure. As a side effect, this patch also enforces that each endpoint is used at most once for each mptcp connection. Signed-off-by: Paolo Abeni --- net/mptcp/pm.c | 1 + net/mptcp/pm_netlink.c | 8 +++++++- net/mptcp/protocol.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 761995a34124..1ff856dd92c4 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -376,6 +376,7 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) WRITE_ONCE(msk->pm.accept_subflow, false); WRITE_ONCE(msk->pm.remote_deny_join_id0, false); msk->pm.status =3D 0; + bitmap_zero(msk->pm.endpoint_usage_mask, 256); =20 mptcp_pm_nl_data_init(msk); } diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 3186d33b5208..78b68a8216b6 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -173,6 +173,9 @@ select_local_address(const struct pm_nl_pernet *pernet, if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) continue; =20 + if (test_bit(entry->addr.id, msk->pm.endpoint_usage_mask)) + continue; + if (entry->addr.family !=3D sk->sk_family) { #if IS_ENABLED(CONFIG_MPTCP_IPV6) if ((entry->addr.family =3D=3D AF_INET && @@ -512,8 +515,10 @@ static void mptcp_pm_create_subflow_or_signal_addr(str= uct mptcp_sock *msk) check_work_pending(msk); nr =3D fill_remote_addresses_vec(msk, fullmesh, addrs); spin_unlock_bh(&msk->pm.lock); - for (i =3D 0; i < nr; i++) + for (i =3D 0; i < nr; i++) { + set_bit(local->addr.id, msk->pm.endpoint_usage_mask); __mptcp_subflow_connect(sk, &local->addr, &addrs[i]); + } spin_lock_bh(&msk->pm.lock); return; } @@ -1282,6 +1287,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, mptcp_pm_remove_anno_addr(msk, addr, remove_subflow); if (remove_subflow) mptcp_pm_remove_subflow(msk, &list); + clear_bit(addr->id, msk->pm.endpoint_usage_mask); release_sock(sk); =20 next: diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index a6a4bd7de5b4..d384f285b6c1 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -190,6 +190,7 @@ struct mptcp_pm_data { =20 spinlock_t lock; /*protects the whole PM data */ =20 + DECLARE_BITMAP(endpoint_usage_mask, 256); u8 addr_signal; bool server_side; bool work_pending; --=20 2.33.1 From nobody Wed Apr 24 20:53:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp10559834jap; Wed, 24 Nov 2021 08:22:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJza2FfT35lCWdQv2gKBMg0qIgHGxxmI581CEoofRgeAOnzZXMidnJMsIWvr9xnL+JWRqrLP X-Received: by 2002:a05:6830:1544:: with SMTP id l4mr14385524otp.309.1637770959538; Wed, 24 Nov 2021 08:22:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637770959; cv=none; d=google.com; s=arc-20160816; b=DNCNxOCVFcLKdxJb7qjhQ4okX/zRTu7mw+LH9E9p/YlLNsJgBUiLmNjqqb9tcdfJrO OybjHjp2hs+XPG6VwwnuvE2Ik3u828/+ulksM/KVj/4A8g1b+5DAK5byjlziQykrJj+r U8j/SP11nxklPYdwu7LjvWmvC6sQsdF9Emr9Mg5toeOx2mdan7H0V9r8jFlJpyrzzPoc FjGXUVzykdJeFLhLN9IX4nfuzgPljlAEN5hjQmin2rM4e3q18R8e2PYhK+rgpghQbQ1Y 2AaGTfEAuGE4JTyhC/1NvocjYqenm+m7QMwBtKQGEUval1Be8QMS6Oft+ExEjgOJWw2M yDng== 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=6k7mIRH7JiflBPGX8b2d8HtqybfHtt2VuTxyTXngCbM=; b=lCxqpVQpfwn025/jJ1m2s4hYXjuvk5D49mAugi9dxkCmmcN/Vdi4JdReLv1xKtPZEu fMjVE9ExBqNNb4gtTEeb3Kw8YyX3JqHTSaRWUfhB/NxwNPu7wzLfT/XFdw2qt79NoU99 Aevn2LkQmImR/Qhh2hbWqt+Qo69ihuOKZFa9r/0BX0AA2ApNDUISjpyWMoV5yWsMAnVM ZkCWEA0Z9puJrU3LzbM02jv3VI7yterLWxwzi82CpmoyyaQRRetay+QIKMMoxn2Db9iB /FBJBE0a1Hy8QIVoCNd0Lk3HfPnDfpNcSj13R2VwoOUtXN5O1DyzSxYB94zysYSFOby9 Pxyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ss9UKO8O; spf=pass (google.com: domain of mptcp+bounces-2533-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2533-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id a22si629116vsl.388.2021.11.24.08.22.39 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Nov 2021 08:22:39 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2533-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=@redhat.com header.s=mimecast20190719 header.b=Ss9UKO8O; spf=pass (google.com: domain of mptcp+bounces-2533-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2533-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 ewr.edge.kernel.org (Postfix) with ESMTPS id ECC241C0F7D for ; Wed, 24 Nov 2021 16:22:38 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9995F2C87; Wed, 24 Nov 2021 16:22:37 +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.133.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 A789F29CA for ; Wed, 24 Nov 2021 16:22:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1637770954; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6k7mIRH7JiflBPGX8b2d8HtqybfHtt2VuTxyTXngCbM=; b=Ss9UKO8ODHQy0ed76JJEzMW0yoDnZmeEQi75cIJQJ0NsbBaZ5oXpw8I2MKGG55ehUOYUI+ 56tUaEMt3AmCZXUCpXmQih1AMBuGSmjQdhtJx/AhHZCHDdQ99TFlJQ4gwjq2Z0wF9KfOiQ mMHrb0ZdiSwPM/4SoeCwZOdvakSmtP4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-534-gC1-0Gt5PH-dIUnJN8geJw-1; Wed, 24 Nov 2021 11:22:33 -0500 X-MC-Unique: gC1-0Gt5PH-dIUnJN8geJw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9E4DB1023F4D; Wed, 24 Nov 2021 16:22:32 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.194.176]) by smtp.corp.redhat.com (Postfix) with ESMTP id BD8DD1002388; Wed, 24 Nov 2021 16:22:31 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Cc: Phil Greenland Subject: [PATCH mptcp-next v2 3/4] mptcp: do not block subflows creation on errors Date: Wed, 24 Nov 2021 17:22:13 +0100 Message-Id: <574156bd514d855a159add3e1c54caa9b2c5f880.1637770883.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.84 on 10.5.11.22 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" If the MPTCP configuration allows for multiple subflows creation, and the first additional subflows never reach the fully established status - e.g. due to packets drop or reset - the in kernel path manager do not move to the next subflow. This patch introduces a new PM helper to cope with MPJ subflow creation failure and delay and hook it where appropriate. Such helper triggers additional subflow creation, as needed and updates the PM subflow counter, if the current one is closing. Note that we don't need an additional timer to catch timeout and/or long delay in connection completion: we just need to measure the time elapsed since the subflow creation every time we emit an MPJ sub-option. Signed-off-by: Paolo Abeni Reported-by: kernel test robot --- v1 -> v2: - explicitly hook on subflow close instead of error notification - fix checkpatch issue (Mat) - introduce and use a new pm helper to cope with subflow close - update pm subflow counters on close --- net/mptcp/options.c | 21 ++++++++++++++++++--- net/mptcp/pm.c | 28 ++++++++++++++++++++++++++++ net/mptcp/protocol.c | 6 ++++++ net/mptcp/protocol.h | 4 +++- net/mptcp/subflow.c | 5 ++++- 5 files changed, 59 insertions(+), 5 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 7a6a39b71633..00a8697addcd 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1257,10 +1257,10 @@ static u16 mptcp_make_csum(const struct mptcp_ext *= mpext) void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp, struct mptcp_out_options *opts) { - if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { - const struct sock *ssk =3D (const struct sock *)tp; - struct mptcp_subflow_context *subflow; + const struct sock *ssk =3D (const struct sock *)tp; + struct mptcp_subflow_context *subflow; =20 + if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) { subflow =3D mptcp_subflow_ctx(ssk); subflow->send_mp_fail =3D 0; =20 @@ -1382,6 +1382,21 @@ void mptcp_write_options(__be32 *ptr, const struct t= cp_sock *tp, /* MPC is additionally mutually exclusive with MP_PRIO */ goto mp_capable_done; } else if (OPTIONS_MPTCP_MPJ & opts->suboptions) { + if (ssk) { + /* we are still in the MPJ handshake and "a lot" of time passed + * e.g. due to syn retranmissions. We can attempt next + * subflow creation + */ + subflow =3D mptcp_subflow_ctx(ssk); + if (subflow->start_stamp && + unlikely(after(tcp_jiffies32, subflow->start_stamp + HZ / 10))) { + mptcp_pm_subflow_check_next(mptcp_sk(subflow->conn), ssk, subflow); + + /* avoid triggering the PM multiple times due to timeout */ + subflow->start_stamp =3D 0; + } + } + if (OPTION_MPTCP_MPJ_SYN & opts->suboptions) { *ptr++ =3D mptcp_option(MPTCPOPT_MP_JOIN, TCPOLEN_MPTCP_MPJ_SYN, diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1ff856dd92c4..8948e639d213 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -172,6 +172,34 @@ void mptcp_pm_subflow_established(struct mptcp_sock *m= sk) spin_unlock_bh(&pm->lock); } =20 +void mptcp_pm_subflow_check_next(struct mptcp_sock *msk, const struct sock= *ssk, + const struct mptcp_subflow_context *subflow) +{ + struct mptcp_pm_data *pm =3D &msk->pm; + bool closed; + + closed =3D ssk->sk_state =3D=3D TCP_CLOSE; + if (subflow->fully_established && !closed) + return; + + spin_lock_bh(&pm->lock); + if (closed) { + pm->local_addr_used--; + pm->subflows--; + /* do not enable the pm worker: we don't want to pick again + * the just closed subflow + */ + } + + /* Even if this subflow is not really established, tell the PM to try + * to pick the next one, if possible. + */ + if (pm->work_pending) + mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); + + spin_unlock_bh(&pm->lock); +} + void mptcp_pm_subflow_closed(struct mptcp_sock *msk, u8 id) { pr_debug("msk=3D%p", msk); diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index ef2125798e64..2ee2fe97c553 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2351,6 +2351,12 @@ void mptcp_close_ssk(struct sock *sk, struct sock *s= sk, { if (sk->sk_state =3D=3D TCP_ESTABLISHED) mptcp_event(MPTCP_EVENT_SUB_CLOSED, mptcp_sk(sk), ssk, GFP_KERNEL); + + /* subflow aborted before reaching the fully_established status + * attempt the creation of the next subflow + */ + mptcp_pm_subflow_check_next(mptcp_sk(sk), ssk, subflow); + __mptcp_close_ssk(sk, ssk, subflow, MPTCP_CF_PUSH); } =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d384f285b6c1..4da1ef964b88 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -433,6 +433,7 @@ struct mptcp_subflow_context { stale : 1; /* unable to snd/rcv data, do not use for xmit */ enum mptcp_data_avail data_avail; u32 remote_nonce; + u32 start_stamp; u64 thmac; u32 local_nonce; u32 remote_token; @@ -733,7 +734,8 @@ void mptcp_pm_fully_established(struct mptcp_sock *msk,= const struct sock *ssk, bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk); void mptcp_pm_connection_closed(struct mptcp_sock *msk); void mptcp_pm_subflow_established(struct mptcp_sock *msk); -void mptcp_pm_subflow_closed(struct mptcp_sock *msk, u8 id); +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); void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 0f90bd61de01..76556743e952 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1273,7 +1273,8 @@ void __mptcp_error_report(struct sock *sk) =20 static void subflow_error_report(struct sock *ssk) { - struct sock *sk =3D mptcp_subflow_ctx(ssk)->conn; + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk); + struct sock *sk =3D subflow->conn; =20 mptcp_data_lock(sk); if (!sock_owned_by_user(sk)) @@ -1444,6 +1445,7 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_addr_info *loc, subflow->remote_id =3D remote_id; subflow->request_join =3D 1; subflow->request_bkup =3D !!(flags & MPTCP_PM_ADDR_FLAG_BACKUP); + subflow->start_stamp =3D tcp_jiffies32; mptcp_info2sockaddr(remote, &addr, ssk->sk_family); =20 mptcp_add_pending_subflow(msk, subflow); @@ -1461,6 +1463,7 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_addr_info *loc, spin_lock_bh(&msk->join_list_lock); list_del(&subflow->node); spin_unlock_bh(&msk->join_list_lock); + mptcp_pm_subflow_check_next(msk, ssk, subflow); sock_put(mptcp_subflow_tcp_sock(subflow)); =20 failed: --=20 2.33.1 From nobody Wed Apr 24 20:53:04 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp10559912jap; Wed, 24 Nov 2021 08:22:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJy8Fr6dVCG76o0wanuG+8Y4bhbnbrE6KRuEDZNDQLKjO8cyDQhiPLU5x+atQu7o/AOIImKC X-Received: by 2002:a05:6102:11ed:: with SMTP id e13mr26054863vsg.57.1637770963186; Wed, 24 Nov 2021 08:22:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637770963; cv=none; d=google.com; s=arc-20160816; b=GQoArCYqtm7X37eEqCYbbMQaOzz3Q1KhOvUazkYl+4cPnzDUg/PlJAcSWSbitMVU4A sdFki/oPDMNOkEr/acw1l0Td2frlok6lfvo3g4Ugbnw5fTyzkA+gzajA/pcbiJaFB8n4 UhfB0VZeAPJNP1thOEqEBcl7nSE6u3N8pOO9iTDEOqey+QWoqaOVw24XhdYPrHG6l2wO AkV00HGfLVqUezKBgM4TwUpV8VhsDMTqzzz3u93h+LKDgD2wFQgOFv9qHyrx0MgwRrhJ 7nicDn0gf5cNAAKlwQBbRJaxuwu9sSUPnkTq6P2oZyzG7uhwa+XQJXl/oOVFn1/dWPzH zUSw== 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=h4z8wCUS89CcyUEM+0LmMvqsYXS2sjkIU3n6Pg//daQ=; b=yArmz6fkpPWV0aVLIIkCCGSYctw8Ic23N7LMaNeV5NWb5TJ3AD4+l8FVS99yn54wxJ Xll2pkJtiIUlGaF68zRRbpP9nNuDM8Vkhd4kXXF8DIDsdO4YOxftj2v2qiGaJc6gKbWZ 4pXFwM7cgSgleytjX6g8mj7mXBmBxhpTZKG0zz8rsljSusiLx2SenBDW1kF3nnelAXUb GKBjOUjaLJ34iXzdf5JdTzGnz2P5sf83gaVgQ4E85XjqvYaTSE0IrispmeR93JyBjdBx fSuKupFTjI+PsIi6FBe+4yGpu8KRedoWR31ikPqjQLJMUZfJgptaZv4shUx4DEFjxOAV UwMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=UP5P0pxV; spf=pass (google.com: domain of mptcp+bounces-2536-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2536-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id h22si899826vsu.416.2021.11.24.08.22.43 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Nov 2021 08:22:43 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2536-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=@redhat.com header.s=mimecast20190719 header.b=UP5P0pxV; spf=pass (google.com: domain of mptcp+bounces-2536-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2536-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 ewr.edge.kernel.org (Postfix) with ESMTPS id D25001C0F7F for ; Wed, 24 Nov 2021 16:22:42 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1B3032C83; Wed, 24 Nov 2021 16:22:39 +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 0FE1472 for ; Wed, 24 Nov 2021 16:22:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1637770957; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=h4z8wCUS89CcyUEM+0LmMvqsYXS2sjkIU3n6Pg//daQ=; b=UP5P0pxVpH3Hy5kmEOs1ELZaQPX2ycc8/hUfofueXrf/eXBgYWs/rxMSY3ZsQ++a1Sg5Ti PyWIwoRpYVwxSHrDVX5lZi3fv6vvcpSxFCrJU611bZ1iJQxmeaYShumdP/qC+3XWb0QFHr NSxlPklwd+Rqv28+rulplxSxB4+bU/M= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-499-CEKDtGh4PIuG9viWk7Vguw-1; Wed, 24 Nov 2021 11:22:34 -0500 X-MC-Unique: CEKDtGh4PIuG9viWk7Vguw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C8011193578B; Wed, 24 Nov 2021 16:22:33 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.194.176]) by smtp.corp.redhat.com (Postfix) with ESMTP id 05A1B100EBBF; Wed, 24 Nov 2021 16:22:32 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Cc: Phil Greenland Subject: [PATCH mptcp-next v2 4/4] selftests: mptcp: add tests for subflow creation failure Date: Wed, 24 Nov 2021 17:22:14 +0100 Message-Id: <44593f9acfe286b9d18973e13877c1e48a15706c.1637770883.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.84 on 10.5.11.22 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" Verify that, when multiple endpoints are available, subflows creation proceed even when the first additional subflow creation fails - due to packet drop on the relevant link Signed-off-by: Paolo Abeni --- v1 -> v2: - add missing NF kconfig - add more test-cases (drop, later subflow creation) --- tools/testing/selftests/net/mptcp/config | 1 + .../testing/selftests/net/mptcp/mptcp_join.sh | 65 ++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selft= ests/net/mptcp/config index 419e71560fd1..41e94e004bdc 100644 --- a/tools/testing/selftests/net/mptcp/config +++ b/tools/testing/selftests/net/mptcp/config @@ -18,4 +18,5 @@ CONFIG_NFT_TPROXY=3Dm CONFIG_NFT_SOCKET=3Dm CONFIG_IP_ADVANCED_ROUTER=3Dy CONFIG_IP_MULTIPLE_TABLES=3Dy +CONFIG_IP_NF_TARGET_REJECT=3Dm CONFIG_IPV6_MULTIPLE_TABLES=3Dy diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 2684ef9c0d42..6d342f9985b8 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -975,6 +975,22 @@ chk_link_usage() fi } =20 +wait_for_tw() +{ + local timeout_ms=3D$((timeout_poll * 1000)) + local time=3D0 + local ns=3D$1 + + while [ $time -lt $timeout_ms ]; do + local cnt=3D`ip netns exec $ns ss -t state time-wait |wc -l` + + [ "$cnt" =3D 1 ] && return 1 + time=3D$((time + 100)) + sleep 0.1 + done + return 1 +} + subflows_tests() { reset @@ -1032,6 +1048,48 @@ subflows_tests() chk_join_nr "single subflow, dev" 1 1 1 } =20 +subflows_error_tests() +{ + # multiple subflows, with subflow creation error + reset + ip netns exec $ns1 ./pm_nl_ctl limits 0 2 + ip netns exec $ns2 ./pm_nl_ctl limits 0 2 + ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow + ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow + ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j REJECT + run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow + chk_join_nr "multiple subflows, with failing subflow" 1 1 1 + + # multiple subflows, with subflow timeout on MPJ + reset + ip netns exec $ns1 ./pm_nl_ctl limits 0 2 + ip netns exec $ns2 ./pm_nl_ctl limits 0 2 + ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow + ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow + ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j DROP + run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow + chk_join_nr "multiple subflows, with subflow timeout" 1 1 1 + + # multiple subflows, check that the endpoint corresponding to + # closed subflow (due to reset) is not reused if additional + # subflows are added later + reset + ip netns exec $ns1 ./pm_nl_ctl limits 0 1 + ip netns exec $ns2 ./pm_nl_ctl limits 0 1 + ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow + ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j REJECT + run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow & + + # mpj subflow will be in TW after the reset + wait_for_tw $ns2 + ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow + wait + + # additional subflow could be created only if the PM select + # the later endpoint, skipping the already used one + chk_join_nr "multiple subflows, fair usage on close" 1 1 1 +} + signal_address_tests() { # add_address, unused @@ -1840,6 +1898,7 @@ fullmesh_tests() all_tests() { subflows_tests + subflows_error_tests signal_address_tests link_failure_tests add_addr_timeout_tests @@ -1859,6 +1918,7 @@ usage() { echo "mptcp_join usage:" echo " -f subflows_tests" + echo " -f subflows_error_tests" echo " -s signal_address_tests" echo " -l link_failure_tests" echo " -t add_addr_timeout_tests" @@ -1907,11 +1967,14 @@ if [ $do_all_tests -eq 1 ]; then exit $ret fi =20 -while getopts 'fsltra64bpkdmchCS' opt; do +while getopts 'fesltra64bpkdmchCS' opt; do case $opt in f) subflows_tests ;; + e) + subflows_error_tests + ;; s) signal_address_tests ;; --=20 2.33.1