From nobody Thu Sep 18 08:18:36 2025 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp2574855pis; Fri, 29 Apr 2022 15:02:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJytjEgrDKx+2ziKIdf3mNvFxO4I2pzS25Q16a5cZImjljnusyldIb3IeBtuqXvzWTtdJXTP X-Received: by 2002:a63:6ac6:0:b0:3c1:4744:1abf with SMTP id f189-20020a636ac6000000b003c147441abfmr1042211pgc.588.1651269749442; Fri, 29 Apr 2022 15:02:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651269749; cv=none; d=google.com; s=arc-20160816; b=tySIKgB5xmi+u3TjrZiil1a16A5jg079pfHAjGIfipbq1iymWHM3U1Km589YdGfQOT D3SvyL+zg+/Ojy6VA3T4tA+yojFh0afW802mY6E9qotzVSK2FUKXNZY92uNAWj6eBdv3 GWbeAXBiBOlLSlagNBWoavp4HrlYMUGS/Ko5QfHdytml1kdffuK/kLzxYgsyC+yc5b/E Lpkc31RZKSgxRg+NpXOkHbAYEUBAJIGAqcZz3tzEWv1rcwWPxtHy/IDsHPfp3UInyqn2 z+3ajjz24gdvx25rsHfJKgxjtz7TYQ/lCckCDQCYET8p10JyVu+CdmqKVMWVmQVrL0DX XTVg== 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=1kZ1EGRDpN6iEwOv3M0EoyEMjWmjpdbwOz1njgyKv68=; b=sJuAWHO42OrwJ5rEZaBOjB8Dg/ugLKVv5nu3aeAypxbwva6rYnNoJI9s77lIKH7jMD 9ZmJDqqDOMQdIZFAvPhdO/M7E2gLogfSHvaYM1b3OcUHtYaYunj4C07FnQq5hyq1NM/o aSqDOdefZ1fk9IEJJXBE1qBU4ZZJgG4qZKeIcLIwoYzsTONFlEXZSKS6H+gfLqjAn6b8 572JB9WbJBwmCIQ4l6qHeR6HEtoGCEgn3c0NjrplWKGQAnDqfXKSohOyytw82gtQNJiK gVOA8mIF2uxoaNTIhJNLcD/QRjI2o9YDlxDXVpAQMwMpRwnuK2nHs+0QejqMXHC5i81Z AQyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GpERyKhK; spf=pass (google.com: domain of mptcp+bounces-4982-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-4982-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id k129-20020a632487000000b0039e45222007si8531756pgk.227.2022.04.29.15.02.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Apr 2022 15:02:29 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-4982-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=@intel.com header.s=Intel header.b=GpERyKhK; spf=pass (google.com: domain of mptcp+bounces-4982-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-4982-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id E8F0F280C1F for ; Fri, 29 Apr 2022 22:02:28 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BE16C1FA8; Fri, 29 Apr 2022 22:02:26 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (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 762961FA7 for ; Fri, 29 Apr 2022 22:02:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651269745; x=1682805745; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kqffaK3daxbD22vmQV/99UWXGn1rJCRY5uMKADdtxY0=; b=GpERyKhK+jcGkYo66kqqtiwJIm/Ps5tyj9MvwiEDw7fCBnTYoCw3rI0S AhigTbGPH9OPly50Z0A5QrjsnSdD/itOEr3HkMs7QMgokr0oyA/v1VcUA nFSgp4IR0wTohVRuWmYxjZh0Pf+6wGoagYfvrEARN4uNyKrPt/vRr5BYP kmZ9SemEZsQZ81f/WVAWcO8iG09p1nzake9zjhtP5cFumfF6uFSrv/M/D dAApljFePggSu9RSRRncJK7PNR9DrLtAY166dHTPYo4ZkELMb5o8gZjch De9nomNpRXBl4xvLdHwoL0YsN3sfSKAKjXpXzrbxAIehVvUI+srYuRWXb A==; X-IronPort-AV: E=McAfee;i="6400,9594,10332"; a="246698326" X-IronPort-AV: E=Sophos;i="5.91,186,1647327600"; d="scan'208";a="246698326" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Apr 2022 15:02:10 -0700 X-IronPort-AV: E=Sophos;i="5.91,186,1647327600"; d="scan'208";a="582419801" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.217.201]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Apr 2022 15:02:09 -0700 From: Mat Martineau To: netdev@vger.kernel.org, bpf@vger.kernel.org Cc: Geliang Tang , ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, mptcp@lists.linux.dev, Matthieu Baerts , Mat Martineau Subject: [PATCH bpf-next v2 5/8] selftests: bpf: test bpf_skc_to_mptcp_sock Date: Fri, 29 Apr 2022 15:02:01 -0700 Message-Id: <20220429220204.353225-6-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220429220204.353225-1-mathew.j.martineau@linux.intel.com> References: <20220429220204.353225-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: Geliang Tang This patch extends the MPTCP test base, to test the new helper bpf_skc_to_mptcp_sock(). Define struct mptcp_sock in bpf_tcp_helpers.h, use bpf_skc_to_mptcp_sock to get the msk socket in progs/mptcp_sock.c and store the infos in socket_storage_map. Get the infos from socket_storage_map in prog_tests/mptcp.c. Add a new function verify_msk() to verify the infos of MPTCP socket, and rename verify_sk() to verify_tsk() to verify TCP socket only. v2: Add CONFIG_MPTCP check for clearer error messages Acked-by: Matthieu Baerts Signed-off-by: Geliang Tang Signed-off-by: Mat Martineau --- MAINTAINERS | 1 + .../testing/selftests/bpf/bpf_mptcp_helpers.h | 14 ++++++++ .../testing/selftests/bpf/prog_tests/mptcp.c | 36 +++++++++++++++---- .../testing/selftests/bpf/progs/mptcp_sock.c | 24 ++++++++++--- 4 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 tools/testing/selftests/bpf/bpf_mptcp_helpers.h diff --git a/MAINTAINERS b/MAINTAINERS index 359afc617b92..d48d3cb6abbc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13780,6 +13780,7 @@ F: include/net/mptcp.h F: include/trace/events/mptcp.h F: include/uapi/linux/mptcp.h F: net/mptcp/ +F: tools/testing/selftests/bpf/bpf_mptcp_helpers.h F: tools/testing/selftests/bpf/*/*mptcp*.c F: tools/testing/selftests/net/mptcp/ =20 diff --git a/tools/testing/selftests/bpf/bpf_mptcp_helpers.h b/tools/testin= g/selftests/bpf/bpf_mptcp_helpers.h new file mode 100644 index 000000000000..18da4cc65e89 --- /dev/null +++ b/tools/testing/selftests/bpf/bpf_mptcp_helpers.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (c) 2022, SUSE. */ + +#ifndef __BPF_MPTCP_HELPERS_H +#define __BPF_MPTCP_HELPERS_H + +#include "bpf_tcp_helpers.h" + +struct mptcp_sock { + struct inet_connection_sock sk; + +} __attribute__((preserve_access_index)); + +#endif diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index cd548bb2828f..4b40bbdaf91f 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -10,14 +10,12 @@ struct mptcp_storage { __u32 is_mptcp; }; =20 -static int verify_sk(int map_fd, int client_fd, const char *msg, __u32 is_= mptcp) +static int verify_tsk(int map_fd, int client_fd) { + char *msg =3D "plain TCP socket"; int err =3D 0, cfd =3D client_fd; struct mptcp_storage val; =20 - if (is_mptcp =3D=3D 1) - return 0; - if (CHECK_FAIL(bpf_map_lookup_elem(map_fd, &cfd, &val) < 0)) { perror("Failed to read socket storage"); return -1; @@ -38,6 +36,32 @@ static int verify_sk(int map_fd, int client_fd, const ch= ar *msg, __u32 is_mptcp) return err; } =20 +static int verify_msk(int map_fd, int client_fd) +{ + char *msg =3D "MPTCP subflow socket"; + int err =3D 0, cfd =3D client_fd; + struct mptcp_storage val; + + if (CHECK_FAIL(bpf_map_lookup_elem(map_fd, &cfd, &val) < 0)) { + perror("Failed to read socket storage"); + return -1; + } + + if (val.invoked !=3D 1) { + log_err("%s: unexpected invoked count %d !=3D 1", + msg, val.invoked); + err++; + } + + if (val.is_mptcp !=3D 1) { + log_err("%s: unexpected bpf_tcp_sock.is_mptcp %d !=3D 1", + msg, val.is_mptcp); + err++; + } + + return err; +} + static int run_test(int cgroup_fd, int server_fd, bool is_mptcp) { int client_fd, prog_fd, map_fd, err; @@ -88,8 +112,8 @@ static int run_test(int cgroup_fd, int server_fd, bool i= s_mptcp) goto out; } =20 - err +=3D is_mptcp ? verify_sk(map_fd, client_fd, "MPTCP subflow socket", = 1) : - verify_sk(map_fd, client_fd, "plain TCP socket", 0); + err +=3D is_mptcp ? verify_msk(map_fd, client_fd) : + verify_tsk(map_fd, client_fd); =20 close(client_fd); =20 diff --git a/tools/testing/selftests/bpf/progs/mptcp_sock.c b/tools/testing= /selftests/bpf/progs/mptcp_sock.c index 0d65fb889d03..7b6a25e37de8 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_sock.c +++ b/tools/testing/selftests/bpf/progs/mptcp_sock.c @@ -3,9 +3,11 @@ =20 #include #include +#include "bpf_mptcp_helpers.h" =20 char _license[] SEC("license") =3D "GPL"; __u32 _version SEC("version") =3D 1; +extern bool CONFIG_MPTCP __kconfig; =20 struct mptcp_storage { __u32 invoked; @@ -24,6 +26,7 @@ int _sockops(struct bpf_sock_ops *ctx) { struct mptcp_storage *storage; struct bpf_tcp_sock *tcp_sk; + struct mptcp_sock *msk; int op =3D (int)ctx->op; struct bpf_sock *sk; =20 @@ -38,11 +41,24 @@ int _sockops(struct bpf_sock_ops *ctx) if (!tcp_sk) return 1; =20 - storage =3D bpf_sk_storage_get(&socket_storage_map, sk, 0, - BPF_SK_STORAGE_GET_F_CREATE); - if (!storage) - return 1; + if (!tcp_sk->is_mptcp) { + storage =3D bpf_sk_storage_get(&socket_storage_map, sk, 0, + BPF_SK_STORAGE_GET_F_CREATE); + if (!storage) + return 1; + } else { + if (!CONFIG_MPTCP) + return 1; + + msk =3D bpf_skc_to_mptcp_sock(sk); + if (!msk) + return 1; =20 + storage =3D bpf_sk_storage_get(&socket_storage_map, msk, 0, + BPF_SK_STORAGE_GET_F_CREATE); + if (!storage) + return 1; + } storage->invoked++; storage->is_mptcp =3D tcp_sk->is_mptcp; =20 --=20 2.36.0