From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146424pis; Wed, 11 May 2022 00:56:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy8WbMZP+u5hnOIdrIE9SbYXIqVN6hjeL9cfhlSIq0+WcuvkzIrCExEfJMu1BXYBuV4h9qf X-Received: by 2002:a17:907:1b1c:b0:6f0:10e2:7a9b with SMTP id mp28-20020a1709071b1c00b006f010e27a9bmr24092936ejc.58.1652255802423; Wed, 11 May 2022 00:56:42 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id du13-20020a17090772cd00b006f4da4e73e9si1865515ejc.490.2022.05.11.00.56.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:56:42 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5228-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=TBLyYGEc; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5228-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5228-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 100082E09F2 for ; Wed, 11 May 2022 07:56:40 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8504015DE; Wed, 11 May 2022 07:56:38 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) (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 11DF915B9 for ; Wed, 11 May 2022 07:56:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255794; 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=N+bLnnx2h1bEln3SAlCc0ZXPYN0SwxRpN9FGjuaOyf8=; b=TBLyYGEcRSM9RN/oW0m9Cb4VVGinWFjpmqHwvbyLmSNHSNwk/SUL/bOT9m+hmvwCTwvYct JQmOcDFob/NZdCCOjb4ARO0JG5aTLE1FOyr5lL4rsVdIFOZL6PcGYsBtoJuNAJojgIIMZR yigft8lI3/irmxgnb455QCG/FuLLdaI= Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2054.outbound.protection.outlook.com [104.47.9.54]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-17-gEU30gr2PrKI8v7JxpJJ1A-1; Wed, 11 May 2022 09:56:32 +0200 X-MC-Unique: gEU30gr2PrKI8v7JxpJJ1A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q6A+3yyVp8m0qOr96ETB1c9+WezP/BMBr8AeBuzUIbtDCTWDBkJKvUy9ygxjryBfs4QWNX8Lwfsxur3Qsh4Yx547c5m8S2EwxbzosENpov2LgZqPKELjkFHKP2mxyAPxoOEIC6Z2U42j2NL+UqAH3VnLCB4NdBfkAV6DJX53FgPBQ8xnBHzOhBIEggMuhg2FpPpfzDQCS98Hm3xNf/NvGjNtciMls1gQGK+9Sx6zsee2EUcBon1FHSEGzohmg9jXXNVzyWPoD1r23h77m9xhkYE1nkDXxXBoQe7AtZ66VdFSRHznrRwI46lgsQMyo/H/hemQ3ZyonF/xLuGYZYxERw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sNMUb3QdBPpsBnW5y5B3qCVSB3VxGyGixxiriiYkJjQ=; b=oROXclsBdFY1ihh6nXhgHKAOq8e53fsdy0lGgA5z9OoHaRyifW7jSW7bkYeGAShQSyG4sSMjT7Dz8iKvPDgD6Z1GLOsyhR+FBxd99Lo7vi4so6/80kcgEadin6csFJWtBqo2n4DFzQ/FJiicBQLns1dV1JUvKyy7H3pvGEeTU5JtXeIOeuuFcA1J73+5afxPmMonwk5nd/lYBTGauWNi8/mtT67u5tdV/y4KkB7hUZXa+d+KKMxIRGiZHy/RTQEVzzKkna9rEKpg3w5478TkrZY1/Nnd+I04nlOkKXaJjmzYzQoFq/yRjKgPbqmkQ9GkZxJXZ5YiOwW+iSOFg67Otw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR04MB4461.eurprd04.prod.outlook.com (2603:10a6:803:70::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21; Wed, 11 May 2022 07:56:30 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:56:30 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Nicolas Rybowski , Matthieu Baerts , Mat Martineau Subject: [PATCH mptcp-next v2 01/14] bpf: add bpf_skc_to_mptcp_sock_proto Date: Wed, 11 May 2022 15:56:07 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR01CA0053.apcprd01.prod.exchangelabs.com (2603:1096:4:193::7) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6dd3a061-8f2f-4b02-8a32-08da3323c263 X-MS-TrafficTypeDiagnostic: VI1PR04MB4461:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BhzFmw9EfzU9WbETO4XMxIdUSwLf8Wc90li7Pc8zPWmSim7I8wCZe0Roa7/P38qmk9PmwwB91Z944ODxoCgVUJxUXYYGSrDpQWK+TP4kGeHwz/Jn6nrK9FoMmrJJBemTVWjEk34lb9bPuQajMbH9GODdI5CZbkGZ4xXlnx1oeFlNjxpXiSxNT59yfFR89K2DuNhpZMIWiiWN44G53i2acgQTckhkYTcAA8g0jiBc1Icw2OthHODPPH6Tex5FpezN1rqgVdjriYred9sHmU8sKrzPFg58NXoUg0EWU5CjHmNa+0qh7cmLX5x765fPrqTTm40pE0oQAG1jZRolfjQQGBbWgNXLnypKF7gGIj/AIc9f2rq6VnNyxdGB5jK03/G5s9Sigf+kywYNuKgUlpZCz1ZWy/Z6INTlOQI5oO8e1quAmmN7Cl8maCL2o8SNYp5hhpjLKR84YHRWPqdMR6UqIOomI7UQvv0+beqYGxcIN4LODsZ7IVuVP5rDJ3QOwZvKg+16U6YC/LbWHcs0iGQH4pQ5ULrOa+RCI0NAHN5GmOSBi9R9s0w6B8GCl8pBKZW5Xvtmtcpw3BWZ3tPFbFQBYUo9fciuYBc5z43kX1BTjQzJKZR3E6M5LZpjjPXKuNax841mh/uOwS3O1NvDJb7aZNT1LqZ/Hhg/Iw4iLVMS4mDz4WY9evHCLEhI7QcZZlvI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(38100700002)(508600001)(5660300002)(8936002)(316002)(66476007)(54906003)(66556008)(36756003)(186003)(66946007)(6916009)(6512007)(86362001)(2616005)(4326008)(8676002)(26005)(6666004)(83380400001)(6486002)(6506007)(44832011)(2906002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mKuVqERTfwgailDb4lwF8Zir9yYfCnvmsZG2+d3R1zXcl9/8RCB3e1IyKFaW?= =?us-ascii?Q?UyYl+9JBxLyUPejroNmv291VwlevZiIAoT8qZcTR6YlGeOu1p09X2yOl4Jcy?= =?us-ascii?Q?dbPS3sPfTcXtjslyewWctcXe+DkazS+g5HYd7ktBVpymu86md6Eybs8j5omv?= =?us-ascii?Q?sjJQh3SlTrpBWuvqpFE5cFx5mIPs2XDm3e9Wp6eTqjvvd7uKC4F7Ds+NNZlG?= =?us-ascii?Q?6MRbqDi4uIiXvoQlkYNkWzySqPZuYQp3TCTTo/IKcmR7jO6NYmfQKXKxrrz+?= =?us-ascii?Q?lxT6qc0tIYTyvfwg5FOnFKgQfaMZZSZEoiXENh1jtmX5P2ksUREC5EIdIsvY?= =?us-ascii?Q?iP3ylNENahgHr4L+LCW3NzN+vyz/nXIV8VQLrW/ce5exGCd8Zt5mUjiJxZ5d?= =?us-ascii?Q?Rh2wYyAvlvx4S6UkymgSxUhTV6LJ/haSdVW2IWAykihv5vFRUTlbW7jDja2d?= =?us-ascii?Q?O59076e1/W47wPkxyMObV31T8F03d9r2G2QbvwQf8z4KHvxMCNTWBszB5eHh?= =?us-ascii?Q?aIsA0+0yZKknrF1bxWzMSrBuNLYHu1FcWrfUOPM92mphd5H+fcmeEo02Qquv?= =?us-ascii?Q?IJHzN4y3cT/dqZTtR3Y0DIp4BnQ7/aHoMD2LNsHXUB1M4Xseqrk+KhppwjDV?= =?us-ascii?Q?CA+ncwr2z4h0D0SpXaCdNwezRrFiGy65LS4lMgFPP1RktWSlb1CSPhtqtIii?= =?us-ascii?Q?oElGEutv+SRcpoIt8CMx3DTsbAoQYISLseXxPYzc61Ri88YTs7Q2R94mO8/K?= =?us-ascii?Q?TGm4PuV+xtt3h0P81MnoYfkK6fqRaJYX4zwJjlJSCXnWDhebJFuvvU5nvaHO?= =?us-ascii?Q?ryvzIjDD3xVzPaP7Tu9Fgux5+WOsyxXmvP3sUfaItJFrEkJc2u/QjES31mkZ?= =?us-ascii?Q?PJ3jHo3tdeb6xrqzAJxS9QT4CI1Yb3anWQ2azbiQ+VR40cTAL5iVXECvpAmN?= =?us-ascii?Q?DOHIZ+TyvItfonqIKQKTlOWtSaN/hB61aR5iFy/sSJQhROA8U0x5MGE3JTFC?= =?us-ascii?Q?EkBvC+AspNe3bYXyporafDI0zXbBLcFJTj+G2HwDBfGc4+GZYMJuoLLAMT1D?= =?us-ascii?Q?BGLXBtr70PvUbnusqdAUuk6FOJXySDiuPzn5aCg3e8lv4cjMU7WnTzJbEPoG?= =?us-ascii?Q?w283uDfOgBVo6Z1891/FRQCdD5XZpYLvV1t9Z7SzkLpVXIx75BaWqbPZ6xnN?= =?us-ascii?Q?PllC4XeYZYzJGXSu+W9oxWGzSgoFi3g9edA/vuv02PoeF6CtdssyIIiMc6DL?= =?us-ascii?Q?j4khNO1P6XLCDGq0Np75ZPQ6yJeXO13zf29ytMGM7pFaug5/17vSgA5KltfN?= =?us-ascii?Q?Ruy76lqInDu9GooFAQWKuKZDjYWqHlZBTro+c1s5uif/W/p32yIIu7KfKgCU?= =?us-ascii?Q?dxCBCw1OhdiGZ9XAZO1nnLkiNHvQ0itB/AFwl6zZFA11tt/Lj9AxWko6b9xv?= =?us-ascii?Q?pby6Dqtdioh/g7tweSgrVdKmcrTxoaSFpRHAvFYPkLZrjZpI8H8zPWArdzwR?= =?us-ascii?Q?PM7OGptczfhZZUtIj7uDasgVp+AAlwHc9miBwZXOKH4TkDNoue/zDzDnN2Im?= =?us-ascii?Q?TiyAnNpc9GRN6nGNLQyFymZevzM4/254Lb8i4e70HKV1XAQu6kjgi0w6zXGp?= =?us-ascii?Q?kwX3d7Piy5wHfzoZAontjFMx3KFkY9+bDdUdNmkh8NrHXmtTBZNv3IiTT4ws?= =?us-ascii?Q?dOGqsltAJMXbR5MSGEVutKXseRCOGGc7aQYWXccg50zeqfIXa/mEAW0nrPaI?= =?us-ascii?Q?hHvhHU6mn2FXaIpHv8UUzabgFY3QvBM=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6dd3a061-8f2f-4b02-8a32-08da3323c263 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:56:30.7021 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kuX7Z5bpPBlZ4UWfmugLoECAlAVLeWV4TYW4xbEL/FA34kTaXmwUnLGBFsFpqqWXRPXq4y9zhruZqOvRqTWP0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4461 Content-Type: text/plain; charset="utf-8" This patch implements a new struct bpf_func_proto, named bpf_skc_to_mptcp_sock_proto. Define a new bpf_id BTF_SOCK_TYPE_MPTCP, and a new helper bpf_skc_to_mptcp_sock(), which invokes another new helper bpf_mptcp_sock_from_subflow() in net/mptcp/bpf.c to get struct mptcp_sock from a given subflow socket. v2: Emit BTF type, add func_id checks in verifier.c and bpf_trace.c, remove build check for CONFIG_BPF_JIT Co-developed-by: Nicolas Rybowski Signed-off-by: Nicolas Rybowski Co-developed-by: Matthieu Baerts Signed-off-by: Matthieu Baerts Acked-by: Mat Martineau Signed-off-by: Geliang Tang --- include/linux/bpf.h | 1 + include/linux/btf_ids.h | 3 ++- include/net/mptcp.h | 6 ++++++ include/uapi/linux/bpf.h | 7 +++++++ kernel/bpf/verifier.c | 1 + kernel/trace/bpf_trace.c | 2 ++ net/core/filter.c | 18 ++++++++++++++++++ net/mptcp/Makefile | 2 ++ net/mptcp/bpf.c | 22 ++++++++++++++++++++++ scripts/bpf_doc.py | 2 ++ tools/include/uapi/linux/bpf.h | 7 +++++++ 11 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 net/mptcp/bpf.c diff --git a/include/linux/bpf.h b/include/linux/bpf.h index be94833d390a..f53e39065a6e 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -2204,6 +2204,7 @@ extern const struct bpf_func_proto bpf_skc_to_tcp_tim= ewait_sock_proto; extern const struct bpf_func_proto bpf_skc_to_tcp_request_sock_proto; extern const struct bpf_func_proto bpf_skc_to_udp6_sock_proto; extern const struct bpf_func_proto bpf_skc_to_unix_sock_proto; +extern const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto; extern const struct bpf_func_proto bpf_copy_from_user_proto; extern const struct bpf_func_proto bpf_snprintf_btf_proto; extern const struct bpf_func_proto bpf_snprintf_proto; diff --git a/include/linux/btf_ids.h b/include/linux/btf_ids.h index bc5d9cc34e4c..335a19092368 100644 --- a/include/linux/btf_ids.h +++ b/include/linux/btf_ids.h @@ -178,7 +178,8 @@ extern struct btf_id_set name; BTF_SOCK_TYPE(BTF_SOCK_TYPE_TCP6, tcp6_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_UDP, udp_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_UDP6, udp6_sock) \ - BTF_SOCK_TYPE(BTF_SOCK_TYPE_UNIX, unix_sock) + BTF_SOCK_TYPE(BTF_SOCK_TYPE_UNIX, unix_sock) \ + BTF_SOCK_TYPE(BTF_SOCK_TYPE_MPTCP, mptcp_sock) =20 enum { #define BTF_SOCK_TYPE(name, str) name, diff --git a/include/net/mptcp.h b/include/net/mptcp.h index d4ec894ce67b..4d761ad530c9 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -284,4 +284,10 @@ static inline int mptcpv6_init(void) { return 0; } static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { } #endif =20 +#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL) +struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk); +#else +static inline struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *= sk) { return NULL; } +#endif + #endif /* __NET_MPTCP_H */ diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 444fe6f1cf35..3e996e097084 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -5154,6 +5154,12 @@ union bpf_attr { * if not NULL, is a reference which must be released using its * corresponding release function, or moved into a BPF map before * program exit. + * + * struct mptcp_sock *bpf_skc_to_mptcp_sock(void *sk) + * Description + * Dynamically cast a *sk* pointer to a *mptcp_sock* pointer. + * Return + * *sk* if casting is valid, or **NULL** otherwise. */ #define __BPF_FUNC_MAPPER(FN) \ FN(unspec), \ @@ -5351,6 +5357,7 @@ union bpf_attr { FN(skb_set_tstamp), \ FN(ima_file_hash), \ FN(kptr_xchg), \ + FN(skc_to_mptcp_sock), \ /* */ =20 /* integer value in 'imm' field of BPF_CALL instruction selects which help= er diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 813f6ee80419..3d8790e81c48 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -509,6 +509,7 @@ static bool is_ptr_cast_function(enum bpf_func_id func_= id) func_id =3D=3D BPF_FUNC_skc_to_tcp_sock || func_id =3D=3D BPF_FUNC_skc_to_tcp6_sock || func_id =3D=3D BPF_FUNC_skc_to_udp6_sock || + func_id =3D=3D BPF_FUNC_skc_to_mptcp_sock || func_id =3D=3D BPF_FUNC_skc_to_tcp_timewait_sock || func_id =3D=3D BPF_FUNC_skc_to_tcp_request_sock; } diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index f15b826f9899..8451fc83d031 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1688,6 +1688,8 @@ tracing_prog_func_proto(enum bpf_func_id func_id, con= st struct bpf_prog *prog) return &bpf_skc_to_udp6_sock_proto; case BPF_FUNC_skc_to_unix_sock: return &bpf_skc_to_unix_sock_proto; + case BPF_FUNC_skc_to_mptcp_sock: + return &bpf_skc_to_mptcp_sock_proto; case BPF_FUNC_sk_storage_get: return &bpf_sk_storage_get_tracing_proto; case BPF_FUNC_sk_storage_delete: diff --git a/net/core/filter.c b/net/core/filter.c index b741b9f7e6a9..ef84a9087651 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -78,6 +78,7 @@ #include #include #include +#include =20 static const struct bpf_func_proto * bpf_sk_base_func_proto(enum bpf_func_id func_id); @@ -11272,6 +11273,20 @@ const struct bpf_func_proto bpf_skc_to_unix_sock_p= roto =3D { .ret_btf_id =3D &btf_sock_ids[BTF_SOCK_TYPE_UNIX], }; =20 +BPF_CALL_1(bpf_skc_to_mptcp_sock, struct sock *, sk) +{ + BTF_TYPE_EMIT(struct mptcp_sock); + return (unsigned long)bpf_mptcp_sock_from_subflow(sk); +} + +const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto =3D { + .func =3D bpf_skc_to_mptcp_sock, + .gpl_only =3D false, + .ret_type =3D RET_PTR_TO_BTF_ID_OR_NULL, + .arg1_type =3D ARG_PTR_TO_SOCK_COMMON, + .ret_btf_id =3D &btf_sock_ids[BTF_SOCK_TYPE_MPTCP], +}; + BPF_CALL_1(bpf_sock_from_file, struct file *, file) { return (unsigned long)sock_from_file(file); @@ -11314,6 +11329,9 @@ bpf_sk_base_func_proto(enum bpf_func_id func_id) case BPF_FUNC_skc_to_unix_sock: func =3D &bpf_skc_to_unix_sock_proto; break; + case BPF_FUNC_skc_to_mptcp_sock: + func =3D &bpf_skc_to_mptcp_sock_proto; + break; case BPF_FUNC_ktime_get_coarse_ns: return &bpf_ktime_get_coarse_ns_proto; default: diff --git a/net/mptcp/Makefile b/net/mptcp/Makefile index cb7f53f6ab22..6e7df47c9584 100644 --- a/net/mptcp/Makefile +++ b/net/mptcp/Makefile @@ -10,3 +10,5 @@ obj-$(CONFIG_INET_MPTCP_DIAG) +=3D mptcp_diag.o mptcp_crypto_test-objs :=3D crypto_test.o mptcp_token_test-objs :=3D token_test.o obj-$(CONFIG_MPTCP_KUNIT_TEST) +=3D mptcp_crypto_test.o mptcp_token_test.o + +obj-$(CONFIG_BPF_SYSCALL) +=3D bpf.o diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c new file mode 100644 index 000000000000..535602ba2582 --- /dev/null +++ b/net/mptcp/bpf.c @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Multipath TCP + * + * Copyright (c) 2020, Tessares SA. + * Copyright (c) 2022, SUSE. + * + * Author: Nicolas Rybowski + */ + +#define pr_fmt(fmt) "MPTCP: " fmt + +#include +#include "protocol.h" + +struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) +{ + if (sk && sk_fullsock(sk) && sk->sk_protocol =3D=3D IPPROTO_TCP && sk_is_= mptcp(sk)) + return mptcp_sk(mptcp_subflow_ctx(sk)->conn); + + return NULL; +} +EXPORT_SYMBOL(bpf_mptcp_sock_from_subflow); diff --git a/scripts/bpf_doc.py b/scripts/bpf_doc.py index 096625242475..d5452f7eb996 100755 --- a/scripts/bpf_doc.py +++ b/scripts/bpf_doc.py @@ -633,6 +633,7 @@ class PrinterHelpers(Printer): 'struct socket', 'struct file', 'struct bpf_timer', + 'struct mptcp_sock', ] known_types =3D { '...', @@ -682,6 +683,7 @@ class PrinterHelpers(Printer): 'struct socket', 'struct file', 'struct bpf_timer', + 'struct mptcp_sock', } mapped_types =3D { 'u8': '__u8', diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 444fe6f1cf35..3e996e097084 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -5154,6 +5154,12 @@ union bpf_attr { * if not NULL, is a reference which must be released using its * corresponding release function, or moved into a BPF map before * program exit. + * + * struct mptcp_sock *bpf_skc_to_mptcp_sock(void *sk) + * Description + * Dynamically cast a *sk* pointer to a *mptcp_sock* pointer. + * Return + * *sk* if casting is valid, or **NULL** otherwise. */ #define __BPF_FUNC_MAPPER(FN) \ FN(unspec), \ @@ -5351,6 +5357,7 @@ union bpf_attr { FN(skb_set_tstamp), \ FN(ima_file_hash), \ FN(kptr_xchg), \ + FN(skc_to_mptcp_sock), \ /* */ =20 /* integer value in 'imm' field of BPF_CALL instruction selects which help= er --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146446pis; Wed, 11 May 2022 00:56:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwDP6su53O9Y4VS44wiWSC5z2c2Ip6vLAb/BEaV4T1/Sa8klIRYzQAAWYXB9MH9vjjKx1xK X-Received: by 2002:a17:907:6297:b0:6da:6388:dc58 with SMTP id nd23-20020a170907629700b006da6388dc58mr23608507ejc.472.1652255806982; Wed, 11 May 2022 00:56:46 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id dt4-20020a170907728400b006f45a8561cdsi1740818ejc.556.2022.05.11.00.56.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:56:46 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5229-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=SPEVwerW; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5229-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5229-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 87DDD2E09F2 for ; Wed, 11 May 2022 07:56:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 162AA15DE; Wed, 11 May 2022 07:56:43 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) (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 F1FCC15B9 for ; Wed, 11 May 2022 07:56:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255799; 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=Atk3G91JSSNUe+UIEuu8GjmY3hMPn56dEBUsv8p19hs=; b=SPEVwerWaoR0zcIXFxxb427bjDXKCogE8zAVJ8+FhHZ6JMxdU3XitOzPGFyVsNnGSsT3cy j4pnEmlOen8jR/NV0tqS/wdXWpXdDEO2FcZLvXu5wC0hkuXixOtccllrl30dgkLMbQnTL3 1MeF4OEfLmpQKd9tIEkvz7LISOAg6QQ= Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2111.outbound.protection.outlook.com [104.47.18.111]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-39-jegA_8tINEaP7vFvyObcyw-1; Wed, 11 May 2022 09:56:38 +0200 X-MC-Unique: jegA_8tINEaP7vFvyObcyw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iyZbPkS/yADVhgp+gh+RvF+80xdUWsoKGvvPm5k346v0R9iDZMr/eXqEZ9z3OS5GeogM6MQNTeHzQusCPguu5AGvPTeBV63UNj+ywcikNUkbcaDC9qK2MokcswMaZQ2bhV+DDEeAvziQxMm7QyJoAsVfKLF26K5R6WAJ/cFeh74/X17fWBYKoB2z6S9UxRrQswiPU0ndA0nVhlknOy2LYp5DWgV730OUtc3OspCS2kMnl+pawIUDlB31pS5DgG/nOaCRVhtcij3TbSsX94Btx55u/LEa+ckcQvwOgmfopS6arZ1/oZejAy/frRJGPflbgO1hh+wh6tAklVeDdWOytw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=y27vFa5j/lSX4Ma9newk9esbxK4aYDN13I/rD70ttUw=; b=KsN/HqEMXjaHsMBUOngVsL75RQ9nZLKZiV2TkoODdjeNNHZGqbbJQN9ID4WGq4V6e6t35kAhbnpyROJfHAi4czS46HQUGm5I1Fhgl7GBkPbASUjuS2pmB/pyiCvJ+pPgDWnVXtxy1EwDTtcmcX6pzAgAxuexDMuaMc5SyZyTQo1aUpo3NA2yKtqws6yjZn545kIX0YdCS9e7NVfsNmJGy5AWi9Zm6+2/TinfQupamvzaSwEK667vC31rp/89YylcSQd6Vg6aqYRjnta1NWsGDlEzG1xgEJqtb+2xZZRngVbpR9ODQqSGFg6/lAWOZXkyP3zrenzsdEv7sTP4Req3QA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR04MB4461.eurprd04.prod.outlook.com (2603:10a6:803:70::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21; Wed, 11 May 2022 07:56:37 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:56:37 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Mat Martineau , Andrii Nakryiko Subject: [PATCH mptcp-next v2 02/14] selftests/bpf: Enable CONFIG_IKCONFIG_PROC in config Date: Wed, 11 May 2022 15:56:08 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR01CA0046.apcprd01.prod.exchangelabs.com (2603:1096:4:193::18) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9623c4b9-5759-44eb-70c5-08da3323c669 X-MS-TrafficTypeDiagnostic: VI1PR04MB4461:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /dx3Or0VNMwXWZ/m40iFgCJRr7ggopfvZUzCWfvT5iDtyG4RMqQxEfZPn/vj2XR8+wJqksUkDmJ8Phv3GuPEJjajjAcAj68ZC2oE6ytPT0fvP0iqSmlMCZ2J18Tk3i3Oipz4DOwo5EU5Wd6cebMP3zXm+TgVXKkPaONQv61B/TMaZhQbkz4QEkFrqn/qVM+fwF326DSjgixEM4+jGRtPujFvDNGjeKHRaGEK86uCMf8OMxBVdtB99zCTQYrL7f2kfTD1WDj7cTWbr2tanir/4RO8VltrNtb3FQRnVb1a93lsNHeTEQlFA0wpy1jVhL6pOaa6n/iMx8BBSBkd64c0uvy44VHVJDbYx1RYpBXbzBbOd/V02xQxfEL5ie8+pnGuupLIstUGcZKuE+bOnOhCzFKkT7GmzsICkoGeb9qWd3f6GFdIftFCj1W/9mbFPT0Bh6gujgibCcDnRhW7jNxDzC/YszlQSl+QcKN9vrRFbZC3CzH8EhcZDriXDeQ7wIEaEx9F2UumYPKafkvQjlLwUdkl2fE7G/tHuJ2ZvfKzmR7spsbz5qe324YKEmXFIY6+oR2Wz0eHZ+irqC0fH/sm+fONesG4nsobzH4mPI5BpLf2Y1WmedYfp95FT/7daGIKfc1ui12x7NYUfbv9S7Au+IhP/2/58xp90xnFIJ6Sf/16sktQ7YQ03KzFlE/TwM3psPT6U9KuoWdl61uauyvmjw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(38100700002)(508600001)(5660300002)(8936002)(316002)(66476007)(54906003)(66556008)(36756003)(186003)(66946007)(6916009)(6512007)(86362001)(2616005)(4326008)(8676002)(26005)(6666004)(6486002)(6506007)(44832011)(2906002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pm1rpGBZ1oAH5eHj80rI58RU5PzaK28/NGLrXgy9PN6J3lhbeSXtKyD+RFn4?= =?us-ascii?Q?DG1ayjWejr2xu/mIn/i22X8h9F6RfR+xitEGQ32QdUxwQ/af2n1PHcuIInvk?= =?us-ascii?Q?l12V8+tennF6oSwoWIAc4pM/YHEXc+1zGt6pozqnJTG0kxoulE7cmXELhScI?= =?us-ascii?Q?1EmCzv5nQi3ygvlOTd+kgN/zgYHwfN90hiIMuqyy/wZR90Dd3dcfMfg5ZLt7?= =?us-ascii?Q?q/NQ/reoArexYrEanyesSgzIjC6wrqibOdpOzPTdeZNttEL0+Tkr0/tzLT/M?= =?us-ascii?Q?IHDJgP3ml0T0MpHZjAJvCy/lXhWClE1q767MrzlUq4TpphUo6YUF8p4uPhwN?= =?us-ascii?Q?Lo/DlGW/lC3NUVhPkV2G1RPJf8nf0QA5SX2vllrdw659l5xi4GoPxmtPGwft?= =?us-ascii?Q?on0h1p0QpoNvGUxHZWI+Ek9SKng/2G+mnI8pGbS/rgc6iU3uPkNRU/7GIybg?= =?us-ascii?Q?A8DaTmPTSjl7yr5TXBflgnrv6tTUX94q/z3c/Qj07xf31rDErQc2Zug/Ch1U?= =?us-ascii?Q?BIFMlWIwEIRyakZd3AyEC6ml+OnTaU7cDHxZ6lFsvQ6AQUrgJAL2XTcENqha?= =?us-ascii?Q?pPIo8zqVaxY2vZbiXYhk2pCgBPod6jkIKaIsWVeuoetSwpIOad8f2ZNwBmg9?= =?us-ascii?Q?5QO4QWbMPb4QoNanm8pGJGgqf75A7nKdp7tE9enbbBfcP/f99OKptFULtD8U?= =?us-ascii?Q?5/UXijBMmu48Yp+Z4SzfQKDyim7jLxQ+haXqOhTQ+iwb9NePIaxagUYyNCGh?= =?us-ascii?Q?ZlyF5x/7sIUW8MOZ9HJV1vUcipYcf+3wFG/jbg1WR5jLvmNbt8d1WpE18es/?= =?us-ascii?Q?P4OZTBkFCgp2k8iih+G3fnxervoGa8sQ1bWKqwePF8jCVdH6ZzdaX4JQgVko?= =?us-ascii?Q?k9JTVIFcW3JUYGSPJSuRM0+hHIp7pDAjsnGPPYBv0fiAo17qNI/JrvcYoBR6?= =?us-ascii?Q?kTLdXwvueLCWGkyfnsxCglTI8Wmqkb9xgr4p8EUz7th1sW65dHSno30N0s72?= =?us-ascii?Q?o3Zf0ka2bhh1gHzKN4GG782VIYgtCyMtT5cn4F4/lbMCPAdEz1E6MDERccK1?= =?us-ascii?Q?pFA4yoZh5su74A+nT2TThzCdgL0gISixHe7flTPCnXhXtBtR0FJyL2IshRye?= =?us-ascii?Q?8W/+L2QSFLwsZCVD6xbb2NANC8wWj3o+R5y+SNTmzLn9D6e+yt+iLZgK23KZ?= =?us-ascii?Q?lXlyfU2ZSAu9NJhYL1i68P7qF9XwQGAiQTqfHZw6UeJdbqwfVQ7zwo25xQfR?= =?us-ascii?Q?pvpE7O8B+uaB31HVExrDfF2pCIrCHSp8/r0Hdxii3yZTVVRbKnzGx1SL2Sz1?= =?us-ascii?Q?Hb7w1xoL912JgV/HTn72QRvIE6HNkyWuwB0jow/AVgj7jc4t93Z9isITVRAI?= =?us-ascii?Q?aFbvWIcojvzEMaU2ajf+V4o/7liY2+llrmg5alqPLshFouzN7AKe754EMxZ4?= =?us-ascii?Q?yl7ybSlZH2M/ce6xTo0SewdzTnIRPpgmpCmpIvcCJ4MHBpJJrPJUNYGy7s5U?= =?us-ascii?Q?dwMDnLdnN31HkXaYhC+nFxM9nzbvVeL8HeIWlVpBCSGvgdIIMqXSsTPGdJTO?= =?us-ascii?Q?nxHUqOzmDYFWVOIyp9jGvX/ZdPftu4HZcnBz6o/EcIrJW00YuyNOn633y682?= =?us-ascii?Q?htWlRyoRVrWazCogPPlIzh9BH+HXWIj4jeLRSSzxu7d9vozTbumoQ5YY+Hpl?= =?us-ascii?Q?ya3RjlDQHFC/5VBNMeb15bWbDBomm9T7+gjCKNzT4F3HzTi40Au2ddceVTL2?= =?us-ascii?Q?jyZeGDabbQUeJN/OCInP++hLtALcwIw=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9623c4b9-5759-44eb-70c5-08da3323c669 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:56:37.2954 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YQhDrQlz4zCxKf4ZYE1+pF3Z7E3CvexsA8n/3jimAjUuCY3ondGhO5SuFNVpc7/R7Gw1soxAz9X11O6a04WtSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4461 Content-Type: text/plain; charset="utf-8" CONFIG_IKCONFIG_PROC is required by BPF selftests, otherwise we get errors like this: libbpf: failed to open system Kconfig libbpf: failed to load object 'kprobe_multi' libbpf: failed to load BPF skeleton 'kprobe_multi': -22 It's because /proc/config.gz is opened in bpf_object__read_kconfig_file() in tools/lib/bpf/libbpf.c: file =3D gzopen("/proc/config.gz", "r"); So this patch enables CONFIG_IKCONFIG and CONFIG_IKCONFIG_PROC in tools/testing/selftests/bpf/config. Suggested-by: Mat Martineau Reviewed-by: Mat Martineau Acked-by: Andrii Nakryiko Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/bpf/config b/tools/testing/selftests/b= pf/config index 763db63a3890..8d7faff33c54 100644 --- a/tools/testing/selftests/bpf/config +++ b/tools/testing/selftests/bpf/config @@ -53,3 +53,5 @@ CONFIG_NF_DEFRAG_IPV4=3Dy CONFIG_NF_DEFRAG_IPV6=3Dy CONFIG_NF_CONNTRACK=3Dy CONFIG_USERFAULTFD=3Dy +CONFIG_IKCONFIG=3Dy +CONFIG_IKCONFIG_PROC=3Dy --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146486pis; Wed, 11 May 2022 00:56:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyk/Hf4yMDNDL/EvX91FXCguza73+2Jp3BHoS+WZxJLoNmgwovYfjiBtl1mH4iXBwlt35BT X-Received: by 2002:a17:907:9628:b0:6f6:b20c:bd7f with SMTP id gb40-20020a170907962800b006f6b20cbd7fmr20176387ejc.719.1652255814896; Wed, 11 May 2022 00:56:54 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id hs13-20020a1709073e8d00b006f3af36fea2si1799048ejc.362.2022.05.11.00.56.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:56:54 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5230-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=MLsI2X7G; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5230-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5230-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 682212E09D9 for ; Wed, 11 May 2022 07:56:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0594B15DE; Wed, 11 May 2022 07:56:51 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 6BA1215B9 for ; Wed, 11 May 2022 07:56:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255806; 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=R7EZ708XU17gmD41ukgK0uDU9aNw+KSghNubvgymCBI=; b=MLsI2X7G/5C9VKASiSat81Nu1UD+Vpz6tx7Qa24pxUMDHBSR9R8JEQkJ8y3sIkKx4tPsDp AAycZsMy1nLWD0kK/dcf7fQoaa9hzqQ8y+aAw2jAYYkL75WCPwUkHQ2bm8KwQR4M8rOqhg vAzHJZXDvHFbBHMw7F56MxHH7sc+BxY= Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2109.outbound.protection.outlook.com [104.47.18.109]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-32-I-9_a0X9PEetSZvA2AeLKw-1; Wed, 11 May 2022 09:56:44 +0200 X-MC-Unique: I-9_a0X9PEetSZvA2AeLKw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fPf5uDTWoRqqwvxK7iXLtkXKQLs5UandRpJfsRMRhtZ0/94ENlbFuy2gYJ9eFIq4q3Zkln+vZkcb3ZFpUnisrt/lYd5IiSsSnrF1AdtgR8LhCX7mruIfNSapnQGOHTxEARuKE1j/ePi4eWxUiBmPKkw/ExaZB4Go+EM+IwYmybw+r7YEZyeZCpMlvXMYFsDmisoRWzr+VgGMJZ6iXl838pFxD+hDqG74DRtcdMeOEDvhtxhqDiQZ3Uz64v0RwRyn2u0ZkGc50WVZaMt+1r/u/yhqd8bBF0FJ7PQZ4+M9XfciA6QJfEqbQJD3jXPGmzqIoTrw7m4HIVNm2q/8/y0xtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GBzZEErcHOVB+2i4IYYGbj5TY1tXPJbqiXItowcEeis=; b=ZcmaBctjPHPJBwSbCwXU5Con1GwlSzxpBSWLiXpP0QX0g7HXTqHhcennBY95f/W56fTmUm1yhUJ+NCBYoMNw0CzaBCld/SqjU3Bw3lHeYoxd+9vWjWbfw/VZfiGqN7e70DSK6uquql010xgxp8bQVTalCFeKKKzkxiZlQz8aW13LM8d4sHxAv6o3DUbgPZZyNgM6YCdReMWmtdQRdXnhbp26lPCZ+gElmX9TSRActVk1C6Q4xBrcPAIhm4nxMhdFgJxHNKza/la0aAvvNsn+TEdkoPr9OXf1A9+gkpOhcyYHc9JlzzQTfodH4EzwF1By/iMU2tpltoIkHIm4Kr8ppw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR04MB4461.eurprd04.prod.outlook.com (2603:10a6:803:70::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21; Wed, 11 May 2022 07:56:43 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:56:43 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Nicolas Rybowski , Matthieu Baerts , Geliang Tang Subject: [PATCH mptcp-next v2 03/14] selftests/bpf: add MPTCP test base Date: Wed, 11 May 2022 15:56:09 +0800 Message-ID: <01c977e6a7dd70a7eeeec21dad1a1a00d3d3101c.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR01CA0039.apcprd01.prod.exchangelabs.com (2603:1096:4:193::16) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 55fa0040-0a8d-433b-21d0-08da3323ca17 X-MS-TrafficTypeDiagnostic: VI1PR04MB4461:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KwXMhFkQR4CY32jHiKLhqYwMMCV131F3PR1f/XArN0GuPL3YNNGgkjoVRVcleVA3M+rk5y6hcXDJUkCMYIclav2SjS/jZ38PSUKLtPsqYj1WU2K+lME+IWN1vag2Ei4tIteDiK0bkIpwCEYvNqVQevbUzHdK4jSdiiBqdSwsKvlzdQUFSyqyg635ADnyRiNfVgpAT+o7yyQDzLF34vLPLmXq53Byt7yrXC6Lunaa/0EEhoOcqgXLnpAco1/ZQO63wYaStGv9W9bmcu3hRqJ4f/sFiKLnPwSF6EpWyvg4hxRJe4FRGhbnXdCC9R1Y4uygfC64hQspBXnZdcgw09A3adG3Fe7aMqCLSeNTtnCBIYAQmkZEvB+p/Cs0nCmcMq7Jztt9w1+NkxvYfWVuNkhNP8AwC5Qeauzv/YaSww/b/793pEPa9N5XfC/RDyce5RvYjWh932grT2Zpg7pWGkj9GWI1LTCSMbgLWwF3HDanFVyj9XqnnQaHaRWMKu18EqqGxfrYLK7IO+Q3Io8uCuz1bI1t7c9VXk0oAURytkyE9C4FQk/rEpiH1F3o3akMHBo5OT8wocpKFELYH479osp4pAMDLS76qYu6PMVRvFlE0nQKdHk584Qls47b0/1JlCELgF2ZES2KM6YlpYy5Eyg0hPT0CMXMYZmwjo9OzVNtCzYPXZWspv4Xu5ZHCZCP4045Wyf9c8zudYvDFeJcatU8eQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(38100700002)(508600001)(5660300002)(8936002)(316002)(107886003)(66476007)(54906003)(66556008)(36756003)(186003)(66946007)(6916009)(6512007)(86362001)(2616005)(4326008)(8676002)(26005)(30864003)(6666004)(83380400001)(6486002)(6506007)(44832011)(2906002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NxVacDZWiCSH9ypbgdiHXL7MeRPpMzf7j5RYIP2rkAMcWmGQZPUktBMqQXaC?= =?us-ascii?Q?IKBFzGQdvgqj+baR9jZpGGk4Cm0Cy66zNgeeDOHLpRsXexHC5zEtfuFJHi+D?= =?us-ascii?Q?mymKiqqrE3DdWs6OZPrJSDSgpv7qijJ3mdcC0osgJkJ0kV27smedOg02W+aZ?= =?us-ascii?Q?ryQB5fs+tq3I7aul+NkVJfeROFVYyVmtbGR1d7JjgTOeIJ5SLPqAHZlTkTid?= =?us-ascii?Q?oyBcZjK1DaWXw+4wIPwNKDMMAsqkin5ItdON6SvODeAAso7JEM9PfT0Fydpp?= =?us-ascii?Q?N3+GuJUChNk+um27x1+LBZied2yf3ADJvJ3CYJKZ8xUmvzQ6XQr4qBfY7IKV?= =?us-ascii?Q?fP8C+DUOla2I3Bm6/icT4L03c/c8TCRORkDlNMvn+sPz3IliuWB5VJQl9YBl?= =?us-ascii?Q?Pnb9BYkS/XzizC45zErO7VqOeGsbGMrnQ+Gj1XxwV2VT7D1vS/ulaCC8ewKT?= =?us-ascii?Q?cMjf29mAZQHGvvjzIM8vF23av6xco56AgIRLO/u4br73dG4XHrh2H0Uu1Ov8?= =?us-ascii?Q?4pUK1cLrV7iJk82fInFQgarsFq+TNj3lgQ58KC3mwbgpaF3e7xaOXes9kKFw?= =?us-ascii?Q?qyoSFmsHvMS0wf36CuCfxMot0fh8TeQR8ibjQ5wvZ4QTUjVOAbhSyfaPVB4l?= =?us-ascii?Q?UrENVHjv4SF+ErviPVn38esGOHUJ7WeBhjbvfEs376q+yan9vs1iUL8W8wlg?= =?us-ascii?Q?RF6TFuSHyQww2kYZsRXzJEcLJyOyeeR+Cc20RFEEZYEyiYSzIAimNXpquNdm?= =?us-ascii?Q?s7yjeuVGUaQGTwgNkddIuQrgzo4M4vVNp37aulzdhkJ2onLH03+QZTJXZ7vU?= =?us-ascii?Q?OJpaGT0Mz/TcwEEAerjLtHoIDnvR5FoP+bzo/am+sN8324SD6X0Ck9TRP5ML?= =?us-ascii?Q?AOc1T79aXAU9M5V+Yfd09ctbL8HKVmhHmAh2nBMRJsJ+/o456sarL0ugaeG0?= =?us-ascii?Q?LnqJrap48Mb1/fWzjV09Svh1TwuKKa2fPze1CgrfiuD6266KM8rlqZxcvfR+?= =?us-ascii?Q?fSV8RwWaTclj7HxouiFRZYPA1u4Cbpr5ZkoK1A+VXxaHWf/PMUXt6fi7GEb7?= =?us-ascii?Q?CktUV8ziM3SxwElEo8g+yvyfyihYJ5Hw67xuBJvz3ZK3YWIZxz3oQvyqmVw8?= =?us-ascii?Q?/ak5sg2tZIjr8eBQhGMcbfeyhJOM+yjJqa7dVAIKPCC5B63CpoxpnY4AfheV?= =?us-ascii?Q?g4QfDwyychgxFjaCpi5Se5jgmzlDonNXBS1jFqKnkM7Re2aUYtM5kMIZdUxX?= =?us-ascii?Q?Wrx5QKJ7ZcJJ9TGKJ/g7/0qHEiJzJeoFnPIt7au5XG+Uv+NXyiTGICDLkzeN?= =?us-ascii?Q?mNL4oTx71CPlXCOMbguEB7GdpLShcB43UJzZseKEJ2rtIWFHvaoLjJ4w8Uwi?= =?us-ascii?Q?dy8TbZQxrWBnmhcrSxl0p1gr4rPJq6mzrloJ+zT2vwg4Mgd5F+DP3NkJ6TMc?= =?us-ascii?Q?a1zdwuCgLIjdbl59le5ySNGvC6kqXKFbagsyBwJD2CDoDL2pRPZKAGMQosIj?= =?us-ascii?Q?wy9MpFpeKHpjCYJBhSo8G334t6cM57QRRGxhao7WzxRvCNWfmzkbj7dUrGDK?= =?us-ascii?Q?aPyw52XUTue2AD05YT+MtcFGj3Wej/MhRPXM6C/3zZgtrb77iEoaBMZ7MWbr?= =?us-ascii?Q?1j70dV/XMay06UzKXVELieoOiLFFXGgy8NPm09zrsai7RCBlel6eZKW/S0Wx?= =?us-ascii?Q?w3sTpRoaV4tyVmyG1n5aBLf28TRttEfEgCCu23GQRqZuRI1uX0LW/SapXv2U?= =?us-ascii?Q?PkULhbU3Vb5Voy4WjQLX48tLBCVkK6M=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 55fa0040-0a8d-433b-21d0-08da3323ca17 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:56:43.6388 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ktYTnw8qlg857kDdKXSuwLEROR0MpyCQK6WpXE0zkCN/09TGk+LmGiFiWuuewek+WqC4MGSdytG57b2RmIAJuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4461 Content-Type: text/plain; charset="utf-8" From: Nicolas Rybowski This patch adds a base for MPTCP specific tests. It is currently limited to the is_mptcp field in case of plain TCP connection because there is no easy way to get the subflow sk from a msk in userspace. This implies that we cannot lookup the sk_storage attached to the subflow sk in the sockops program. v4: - add copyright 2022 (Andrii) - use ASSERT_* instead of CHECK_FAIL (Andrii) - drop SEC("version") (Andrii) - use is_mptcp in tcp_sock, instead of bpf_tcp_sock (Martin & Andrii) Acked-by: Matthieu Baerts Co-developed-by: Geliang Tang Signed-off-by: Geliang Tang Signed-off-by: Nicolas Rybowski --- MAINTAINERS | 1 + tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + tools/testing/selftests/bpf/config | 1 + tools/testing/selftests/bpf/network_helpers.c | 43 ++++-- tools/testing/selftests/bpf/network_helpers.h | 4 + .../testing/selftests/bpf/prog_tests/mptcp.c | 136 ++++++++++++++++++ .../testing/selftests/bpf/progs/mptcp_sock.c | 53 +++++++ 7 files changed, 231 insertions(+), 8 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/mptcp.c create mode 100644 tools/testing/selftests/bpf/progs/mptcp_sock.c diff --git a/MAINTAINERS b/MAINTAINERS index 0ea12c2b53f3..fe03a22d7fe1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13798,6 +13798,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/*/*mptcp*.c F: tools/testing/selftests/net/mptcp/ =20 NETWORKING [TCP] diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index b1ede6f0b821..22e0c8849a17 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -81,6 +81,7 @@ struct tcp_sock { __u32 lsndtime; __u32 prior_cwnd; __u64 tcp_mstamp; /* most recent packet received/sent */ + bool is_mptcp; } __attribute__((preserve_access_index)); =20 static __always_inline struct inet_connection_sock *inet_csk(const struct = sock *sk) diff --git a/tools/testing/selftests/bpf/config b/tools/testing/selftests/b= pf/config index 8d7faff33c54..a25e15d55918 100644 --- a/tools/testing/selftests/bpf/config +++ b/tools/testing/selftests/bpf/config @@ -55,3 +55,4 @@ CONFIG_NF_CONNTRACK=3Dy CONFIG_USERFAULTFD=3Dy CONFIG_IKCONFIG=3Dy CONFIG_IKCONFIG_PROC=3Dy +CONFIG_MPTCP=3Dy diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/= selftests/bpf/network_helpers.c index 2bb1f9b3841d..c9a2e39e34fc 100644 --- a/tools/testing/selftests/bpf/network_helpers.c +++ b/tools/testing/selftests/bpf/network_helpers.c @@ -21,6 +21,10 @@ #include "network_helpers.h" #include "test_progs.h" =20 +#ifndef IPPROTO_MPTCP +#define IPPROTO_MPTCP 262 +#endif + #define clean_errno() (errno =3D=3D 0 ? "None" : strerror(errno)) #define log_err(MSG, ...) ({ \ int __save =3D errno; \ @@ -73,13 +77,13 @@ int settimeo(int fd, int timeout_ms) =20 #define save_errno_close(fd) ({ int __save =3D errno; close(fd); errno =3D= __save; }) =20 -static int __start_server(int type, const struct sockaddr *addr, +static int __start_server(int type, int protocol, const struct sockaddr *a= ddr, socklen_t addrlen, int timeout_ms, bool reuseport) { int on =3D 1; int fd; =20 - fd =3D socket(addr->sa_family, type, 0); + fd =3D socket(addr->sa_family, type, protocol); if (fd < 0) { log_err("Failed to create server socket"); return -1; @@ -113,8 +117,8 @@ static int __start_server(int type, const struct sockad= dr *addr, return -1; } =20 -int start_server(int family, int type, const char *addr_str, __u16 port, - int timeout_ms) +static int start_server_proto(int family, int type, int protocol, + const char *addr_str, __u16 port, int timeout_ms) { struct sockaddr_storage addr; socklen_t addrlen; @@ -122,10 +126,23 @@ int start_server(int family, int type, const char *ad= dr_str, __u16 port, if (make_sockaddr(family, addr_str, port, &addr, &addrlen)) return -1; =20 - return __start_server(type, (struct sockaddr *)&addr, + return __start_server(type, protocol, (struct sockaddr *)&addr, addrlen, timeout_ms, false); } =20 +int start_server(int family, int type, const char *addr_str, __u16 port, + int timeout_ms) +{ + return start_server_proto(family, type, 0, addr_str, port, timeout_ms); +} + +int start_mptcp_server(int family, const char *addr_str, __u16 port, + int timeout_ms) +{ + return start_server_proto(family, SOCK_STREAM, IPPROTO_MPTCP, addr_str, + port, timeout_ms); +} + int *start_reuseport_server(int family, int type, const char *addr_str, __u16 port, int timeout_ms, unsigned int nr_listens) { @@ -144,7 +161,7 @@ int *start_reuseport_server(int family, int type, const= char *addr_str, if (!fds) return NULL; =20 - fds[0] =3D __start_server(type, (struct sockaddr *)&addr, addrlen, + fds[0] =3D __start_server(type, 0, (struct sockaddr *)&addr, addrlen, timeout_ms, true); if (fds[0] =3D=3D -1) goto close_fds; @@ -154,7 +171,7 @@ int *start_reuseport_server(int family, int type, const= char *addr_str, goto close_fds; =20 for (; nr_fds < nr_listens; nr_fds++) { - fds[nr_fds] =3D __start_server(type, (struct sockaddr *)&addr, + fds[nr_fds] =3D __start_server(type, 0, (struct sockaddr *)&addr, addrlen, timeout_ms, true); if (fds[nr_fds] =3D=3D -1) goto close_fds; @@ -265,7 +282,7 @@ int connect_to_fd_opts(int server_fd, const struct netw= ork_helper_opts *opts) } =20 addr_in =3D (struct sockaddr_in *)&addr; - fd =3D socket(addr_in->sin_family, type, 0); + fd =3D socket(addr_in->sin_family, type, opts->protocol); if (fd < 0) { log_err("Failed to create client socket"); return -1; @@ -298,6 +315,16 @@ int connect_to_fd(int server_fd, int timeout_ms) return connect_to_fd_opts(server_fd, &opts); } =20 +int connect_to_mptcp_fd(int server_fd, int timeout_ms) +{ + struct network_helper_opts opts =3D { + .timeout_ms =3D timeout_ms, + .protocol =3D IPPROTO_MPTCP, + }; + + return connect_to_fd_opts(server_fd, &opts); +} + int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms) { struct sockaddr_storage addr; diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/= selftests/bpf/network_helpers.h index a4b3b2f9877b..e0feb115b2ae 100644 --- a/tools/testing/selftests/bpf/network_helpers.h +++ b/tools/testing/selftests/bpf/network_helpers.h @@ -21,6 +21,7 @@ struct network_helper_opts { const char *cc; int timeout_ms; bool must_fail; + int protocol; }; =20 /* ipv4 test vector */ @@ -42,11 +43,14 @@ extern struct ipv6_packet pkt_v6; int settimeo(int fd, int timeout_ms); int start_server(int family, int type, const char *addr, __u16 port, int timeout_ms); +int start_mptcp_server(int family, const char *addr, __u16 port, + int timeout_ms); int *start_reuseport_server(int family, int type, const char *addr_str, __u16 port, int timeout_ms, unsigned int nr_listens); void free_fds(int *fds, unsigned int nr_close_fds); int connect_to_fd(int server_fd, int timeout_ms); +int connect_to_mptcp_fd(int server_fd, int timeout_ms); int connect_to_fd_opts(int server_fd, const struct network_helper_opts *op= ts); int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms); int fastopen_connect(int server_fd, const char *data, unsigned int data_le= n, diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c new file mode 100644 index 000000000000..cb0389ca8690 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2020, Tessares SA. */ +/* Copyright (c) 2022, SUSE. */ + +#include +#include "cgroup_helpers.h" +#include "network_helpers.h" + +struct mptcp_storage { + __u32 invoked; + __u32 is_mptcp; +}; + +static int verify_sk(int map_fd, int client_fd, const char *msg, __u32 is_= mptcp) +{ + int err, cfd =3D client_fd; + struct mptcp_storage val; + + if (is_mptcp =3D=3D 1) + return 0; + + err =3D bpf_map_lookup_elem(map_fd, &cfd, &val); + if (!ASSERT_OK(err, "bpf_map_lookup_elem")) + return err; + + if (val.invoked !=3D 1) { + log_err("%s: unexpected invoked count %d !=3D 1", + msg, val.invoked); + err++; + } + + if (val.is_mptcp !=3D 0) { + log_err("%s: unexpected bpf_tcp_sock.is_mptcp %d !=3D 0", + 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; + struct bpf_program *prog; + struct bpf_object *obj; + struct bpf_map *map; + + obj =3D bpf_object__open("./mptcp_sock.o"); + if (libbpf_get_error(obj)) + return -EIO; + + err =3D bpf_object__load(obj); + if (!ASSERT_OK(err, "bpf_object__load")) + goto out; + + prog =3D bpf_object__find_program_by_name(obj, "_sockops"); + if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name")) { + err =3D -EIO; + goto out; + } + + prog_fd =3D bpf_program__fd(prog); + if (!ASSERT_GE(prog_fd, 0, "bpf_program__fd")) { + err =3D -EIO; + goto out; + } + + map =3D bpf_object__find_map_by_name(obj, "socket_storage_map"); + if (!ASSERT_OK_PTR(map, "bpf_object__find_map_by_name")) { + err =3D -EIO; + goto out; + } + + map_fd =3D bpf_map__fd(map); + if (!ASSERT_GE(map_fd, 0, "bpf_map__fd")) { + err =3D -EIO; + goto out; + } + + err =3D bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_SOCK_OPS, 0); + if (!ASSERT_OK(err, "bpf_prog_attach")) + goto out; + + client_fd =3D is_mptcp ? connect_to_mptcp_fd(server_fd, 0) : + connect_to_fd(server_fd, 0); + if (!ASSERT_GE(client_fd, 0, "connect to fd")) { + err =3D -EIO; + goto out; + } + + err +=3D is_mptcp ? verify_sk(map_fd, client_fd, "MPTCP subflow socket", = 1) : + verify_sk(map_fd, client_fd, "plain TCP socket", 0); + + close(client_fd); + +out: + bpf_object__close(obj); + return err; +} + +void test_base(void) +{ + int server_fd, cgroup_fd; + + cgroup_fd =3D test__join_cgroup("/mptcp"); + if (CHECK_FAIL(cgroup_fd < 0)) + return; + + /* without MPTCP */ + server_fd =3D start_server(AF_INET, SOCK_STREAM, NULL, 0, 0); + if (CHECK_FAIL(server_fd < 0)) + goto with_mptcp; + + CHECK_FAIL(run_test(cgroup_fd, server_fd, false)); + + close(server_fd); + +with_mptcp: + /* with MPTCP */ + server_fd =3D start_mptcp_server(AF_INET, NULL, 0, 0); + if (CHECK_FAIL(server_fd < 0)) + goto close_cgroup_fd; + + CHECK_FAIL(run_test(cgroup_fd, server_fd, true)); + + close(server_fd); + +close_cgroup_fd: + close(cgroup_fd); +} + +void test_mptcp(void) +{ + if (test__start_subtest("base")) + test_base(); +} diff --git a/tools/testing/selftests/bpf/progs/mptcp_sock.c b/tools/testing= /selftests/bpf/progs/mptcp_sock.c new file mode 100644 index 000000000000..bc09dba0b078 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/mptcp_sock.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2020, Tessares SA. */ +/* Copyright (c) 2022, SUSE. */ + +#include +#include +#include "bpf_tcp_helpers.h" + +char _license[] SEC("license") =3D "GPL"; + +struct mptcp_storage { + __u32 invoked; + __u32 is_mptcp; +}; + +struct { + __uint(type, BPF_MAP_TYPE_SK_STORAGE); + __uint(map_flags, BPF_F_NO_PREALLOC); + __type(key, int); + __type(value, struct mptcp_storage); +} socket_storage_map SEC(".maps"); + +SEC("sockops") +int _sockops(struct bpf_sock_ops *ctx) +{ + struct mptcp_storage *storage; + int op =3D (int)ctx->op; + struct tcp_sock *tsk; + struct bpf_sock *sk; + bool is_mptcp; + + if (op !=3D BPF_SOCK_OPS_TCP_CONNECT_CB) + return 1; + + sk =3D ctx->sk; + if (!sk) + return 1; + + tsk =3D bpf_skc_to_tcp_sock(sk); + if (!tsk) + return 1; + + is_mptcp =3D bpf_core_field_exists(tsk->is_mptcp) ? tsk->is_mptcp : 0; + storage =3D bpf_sk_storage_get(&socket_storage_map, sk, 0, + BPF_SK_STORAGE_GET_F_CREATE); + if (!storage) + return 1; + + storage->invoked++; + storage->is_mptcp =3D is_mptcp; + + return 1; +} --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146510pis; Wed, 11 May 2022 00:57:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwdj1aDi7s8kSHPV9wbUpp95UxYBPyJVuvXf15Gs4nO0pi/46k1CAAa7gS2EltdWv3GETHJ X-Received: by 2002:a17:906:1e94:b0:6b9:6fcc:53fd with SMTP id e20-20020a1709061e9400b006b96fcc53fdmr23373428ejj.450.1652255820974; Wed, 11 May 2022 00:57:00 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id sg34-20020a170907a42200b006e86aac6b67si1826320ejc.351.2022.05.11.00.57.00 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:00 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5231-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=cBJTXl+Z; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5231-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5231-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 888CC2E09E1 for ; Wed, 11 May 2022 07:56:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 176EA15DE; Wed, 11 May 2022 07:56:58 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 5371C15B9 for ; Wed, 11 May 2022 07:56:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255814; 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=eoiVZEh+M5aKGceU9M1TVHD8wAdcjp3OPj/yUu0ouVQ=; b=cBJTXl+ZW8wJ1Hn2ss8fTlsPvB9yjoo96piLYRVO4Gf2TfsaNDNSXi6ztKRmJgDNeExvAH ZbgbpJNONa19ES1vvTuFXx8RCjVPfzxh2TU+hS/vwR5RBDiYW4Emz2KmQyKwVXdeOj28M3 NAIo2Dc/IPrxCQZ7aScypvV9gvIKYCE= Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2107.outbound.protection.outlook.com [104.47.18.107]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-20-l6Xant_2NmWSPGNK4QWY0A-1; Wed, 11 May 2022 09:56:52 +0200 X-MC-Unique: l6Xant_2NmWSPGNK4QWY0A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Qfz94Nx8tw81TdPlwbiQdm8WKqMURUtUD4ZEzFmr81NVYHN/BXWsU7tsFUkdnf1KMql3cDVxoByRXhGyPF1+O8EZHuvb7GOUC5l35/W6rPdbppTPDwk5cIhgrZGiu7nl0Dl24LM/IdYRuycMG3Sn5zCfuhmKekUwtb5ZgpGMTU5XOUYJTpSQxFl+/jYvT7xvV7gDwMG3D/KbmJn59Sau2LM2rm8+PusfrnVBDliXmHs/O+cCZXMUUURO9cgh4Tu+wtZI6rl/zcBvYOIs75lwxVXbebTixIxmol32dRBgpB8dnxiQS7zu6KhUwhy2AGCDdzFWwp06gc3tHcYFWl1uSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=J4SzUhMAcpIqyzFHPAC5lL4EI1/Noit4FFmG0HiLlqo=; b=NG28Qu9AUb3pQEXwlBLZoM1WSj/WMaAT6WnI7VyIjxphkRm3HnhS0PsHfypeKhkCiz5PtS1rCTw62bAAPPYaxi5L2GGITzCdeZ2Q1hoHQE6QgLeL6ASrovty1Ot9VtULgy3o00JHSzVhyU015ub29bjRjCIPLak9TI4y4yo43aYllb6sgCV0HzvJl6Xvk0mzSK8TiF5MbVhKd7yWm0b2pecoyTUViSwuT59d0J0yXMBGWhwSwfggTSKFJEw0vmHyoUa5k9S0MpUINW+7R8ThpLGTzKFN+kpgzz4dZUo3TGZm53OxMwC64dOnWnoGps0m2XqlNS/z+CqqOPC87OT+oQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR04MB4461.eurprd04.prod.outlook.com (2603:10a6:803:70::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21; Wed, 11 May 2022 07:56:50 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:56:50 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Mat Martineau , Matthieu Baerts Subject: [PATCH mptcp-next v2 04/14] selftests/bpf: test bpf_skc_to_mptcp_sock Date: Wed, 11 May 2022 15:56:10 +0800 Message-ID: <729546874e1175dac710097855a555e71937f0fd.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR01CA0050.apcprd01.prod.exchangelabs.com (2603:1096:4:193::21) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cb95b635-6c0a-457b-0864-08da3323ce1d X-MS-TrafficTypeDiagnostic: VI1PR04MB4461:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RbvPpjaMe/iyMmA3G1hEKFaldHRM0TNIYLpkGFOWWguTH9MwoYwbl2B2tG96boik//B4NbZnuCGxIZ0Dg8pUZ+8kmhaMRhB8Lo7gk5rIaYLLlJaOg+T9G9FITgWlkcAXwuXPWhZkblYuGpjby7JrrPhS/wy8FvfIJTBEkT2C107Y8XFgs5FoWzHjlUu2r0GGQnfP5dtx2ZkyVcvo8OhhcA4GiX73Vco8nhFbnTJpS72qPlwuQK1ErqksU1PmWigRPsQg1L9/IQCLDNehy0Gbrq+i0cSCfE3wqPsOrx29dOg/Rvy0+vT2emU/9g6G8n22dgZWIM3je0QMWCzJX0ZONxMFWnEXAsR88/4Tb6VpPHcUR+E7gcLvkTiJQi+DoCs0Lmv3FknOIHT+R80IYcknBs4lku01mXoSu+Jrlt7xu79Mo7n/ORpc3E4BfkucY0kDkCWd+l8fA4LklBtOApuEtS/FKDaKPiRhAcYh3UQC6M3KBJ8vMFzY+i2d6SuRhPcLoMOtpBZ4HpnBrLBzNgJXHwPBJBhDEYhzGlokrTx81OYeYIDFDOFbmx2/e3mgdm7QV5Q0a0FnZHmXy06MMhkYQ1w4u0N3JXItSMaa3bl9OyZDpVsbDPlh07+ML8J5AfDSyyGSVfiP0lKqyv8zq9kL9GeekDC97VUGBIsmyIQaRlN882QenpdjxPy08BteJOYx X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(38100700002)(508600001)(5660300002)(8936002)(316002)(66476007)(54906003)(66556008)(36756003)(186003)(66946007)(6916009)(6512007)(86362001)(2616005)(4326008)(8676002)(26005)(6666004)(83380400001)(6486002)(6506007)(44832011)(2906002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?x2gSLJ8XjohH04Bg1dHUvsp9IvlNh0t0j4OqsYebocCdBhABkrpGQ8Y+dNj8?= =?us-ascii?Q?XqGXh3XvxtbGlpXEYMN8LttSw1IU+vUk2WH0o5nyLJMZDnUa10E3H3yfmJLY?= =?us-ascii?Q?zaN9JN5bQUfVm43YjOgZdb/MgD2wQcDlue8bLYiqhSxaXGZyy9W36/P+/mQw?= =?us-ascii?Q?Uv2vLkQsTkbdy2MuGuj5FejAY3RWjZLrTHDtIwBxVsn4M5Kr7rtIJk0Oo28x?= =?us-ascii?Q?1w5ZrYmqNGqwn8YXimGS+MJ2js6YfBoYUrCRf9HtQlI29t9XBJ8rPGRP74re?= =?us-ascii?Q?xcoDNEr2e8CgMscmBIiHFPvalZM/nJEh0ANNL/ILMd+2PH8L0MUbtaJPalxU?= =?us-ascii?Q?kwzXLSWJoyRFw66QerupmO/SX8NGcJSVXQIaKPWR3JjNxrdmvCzmhmuw3F3P?= =?us-ascii?Q?ox5ZJjXABVeGTu8uDx+V8WyvnpehzwQGgBACY9VbNUR1t8Zx9aqe5BGJDdbR?= =?us-ascii?Q?Eov+gAVTtgyplAz10DsUV5PGdmtCDNrxoeasRIQyQmFdeYhFTRaJBPjL193L?= =?us-ascii?Q?WP8QqntO7kUfs3e6xKAHR6XfkxDYJrO6KKmFr5g2ArlkfnKnkUw6PFNpNvXq?= =?us-ascii?Q?EzLn1Xs4e3Guu5mU7joE0b2D28sc2RYSmsFo1F9dLtxNNnpGBYm/LXf6EoXy?= =?us-ascii?Q?i5INm2YBw2Az8lig6N1ZCoGEVirHUj0YftGoVwuc/KRYY+TV/t5SMPsfaf+C?= =?us-ascii?Q?rP35AzzOJngdsnecEHCu5Rh5awjSsSswysumiwzdTFcsbN0Av/HPx1Ms+xvS?= =?us-ascii?Q?/Alz4mQyEFkTXNaDl69MhZ/yz9R8mL+JInlCgkKmCN7KhaPutDQkBnAaLUhY?= =?us-ascii?Q?3YOjAgSHFJjHcJe9LmeGDhkH3KYdY9fmePk5n7xDi2IkwYsbmEcFil69u5Xy?= =?us-ascii?Q?8z+xdvnZ0prKpn+o5UQ2ESOo8djq8XQ/QTgn5rQTGAMb9vpbbTFMm4Qufi3t?= =?us-ascii?Q?zI6SBZvl1LAIWJcix8t/g/tLB0NoxKE+dKvgzTx0pE/y41gHYQL+DTf/hnBw?= =?us-ascii?Q?W2XgRWcgTOz1AEU5NdDtW8tRH/hiodl9hwD1mF3o+NEaiLw9zo5HYoriYW1R?= =?us-ascii?Q?nyjN0osrF0UmCOn+1NXSoKTlO25qLC+s+6B0WG/ym+tez3SBZRVjH8bdwW6X?= =?us-ascii?Q?PJgp2LNSwJNPf/gBJkkYfIdA/rW9NOB5AEr+KPRURhoGda86J4FOYSNq7jNZ?= =?us-ascii?Q?uVUK2o00uw+QCJTbSHodmOls67Oo/0WJo56nt6RlPvk3tg6eZSSG5Ve7yy+r?= =?us-ascii?Q?Q6AYUu9icPSXddlMbARb6BDpUYfmuUsb8Qu65zydOOn/QgDlfCzMMwU1Tya1?= =?us-ascii?Q?SMzS5c62PR0mETy14WlP3ADOjJGZUEri0Ki4PMwPWFUGvD9Z+6Dzz8xYfXT4?= =?us-ascii?Q?JOevXWJ174X5OE3Vkw9H+29RNa8xHiCFprOFUAAFgdv8RRAWxWau6cqq6sOm?= =?us-ascii?Q?3PFVXxeaHEIUxH6xIx6ijpnhcLx5zo0nSTdELdsJct+QgBF26X1vsC/3vGo+?= =?us-ascii?Q?PZjiMy7EmeSLdfH/5vV5CD3gIuN2bGi3wTcPW51irdJSYSv+tO1TLIkcUf0J?= =?us-ascii?Q?yyaR3VfawLHvZ6AnClidPGu9e61nCNdJ+a6dJQFGZ8faPKuKyT6NjTKcIhL/?= =?us-ascii?Q?2AWBCZRDgU1qdeeDg1C955bKwCbEn2ydOVQ9dMyCRI4FLUWhXVuBFkCnYpu4?= =?us-ascii?Q?2bd9VlBQY7Prsx9slgm11KFqttabFw2MnrZ7SCbIZh0JfTBWenccR5bTYEmE?= =?us-ascii?Q?DXcEfEPPyeTV0J7BHR1gNLxmpIFfVrg=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb95b635-6c0a-457b-0864-08da3323ce1d X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:56:50.3883 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SZLj2i1c2YCJV6n06v5HTp8julFetAfbAfj/81F8lPGJ5bDO71U6r0Ku0yYgSndAZBYBC8mWvuVo6rKXG7re6w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4461 Content-Type: text/plain; charset="utf-8" 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 v4: - use ASSERT_* instead of CHECK_FAIL (Andrii) - drop bpf_mptcp_helpers.h (Andrii) Acked-by: Mat Martineau Acked-by: Matthieu Baerts Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/bpf_tcp_helpers.h | 5 +++ .../testing/selftests/bpf/prog_tests/mptcp.c | 45 ++++++++++++++----- .../testing/selftests/bpf/progs/mptcp_sock.c | 23 ++++++++-- 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index 22e0c8849a17..90fecafc493d 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -226,4 +226,9 @@ static __always_inline bool tcp_cc_eq(const char *a, co= nst char *b) extern __u32 tcp_slow_start(struct tcp_sock *tp, __u32 acked) __ksym; extern void tcp_cong_avoid_ai(struct tcp_sock *tp, __u32 w, __u32 acked) _= _ksym; =20 +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 cb0389ca8690..02e7fd8918e6 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -11,14 +11,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, cfd =3D client_fd; struct mptcp_storage val; =20 - if (is_mptcp =3D=3D 1) - return 0; - err =3D bpf_map_lookup_elem(map_fd, &cfd, &val); if (!ASSERT_OK(err, "bpf_map_lookup_elem")) return err; @@ -38,6 +36,31 @@ 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, cfd =3D client_fd; + struct mptcp_storage val; + + err =3D bpf_map_lookup_elem(map_fd, &cfd, &val); + if (!ASSERT_OK(err, "bpf_map_lookup_elem")) + return err; + + 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 +111,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 @@ -103,25 +126,25 @@ void test_base(void) int server_fd, cgroup_fd; =20 cgroup_fd =3D test__join_cgroup("/mptcp"); - if (CHECK_FAIL(cgroup_fd < 0)) + if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup")) return; =20 /* without MPTCP */ server_fd =3D start_server(AF_INET, SOCK_STREAM, NULL, 0, 0); - if (CHECK_FAIL(server_fd < 0)) + if (!ASSERT_GE(server_fd, 0, "start_server")) goto with_mptcp; =20 - CHECK_FAIL(run_test(cgroup_fd, server_fd, false)); + ASSERT_OK(run_test(cgroup_fd, server_fd, false), "run_test tcp"); =20 close(server_fd); =20 with_mptcp: /* with MPTCP */ server_fd =3D start_mptcp_server(AF_INET, NULL, 0, 0); - if (CHECK_FAIL(server_fd < 0)) + if (!ASSERT_GE(server_fd, 0, "start_mptcp_server")) goto close_cgroup_fd; =20 - CHECK_FAIL(run_test(cgroup_fd, server_fd, true)); + ASSERT_OK(run_test(cgroup_fd, server_fd, true), "run_test mptcp"); =20 close(server_fd); =20 diff --git a/tools/testing/selftests/bpf/progs/mptcp_sock.c b/tools/testing= /selftests/bpf/progs/mptcp_sock.c index bc09dba0b078..3feb7ff578e2 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_sock.c +++ b/tools/testing/selftests/bpf/progs/mptcp_sock.c @@ -7,6 +7,7 @@ #include "bpf_tcp_helpers.h" =20 char _license[] SEC("license") =3D "GPL"; +extern bool CONFIG_MPTCP __kconfig; =20 struct mptcp_storage { __u32 invoked; @@ -24,6 +25,7 @@ SEC("sockops") int _sockops(struct bpf_sock_ops *ctx) { struct mptcp_storage *storage; + struct mptcp_sock *msk; int op =3D (int)ctx->op; struct tcp_sock *tsk; struct bpf_sock *sk; @@ -41,11 +43,24 @@ int _sockops(struct bpf_sock_ops *ctx) return 1; =20 is_mptcp =3D bpf_core_field_exists(tsk->is_mptcp) ? tsk->is_mptcp : 0; - storage =3D bpf_sk_storage_get(&socket_storage_map, sk, 0, - BPF_SK_STORAGE_GET_F_CREATE); - if (!storage) - return 1; + if (!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 is_mptcp; =20 --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146539pis; Wed, 11 May 2022 00:57:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxQQxk4+HCk7HSuA1EK+rKt/qQ27Y3xVwneZxuDAdO+Xubmdosq8XAL85nqJMH2HuuyMCGX X-Received: by 2002:a05:6402:845:b0:427:d812:8f68 with SMTP id b5-20020a056402084500b00427d8128f68mr27862793edz.73.1652255825927; Wed, 11 May 2022 00:57:05 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id e3-20020a056402148300b00428adf86b79si1396268edv.77.2022.05.11.00.57.05 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:05 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5232-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=J9FUlhRi; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5232-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5232-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 9B11C2E09E8 for ; Wed, 11 May 2022 07:57:03 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2CB6615DE; Wed, 11 May 2022 07:57:02 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 401AA15B9 for ; Wed, 11 May 2022 07:57:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255818; 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=tmSPwUIsn5U0TGl/705p2xAwdQ6zDZYXbnI8RlgkYeY=; b=J9FUlhRi3gYocfqtYsOZbgP448YgNj7oaPwAK9PePDY5yrh+DRpvYBLp0fFbQQSznO8n0l ZmNgjVVhvAbZaX81gKzfA19MAmURCESosVF+9ZKlLF1TRkAZ/tP6vsx+E6VpgCK1kpMESZ TmfSzvbVRzoKuHcVALV1+CPQRPIV+oM= Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2057.outbound.protection.outlook.com [104.47.2.57]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-34-PINpv5dkMzCc10drGrfTWQ-1; Wed, 11 May 2022 09:56:57 +0200 X-MC-Unique: PINpv5dkMzCc10drGrfTWQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QEJ1NfVfoWBhA8EtH2HYqj8H9mX2Q+UuSt2KfTWN48GeWFDh/Y+dvgOAicnjom6xwSrna3gyAWpsdDWSYKymfQs34pUbb+ILUOynMvoS4tgtp1iekQZn4TPYug8ztG+49KAm/Q7I3PvKF9Es2hzjIplFh3JOdlw/Zb7DVgUytqTWgmNovCHkbo+awhC1QPPNpHQaaT82waZ1jeZhxblNtDLV18GaczF9RxY9ejTyquPXesd0Sbr7aPldCXsGB8GRsCA5oBee/LhdZCpTN1hNV1jB7m+EwLpc67JaIiCxzERBvw930L7i6bYYMIBqQ5JivmjDpu/EXgT3LPte+pzpNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Tnn3/X0CNl3doandydVGG5pk4HZd/VNDVXt/sb6J334=; b=e0gizi5/EtyL+/B/b0nl5DCwTc9KxzrmjHwgAIzCMcwI2I42dTzYLWfPAhaQZ9MrCeIKfc/RYUQ5hajRqBJqNOpCW2uWSb6YC0MkWrClb8XnYVb7A50f9ivugsx7vPgASE6bjCe1qRK/3LgkRaPUaor07teVw5CY48swrfSx4z++oYsrYaSQwkBUGjhmj6T5DTnFaP42xnNZAA4xeVUPjogrGn8HO1mJQH9o5PLl8KZhjsWSlieiu23fUYkltZA4yCVW1xZmbgsj7D/pdbZ/o0Jkx4XFacJguvCmPj/PwtGmF9nRwfzStUjQnsIz0LpiDnG3rXHBEVTg16UyVbqH8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR0401MB2653.eurprd04.prod.outlook.com (2603:10a6:800:57::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Wed, 11 May 2022 07:56:56 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:56:56 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Matthieu Baerts , Mat Martineau Subject: [PATCH mptcp-next v2 05/14] selftests/bpf: verify token of struct mptcp_sock Date: Wed, 11 May 2022 15:56:11 +0800 Message-ID: <13b4279be26400df1eb925f816e3a426a832e11e.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:196::10) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aba8d370-aa2e-4902-f8b8-08da3323d187 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2653:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E00gaOEKDrfJc/QCd0iPfnm/G2JTf3WohzYA6ZK3d9qV5JpyORRIrM5RWF77VRmgKz5S0w2eP2+fMyu7KeVaRmAETpgsTjNVhq43gEAWiC0MWyjEAQwtURNcLFUEmjDTfJVIJOV9V1ednNoMSmR5nMtIT4VJKf9frynbe9iYUVJfgZPzd07V+vCX+DwYI0gIReuG8EIUyacGg/YWPfXDoa/WUi8CgnKqu/Kws9FcEW/34Wmtl4MmOULskFVc30aZbNbB33okOWjGECt5Y6Ec0TdUjeMkUsBC6cVTXHMBOQpG01JWNcygdXZUVMr7Y8BQbAzVS3X7Kj801dnj+GeqxzhIIN/dWKiJJuxa8klz4uurA5aD8UaVHvPHwTVUIfixY21ZIo9A8QDbOaJBOTtGsXO8Vgn9YflgJeqKa+QpNzParRx7GkaogvN1PUJeTRVHfkpGY40ZESI2Ux9VYeUqdmEP8xBrXvgFRhk2Msm3NhrtEBPj2oIg+nwJx7pecIZIAn4TRpnREjXAKDMrEqeMxuhw4ZpOcSFNKBay55GEe6k6qb98l+bFzEOTcog/f+92TArQ3HADR5AqqBQPEl8RSRj0gDSIq0zFe+nwq7aWQ7tP8pJlVR93688Abye7eGvoEiylK2Nz9DmlLa3kG3MrsvSOHQ4kd6qjDrhg+tm9jb4tWE5WMdhwKNMRPI/7bsgn X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66556008)(66946007)(66476007)(186003)(6512007)(86362001)(4326008)(8676002)(44832011)(36756003)(6506007)(26005)(2616005)(508600001)(6666004)(6486002)(316002)(6916009)(54906003)(15650500001)(83380400001)(2906002)(38100700002)(8936002)(5660300002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ANDJzLOXEh/d4Lsbpi9iWXGOabqZjPZxnV+W2jlja8RhL2Ao+gf+Z2WzPwQZ?= =?us-ascii?Q?l00zWEdg591pQ/j6uh6AgzK1SZ9WFodT5QGP448s4e0/Jjwd5IDG0j0ZDFc7?= =?us-ascii?Q?UgtNCW63oTwux4ZxFlQ1G8JundXs/Xs222XeWpfZPqaSJX5gWQeuKg2augjm?= =?us-ascii?Q?+Phr77dHvKI4kXhUptwFOsEEvvk7LwfnQJd8EzzGKi+jucclxnE0SW36iP00?= =?us-ascii?Q?ddOtO2Zy5kqXoqXUNqL5g2QlgF8Y5MYyuiq5BhzYvj1Nh26+hcp70QjE8n6f?= =?us-ascii?Q?5K6adSjfNS0pLdZJurJcpV64b7UqEq4D+LacIT4eDfr1dy0e9SL7zOeyJ93m?= =?us-ascii?Q?NGFdKeM+5fSe24CVfKDX5IziBg9sc4nOJCp4riNlquGgU4F9uDM9IRHWgV5p?= =?us-ascii?Q?1l79T7XV1afV+c33P9a/cx6jID+G/A5x/1CGmLhBI2tkHh3FnkbhhjNH0/LL?= =?us-ascii?Q?8DFPu6YzPEJCOdiBtg9MBFRci8x1QmWrKOfAXVbJTEIohO1zuTA0wuXY3lbf?= =?us-ascii?Q?X5A4Gszc2v8O42CUKJwss79F9goLQBXnWX5MLgmoCX1tWjHPXcmVIacXcy65?= =?us-ascii?Q?Vt+8d54jLpQXBLahzGLh4G1zibC5UFeZAMTtZav4X55qIAuXpez+N6pxj2tu?= =?us-ascii?Q?JY5Ij9BDCt6fFBQ4oWEICZLXwGy7egzG/jUGyb4DmU+k+IVnKtV+hLwIIcB6?= =?us-ascii?Q?8J/82j3ao+tAHDBUnLNm+kdzj4MtS8eg1w8+7KpeN68KouU/busfGFs+RaeP?= =?us-ascii?Q?4sQw6Vla7X02CwostrFPb2P6qeWiiKLsDru1+xYQjzwU6pexAr5e+8z74/u3?= =?us-ascii?Q?5pCRVMRLHbsvYpvpBgkAaJgSOwDmwzjDaPHK/YccID+qjnwO+4gptXYgOCff?= =?us-ascii?Q?o8/8gh73dxAonlmgA7IIruPxDNd72XkEvwEHGFuImsivyXqdapl6k3NsrNU9?= =?us-ascii?Q?ivB+85tLo6oKtvKz+gZ+msd1p++EMITAaugqJ+3DpRdG6q31kMD0L8K4MGDI?= =?us-ascii?Q?Kc/BytCw8zUBzk9tfsD83nt5OQvSFu6aVsI5gmHjb0Wfio/mrBmIjGTeXJIO?= =?us-ascii?Q?FBPMIRKwiTAvPaOIUvXfs5Pwl1NXhDMBp1dopMrlsrSCAmWrieRcbfQifKja?= =?us-ascii?Q?Rf5AR3XRXaglzpiv8Q9ZY5HDfq/Pr1wsojfJN+tnMHeCx8Xh4LCPpiZm2vS2?= =?us-ascii?Q?tlDGox5Lc7HrF8vx/avNh3xOigzI4aDQSg2V+r8Dq02FLQ5Fs15b0RiBUpgM?= =?us-ascii?Q?TeZCMVGYSrI3gsQT0oM+xjzu30obvOLiI+Lm800VNaRllt15w6Z5OOlhhWk+?= =?us-ascii?Q?SsEA/0yFRCMQoP1N5q5plPzpIwpiSWcPoybz2evE7yZiXTKwT6jbfMJC4zdW?= =?us-ascii?Q?kBxk+9n+zePy0fN4s395OlNE5TWYGFemnxw0NTeu2BSk97WKBB0BfuqoxiuX?= =?us-ascii?Q?rV2tt46DkLm4pUTUu2gMe7253IdCy4dfNYIPZ3FhjnAFdabr5IXNntYsP9XN?= =?us-ascii?Q?JoVcP7uzCroANp9Rc+vArR3nZDTzTJ2CFyk6Ccs5sCDANNtZB9IbO0rU7YTw?= =?us-ascii?Q?VgIOwvamM7npLwf4fwDXaENWse6Ta/pFuVQlxc69KDRWV/Rm6o9eHLGkiWoU?= =?us-ascii?Q?Lq01Hzb2wxiIB3Pv4baeLARHlKENgSIrmPF3VUdNdc0VttG184vyEwSdzMgY?= =?us-ascii?Q?YmbkqKzYNGKjaNcU3w1u99u5PRDVn3/sxHkUtLa8sYbBA7W8zAYDSUJouhjM?= =?us-ascii?Q?vRFSBIYhL5gaOeDcmdFM1zghLeEtaNU=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: aba8d370-aa2e-4902-f8b8-08da3323d187 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:56:56.1223 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: moDgb1IVRpjpO7885foSwQjniNKocqxvHhPLjelpOjKWe59P/iv9pM1HZi33kyBPsuHeBkx3kGo6wnl39lrrAw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2653 Content-Type: text/plain; charset="utf-8" This patch verifies the struct member token of struct mptcp_sock. Add a new function get_msk_token() to parse the msk token from the output of the command 'ip mptcp monitor', and verify it in verify_msk(). v4: - use ASSERT_* instead of CHECK_FAIL (Andrii) - skip the test if 'ip mptcp monitor' is not supported (Mat) Acked-by: Matthieu Baerts Acked-by: Mat Martineau Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + .../testing/selftests/bpf/prog_tests/mptcp.c | 64 +++++++++++++++++++ .../testing/selftests/bpf/progs/mptcp_sock.c | 5 ++ 3 files changed, 70 insertions(+) diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index 90fecafc493d..422491872619 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -229,6 +229,7 @@ extern void tcp_cong_avoid_ai(struct tcp_sock *tp, __u3= 2 w, __u32 acked) __ksym; struct mptcp_sock { struct inet_connection_sock sk; =20 + __u32 token; } __attribute__((preserve_access_index)); =20 #endif diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index 02e7fd8918e6..ac98aa314123 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -9,8 +9,11 @@ struct mptcp_storage { __u32 invoked; __u32 is_mptcp; + __u32 token; }; =20 +static char monitor_log_path[64]; + static int verify_tsk(int map_fd, int client_fd) { char *msg =3D "plain TCP socket"; @@ -36,11 +39,52 @@ static int verify_tsk(int map_fd, int client_fd) return err; } =20 +/* + * Parse the token from the output of 'ip mptcp monitor': + * + * [ CREATED] token=3D3ca933d3 remid=3D0 locid=3D0 saddr4=3D127.0.0.= 1 ... + * [ CREATED] token=3D2ab57040 remid=3D0 locid=3D0 saddr4=3D127.0.0.= 1 ... + */ +static __u32 get_msk_token(void) +{ + char *prefix =3D "[ CREATED] token=3D"; + char buf[BUFSIZ] =3D {}; + __u32 token =3D 0; + ssize_t len; + int fd; + + sync(); + + fd =3D open(monitor_log_path, O_RDONLY); + if (!ASSERT_GE(fd, 0, "Failed to open monitor_log_path")) + return token; + + len =3D read(fd, buf, sizeof(buf)); + if (!ASSERT_GT(len, 0, "Failed to read monitor_log_path")) + goto err; + + if (strncmp(buf, prefix, strlen(prefix))) { + log_err("Invalid prefix %s", buf); + goto err; + } + + token =3D strtol(buf + strlen(prefix), NULL, 16); + +err: + close(fd); + return token; +} + static int verify_msk(int map_fd, int client_fd) { char *msg =3D "MPTCP subflow socket"; int err, cfd =3D client_fd; struct mptcp_storage val; + __u32 token; + + token =3D get_msk_token(); + if (!ASSERT_GT(token, 0, "Unexpected token")) + return -1; =20 err =3D bpf_map_lookup_elem(map_fd, &cfd, &val); if (!ASSERT_OK(err, "bpf_map_lookup_elem")) @@ -58,6 +102,12 @@ static int verify_msk(int map_fd, int client_fd) err++; } =20 + if (val.token !=3D token) { + log_err("Unexpected mptcp_sock.token %x !=3D %x", + val.token, token); + err++; + } + return err; } =20 @@ -123,6 +173,7 @@ static int run_test(int cgroup_fd, int server_fd, bool = is_mptcp) =20 void test_base(void) { + char cmd[256], tmp_dir[] =3D "/tmp/XXXXXX"; int server_fd, cgroup_fd; =20 cgroup_fd =3D test__join_cgroup("/mptcp"); @@ -140,6 +191,17 @@ void test_base(void) =20 with_mptcp: /* with MPTCP */ + if (system("ip mptcp help 2>&1 | grep -q monitor")) { + test__skip(); + goto close_cgroup_fd; + } + if (!ASSERT_OK_PTR(mkdtemp(tmp_dir), "mkdtemp")) + goto close_cgroup_fd; + snprintf(monitor_log_path, sizeof(monitor_log_path), + "%s/ip_mptcp_monitor", tmp_dir); + snprintf(cmd, sizeof(cmd), "ip mptcp monitor > %s &", monitor_log_path); + if (!ASSERT_OK(system(cmd), "ip mptcp monitor")) + goto close_cgroup_fd; server_fd =3D start_mptcp_server(AF_INET, NULL, 0, 0); if (!ASSERT_GE(server_fd, 0, "start_mptcp_server")) goto close_cgroup_fd; @@ -147,6 +209,8 @@ void test_base(void) ASSERT_OK(run_test(cgroup_fd, server_fd, true), "run_test mptcp"); =20 close(server_fd); + snprintf(cmd, sizeof(cmd), "rm -rf %s", tmp_dir); + system(cmd); =20 close_cgroup_fd: close(cgroup_fd); diff --git a/tools/testing/selftests/bpf/progs/mptcp_sock.c b/tools/testing= /selftests/bpf/progs/mptcp_sock.c index 3feb7ff578e2..4890130826c6 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_sock.c +++ b/tools/testing/selftests/bpf/progs/mptcp_sock.c @@ -12,6 +12,7 @@ extern bool CONFIG_MPTCP __kconfig; struct mptcp_storage { __u32 invoked; __u32 is_mptcp; + __u32 token; }; =20 struct { @@ -48,6 +49,8 @@ int _sockops(struct bpf_sock_ops *ctx) BPF_SK_STORAGE_GET_F_CREATE); if (!storage) return 1; + + storage->token =3D 0; } else { if (!CONFIG_MPTCP) return 1; @@ -60,6 +63,8 @@ int _sockops(struct bpf_sock_ops *ctx) BPF_SK_STORAGE_GET_F_CREATE); if (!storage) return 1; + + storage->token =3D msk->token; } storage->invoked++; storage->is_mptcp =3D is_mptcp; --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146570pis; Wed, 11 May 2022 00:57:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7OajQBTujVy5baWDUT4eVs8RDWtVU35x/ZNDDAYGjsRcQkm3zA9rxlYEHOr5Yx+lnpndZ X-Received: by 2002:a17:907:2159:b0:6f3:a307:d01d with SMTP id rk25-20020a170907215900b006f3a307d01dmr22873470ejb.760.1652255831977; Wed, 11 May 2022 00:57:11 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id nd32-20020a17090762a000b006f3dd45a277si2110442ejc.48.2022.05.11.00.57.11 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:11 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5233-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=Ck7EiwuR; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5233-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5233-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id B6DC62E09E6 for ; Wed, 11 May 2022 07:57:09 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 52FCA15DE; Wed, 11 May 2022 07:57:08 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 6EF3515B9 for ; Wed, 11 May 2022 07:57:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255824; 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=2SpBUqF82YcGxUV8LoA3SHgMQyEVY6JxpmipXvwT1K4=; b=Ck7EiwuRWHz1Nm8pBPhXFbJepytpdLTPFoG2YbCsZ+k6D1AZRBaGw8bCAaN+UGUs5hHKCr M3sG/UzNZQo1s0GRwYBYg0HTrC1opQP3/Yc9UhY5F6PASg5OuReCiKTOYVf77HcMLDPDPD gb9C1RrnFwJGg8+NZ3eol06huZC5DmE= Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2058.outbound.protection.outlook.com [104.47.2.58]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-22-M9siTDwNMV6veUVk7GiZuw-1; Wed, 11 May 2022 09:57:03 +0200 X-MC-Unique: M9siTDwNMV6veUVk7GiZuw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UOskHCaEdbMkZlJFP8NrHisGQPTjuvtEIaoQaMXvoMOfv3S8o05X4H0790fWBm3FVNn9pD1Q/MJogYrOdPvTiyaEvQ8NwZq0OQr9ARz/K4dNLM6MeZLie2S9yOvdUMaSFNbn7dmK87AdPzzGv3LkRAvQNy7793MHePXYnY/7LQnvO7dGsU/Nl9qkXt/gCHUImKZiql7NZfgDsvmMDzAr1bBBgAqQQoxaNZAwSg2qYxGXzXubwvZVcgynysDmSZeazcvZMJxf1TU6oOVTYqqBplTUE0CdDvV2IU/lpIthckYOJ+iPcn+/kayycD0iZ+IxFLRVo57AlbYnGklCMvNJvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wf9yf7UmVsH27W6qFBq9WT1ryMXyhCiu10+nip/dPT8=; b=Rj+p5Jp5NqTU6YlfMFy5WWDNjONc05WWav0mT0R2Wy2tlH50PowJmCtT1rMEIafOXZJSrrI4MDBsnmr19qtsGv/GIw17n4A4hDH3SQ+w6BGKcuDgUKoLpPS/+6U7OSI7jWRNVyeq4QuHHAf/YCLd6XNWbig5yvhv3Rb5shoiqu2S92cRXwR1oMMNtva2eAYB8Qk2eLCQ77cPpokgz8uPRSdBZ4jR+4XmoJdP1qvacAD2dDzDtyMj8x4fOgE8viRhrtVD3V62yR8P7WZAIz2k/c3c+HzFuD75eqwY+HKfRcWQS38MG4QISNJDQT2ox4DZfdcA5DtrO8iq0LXlOzz/WQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR0401MB2653.eurprd04.prod.outlook.com (2603:10a6:800:57::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Wed, 11 May 2022 07:57:02 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:02 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Mat Martineau , Matthieu Baerts Subject: [PATCH mptcp-next v2 06/14] selftests/bpf: verify ca_name of struct mptcp_sock Date: Wed, 11 May 2022 15:56:12 +0800 Message-ID: <48d9ec3f7e336e5c92b2458277aa997d4f0f3216.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0038.apcprd02.prod.outlook.com (2603:1096:4:196::22) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f1eae894-1165-4b29-5de0-08da3323d508 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2653:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Pb/MG7hB0B9oEgtZc1ZeDFSrZkmuJCnCYx8gf1z/rb2XlWirP6x9Jc6rp0pYwULeJlDrcp/M3qYqCACgenlUybDOmld0a3h71RE9m9pdKKJGm05X0iHtOosFvidUkVKRDjQHmF1vnwkBYVn3OkkcIpXkzbF9dBUFfaXA4LVJ1uO1w3gYXmUhhXdBZY6WEqtIrCPf3kPDhDdoUtBhtJoiLK5SUb09pnJmmRhMHK6HFArbatFxxFPqrAyPgLPKp5ckJJpcWi2WZYStf2NuruEWacWG10qIxYuCZMEjI9+8ZI/I0aMJvfuOgI7bKazn9Exs8fQmsUp9u71BzHv72qsO1KTnLXg/tuh4t+BSiRjufqNb+FZB/R+j3zIe6L9b8dacyyJA7Viy8KsoAeZbz4+Hb7kuujxmcsWP5CoGqu1D2CcDxuvsrJEN9H9vpbGIAn278dN7eNMlW9qm3bxoG93gJx1S6hmlHGoy6h9tUwj35jrltreChAI8xOmFvwfH4Bn5ndRbjzhxEjGH7CiyyBLyZd8UCeg1P5kXKTo0PfRZWbR2mWpoXBrSU8iyXaLlsV9ESLama9Vylc8x7aU1dpOvG6ZocoUGFuvrGHJO0eK05DoikGzZYH7JwSYlfNyZXzEGJ6enbZj9l9nEIG+2Wn8f/1h7AGknD8o/eTZ4XLyb2PyHROHYRKxUfukQPsDNpVdOWdbp0tUoFvS4CfIEoB17eQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66556008)(66946007)(66476007)(186003)(6512007)(86362001)(4326008)(8676002)(44832011)(36756003)(6506007)(26005)(2616005)(508600001)(6666004)(6486002)(316002)(6916009)(54906003)(15650500001)(83380400001)(2906002)(38100700002)(8936002)(5660300002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?o1qwK4kErBjucZn0PvhmWdN4Zwuec3OwB7EyfLJ6wxIm3wXfDn6JG6izzpCG?= =?us-ascii?Q?3tBR3bbKI16++/Ep1n+dtDnm/za525ea8aiUSwBX1DPoRkQAIDM/mISoxSAR?= =?us-ascii?Q?JynPqjKBIwUxLkNS03vkBC5+L60Y3I3Vum3QIFBfzHKVvux3j8UIQoZmfb/Q?= =?us-ascii?Q?pGC2bcaKL3SL8pZadM+9d2BYULiVDj26sl2KWztCItRu4+gMK4IvEDQ/Y5dh?= =?us-ascii?Q?DQQJKOJy9GUmqIAxcCm6SnZJa4iOfwfR0SbwBc03F4TouQfn8ZKipv1ihOyS?= =?us-ascii?Q?ClLeGMLWdGz1ea6hIO6vFGLH1yD5+RSvmh1d1fEdDrn9ERVnnr0i/YbOOC6b?= =?us-ascii?Q?OwNtnjMk/i0V0TRBTNwKtexy9nBl7V2awymXZyXlkW3BqwzufxmTRow6al+V?= =?us-ascii?Q?pNig4j/7w5ECyOQlrHhxtmXE3m+QEXgKRahdjibT9j0GR/r2tbXoPAiYsD21?= =?us-ascii?Q?lGxGg4PND3Rrag011HhYQmKhDfOjgB6msm6UhW26klx7FelpbDEyUG02LIDr?= =?us-ascii?Q?4jxsBnngOOVGf1gW82qwrUMZ473OrMHX+UdqXwoYx1gHxeB6cZbmnjuEl6aQ?= =?us-ascii?Q?11Hc5PtyA9dU+Zk1b7gzYCkoATza96SOpOXrMqLnn4j5go+HEohbHlDWCSEe?= =?us-ascii?Q?wTZgH/kDqkN89xm+pQzKl/23YN2RvDn3wHFHohWe7Zp0yTc8ifZ75IK5Y4Ht?= =?us-ascii?Q?Rw1LFcNj+aTFs8ZayYHQGj+kgE4zaSY/IYjnh9PZSy/xdHllW5I+fh4MEEFR?= =?us-ascii?Q?WQeW594IQX4DbtVjGyN0Nalkf+96u7awNGlPH6hLr4FyQ5EN1Ni+8X32WNee?= =?us-ascii?Q?XsYRJOq6wdRWqWe6zcdPS71JBEXASWPpR0MSkxtC4XXeAkLP4fH8uyPb1W9o?= =?us-ascii?Q?gjdRXY/jO7OxqqpHQfFBm3JeoeEkflwPPTnidhBv3uiAats4E4oULW/eh1kH?= =?us-ascii?Q?RwlqQP6V82CCDRWHAwsxD98FIlS3ZfN0zCOY191pafPj2JpeTuPEvo9dPjCV?= =?us-ascii?Q?/0o1B0Zx4wF60ZX83EGpNAg4od4XoyRnjEkAU2TujAmJPZtNVMflNwMvJZyO?= =?us-ascii?Q?J2hv4HghbMHEu8Nci8M91JyuMXUZvW/qkCxeFHzLe+/vsSKCVGVO/YLqEaZD?= =?us-ascii?Q?h/Bkzy4cLpgqIXSiFsbV/Z0oo/gOunoeL44FjxKXM1oayhcg3vLxkFPRgMXL?= =?us-ascii?Q?BFOh2a20FsUB4RH/GN15o4t3HpLNG1pH9Tv/XeTn1lDydPFS6o1ninMktSRt?= =?us-ascii?Q?Gj0INpwfGdQNO8sLEgxOgGa4PXlJq2CMpAbQnU+BWAX3BtXCqe+lbe1+SIV9?= =?us-ascii?Q?TH/8HEc0ViXMT3orM5IAgnPEol3HCOFQBpPNuvKRsyjmhOifEXpyJgcCZKj1?= =?us-ascii?Q?Wenum6OkQL3RRYB0X2XQccafrwi5cduFfS2s9D20+V3fQYmUN16yc+MJJF6A?= =?us-ascii?Q?fnZ+VoeMcYWAbdglE+bKD6ChmWczXbLUKo6BckfK1agHP40BBdPGipDn+gUG?= =?us-ascii?Q?WKAX85glgAYZnmakbV5R46VZ95HIkK1shw2LQQItOtiHy36IOGo4B8DChCt/?= =?us-ascii?Q?8T4JFAdl5OOyFe4CzMHncyMnqCGwKODB9kiTOdVObPQHEqpgdC6RUDsmTRh4?= =?us-ascii?Q?l1Z5r7NiZE5dCUd+581dRIRj8AZoif3B11TsVgJGLGeeaeXDP8TTHR3ly8xs?= =?us-ascii?Q?wj2Zc3dDhDqLt55i3LZH3PbYnyPdV1eU3xw/23uePmCOnxE+lwcYpiFS4RJy?= =?us-ascii?Q?Wv6hQUdP6YVFp1VAGksoDch8UunkL2Y=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1eae894-1165-4b29-5de0-08da3323d508 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:01.9969 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YaswKIA9aOKgRGiAsIlaeU0xevfwtf8V93ke98ByKoLihYuI7KQLExIyEurwBRfqf4+JsfU/R06bkN0S/sfQhQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2653 Content-Type: text/plain; charset="utf-8" This patch verifies another member of struct mptcp_sock, ca_name. Add a new function get_msk_ca_name() to read the sysctl tcp_congestion_control and verify it in verify_msk(). v3: Access the sysctl through the filesystem to avoid compatibility issues with the busybox sysctl command. v4: use ASSERT_* instead of CHECK_FAIL (Andrii) Acked-by: Mat Martineau Acked-by: Matthieu Baerts Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/bpf_tcp_helpers.h | 5 +++ .../testing/selftests/bpf/prog_tests/mptcp.c | 34 +++++++++++++++++++ .../testing/selftests/bpf/progs/mptcp_sock.c | 4 +++ 3 files changed, 43 insertions(+) diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index 422491872619..c38c66d5c1e6 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -16,6 +16,10 @@ BPF_PROG(name, args) #define SOL_TCP 6 #endif =20 +#ifndef TCP_CA_NAME_MAX +#define TCP_CA_NAME_MAX 16 +#endif + #define tcp_jiffies32 ((__u32)bpf_jiffies64()) =20 struct sock_common { @@ -230,6 +234,7 @@ struct mptcp_sock { struct inet_connection_sock sk; =20 __u32 token; + char ca_name[TCP_CA_NAME_MAX]; } __attribute__((preserve_access_index)); =20 #endif diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index ac98aa314123..2ff7f18ea0ce 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -6,10 +6,15 @@ #include "cgroup_helpers.h" #include "network_helpers.h" =20 +#ifndef TCP_CA_NAME_MAX +#define TCP_CA_NAME_MAX 16 +#endif + struct mptcp_storage { __u32 invoked; __u32 is_mptcp; __u32 token; + char ca_name[TCP_CA_NAME_MAX]; }; =20 static char monitor_log_path[64]; @@ -75,17 +80,40 @@ static __u32 get_msk_token(void) return token; } =20 +void get_msk_ca_name(char ca_name[]) +{ + size_t len; + int fd; + + fd =3D open("/proc/sys/net/ipv4/tcp_congestion_control", O_RDONLY); + if (!ASSERT_GE(fd, 0, "Failed to open tcp_congestion_control")) + return; + + len =3D read(fd, ca_name, TCP_CA_NAME_MAX); + if (!ASSERT_GT(len, 0, "Failed to read ca_name")) + goto err; + + if (len > 0 && ca_name[len - 1] =3D=3D '\n') + ca_name[len - 1] =3D '\0'; + +err: + close(fd); +} + static int verify_msk(int map_fd, int client_fd) { char *msg =3D "MPTCP subflow socket"; int err, cfd =3D client_fd; struct mptcp_storage val; + char ca_name[TCP_CA_NAME_MAX]; __u32 token; =20 token =3D get_msk_token(); if (!ASSERT_GT(token, 0, "Unexpected token")) return -1; =20 + get_msk_ca_name(ca_name); + err =3D bpf_map_lookup_elem(map_fd, &cfd, &val); if (!ASSERT_OK(err, "bpf_map_lookup_elem")) return err; @@ -108,6 +136,12 @@ static int verify_msk(int map_fd, int client_fd) err++; } =20 + if (strncmp(val.ca_name, ca_name, TCP_CA_NAME_MAX)) { + log_err("Unexpected mptcp_sock.ca_name %s !=3D %s", + val.ca_name, ca_name); + err++; + } + return err; } =20 diff --git a/tools/testing/selftests/bpf/progs/mptcp_sock.c b/tools/testing= /selftests/bpf/progs/mptcp_sock.c index 4890130826c6..c36f2f6bd2f1 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_sock.c +++ b/tools/testing/selftests/bpf/progs/mptcp_sock.c @@ -2,6 +2,7 @@ /* Copyright (c) 2020, Tessares SA. */ /* Copyright (c) 2022, SUSE. */ =20 +#include #include #include #include "bpf_tcp_helpers.h" @@ -13,6 +14,7 @@ struct mptcp_storage { __u32 invoked; __u32 is_mptcp; __u32 token; + char ca_name[TCP_CA_NAME_MAX]; }; =20 struct { @@ -51,6 +53,7 @@ int _sockops(struct bpf_sock_ops *ctx) return 1; =20 storage->token =3D 0; + bzero(storage->ca_name, TCP_CA_NAME_MAX); } else { if (!CONFIG_MPTCP) return 1; @@ -65,6 +68,7 @@ int _sockops(struct bpf_sock_ops *ctx) return 1; =20 storage->token =3D msk->token; + memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX); } storage->invoked++; storage->is_mptcp =3D is_mptcp; --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146596pis; Wed, 11 May 2022 00:57:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxbYoo8Cw6CPC+r+Q1Nfjw7k0xpT7uwwLEdgMbdGI4ns4dHGBbRYsZwjrAEwzL3R930i2la X-Received: by 2002:a05:6a00:a8b:b0:4e1:52db:9e5c with SMTP id b11-20020a056a000a8b00b004e152db9e5cmr24158804pfl.38.1652255835143; Wed, 11 May 2022 00:57:15 -0700 (PDT) Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id o136-20020a62cd8e000000b0050d7eb29655si1253796pfg.41.2022.05.11.00.57.14 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:15 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5234-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=@suse.com header.s=mimecast20200619 header.b=XoqqJMHP; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5234-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5234-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.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 B23B1280AAB for ; Wed, 11 May 2022 07:57:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9AA8F15DE; Wed, 11 May 2022 07:57:13 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 0518315B9 for ; Wed, 11 May 2022 07:57:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255830; 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=ovFrt90TSAyXkqDWcw/fUfI6wpdTzDNMwWbCm+o74zU=; b=XoqqJMHP9dp6WAfvIYCgAEZA3VYQ9ZciKhPY4kfJsHBc4zYNEKZWLJ4wFanfZY5Fsu81n8 bq/QytdPkkjLgk8SBfAEyvgPd/qQGMyFzVyOXu25ni12k2mB/pvnpx2q1Yg4s4nF87Gh95 Biuj+GSuQ3i2XCpQOpRalxFLzzdnCZw= Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2054.outbound.protection.outlook.com [104.47.2.54]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-34--Z5r0oGpOnWRt3nN8Gvb6Q-1; Wed, 11 May 2022 09:57:09 +0200 X-MC-Unique: -Z5r0oGpOnWRt3nN8Gvb6Q-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AiM8YQ5bgIslm6pxBxL8GHOkNsJJJWp0c/o4HuEeCIgPtKqtnRYstNolpAYsLNsqBfs48zNrYJQMRXqeRdNDQe7H4CcSTSXhcrW16W/j5NrSaCvpjSzcWcplsprpjiGrdqNOcO7uC3MyjQnbf2PfQz4POUlsG1Dp9yL9Hh0+pbzgD1CC6aJl6o1+gYNXR8wMItSba7tDJcY7QdUmLgL9XI5NESSgeXncvkY5bJ14qt1EqSeE76ojpoZmpKG4hdG5vgRQEDkyjoa9j3PdCpe9EjixzfqVM0MJZGDTTTIk7oUCY2UF57ICNNBUE5wnMTminRDV0Hf6QdW+lzL+bj3aFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=D1f1ZrapII9bktLVqYRqsWZ21o2EhDNgW0jfahYrpLo=; b=jy5SPgtE13lDf9GMTizpbzqPEwKeIWVy+hbjSUMbaPDLivnvXQzTfAnl9O5PDLQXepXyUqmgBMQIdsiTDaecqblIgV2ab4QTAvzwNCtSvganZuN4m3uhHOgSOD1kqzNdOXWVgRYmTsGvLm5Cy6dK/oR8ZkZ+NPRuXtioIZGT8aduJh6sNP8RwJVEeRBL42BADOyOSh6eRt5aQZ9gc7AagK3P3I8At00KFv+SGSNjtvbbypoLh9cvvz20toAzHnPAOa5uGXSpuDgtkBYP3h5oei+ZDcZuvbNyWMkzLKsZS8eDopM2cP1R8KmrE4nIXgR6r9sY86hrUqmRcZVkNW42Fw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR0401MB2653.eurprd04.prod.outlook.com (2603:10a6:800:57::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Wed, 11 May 2022 07:57:08 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:08 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Mat Martineau , Matthieu Baerts Subject: [PATCH mptcp-next v2 07/14] selftests/bpf: verify first of struct mptcp_sock Date: Wed, 11 May 2022 15:56:13 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0053.apcprd02.prod.outlook.com (2603:1096:4:196::16) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7fc3ed99-1768-4180-35d3-08da3323d8bd X-MS-TrafficTypeDiagnostic: VI1PR0401MB2653:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jhv1kn20+NXLk5CFkhTlRE+V74r+01R33j5lypN2xEKgzffZPxKDOHJ8X5/9XQaxpYz5lasLqzbTZfk8k2It9Z/rJNeqh5Xb8FJs1Grdr54f8tyHsUbFNJmS7P2tWWws+776KxyiaWI5loPubb3xu3kwTwHm/iHJZ3Fgwd/6NqxxYqkeLh3i+GwNzlyMb8SZPojJh1F2ybREKjhp1HKamR89aUXNBOLkx0KzH88BCI3uTYh/lL2y9Qel6nDfIT8Ux8thjhQxRh7Dqrs0BISuOhRqCCldm+043kWK0ocfeD5/obCcS4mIU3DJ5d6EkJKOLLbeR4xK1JGPBqyw4qR/YYa8LBhfxtXTpT0iEnDlmcz038hz7KAY907DLS5JEKyD5ekD0PBQQW64G2uYTr1OZJLdZxz68Ci1a7Xm3ccRY7EW1CuTk4DAD4jsMtjWBf/Refez/ASLmqz5eEhxHWxfbHJSO0nlYPaO/EN2/adrWz+F8UlTPpoz6ClTQeVw+tJ0142o1+bGCJagfYn/4bKqjvo8feYBEZI+gY+DhbFJYSFStZ42o0IZmWyWyr2swVuh4RccDsNCJj3401ijyygu3Pmg8OSfbGUy3vPcQc0lHyQWunThMpOXXFt8Q30kN5Lz62Dt/6P0eY8oCbV8Mjl0WHoJp8oXat1YJbX0Jpfa2/xJVWANB5BgWGRNQ813DEyKF0uBlDS6AkVSLFWyEi+ASw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66556008)(66946007)(66476007)(186003)(6512007)(86362001)(4326008)(8676002)(44832011)(36756003)(6506007)(26005)(2616005)(508600001)(6666004)(6486002)(316002)(6916009)(54906003)(15650500001)(83380400001)(2906002)(38100700002)(8936002)(5660300002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?f7Oc69xK9hq6fMvP7CP/BnbD7T+wIedDWe2YWgtXDtnJtZjpc83DF1r0QH5d?= =?us-ascii?Q?doyZiBiBXdgCJtkr7JkE7a6Akr8YrxPzazF5TXkFk6hXL0lv6icjJltm8W8c?= =?us-ascii?Q?wKjUQfU2pw7d5Uo1WsMrPlu4JD5OZCUqUWwJNK65VYgPJkoho6a51BBd0sU2?= =?us-ascii?Q?o/P2AFUaWdfvHlG0rEMOaDmPJw6CNFAMrIoOTbHFnSK1PHDINgVsnNbymdqu?= =?us-ascii?Q?in2mHBvd/HDGY+HEROHP/M4VqkYZ0U+25zEQl2R6bPJHMxulwWI7CGAqXk1g?= =?us-ascii?Q?UCyAnHiDfzXrjewBhqD7RtiTXzrEcQPZneT3pTrgAJZfH/RKqVKiuVggVGJd?= =?us-ascii?Q?ij/JmfCCecjnkvV9CuidcASNblHJsW45OxdKVJlgMKG6DM2ZtlCM3ZNAeXrZ?= =?us-ascii?Q?VROj3F12HnrNz5sGJTqJ0QFlTGZ6ctl3Tk+4sTC0c3q8xAHVdHKi4bZrtrN6?= =?us-ascii?Q?3JQrn/PaTAxY5i1ejoQR1s0pzHpKpvDB9pqXS5Cxi0R4PgeciEa9jUM5EEI7?= =?us-ascii?Q?YWLumBX5JEmo/1YMeD+giX2E9wzrNJp0gTs7yiSfx5ZcdqP3hXuJjEzVuE9E?= =?us-ascii?Q?8YHaEJegPPohgAuILFobq70ZExNJ8athfM1XA6qYJNdnTdD63ZcjKQ6+OnxY?= =?us-ascii?Q?ikC+WUl4ztj+fG8C8FyWkMw91pv0cHBpH5tCAu/XNeS+Bny5ztgBeFRNz+Su?= =?us-ascii?Q?XZW/BYFAHiIh7fFQcMLOgZUB+2/Aejqwthm4s1wlcXYrBVDv0MVJVQNbcIxe?= =?us-ascii?Q?DAVAjtaDdK/k7UoL/ZiiBh0q5B+VggXtd/WKEh9nje9wFaQT6QdrEz/+BUmV?= =?us-ascii?Q?MGxoe7NHG0w8Frm2wejI5FDl++Mw6tVU0lQZNFppxEsYDVT9TvaLZ2Fh7Ltx?= =?us-ascii?Q?IYUR68tcFnaIEOItbIAoJ8qaG+AbHt3TDJIVtsoNkEA0I8TGyguIH07Fh+yf?= =?us-ascii?Q?7TbAG8VL8x0SbAWUnmjjbzuyQjXqvyL3556M7kXVMHgj35SZC0Sz5IRlmLHj?= =?us-ascii?Q?UcjnFMZw/1jJZDAEDOXffaPLImZ5pxY6DKIf/iDL73/MyaFHK/gG2Yai8EZZ?= =?us-ascii?Q?prN1vKqXAW3SkVj92mXsS0R+uip7MfxmReotyNi2H1eUOWaP23SlOPGy092F?= =?us-ascii?Q?Y7PI48k3b5Jtuus/kNySUnE8AdQXTZMaHLSXETZmdUyzihikY572OX7OmcDW?= =?us-ascii?Q?+oG9xo8LmwoadYBjBUN0Y8gQ9NdbW1IxibYVxpivC50wJmTIlKBce7M08brM?= =?us-ascii?Q?N8EnFsg0hXIQuUVTD5s3yQDIQF2ZjP/RfWQ+n/F5wKtsBnTeBNRnawf84jm0?= =?us-ascii?Q?muVhMTW9l3vU/zLsovEW816KRZRq5/RfcCdQIUMhlovqZVGpX+Nm+sO8FmDQ?= =?us-ascii?Q?TRg9e7sIjv1V1IUHmEnYun9cRw1VOgKu62BcGptG8yFrPtY7gFh7mhhl9YLt?= =?us-ascii?Q?GJqUdQjUYhiL2IXkk/QVpZ2Wz2t90IAhFU+C3S/n74oBry9XUHzdGgN6gvN4?= =?us-ascii?Q?AS4KcLtgabSkjQoOI9IZkKQqYZ3lrq6BIElpmazRvY98t9L5hwfHaDeuURwc?= =?us-ascii?Q?anH4eoPKt40x9yp5+5/1TwV4+W90zgzfA5agqdQc3cCUuaK3ectA+wMdzAAI?= =?us-ascii?Q?omqmf9GUuzw+dBE9zYs22NSAXkwlU5kBN1BB9Xoq5/oMX++q8aiTZDpUw0V2?= =?us-ascii?Q?OLtb/Ngh97vLcsxfcHY961HcnSMoQv0NH210EzdjgYNBE/PrSNcwgyVsrr6D?= =?us-ascii?Q?dcRPOFjoMcwOcvkZPWIY5H6EDWm6CwA=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7fc3ed99-1768-4180-35d3-08da3323d8bd X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:08.1997 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EfFGBOxj7VbdYZLrvRULtzoXNiGbKxel8EZeRjTAFSzPte2Tdvb2eIMuaBwTNVNYR4DIfBbuNMR6ondBYkLldA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2653 Content-Type: text/plain; charset="utf-8" This patch verifies the 'first' struct member of struct mptcp_sock, which points to the first subflow of msk. Save 'sk' in mptcp_storage, and verify it with 'first' in verify_msk(). Acked-by: Mat Martineau Acked-by: Matthieu Baerts Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + tools/testing/selftests/bpf/prog_tests/mptcp.c | 8 ++++++++ tools/testing/selftests/bpf/progs/mptcp_sock.c | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index c38c66d5c1e6..82a7c9de95f9 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -234,6 +234,7 @@ struct mptcp_sock { struct inet_connection_sock sk; =20 __u32 token; + struct sock *first; char ca_name[TCP_CA_NAME_MAX]; } __attribute__((preserve_access_index)); =20 diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index 2ff7f18ea0ce..51a3e17acb9e 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -13,7 +13,9 @@ struct mptcp_storage { __u32 invoked; __u32 is_mptcp; + struct sock *sk; __u32 token; + struct sock *first; char ca_name[TCP_CA_NAME_MAX]; }; =20 @@ -136,6 +138,12 @@ static int verify_msk(int map_fd, int client_fd) err++; } =20 + if (val.first !=3D val.sk) { + log_err("Unexpected mptcp_sock.first %p !=3D %p", + val.first, val.sk); + err++; + } + if (strncmp(val.ca_name, ca_name, TCP_CA_NAME_MAX)) { log_err("Unexpected mptcp_sock.ca_name %s !=3D %s", val.ca_name, ca_name); diff --git a/tools/testing/selftests/bpf/progs/mptcp_sock.c b/tools/testing= /selftests/bpf/progs/mptcp_sock.c index c36f2f6bd2f1..ab135edf3ae3 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_sock.c +++ b/tools/testing/selftests/bpf/progs/mptcp_sock.c @@ -13,7 +13,9 @@ extern bool CONFIG_MPTCP __kconfig; struct mptcp_storage { __u32 invoked; __u32 is_mptcp; + struct sock *sk; __u32 token; + struct sock *first; char ca_name[TCP_CA_NAME_MAX]; }; =20 @@ -54,6 +56,7 @@ int _sockops(struct bpf_sock_ops *ctx) =20 storage->token =3D 0; bzero(storage->ca_name, TCP_CA_NAME_MAX); + storage->first =3D NULL; } else { if (!CONFIG_MPTCP) return 1; @@ -69,9 +72,11 @@ int _sockops(struct bpf_sock_ops *ctx) =20 storage->token =3D msk->token; memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX); + storage->first =3D msk->first; } storage->invoked++; storage->is_mptcp =3D is_mptcp; + storage->sk =3D (struct sock *)sk; =20 return 1; } --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146639pis; Wed, 11 May 2022 00:57:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzZJoxthjImid8Ae58sin+oErSt8BzyBxzZPCcUv/nHd252f5TbAMse7HM+MUJpTeCJFig3 X-Received: by 2002:a17:903:3009:b0:15c:f92b:7fba with SMTP id o9-20020a170903300900b0015cf92b7fbamr23797631pla.82.1652255843281; Wed, 11 May 2022 00:57:23 -0700 (PDT) Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id p26-20020a631e5a000000b003aa7aee404esi1963587pgm.806.2022.05.11.00.57.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:23 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5235-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=@suse.com header.s=mimecast20200619 header.b=RaPOMcZI; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5235-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5235-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.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 CB425280AB1 for ; Wed, 11 May 2022 07:57:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AD02515DE; Wed, 11 May 2022 07:57:21 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 1A4AB15B9 for ; Wed, 11 May 2022 07:57:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255838; 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=wJGEYCRP66udYnrXucFJzabkuDpZ3mLXMh6LUFChOcQ=; b=RaPOMcZIfBPJZyl7JE7NrzDOn0SeKEoWoth2xFb4kFV24UzYcXu8jndKJJZ3y2VhM7VvV3 YgiumQqEsF/dC9dxkFbjcnrVmE7NvWH2L0zpq3uPj58kWsXbifZMVVoC4RvM1zQoULsKpr j0aZs1ZGsgo4UGPTFqGD3j8WxcAy1mo= Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-18-cbcYXTyuNoS2OCeX8eoS8w-1; Wed, 11 May 2022 09:57:16 +0200 X-MC-Unique: cbcYXTyuNoS2OCeX8eoS8w-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ivveo3DijO3+nfKP/okqtbKWGqs0yFitKNKFyenSHC4UHQXaJGq0AyZ32QpoJwmkwfUN3CmNrHrfEhLA2Oifpnb/mMW2NLzDZFH7IvK/dN2gWV9KMZtvpV+pRfwDZWm/PrEu8Yi7UYonRd4zeHzL+3yJKRfkEk7hYfle6uQaOx8iDpnpuuTHp5uvSnCdYC+fpFLjsOmjjulT92BY1wWFqbeuR69Ezshfh+sxP6Rugln7udrvPC6TN9byXe53NlFbfaXs6SSdMdimRDPOETwUgExtLg2g2OmTrbXfzVxCeUU+FBjihopXWSMqdwe/zBCYcH9Zam6ZUei4m4iisHR4Yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aVgGfgCVut0BtEnF6zYRNknn9mZ6kjv5xXy+f39u0Cc=; b=Y4Cb091XaA1HhVwfV8dQeSvG2EwISgQUPxbx/H5EJtU49qmkRURO3elUP7xpjAErbM4TtQ5yiaXZY1sw6pB2lF7t7QdtK1BLsdBXlH8oemsvU3Hoia533eOcwvqgFb65utETRAexuBJCpu/A65cQscFhTDAPXHPkUQ0jDkpM69efUWDrU7vrpT13ZuVUznJ6gm3PRpW6LMRf2R2Ugq5Ixjs+NB+68vsRuBbXehtjQSKGXoVrvMe0EWxdwT8PHU+OtWcSynYGEDPZgydR8+O4rjHtvmfBA7ALwmL6cyd1TXahbGsXOAyEmA8G3UBQsT6uj7Xh0J+z3SFCQJIRxDRzkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR0401MB2653.eurprd04.prod.outlook.com (2603:10a6:800:57::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Wed, 11 May 2022 07:57:15 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:15 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 08/14] mptcp: add struct mptcp_sched_ops Date: Wed, 11 May 2022 15:56:14 +0800 Message-ID: <62fa967b63e0e7cf6bc055850b12e03738dd2591.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR01CA0040.apcprd01.prod.exchangelabs.com (2603:1096:4:193::14) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0e365d76-d1e8-4ca1-f67d-08da3323dcbb X-MS-TrafficTypeDiagnostic: VI1PR0401MB2653:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 99j2v3qvzl0CKMhs/+OC9Nnxps6aR4Z5ETcJtRyVGs2Ulpo+o49Tv6njN9ILXkrWDhlCtUpmvj/nCmtMf/dhAf5LUQH3msjPNcxhreyImRAPNEGh3LMEwTAniRufmmaXI0QF6Jmp/Yzb6FANmgKikNLbziAMQwvZS9YvPaLARjK8KnYSi6G7ccLHGIGNzqg6Emevjof/CS2HcMNszSpSjZvBEP0X70/l3MOGNvkb0N00XKS8+qf/FhjA7sRK3cedbLhkZkt+hH91iKVNZLtcZXnOHsYcKdBtzdyHajeadLGpZPhDy8krun6cIEGjJ0r+DYyNHJvvteoXbIKktqrGOV3zVXtO5Zu2AWljLpd8J6e6DZoStFXft2BBzc9J4vMzvVX+djjmg+q6Uyt8uOKtHxI5C8ruVS1b00Jh9/D/aAPhGdc3Aq1Sy0xGVPR0Bpt0S6lCFhcbwLlbeRggnpb5+eTZ/A6A9anCV70bjUV37TRIEqyu/9desIr2druH1R20BOupVrvRQs955b3bhMheKJoiu/BnpGtis7Jgk1ooxlHMOsFWfmRznLfryiZ1xV+WpdbjmGTHaDvqkOaSuhm2Ky2HE7bD/7mLXi/60GFoYgYvTzWyT0XHnTZ55DaPxBlh9+R94g0HkByzRJNt1poeKuJasDVOE2BoJ0qDCjURsAVWe4Pgc6UjJIGWwfAaAvjzF684usuMxYuwc/YDhNNG1Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66556008)(66946007)(66476007)(186003)(6512007)(86362001)(4326008)(8676002)(44832011)(36756003)(6506007)(26005)(2616005)(508600001)(6486002)(316002)(6916009)(54906003)(83380400001)(2906002)(38100700002)(8936002)(5660300002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SFCMMYBTnOpDwDqbLSeTvuWAV+65iSzKrSkT4s15XMU1ZQ9hJZmx7n6SGh3X?= =?us-ascii?Q?IjtD6/xmpea59dBtI8YoTM4S+pzKm4dNnSZwqBpJiNnSW9Uz+TCw+nu7YVMU?= =?us-ascii?Q?cncmj55oFD/ZFkpnq6TOv3CC4D4MM8La546c5C3E/F9LVk/zjg+73qTIe/MD?= =?us-ascii?Q?GJsGrUPMY3TnMx/vmrhkUtkhUAA8MttOC2NBwslJQo4Wfs4kYvDaFw17H4zY?= =?us-ascii?Q?mJYQus73huzycgl6fH7yY3DzCtWAY2s2oOapkSrcZmjKS6BFQF9gNPOKQKRJ?= =?us-ascii?Q?xIgCDn0iYlkrUHxL4nXfLfnWMKL+XrmFnoge/of3llQLO1wV7MjmlhixUVln?= =?us-ascii?Q?m/8DXi1keIR16SoOQ7oYu1FlaNvdrTr3LKK6Hke4LA/3xY4vh+Z8eFtF1Y0Z?= =?us-ascii?Q?J8YHOSd/WJkzgNytyv3U/jlrxDMt9DAmz8M7syV4SyBJbVl9uq+nPzD2ORtZ?= =?us-ascii?Q?gIHNdJs4MUjABebxLsqzjUWkwqPR3XhFqWN0euco+Wlz4oNXhDZ5Dv5G08I6?= =?us-ascii?Q?WZvQUwtFF0o8jZSEXt73PdCIZxCPdDMfleHrbIm3vFznCAbVz3VXOHCiGzOx?= =?us-ascii?Q?4yc52y82odYGaCMbd9DAF3oPO3Dk9dlnY4gFahZL+aHVpxnV8A7fK81zK79o?= =?us-ascii?Q?L2v4427KR+t+atQTzKCuyl757MVGdl8qIgk5fAZk9NAGka+pm5W91A4wcdru?= =?us-ascii?Q?qxrwUNFFPNK2dmXpA2VATRfDx+9G5+p6e33hWCqOt1IXoVtMpXNujHN1tXuJ?= =?us-ascii?Q?jbZ2AfZ1JEOo7jpiRUSvHkfN8PjKLjHdQxQvugApSGkmtWxlSL+XAZIO8dPh?= =?us-ascii?Q?dMlVQhRk4Qcnb2Rt7T8yG1gzQ1oUIP7ZZW5WrPxNVTTxpDP65cpF59JscmqT?= =?us-ascii?Q?iyRH/Qr6U+jNsKhzG+WceDcTTu8fm8NqnKPobqi3/xrrHyp7IhxLok5tsFCg?= =?us-ascii?Q?y18mo5Qcjv2oiteuOOLlJCq0Y0PdRli5wbXvQUQ8xQzl9AriXY7pZhEwPQy6?= =?us-ascii?Q?oXWB+sl/s+6dntqjSe/dgrqMTAfTQxMFI3h9yl9u+luZBTa7YwDRm/yBpsOo?= =?us-ascii?Q?D6gOQFGIBeEwxGt5MTKx0XFxZOvggFsr3rOaTWAONkxraiP5vR/5KkQ0pmPl?= =?us-ascii?Q?auXC6G9o4toMjuVcbhjjP5yqqpWe4zeUoJzpVyevnky08WFYbvJNdlysmxlY?= =?us-ascii?Q?q0McxlzwbLcQLgEyCY5zUFAxYJkdS/ZnygF3l2RglU9pybf6igzImaFZkCCX?= =?us-ascii?Q?5T7EtgIJYfneXBRw6/XlSG7cQh3cmw4GkkN58ONJ8aPfDs8TUowCGLcTsFgE?= =?us-ascii?Q?wHqdEUxgrZ1Lmrckrfwqd2TwU5UnkUT1GTlRp+VNyQYZXVqbmxSrmufXsx+p?= =?us-ascii?Q?lQftXzE9UsimvUcT0afXNmj6cLyvUkb1NAd06xpNc61ZHmWi7ubW44TGX8ux?= =?us-ascii?Q?QduVnuP2BkWseTDblhzHVSmx/iqMhGyxv7K9Vf05t+8vzxMh78rfojpptfW/?= =?us-ascii?Q?saWGptu9j2/zMgKyn816oM7BF+ym7BBlH/8TjB3lSggpjiXgb+xWLieXS+Ez?= =?us-ascii?Q?OOoDw+0d0i9/LthD80Djt4yo3WgIkFAQokqro/sHxV0+/QnCrvi1BEPJypCV?= =?us-ascii?Q?i4hWERlGk6+tALKUqQHkQWfJG3gtUBktMZlskFXGLIQHXwPh/pkLNxzxOS7L?= =?us-ascii?Q?02wsQ1Htpt9Ii2aKa9HMRh54sCdA8TsL3X17udQPbiQY3VTudxzTRBOdxiHJ?= =?us-ascii?Q?mw0r7OrW7Waf0qHkuoqRFeP6JOJELpc=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e365d76-d1e8-4ca1-f67d-08da3323dcbb X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:14.9336 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ez10aeA1GhlD+iVifH5dh1Y0h+jIC1x8u4bvFGJnBSXCwcmpghNejJ+kiM1sZ3af9y++P3qhvaAFlqOzqM+9Tw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2653 Content-Type: text/plain; charset="utf-8" This patch defines struct mptcp_sched_ops, which has three struct members, name, owner and list, and three function pointers, init, release and get_subflow. Add the scheduler registering, unregistering and finding functions to add, delete and find a packet scheduler on the global list mptcp_sched_list. For supporting a "redundant" packet scheduler in the future, this patch adds a flag in struct mptcp_sched_data named call_again to indicate that get_subflow() function needs to be called again. Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- include/net/mptcp.h | 19 +++++++ net/mptcp/Makefile | 2 +- net/mptcp/protocol.h | 3 + net/mptcp/sched.c | 56 +++++++++++++++++++ tools/testing/selftests/bpf/bpf_tcp_helpers.h | 18 ++++++ 5 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 net/mptcp/sched.c diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 4d761ad530c9..b596ba7a8494 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -95,6 +95,25 @@ struct mptcp_out_options { #endif }; =20 +#define MPTCP_SCHED_NAME_MAX 16 + +struct mptcp_sched_data { + struct sock *sock; + bool call_again; +}; + +struct mptcp_sched_ops { + void (*get_subflow)(const struct mptcp_sock *msk, bool reinject, + struct mptcp_sched_data *data); + + char name[MPTCP_SCHED_NAME_MAX]; + struct module *owner; + struct list_head list; + + void (*init)(const struct mptcp_sock *msk); + void (*release)(const struct mptcp_sock *msk); +} ____cacheline_aligned_in_smp; + #ifdef CONFIG_MPTCP extern struct request_sock_ops mptcp_subflow_request_sock_ops; =20 diff --git a/net/mptcp/Makefile b/net/mptcp/Makefile index 6e7df47c9584..8a7f68efa35f 100644 --- a/net/mptcp/Makefile +++ b/net/mptcp/Makefile @@ -2,7 +2,7 @@ obj-$(CONFIG_MPTCP) +=3D mptcp.o =20 mptcp-y :=3D protocol.o subflow.o options.o token.o crypto.o ctrl.o pm.o d= iag.o \ - mib.o pm_netlink.o sockopt.o pm_userspace.o + mib.o pm_netlink.o sockopt.o pm_userspace.o sched.o =20 obj-$(CONFIG_SYN_COOKIES) +=3D syncookies.o obj-$(CONFIG_INET_MPTCP_DIAG) +=3D mptcp_diag.o diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 06b8ebc15204..2f6c4486a009 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -621,6 +621,9 @@ int mptcp_subflow_create_socket(struct sock *sk, struct= socket **new_sock); void mptcp_info2sockaddr(const struct mptcp_addr_info *info, struct sockaddr_storage *addr, unsigned short family); +struct mptcp_sched_ops *mptcp_sched_find(const char *name); +int mptcp_register_scheduler(struct mptcp_sched_ops *sched); +void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched); =20 static inline bool __mptcp_subflow_active(struct mptcp_subflow_context *su= bflow) { diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c new file mode 100644 index 000000000000..c5d3bbafba71 --- /dev/null +++ b/net/mptcp/sched.c @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Multipath TCP + * + * Copyright (c) 2022, SUSE. + */ + +#define pr_fmt(fmt) "MPTCP: " fmt + +#include +#include +#include +#include +#include +#include "protocol.h" + +static DEFINE_SPINLOCK(mptcp_sched_list_lock); +static LIST_HEAD(mptcp_sched_list); + +/* Must be called with rcu read lock held */ +struct mptcp_sched_ops *mptcp_sched_find(const char *name) +{ + struct mptcp_sched_ops *sched, *ret =3D NULL; + + list_for_each_entry_rcu(sched, &mptcp_sched_list, list) { + if (!strcmp(sched->name, name)) { + ret =3D sched; + break; + } + } + + return ret; +} + +int mptcp_register_scheduler(struct mptcp_sched_ops *sched) +{ + if (!sched->get_subflow) + return -EINVAL; + + spin_lock(&mptcp_sched_list_lock); + if (mptcp_sched_find(sched->name)) { + spin_unlock(&mptcp_sched_list_lock); + return -EEXIST; + } + list_add_tail_rcu(&sched->list, &mptcp_sched_list); + spin_unlock(&mptcp_sched_list_lock); + + pr_debug("%s registered", sched->name); + return 0; +} + +void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched) +{ + spin_lock(&mptcp_sched_list_lock); + list_del_rcu(&sched->list); + spin_unlock(&mptcp_sched_list_lock); +} diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index 82a7c9de95f9..bca318d2cc78 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -230,6 +230,24 @@ static __always_inline bool tcp_cc_eq(const char *a, c= onst char *b) extern __u32 tcp_slow_start(struct tcp_sock *tp, __u32 acked) __ksym; extern void tcp_cong_avoid_ai(struct tcp_sock *tp, __u32 w, __u32 acked) _= _ksym; =20 +#define MPTCP_SCHED_NAME_MAX 16 + +struct mptcp_sched_data { + struct sock *sock; + bool call_again; +}; + +struct mptcp_sched_ops { + char name[MPTCP_SCHED_NAME_MAX]; + + void (*init)(const struct mptcp_sock *msk); + void (*release)(const struct mptcp_sock *msk); + + void (*get_subflow)(const struct mptcp_sock *msk, bool reinject, + struct mptcp_sched_data *data); + void *owner; +}; + struct mptcp_sock { struct inet_connection_sock sk; =20 --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146678pis; Wed, 11 May 2022 00:57:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzm1Y5zQVkoLnaMGM6sQeuewdSsNPF0t7qdV+/iNS3tdZjLNw26JL2eSLqgNFsXGzz1ciOT X-Received: by 2002:a05:6a00:729:b0:4f7:77ed:c256 with SMTP id 9-20020a056a00072900b004f777edc256mr24090375pfm.1.1652255851503; Wed, 11 May 2022 00:57:31 -0700 (PDT) Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id cb3-20020a056a00430300b0050e096589cbsi1306597pfb.368.2022.05.11.00.57.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:31 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5236-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=@suse.com header.s=mimecast20200619 header.b=lGXugAxY; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5236-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5236-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.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 12391280ABF for ; Wed, 11 May 2022 07:57:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EA6F515DE; Wed, 11 May 2022 07:57:29 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 787C315B9 for ; Wed, 11 May 2022 07:57:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255846; 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=dNw6Z2XuNa3NUByUXk4xw3jn5EgSKzAkowrNy+Viams=; b=lGXugAxYSLHJ2oeECrj+Lo4GDDf4hPd4RhkfuXFoio0J/p1manvWTGnPbIugaHhZqZsGbX bVRC1CJxWs09xQxp3NidUWPWtzBWqn0jpZaf5dmlPxjMlGjj+vVwpA4/Jp67EINsFYDB6v 51BAq+1EO2QvUShcK4y4fNWDuDraNO4= Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04lp2057.outbound.protection.outlook.com [104.47.12.57]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-12-VJpCgwFdPG-qQxtBjowPcw-1; Wed, 11 May 2022 09:57:24 +0200 X-MC-Unique: VJpCgwFdPG-qQxtBjowPcw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gPChE4S9qp//r2+G+b8OxCv4AeYmjjAMIvJoVTNIspRP7CcwAtGGqfpaAReV0S4RPO7Avm0GeMvhO/+W8cqlhUya1ZkbIxGVRKaDqRN0viMwBf/dzTuV83Juil/JaAKT8hG7kXQWjTHojsUr5zW8bfBxSVqzQbddsugKmQ1fx5g5ab1s7CM0alh8dj2wc/62ITqkeoaF0qk/Ie1b8RWPjmydOfipITMO20XmZsST4d4XraHoXquRyFrimChNUIK77HGpmZpWvFYxB+iUwsaL6Yyg+FOBdNXnygdH6iyW9rRO9leGoYauze1xIdBko8leuo8Co5db/2n0KbXhDVGmdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZgVHXz8c0FkJs+CAoq6vFRlqNbJHmy3lfrT7rz2d/ZQ=; b=c9fR08qm8acXcdqSHbGyGW6mn1qQKOi6ucHH3QzmulnP0oMefG4syuDm3eax9SnNBEAqBIYNhu6ufsXOzhHsmM8/A/xxDA/wAJ90oSWTFwchTge9gPuqc9RmnihwfaznrK2T6PT2OZbNDdWx5tEsAK5pVoNTCKU5VfhgBmkaFVbbpi9HMgnBMtTKc/jI2UrpwpD7DPwMSekqgK9XZfzorgpdAxma9qRe69V2cC0k9jHwghgDxqbrlcBV65q2vzTsZ2WX9jX//8Ba6Nk9tgyjYmlWpk2KpKBtm80udauem6cqanh1ozBC/GRyekJv3hNEzzqKf4Lj1QteGm2Od4m5Tg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by DBBPR04MB6169.eurprd04.prod.outlook.com (2603:10a6:10:c2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.23; Wed, 11 May 2022 07:57:21 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:21 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 09/14] mptcp: add a new sysctl scheduler Date: Wed, 11 May 2022 15:56:15 +0800 Message-ID: <7b4cd095352f764e97827e1c845d472e0b4f7a5b.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR01CA0045.apcprd01.prod.exchangelabs.com (2603:1096:4:193::19) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ffb5775e-9f13-4872-7ac4-08da3323e0bf X-MS-TrafficTypeDiagnostic: DBBPR04MB6169:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: l6ozU2sA8ur6HzPTL1vbI/gZNnXuSPb/dnvKoX23mg8QJu8KQsaoJVzBRV7vfxaRhx24RMHI6IiHGdHgQmskFkCPYGKO8nmRQopDW9a99FErHbCLKhv0n0cSmk4UU3aMHl/Grz8f3UyWWF69X8Szk24KLUIBJEfW0VJrq2dsOxxpaOiNVp6VmBSfyuxJpYLBYEgbhGtc+OH/OoFiU21KJ52V1QIOw4qTzpg3GZu+B+g/IICNblbWOE51GhmlUzLPzIUOjI+tGwDn67EitNqlRQRmNklhKjqyjh8A5bhIf1bAgSo9mGJmQdmSW3xdlvmZnGKb5HZlmO6bFYP1YhI/fIUjsGRaMXTT3PetVDPNPa07yAWYO8pv7u/SBZtb7BQeAbkKvMPyeolI5QrCT12bkJfXB52ihfOt/JJTMMoagZPP21uic59UqrDn2jR3+jZqCjI0GT4onOvmtk5hrh4q+AIY4kWnmKbWvMSbutHb5ss8kOtbuTiOuFEbn5hJYbkyserBl+s8s0DkFquOTJdj02bva8Ui8ssYXbcdzwLvj27TXsnUeFjssDFrm8k+9LuWAjYcrHB+m3ebLFOcDTqdysLj8uiH7uCjSEFcgklCsqPcmzJKYjguDni5cwC3DdtF7fCnCT1xny4+wi66YBoWqkW3N8LHStYWz0wpHnNu8X6bWrDDLN+6WAMW9CYTH9Px5i+ctkbHeO+OhRhLevVKiA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66946007)(186003)(5660300002)(8936002)(6916009)(44832011)(54906003)(26005)(6512007)(66556008)(316002)(86362001)(2616005)(4326008)(8676002)(66476007)(6666004)(6506007)(36756003)(6486002)(2906002)(38100700002)(508600001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ejejxRcMH0EqZrSaQJ+7hh5DiwmkFArTGovkZNIV1FvEaLaYgiWuUo+SsP8U?= =?us-ascii?Q?dv92wtVOrVKhi6k5+YqytKJQMsQkAYfVErhFXBp6dDeCoSkC9aKUe3TusSHw?= =?us-ascii?Q?x4GKgEQUmjLzKkmNgDzeh3XZrHdwU5N2fXA59NzNwwOhUp4+9UbS7VbfDCGU?= =?us-ascii?Q?UGURxzHGDKzaQEeXV9M8j/aFjFTrr2Ll31c/bxi4Nja1XTKEVl5xjUa3KLL4?= =?us-ascii?Q?xylRPw8TphH/73wvbBuj/wFFWXGGkZY0iPO83YGhyL1zLtbKKOBzcWi/pFhA?= =?us-ascii?Q?s+xy/wr18/k6IYo+W0yu+3WX6cy2nC/J4ph8/8WTcFpbWuqDT+03gEwaNoc0?= =?us-ascii?Q?Cobcwomr50dyIwFdZ5QoZD5LzEhg9EAUeSsluRu+Jr9Msoxkwutk7pH6poW7?= =?us-ascii?Q?KZPQe+0Lg6okBCvtXs+lzFQSvVbzFBQ/e34N4wHA+VtopHDEglShSYZwXwm2?= =?us-ascii?Q?AA6N6ZTiFL2htmO06JipwhtZTe4gtZmFRNubMdoeBO4v1sDQtHul+rbmdLdC?= =?us-ascii?Q?RLhHZ2rzZavSNqXHUGO81/ryO2pARGzwkZ0xDPGuhGiK3izXRrFftlmIcuLu?= =?us-ascii?Q?+6Rcgrf+bTMrPtJW6zPed+3X+qd+pOoX1T7/3kZGi1WJpJ/+Y6dR68Bqb2cW?= =?us-ascii?Q?n13AZ8Zgv/1QNowS2e5gK8Ji9N/BweYcjoFZxvFXr3x8apx5dZ1Tdgp0NXcp?= =?us-ascii?Q?EWWju/lJxFynD5wYTldL3QB6z2v+0RSgMYmqnrVwZuAyPnsk096sUvLN4rT9?= =?us-ascii?Q?X2TxYg7SZS6iaFZ+TRwr1ik7rgU5zXpkaLOQ51CP0ti36ezvk7eToLZQUYRX?= =?us-ascii?Q?RVl0WyRfmkfLHC1T3WjtnwNPLHlUDQWjTc/bCTYyslzhYlPg1aKvEzHdJKG8?= =?us-ascii?Q?bDNv0ZCmS70v50A/kjI4DUCbIz2ehOpmS8CWZTTtVHLM1mfom4p9Y+gRCU/4?= =?us-ascii?Q?UkSAUMVvirzJ/Fzj1qjt7IDeszE9mgvbjNWX1ZfnLPwiA8pQNJeMmQ5eljiz?= =?us-ascii?Q?5JbPG2cULP5OI1co5FfNhmej5kTyEWcG9QuETaMdNVEi1PcOnzRNC4j6snWC?= =?us-ascii?Q?HKs/NvusPPHjdgwL0wKTW4aRAXKmdkE0dXh/NywpBC2cuKut6suu4PYzl4Tp?= =?us-ascii?Q?MDXTDeWvmvdAheTJin9ZvmcsX5xnAfrLclukWV22bFdDUEKn8HbVku9uRStj?= =?us-ascii?Q?60lGOI8sRpdltyDNmw00JxweBaEGR4q/PeJpFVxsDKwnXV321te8OAZAqnWN?= =?us-ascii?Q?lQN8ScnpzLDwoAg01c18Wt/V+AgPLfaYvxM/5GkT0YTex6L0E9Jpp//EAnm+?= =?us-ascii?Q?pNNXC6Auffk5GsgNZwTxjHmIRmGRzgxFe6j1EDYzyq3nfR0j5IBiPZrecP7B?= =?us-ascii?Q?3/g1JwphK+fTxkyCRZC4duHUkBG2yfOBSrXmI0t667lNwGS2V+tGfH687P5C?= =?us-ascii?Q?Nfa73LykaPQYGvUQ/YMUPALzOuFyRSxcZC/+E1vzydk0KCxr/GLzK/7BUDU2?= =?us-ascii?Q?7pHYOu8w59fJ2u2xR6/1qVmxAuVrDBriLJcHIOMKy+zWEvHZxRNy2jskZvvL?= =?us-ascii?Q?p4zmzx4a0duL313vZR/72ZAQryinu9Txz3DpQBoE2Z71kWFWqwUu3McPcOQk?= =?us-ascii?Q?7SZacVZypxLRTxmPZ52g45exXUz1NUJd3FyyZMheD94Gk4GhQd/bOIQkNmAa?= =?us-ascii?Q?/n1wn6SR3jKZS0f1JRp2fIkAbBt10XCn+K6EKfzgp3O9yh6+/EqaVOwzdjuu?= =?us-ascii?Q?IFugPQ0Lal/+n+yjzhjVf/epksBxwmA=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffb5775e-9f13-4872-7ac4-08da3323e0bf X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:21.6519 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SkWZ3+ig0u+9BIN84Eyfy/12CvaZNThxENEZfwCNL/HcdWg7Svv+O8tXLoMlQRz4gHpg803jSP+mybX13L20ug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB6169 Content-Type: text/plain; charset="utf-8" This patch adds a new sysctl, named scheduler, to support for selection of different schedulers. Export mptcp_get_scheduler helper to get this sysctl. Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- Documentation/networking/mptcp-sysctl.rst | 8 ++++++++ net/mptcp/ctrl.c | 14 ++++++++++++++ net/mptcp/protocol.h | 1 + 3 files changed, 23 insertions(+) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/netw= orking/mptcp-sysctl.rst index e263dfcc4b40..d9e69fdc7ea3 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -75,3 +75,11 @@ stale_loss_cnt - INTEGER This is a per-namespace sysctl. =20 Default: 4 + +scheduler - STRING + Select the scheduler of your choice. + + Support for selection of different schedulers. This is a per-namespace + sysctl. + + Default: "default" diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index ae20b7d92e28..c46c22a84d23 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -32,6 +32,7 @@ struct mptcp_pernet { u8 checksum_enabled; u8 allow_join_initial_addr_port; u8 pm_type; + char scheduler[MPTCP_SCHED_NAME_MAX]; }; =20 static struct mptcp_pernet *mptcp_get_pernet(const struct net *net) @@ -69,6 +70,11 @@ int mptcp_get_pm_type(const struct net *net) return mptcp_get_pernet(net)->pm_type; } =20 +const char *mptcp_get_scheduler(const struct net *net) +{ + return mptcp_get_pernet(net)->scheduler; +} + static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) { pernet->mptcp_enabled =3D 1; @@ -77,6 +83,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet= *pernet) pernet->allow_join_initial_addr_port =3D 1; pernet->stale_loss_cnt =3D 4; pernet->pm_type =3D MPTCP_PM_TYPE_KERNEL; + strcpy(pernet->scheduler, "default"); } =20 #ifdef CONFIG_SYSCTL @@ -128,6 +135,12 @@ static struct ctl_table mptcp_sysctl_table[] =3D { .extra1 =3D SYSCTL_ZERO, .extra2 =3D &mptcp_pm_type_max }, + { + .procname =3D "scheduler", + .maxlen =3D MPTCP_SCHED_NAME_MAX, + .mode =3D 0644, + .proc_handler =3D proc_dostring, + }, {} }; =20 @@ -149,6 +162,7 @@ static int mptcp_pernet_new_table(struct net *net, stru= ct mptcp_pernet *pernet) table[3].data =3D &pernet->allow_join_initial_addr_port; table[4].data =3D &pernet->stale_loss_cnt; table[5].data =3D &pernet->pm_type; + table[6].data =3D &pernet->scheduler; =20 hdr =3D register_net_sysctl(net, MPTCP_SYSCTL_PATH, table); if (!hdr) diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 2f6c4486a009..b52cef5fdd9c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -596,6 +596,7 @@ int mptcp_is_checksum_enabled(const struct net *net); int mptcp_allow_join_id0(const struct net *net); unsigned int mptcp_stale_loss_cnt(const struct net *net); int mptcp_get_pm_type(const struct net *net); +const char *mptcp_get_scheduler(const struct net *net); void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow, struct mptcp_options_received *mp_opt); bool __mptcp_retransmit_pending_data(struct sock *sk); --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146712pis; Wed, 11 May 2022 00:57:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwvcAuX9cOeL84forpHGoznkJ5hw7mDxNz2sCSUMHlpnNRdp7JGbck6VhvNX5XK/x0fcMnw X-Received: by 2002:a17:907:c24:b0:6f4:d6f2:9f6c with SMTP id ga36-20020a1709070c2400b006f4d6f29f6cmr22605597ejc.539.1652255858386; Wed, 11 May 2022 00:57:38 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id nd12-20020a170907628c00b006f3d331b455si1744279ejc.231.2022.05.11.00.57.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:38 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5237-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=mprLLgr2; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5237-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5237-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 062052E09D9 for ; Wed, 11 May 2022 07:57:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0412815DE; Wed, 11 May 2022 07:57:36 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) (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 6089715B9 for ; Wed, 11 May 2022 07:57:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255852; 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=RyOeEE6c3onzqLJHdAX3fwC7e/j3gCq69YJHJ44PI5U=; b=mprLLgr2/WA6PzFuxDozZad/Piwlu/P7j6cCCM10QLEgKOXluCx1Oto9GMjhCVEY0ulgvD J5ppOpQoQUWk9w6QKgLPlbapITSYBCDspBPe3Ri21WuxhkBXVmwJOcMgNaodYEDZS/MJAv yCRKL9+GrXETolTOwacP+pY4i6mSRV8= Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2057.outbound.protection.outlook.com [104.47.1.57]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-27-72m-NwKgOUKgqDoLQvbj9g-1; Wed, 11 May 2022 09:57:30 +0200 X-MC-Unique: 72m-NwKgOUKgqDoLQvbj9g-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GNEwYXA+g4gGzbizxBsACTw/GK+Ei2EtwfTjzJzM/cXc5MrRjFZkBwNH+OiL+uc8WP3Sf74L1l8dkti3eRsdWSxNDPJeNHC6SpahjxNz+ey/ugPPYC/aW4oiGuq1zrMNkf1l/DMiKzlkhJ6S88YmWdJGV3UJNlxvKn4kcG2TC8QBPg1y2fFay64OI2g9b8BJ42XXgvxUHfF0LpAx/hzP71Va4N4jjAwKvb/WMCOrW203gpXCDvverlv36xUw15xKXXNGc5LIqzQmMt6X83gxTZqSssx3L+5t2XTqUV+LrOqMWCqFS/Ssf56Rgr0Q/k+YWzHWzMv45gyaDbQwUvmUEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XMZHbDtevsFKUd4St434GtrEtJKV7jhN++tuwH1OfBA=; b=BZ51x6KVsIk/5xKhtw+dG7GgK/oy7HoNh7Zv6Tu60zDwHSSeb4jRoZwPDS4FFmLGUg7HWkp71mwRfUwps+mWo3iFy+wpDXIyyZyHYvU3cMYJJubnWYH36MsPbIzs3qqhNMz111VMj1xFQcoBJOG62Jf/JdVKk3a8AWo3RAIBN4sssS7i0xgOtl3d5sf7/YkTxQpdsfOcOBOKG9rxgd4pHPxaYbE3IhKSm+wdn+TupWZ0zTTOUrh+HmCjPcA8x+yZtKXlxHEoX3GvHga/AQ/msk5gu5JAoPwRgLNa4FGmKC9mEjAUQZCe6jPf2fSp/0VbAdCkFY0mlZe4LRF1qPdAcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by DBBPR04MB6169.eurprd04.prod.outlook.com (2603:10a6:10:c2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.23; Wed, 11 May 2022 07:57:28 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:28 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 10/14] mptcp: add sched in mptcp_sock Date: Wed, 11 May 2022 15:56:16 +0800 Message-ID: <7efe233b56090944ff2aa9e46f349c6d40ed8f8c.1652255616.git.geliang.tang@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0017.apcprd02.prod.outlook.com (2603:1096:3:17::29) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f9587474-e38d-48d2-fb19-08da3323e500 X-MS-TrafficTypeDiagnostic: DBBPR04MB6169:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yWaRzZWeWIs0c5/8822zyVhMKHfu1Oeb+riSUS/6ZTjqm4k1GeWdZhISt62fF/Sjqjop0Zjh+9vMzVQGC87XdframnLPnX1VNz4iOZvDvsKViaKT8PtouUR2XeH7j/02t12FhBLh+RUzGxppL4qQ05P4GkFXcbvlKqpY9xBWSD74TeA/YD7dcoPdUTGGq/B7SAJjFNoyr+UjMKRbvv5jNlx3Nw5CtMG8k2GC1kMylY0rFO9cEq7AmvvUEVkO4LhyswLnyKIWUXuWxVept/iOHQUS9Ef7F9MpLmrkTAuYWCN0DFqMgasvGMC83E/fYOWdXkMnCB7JqtQDDgR26BiJ0HSTVMhZNcEpXgsW4CaI3aMHfQL1o39sMLO334SzbcdBiiRoRx1lWf1uEOGPqmee0FGoa8edw/QhMgsMmWuGGluEkAsXU35i87j9wKEFUPCD5AScvbP1+JU1s5BdKkuM4hBKFoTbg3wctFxBPRAtx/CtJNLvEswl69u/r/SekF0lnU7ouuiP813CoZE38znAfiOPsQe3yb3ZPj6x5tXaG0KQkowhq7Um/Wh9GwY2AJuIqw7g8c0/HDc7X5SaRi0Xw2glsslb1XTcDaZnFQVImkczgA9IrxGUK3w6ydPU9cDN/IpkTJKwm6mVc2YX8FfysTkQW0sPP1o6hy7yzGf9PMWs988mmt8Z6/atHmcf/MKi/3mQWwdbI0R1zwymvaUwEA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66946007)(186003)(5660300002)(8936002)(6916009)(44832011)(54906003)(26005)(6512007)(66556008)(316002)(86362001)(2616005)(4326008)(8676002)(66476007)(83380400001)(6666004)(6506007)(36756003)(6486002)(2906002)(38100700002)(508600001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8B/azaHlP2QbANsXXNTx3LuCv33GuEkybLyiXIsD92Xi3uXSaPsx6ONpKOKW?= =?us-ascii?Q?strG1JC8b5t44m/IDDvdqO2gWVudE+nVOBEBv/xkpbzWfB4QCz/4LIPE8oi+?= =?us-ascii?Q?cXvR8lLlCihyXB5Iv2029btJWnjLcWr6b13l0oX13d1QpNKPSD+A3iz36Oqr?= =?us-ascii?Q?Ov9QwaEhvhFmL+T4NU3s4WhXiivXHiokMEOzRqFVfRImhgtho8SU5zrnhcFL?= =?us-ascii?Q?CJTzY1rhAYLQt3d+Mcb4yWPAJ9UAhlKb7a2FafrN9fNVXYS66xnW4pEIENoN?= =?us-ascii?Q?mHbhGQ1cXoP1KtbIyXzumO5k4R7OKUNthSlLnR2Tm7A1pVut5kQdY/AqdgJC?= =?us-ascii?Q?OZZy7n38CtF3RcuILNccCgsZ/jXfCfJdSSMLzj+PXjE0UjddMCp/4M63Z+mA?= =?us-ascii?Q?ev3Bstal8sLDmemKIAfMlCwqyyijN4mYIFGYFzFTDe1Yhy5McFqIntY9MdNS?= =?us-ascii?Q?S9mS0ZkTlq6EWDnHpH30AVMlnnvw0cgtChVVh7lZ/IA5BqMFg1KIlmZVuuY3?= =?us-ascii?Q?uI4n0cwU3XjnEktkMW4YMQVr6jm9AW4X6MD1dLfrghPbj0xxQFyP1ooDeU2Y?= =?us-ascii?Q?DmsGJvGpL5Jm0uDcuXPAQfUdX73eVgI2Sttc4sOL+iNuYKbXoetnZ+WLyztd?= =?us-ascii?Q?3RyHC1Z053hIXKIIMv7JKPr9+cRFACqfijjA++NQJBKpqEii69A1NP34X0iw?= =?us-ascii?Q?nzjtgG7/1FDDPDfeU4uiNRx7p9jqWt7iuTX1kMHI1ccryEo0JWyGYdH63tmj?= =?us-ascii?Q?qsbkzldazM2A+xT9Vih5lGD6j+9qcYIVlRZ56jcUPbXm6syykfV13k7ORHjV?= =?us-ascii?Q?ANUiONKdhEg5d1bXuERL3Tpb2L0WDxt+GEYQ4twEZ8x3K4aXZivuiB4mCjo9?= =?us-ascii?Q?3yhQKlxSzs5ZNExL2E+eairxi4vAqeQ6hJ14/R4ich5dxl3d0fHtxXSGKoEi?= =?us-ascii?Q?k6CvA5zG3TCD0Z5qXz/PQyuFeoqDKV2FKk9jws6rD/MUU4bNd78VeN4RlP4y?= =?us-ascii?Q?CFVvxQnQ+uiKQX78A5UsuH6rbbrwqVliVbOM9w7pRttzTRuRM3cCDxm6L6E7?= =?us-ascii?Q?9WA5M4sQIK++Sqn5G5Kk+3kiUF+0cyfbyreW8wPjEAv9jj7yC7S9w+Wtes5U?= =?us-ascii?Q?SJGd3+fSw28o4xsfV+1VzEVzo/Fpjkp/DsKC7tcB+l1DHI0FXxhZpzvo8lBY?= =?us-ascii?Q?Dv9lmn3QBmmgHgynV/yLNvvzaK2VAS2bf0tv+hr7N61dDFNYipYP61Ou3Iwm?= =?us-ascii?Q?4dqk6d/CZkY5PO6rxIjluDJxjR5ahSkRJ7j/g6sPssl6Qry5xmneYvbdu7Ia?= =?us-ascii?Q?3p7wbcS5+w5BZABFfRs7vnOuLXrFwzk8RNUjEhWWV9FRf89iKB3I9gFk+fw7?= =?us-ascii?Q?1OTCy+Anvmcnx74SZc0z0cEeAHQsQM1FzhwstybaL8W7fv+8GogrEASii/Bm?= =?us-ascii?Q?ShZnAq9JRMmHn6Bmfb9yUx8xOTO9JhgjjxTHgZJXjUMqt10JprTsn3Yef0aH?= =?us-ascii?Q?Is94WBra4W7WNisjnU9LNapfpu5YKmAs8+6kx7sMIuOWbGt+T1CV+mzxb+/f?= =?us-ascii?Q?1WLPJcflbVDLdEmBAdKoh3Ksx1sPk/mEkHAYt0OfvZEzbkhsyMnLkFxXCZ4n?= =?us-ascii?Q?L3aZI7XiHTAjhFT8OjMlZyLV2qmPOKgbQcmJAlGQxIG+2y8zJdRQPuJiWJoD?= =?us-ascii?Q?/5hmR8rdMZSzubVRbHVcHNiJXrI3uetWLvKGJrwlxdErBySN2G+302aqqUg8?= =?us-ascii?Q?+tVU7xQSrnfNC5+IEEp/l0NRq4R+vZA=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9587474-e38d-48d2-fb19-08da3323e500 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:28.8546 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: roz6SrhcRiaHa8D41EAZWF4BCHMQjo9ITnGiCwia2ZWYOnndBTlrogy63Z/m1SY0DUcy3ahzEW0PgHugywP4UA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB6169 Content-Type: text/plain; charset="utf-8" This patch adds a new struct member sched in struct mptcp_sock. And two helpers mptcp_init_sched() and mptcp_release_sched() to init and release it. Init it with the sysctl scheduler in mptcp_init_sock(), copy the scheduler from the parent in mptcp_sk_clone(), and release it in __mptcp_destroy_sock(). Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 7 ++++ net/mptcp/protocol.h | 4 +++ net/mptcp/sched.c | 33 +++++++++++++++++++ tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + 4 files changed, 45 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 921d67174e49..3e9246822412 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2657,6 +2657,11 @@ static int mptcp_init_sock(struct sock *sk) if (ret) return ret; =20 + ret =3D mptcp_init_sched(mptcp_sk(sk), + mptcp_sched_find(mptcp_get_scheduler(net))); + if (ret) + return ret; + /* fetch the ca name; do it outside __mptcp_init_sock(), so that clone wi= ll * propagate the correct value */ @@ -2812,6 +2817,7 @@ static void __mptcp_destroy_sock(struct sock *sk) mptcp_stop_timer(sk); sk_stop_timer(sk, &sk->sk_timer); msk->pm.status =3D 0; + mptcp_release_sched(msk); =20 /* clears msk->subflow, allowing the following loop to close * even the initial subflow @@ -2985,6 +2991,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk, msk->snd_una =3D msk->write_seq; msk->wnd_end =3D msk->snd_nxt + req->rsk_rcv_wnd; msk->setsockopt_seq =3D mptcp_sk(sk)->setsockopt_seq; + mptcp_init_sched(msk, mptcp_sk(sk)->sched); =20 if (mp_opt->suboptions & OPTIONS_MPTCP_MPC) { msk->can_ack =3D true; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index b52cef5fdd9c..85dd69b8d9d5 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -298,6 +298,7 @@ struct mptcp_sock { struct socket *subflow; /* outgoing connect/listener/!mp_capable */ struct sock *first; struct mptcp_pm_data pm; + struct mptcp_sched_ops *sched; struct { u32 space; /* bytes copied in last measurement window */ u32 copied; /* bytes copied in this measurement window */ @@ -625,6 +626,9 @@ void mptcp_info2sockaddr(const struct mptcp_addr_info *= info, struct mptcp_sched_ops *mptcp_sched_find(const char *name); int mptcp_register_scheduler(struct mptcp_sched_ops *sched); void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched); +int mptcp_init_sched(struct mptcp_sock *msk, + struct mptcp_sched_ops *sched); +void mptcp_release_sched(struct mptcp_sock *msk); =20 static inline bool __mptcp_subflow_active(struct mptcp_subflow_context *su= bflow) { diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index c5d3bbafba71..53773668b5ee 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -54,3 +54,36 @@ void mptcp_unregister_scheduler(struct mptcp_sched_ops *= sched) list_del_rcu(&sched->list); spin_unlock(&mptcp_sched_list_lock); } + +int mptcp_init_sched(struct mptcp_sock *msk, + struct mptcp_sched_ops *sched) +{ + if (!sched) + goto out; + + if (!bpf_try_module_get(sched, sched->owner)) + return -EBUSY; + + msk->sched =3D sched; + if (msk->sched->init) + msk->sched->init(msk); + + pr_debug("sched=3D%s", msk->sched->name); + +out: + return 0; +} + +void mptcp_release_sched(struct mptcp_sock *msk) +{ + struct mptcp_sched_ops *sched =3D msk->sched; + + if (!sched) + return; + + msk->sched =3D NULL; + if (sched->release) + sched->release(msk); + + bpf_module_put(sched, sched->owner); +} diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/= selftests/bpf/bpf_tcp_helpers.h index bca318d2cc78..e17ce2b856bd 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -253,6 +253,7 @@ struct mptcp_sock { =20 __u32 token; struct sock *first; + struct mptcp_sched_ops *sched; char ca_name[TCP_CA_NAME_MAX]; } __attribute__((preserve_access_index)); =20 --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146736pis; Wed, 11 May 2022 00:57:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy5ekVfBEFhvI/PzAYYxBXeZ1P8IvgVS1pJOQ45sc3kHfnWjrg58dLCeOHzFc/j9I3HjmQw X-Received: by 2002:a17:907:9490:b0:6fa:7970:3eb8 with SMTP id dm16-20020a170907949000b006fa79703eb8mr13387391ejc.457.1652255863180; Wed, 11 May 2022 00:57:43 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id js13-20020a17090797cd00b006e812fe9f78si1768352ejc.461.2022.05.11.00.57.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:43 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5238-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b="IxlA/M95"; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5238-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5238-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id C6CDF2E09E5 for ; Wed, 11 May 2022 07:57:41 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 89C7B15DE; Wed, 11 May 2022 07:57:40 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) (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 CDC3115B9 for ; Wed, 11 May 2022 07:57:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255857; 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=QVxj7r/DO7WmmHjuG9sV1Fa3xU7BZHTs8Vnx4cTk1Wo=; b=IxlA/M95KQxTiCZplhy3pRyu6RM+NKOO2qjxoS+kUR51ql+Vcqqx0PPPRBjUjpht8+6cya bYBWeBv6FgN9Hpaw/RQoJubd2M45tl8pJHg4We6WAMDeRBzNVoy55wXvEbxXpPdExOKxcg yvMvFz9q2K8KGu5LW7IJtoqoYgY0W1I= Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2050.outbound.protection.outlook.com [104.47.2.50]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-10-DqHFTdHPNp-96wZq3_bYJQ-1; Wed, 11 May 2022 09:57:36 +0200 X-MC-Unique: DqHFTdHPNp-96wZq3_bYJQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HZ/etc/nyc/yLssBNez8sff3WvR2c7+/ItyndozVWZH4NVgh32Vq0ah4Ct7jPenZGYFDne7m3MXXQoNkrbQ7Cb29xA8aGFN8qxVXn20qYAmZO/3owREmgaScbwxKiU5UblNkzQHaokf0g3TEmARkRuEdQ/GUaqsSdYBm5Skl9LHGZ5mOk+T4AVcvAywP5rZx9HnlKtIWX4IKHnaUV4sJItoucyfv5Af2WOdVR8KnXCoJl+tJXi5EyX/2CP26n1zjWq7gNEopIY6a2McT9W7cqCewP2bP1SgVjLgJjikhGa29rrFfgiMupBMaGy1vpvZlkv3rs2dWUyILd0qomy0cKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3ZKH+jmRjjHcvw2C8uNF3rRV0lIs9iBD7qyfLQx5bHc=; b=mT8Fli5/pO853WwNeZ08OzNF7C+SR8ty8lvYKVbqec5lTvVs0QqGCWQ+hlvgM+g7HtWm1IvQN0Zan3tWFZktUjBUpr4dbNAm+Is7iD7iO2Sw10T4nkbRlOjgYZsrVengJo7rwczlFKZDi9RHIg5iBBcdsnuFoi3yH+0ntujfzk6dXM/ZS7BWe9ktB9GuLA5nWqf3NgwCz77HqzGbMKMQkKKx6Vmrd9UV83TljeTkWF2iwbDKmwkxbd4bKbuKExUDOD7YWBxFmWW4LbcxNhvyGOHA/bL0EBmqgGH/4JnG8NvNn8v/7wePiBEwEXIJE42eFuVhYLjJi4pAXAiuqsOQYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR0401MB2653.eurprd04.prod.outlook.com (2603:10a6:800:57::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Wed, 11 May 2022 07:57:35 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:35 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 11/14] mptcp: add get_subflow wrappers Date: Wed, 11 May 2022 15:56:17 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0022.apcprd02.prod.outlook.com (2603:1096:3:17::34) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e363acf0-cdf6-40e7-8152-08da3323e8e5 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2653:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Rj6RGMs70p7y/tBnehndkDR7KeaFA3sTui4TkZuHxP5J7GHXN5NaV5NkwpS6vm0/F+BTcoCKVDfqa1I9KLg63DmVBUUynSgZlJsH9GeocSUUTsz+XI9ccChyjyDpu+O+IVUghMWopsUxiOZEpGUxDVvx9EP6krLs+5ffBOgk2s6pKU9RI2Ugq9rV/QUcrhz6Gc4LsTnrN3ts+aooCmGMTe9SlwJchmoVwdGJmM3mRPQQmqeZVGlm/I7faXYk1/5tHLscyMEw97MfvE8B5TMO2Scn9mwVeLyP3IIJT4mkdQxlxFAeuZb/IuIb9c1KL/CyfQxxYPDVZ6Wtjc29SpzwwTifapxQkXqJcQfvL6Dtf4YaAP6H6hbkjCZxMTEo4YD6SwWrAWvAYVh/12RyvC//mrjmEXknW/mSfEsAHqoiNA+41933WCiD80hxFSe27VMP7jSZ2BuvNHtun6phR4lOBdf7GNdJy4yuLvDkI59betU7OhFXrtalDvzEZUW3moQtfsS1gttxqFUkwBBgIxol/nrA9mjHuqcLScJ/bsIlMW+19MEDgk8IbLsWRvUQ9ptLJ4iwkSv3iOEJ2gitq8M/mOXNL8uaAnjLx4wbm9oHCV2h6ooIPO++nBY/EiZKYsIr0/M1Hd4I/uKAQe5UfKn5Td9v4GA0INUQMMJuxet/74zuIDZnYAY2NrQ/HOBcDDZb2BZ8H6IRZKL+Tku791IhYQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66556008)(66946007)(66476007)(186003)(6512007)(86362001)(4326008)(8676002)(44832011)(36756003)(6506007)(26005)(2616005)(508600001)(6666004)(6486002)(316002)(6916009)(54906003)(83380400001)(2906002)(38100700002)(8936002)(5660300002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sYByicluh6tiLMP014plN10RXsvPr1KJvLxhDO7+DgUVVm7/gNZTX5xsmUdZ?= =?us-ascii?Q?XCpZZbitsbhADh4Arp/wwxKmkKo8WoRh+GbBgetcwleYSWG6YLq/W5IEf1uk?= =?us-ascii?Q?OHhd5AlvuF0VVdbizZB6IAt7QlPJePJwdn/wQRD0f0JZLYU2Qc+jrmgsk5zK?= =?us-ascii?Q?e/1WZAePhf9V9txM2tu24DnCHvBSx39V1K+4uRX/EKIkl4gAijqRz/p6mNMO?= =?us-ascii?Q?rZtN6RGhAeE4wObKyrzVgh2A0ozLjips/ObfN1+HTPr+8emYsE25HC89y4lA?= =?us-ascii?Q?9SQ5sLonmFXV6Vo1qQtwq1Wy+2H16xGa0rJvjbz9hu5/+PoL5JIxPerQVmq6?= =?us-ascii?Q?rIOGaGGJOw8zNuuGgWBI6fKu6BxAG0uxxc8PJvAIYWuM1XjBEO686FOxqVqL?= =?us-ascii?Q?S+eiwjqZZNXK5ErCfUorl47RgSkk6fpGPxZ5/ZlyLk4X2BbMJkg/HD/TKcDy?= =?us-ascii?Q?JblhoZ937MFFMfC8kP5yTgq2ClvL9oDeP7r1SaIaUCTQP5sUG8qLvFVxXBGC?= =?us-ascii?Q?laoM/OxcA3+4uGVv28sb5KFKCRMXnmjjV5Wae4Ly/kSc4YJAjFVBKL/PI3V6?= =?us-ascii?Q?ltWLI8IrwNWoXAEnvRTyztEBPvwr92zXomgDPBAowsJaw33CwgcauTTnkIC3?= =?us-ascii?Q?LobeFLvKrJt59sJyaczGGhhI3KGF6NUs8myhHBp2HngydjodvxYRzV4WJt6X?= =?us-ascii?Q?9YHlbCzRXYhTLpshKQ5JjMioX63h8GTl8nNbMo59JssypncZNrHESeVJRSaF?= =?us-ascii?Q?jeduAvcrm926MJ/apGE0pnoMa0mzA04tNJg8NxqHHUyKr23jIXSU4UBB+wRw?= =?us-ascii?Q?7+zabMsCMkGSNi62uCMU/ebzKkMclFtlalrY0gX/d+FFpUDZSc++Q9JLgQuk?= =?us-ascii?Q?Lh6GreY+AsB5ljMm+V6aLX6JL6CEHePpraYzc5XT9E/Y7Q8wzNZKGSCbTUKs?= =?us-ascii?Q?vQKC6FhvjFNRPjkkWk82W+hxTb4yw81bP/oPbgzKHo29lD0NOH05qLUA0uou?= =?us-ascii?Q?hFpSgeCw3iivntMz+9V9cinwTeh4fpu4jfcIdkEqRd1AhQ2nCHcocuZwPJPa?= =?us-ascii?Q?mq0sD7AVuACi3O2nUgIvlPbYQiwqKmqmS5UR32zoe+yDZY/zuvpyIn6gye/o?= =?us-ascii?Q?dsScU9PMoVJJNz1rB0DGrHFl5DOGDRsLTSOUJAZ1Ww8/ywswVssPWDk5hQha?= =?us-ascii?Q?9ePVw/Hkz1le16vMqK/oTbCsoyFaNmqCLu/Senovkzw0pTTgskKxb1c3nzqz?= =?us-ascii?Q?IKOeMpxp/DcmT8PCjJ5fiPC4nLUn45CjZH/7Ec1ZLPo2hXeASOA8wOclA2sE?= =?us-ascii?Q?KMLHIf9Ggkaj/sMaF1xFrLMMzSSw9K7CmAwn/yrF3seahBps/1k9PbVcucZt?= =?us-ascii?Q?gj8jkURqE8POzNJsai0CemMS3ovMBApwHEh0Rignb8gepjW2KtLD89MTsPml?= =?us-ascii?Q?jQlVVt6g0nze83EzmIiCVFS8Mf2o5QG478UGj7S6N5Uvvgl/Vs/OWdbcyEqZ?= =?us-ascii?Q?YE242cKRSlxqO0qyNM/JYug0CD5XakoW01YPD+w4qnLvrwc8MSgFNJCMrYr6?= =?us-ascii?Q?o0blFbciKpTNFvd4l75uQyb3mgrw9607WiM1TpkVAZ7f7w5zvvNKVrMZCoQ0?= =?us-ascii?Q?oqFes+kbMts0eew5MBmQxN+/RQlYqXgD3He5xYeVWwGz5/XUIBqfkkVjQXJv?= =?us-ascii?Q?skSIN7rYYDyjASsD3Ha7I2NBnFc3c+i/tASi0Zk0m8zy53fCBFD3kkKSVWud?= =?us-ascii?Q?EOOBhAicdJDkLoC/m8Rvt4ZLOhAdngw=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e363acf0-cdf6-40e7-8152-08da3323e8e5 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:35.2292 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /ukC42kKTtVAtDLokkSPDinY7MoDVhUaestBym23LvojxuT0b9a5XH/k08RMFHCrKymiFO0GIn5A3QvNUtaHxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2653 Content-Type: text/plain; charset="utf-8" This patch defines two new wrappers mptcp_sched_get_send() and mptcp_sched_get_retrans(), invoke get_subflow() of msk->sched in them. Use them instead of using mptcp_subflow_get_send() or mptcp_subflow_get_retrans() directly. Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 25 +++++---------------- net/mptcp/protocol.h | 4 ++++ net/mptcp/sched.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 3e9246822412..ea3c93322592 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1427,7 +1427,7 @@ bool mptcp_subflow_active(struct mptcp_subflow_contex= t *subflow) * returns the subflow that will transmit the next DSS * additionally updates the rtx timeout */ -static struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk) +struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk) { struct subflow_send_info send_info[SSK_MODE_MAX]; struct mptcp_subflow_context *subflow; @@ -1438,14 +1438,6 @@ static struct sock *mptcp_subflow_get_send(struct mp= tcp_sock *msk) u64 linger_time; long tout =3D 0; =20 - sock_owned_by_me(sk); - - if (__mptcp_check_fallback(msk)) { - if (!msk->first) - return NULL; - return sk_stream_memory_free(msk->first) ? msk->first : NULL; - } - /* re-use last subflow, if the burst allow that */ if (msk->last_snd && msk->snd_burst > 0 && sk_stream_memory_free(msk->last_snd) && @@ -1575,7 +1567,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned i= nt flags) int ret =3D 0; =20 prev_ssk =3D ssk; - ssk =3D mptcp_subflow_get_send(msk); + ssk =3D mptcp_sched_get_send(msk); =20 /* First check. If the ssk has changed since * the last round, release prev_ssk @@ -1642,7 +1634,7 @@ static void __mptcp_subflow_push_pending(struct sock = *sk, struct sock *ssk) * check for a different subflow usage only after * spooling the first chunk of data */ - xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(mptcp_sk(sk)); + xmit_ssk =3D first ? ssk : mptcp_sched_get_send(mptcp_sk(sk)); if (!xmit_ssk) goto out; if (xmit_ssk !=3D ssk) { @@ -2216,17 +2208,12 @@ static void mptcp_timeout_timer(struct timer_list *= t) * * A backup subflow is returned only if that is the only kind available. */ -static struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk) +struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk) { struct sock *backup =3D NULL, *pick =3D NULL; struct mptcp_subflow_context *subflow; int min_stale_count =3D INT_MAX; =20 - sock_owned_by_me((const struct sock *)msk); - - if (__mptcp_check_fallback(msk)) - return NULL; - mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 @@ -2479,7 +2466,7 @@ static void __mptcp_retrans(struct sock *sk) mptcp_clean_una_wakeup(sk); =20 /* first check ssk: need to kick "stale" logic */ - ssk =3D mptcp_subflow_get_retrans(msk); + ssk =3D mptcp_sched_get_retrans(msk); dfrag =3D mptcp_rtx_head(sk); if (!dfrag) { if (mptcp_data_fin_enabled(msk)) { @@ -3128,7 +3115,7 @@ void __mptcp_check_push(struct sock *sk, struct sock = *ssk) return; =20 if (!sock_owned_by_user(sk)) { - struct sock *xmit_ssk =3D mptcp_subflow_get_send(mptcp_sk(sk)); + struct sock *xmit_ssk =3D mptcp_sched_get_send(mptcp_sk(sk)); =20 if (xmit_ssk =3D=3D ssk) __mptcp_subflow_push_pending(sk, ssk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 85dd69b8d9d5..59a23838782f 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -629,6 +629,10 @@ void mptcp_unregister_scheduler(struct mptcp_sched_ops= *sched); int mptcp_init_sched(struct mptcp_sock *msk, struct mptcp_sched_ops *sched); void mptcp_release_sched(struct mptcp_sock *msk); +struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk); +struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk); +struct sock *mptcp_sched_get_send(struct mptcp_sock *msk); +struct sock *mptcp_sched_get_retrans(struct mptcp_sock *msk); =20 static inline bool __mptcp_subflow_active(struct mptcp_subflow_context *su= bflow) { diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index 53773668b5ee..3ceb721e6489 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -87,3 +87,55 @@ void mptcp_release_sched(struct mptcp_sock *msk) =20 bpf_module_put(sched, sched->owner); } + +static int mptcp_sched_data_init(struct mptcp_sock *msk, + struct mptcp_sched_data *data) +{ + data->sock =3D NULL; + data->call_again =3D 0; + + return 0; +} + +struct sock *mptcp_sched_get_send(struct mptcp_sock *msk) +{ + struct mptcp_sched_data data; + + sock_owned_by_me((struct sock *)msk); + + /* the following check is moved out of mptcp_subflow_get_send */ + if (__mptcp_check_fallback(msk)) { + if (!msk->first) + return NULL; + return sk_stream_memory_free(msk->first) ? msk->first : NULL; + } + + if (!msk->sched) + return mptcp_subflow_get_send(msk); + + mptcp_sched_data_init(msk, &data); + msk->sched->get_subflow(msk, false, &data); + + msk->last_snd =3D data.sock; + return data.sock; +} + +struct sock *mptcp_sched_get_retrans(struct mptcp_sock *msk) +{ + struct mptcp_sched_data data; + + sock_owned_by_me((const struct sock *)msk); + + /* the following check is moved out of mptcp_subflow_get_retrans */ + if (__mptcp_check_fallback(msk)) + return NULL; + + if (!msk->sched) + return mptcp_subflow_get_retrans(msk); + + mptcp_sched_data_init(msk, &data); + msk->sched->get_subflow(msk, true, &data); + + msk->last_snd =3D data.sock; + return data.sock; +} --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146764pis; Wed, 11 May 2022 00:57:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxDUTAO1Ic/48oAa4PVpK+90XFDg9WSz1CRRQLa1/Ma2p4EA4cMX37lZZc7jbPw2Uk+PIO4 X-Received: by 2002:a17:907:6e1d:b0:6f4:60e6:9fa6 with SMTP id sd29-20020a1709076e1d00b006f460e69fa6mr23049639ejc.184.1652255871384; Wed, 11 May 2022 00:57:51 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id dp2-20020a170906c14200b006e858ba51f7si1768150ejc.558.2022.05.11.00.57.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:57:51 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5239-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=OXga1KyT; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5239-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5239-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 160D82E09FE for ; Wed, 11 May 2022 07:57:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8A0F115DE; Wed, 11 May 2022 07:57:47 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) (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 E2D7415B9 for ; Wed, 11 May 2022 07:57:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255864; 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=wN0KjzJM9Ev/2k5zp049T/Kc3dOdK+O2RKGqo4NrXVw=; b=OXga1KyTO5+0Julz6vnpn2llsUM03jv5etVnBV/yIzMjAEXDVNb8M3CHA453RaA0gRAwaY hEIayAP2e65Rnb1glCHfpchEMU7/lJdNvRvj5s5060Y/HWSa52FRFzxd82/+L9bhrG47im 6ZNFRoHTlunaPrOuU3JEzQYY75ECqJk= Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2058.outbound.protection.outlook.com [104.47.2.58]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-23-_IMoxOLkOYuQfMUV29X49w-1; Wed, 11 May 2022 09:57:43 +0200 X-MC-Unique: _IMoxOLkOYuQfMUV29X49w-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JYlwnzDyzCk6pSy4rhqNNBGxsZlbIMTdsRiNESSi2sTv27MNdhqp4aUQFCnJZMxmLmCg2JvAm5JyFtP3hwS2ckrIrlDkr5ujXfammEWIsqIZgpvJtSPO4ab7khw4obSzU/LpGRoA5CmssKY2aw8izvtMqpJm1nqQDkvS1AF6s5Ajjv7HtHTEQ7iaztA0w6zX+qwWB3qF9h8c23mBbB/DBFS8sQtf7V17GmRlNMoz2wSLR5sbjRDsS3KGrfZk/Au+F8x26lECDbYz8VO99ZRiQMv5eJ5fOgNBPivTl22FogtBww3aZSmpgkomOKB6aq3SEznHUAeBUMxrkNsX/PbMdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qfatK8xf2UjGyo9mADrgza71Y9wgPq69zv3wfKdrO3w=; b=mKwd6mJAWH+WbWZW8pbSqfIS5TtCv0gFjkboAK2sOmSht3qq93Cl3Pb6dRh/IaSDDP36MrgmkcjP30PMoAahjsOSOSMG0CyLb8eLK0ldvY/Kv1SnU5WTkwX2iIj56e0eampZ8+C5QZvjoI78ZayNPOirYVe+y36IGvt8CT7XWX2W9rShfPXFnk269vR92lTZWiEWjyR7lVQLpjHIXAi9+VEDIQCRS6vZtlRUiOlmEVgCxE8v2UNyeptK5ZSvT5KqQfCU/fcYT5Wviv+G18JabrYDMxeso03XuV+f8jDHpluM2tc4hkQcWsn9VjytEp/zP9m+SlqdcBoAByWV+u2DHA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by VI1PR0401MB2653.eurprd04.prod.outlook.com (2603:10a6:800:57::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.13; Wed, 11 May 2022 07:57:41 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:41 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 12/14] mptcp: add bpf_mptcp_sched_ops Date: Wed, 11 May 2022 15:56:18 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR06CA0252.apcprd06.prod.outlook.com (2603:1096:4:ac::36) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f91f1f75-018c-4583-2e71-08da3323ecd1 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2653:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xsdMAD+cVZvbkP+ikzvTV/KKqhhlWzBzBhjW2vtexJbOSCQE4/oXiQgS0wZn/EMvCcLg0+1i6IXtpCkRW+Eu7g1WHiG8Xuz0Cpy9LQwdHwseuJ/4swVP2wlZphqFETNA1rKV2WIXnVjC0YDjUNXCwD4z87uJR+tCEjBaZWg+pKBAlM41/la6z0NknaXzklQ1bdwQqqKG+7kMHeAa8McWisM8T+TYV3s0Slk6d9SllXFmsF1zQJfPiJenUJ4F3zYo+EFfQZFJsaF46oowo8Ce77f6ODSP9n8mAC333cxDpewCjWVYHvu+WDJ0d0lyXWLWTXzKf41cfYlWvHfEsYRX1h+RmwGx1PJXm+/WKkAbEI9wyypT46yFJnIv4W1VlYkanypN6ozVyLoAxPngeCr+Ehr0PrDpHsZ4dX1OJZ7TMB9uqg/HV/QfwxVqwTqqHDh5a6/6VnxjpVntHirf/0OzbNq+Izlx7Eow1q5zWq4R61L+9yFLb3SeCYclqvDRd5V4qZaZbRY8Lz+/9MPv0ehxu/Nt1Q95OfwCh7sBE5PMklRXez+0GpsWy62TDgwLzYQIBH9HyzjZyP0okUssegIOa60pB90f0s8riFaBQIPiXot0RcpnRuMYGNG4uPSdZpjJtR7B3WfMdMJmbU3aeL8AKIsoCjOL0qlHxy2JWbr4ncecLfoR6T4stVUmsvw3CrNXGeADkPQktWlrYyS9j0ZwXA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66556008)(66946007)(66476007)(186003)(6512007)(86362001)(4326008)(8676002)(44832011)(36756003)(6506007)(26005)(2616005)(508600001)(6666004)(6486002)(316002)(6916009)(54906003)(83380400001)(2906002)(38100700002)(8936002)(5660300002)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oAra1GKymB0J+cGNcdVBB/LNky6Y2RUgf9WcvAvNRtXbrhV8UoOhcxtfER4F?= =?us-ascii?Q?EUajn9j0Kre8l/Hyp9jCb1TbfjBWAN+yqVrkhiCh+RVfd8rX/ssPHDG53GyL?= =?us-ascii?Q?gylTRYak6tzob5i2qCEUZQIrx1BTSiJ/nnlRD//XVz/cmUng4tVpJN21iCDE?= =?us-ascii?Q?3fY2kr8wm2dqxDm0kdFuSxWH4NmLIrlDjdk0Rg1yBcsaNanbNZ57TbtwP1IO?= =?us-ascii?Q?57tQa0fKvZbq5h01fwtATKr2RQ/aqvvda4ATnMkLgBCPMFGtGtK+YKvAuwGm?= =?us-ascii?Q?Q0UzeI+mpmqEx/GsBXK7X3wDhyQT6feL/Mly4i58z3ZJkDlyUExBB2NYrpqO?= =?us-ascii?Q?bCrmIQqcCE/k5/3Dv+WFR2FqqOErY7kvZ1GOsNbeVsWWwEk+8EOt4G/gtvnu?= =?us-ascii?Q?yu13nH5EpifI9uA2cX321YyWTk2x7MWD/KurhB2YHISvsFtQZyzeob3dLYBk?= =?us-ascii?Q?AFg1floa/UVN1WTMjUN9++/8H2YeJTmhZCrEVca48uzSw+o2y+rO27wQsIIZ?= =?us-ascii?Q?IR3KlZh9vCimoF9oRW6YOwe+7/RQTBlm1yGSgmdyVupJ0YpYpVQ3+mj6k/YS?= =?us-ascii?Q?DdUCULmvudtbikaD2/jT0PJi38DzcL/0JBuOd3Cfl0wt0Cg8oRhG1RD96IUx?= =?us-ascii?Q?8KgKXJqNmUNuPPSd6TR+8g5/vg59DLIeBDcys7KP7/VyQDT8k4aRW0UHXKk+?= =?us-ascii?Q?yLtVhkpqopPYsdo4B90qkCT04x3aKxRRHcWvUxOEL34RUMCTFCjnpE85D6aF?= =?us-ascii?Q?QohlRmNo3+ktbPZz7FoHWkcw1kS+9QsMU460SG2DWXGxjV/KaBzCmDjs/1Us?= =?us-ascii?Q?xbM3hCPU7x4HXdnCcYyG9kW5BOE2YlsLsVG0HGR0GVZRKKcc3twd1aVBdk6x?= =?us-ascii?Q?+XZhjyR5zFzZF0LiWleHEI2AKvHhJ3KX39IuEQSM17UPnLN2QbrO+dUWyw7X?= =?us-ascii?Q?uKk8HrR8VhDglFbwO0/Vkxns/MJci0M/PiRvUqn3gS+06FF8Pvkgrpc2yv2H?= =?us-ascii?Q?0ZoLXCvVUChFEHVoKHXtXLhQU78Y8eSEPLqDjTIuco5p9I4HqwYZW748zbTW?= =?us-ascii?Q?1zkOcOkVqdRix2ZPkEhpfdYMWFVLyM9smPiTpMc3p6xVBFUY9szWmAqgRl4t?= =?us-ascii?Q?Kl4/N/7N7ja6A8cFvjArYvUla4JZeRW+IjWFNMGuvJamXrJZCrI7XI1PbfSn?= =?us-ascii?Q?HctvjAe2c2nDX5/Dkx9X0zCgS47hD7HgDvZ7gUZyCK9uR/CJXvMBDxIVqzYp?= =?us-ascii?Q?nWK2onMOguDwqBeH1LLLVCD35atQ5ZtapxjbTVkDIHmkj6ubrrD5fXIqfCqG?= =?us-ascii?Q?D/D1V2YhJ4PYjsgvTXSQbwQHe8fZ75IBa4Kh/m89FcHLBcNEnKjF0azqOR14?= =?us-ascii?Q?/i4k2dE/euiW4D0q846iy4vHLqfznsNL7HY7652ra/MjakKIlyUqF5pATUSM?= =?us-ascii?Q?ZQdBgq3BMPwfpAqiiHswEtvl77dJ6sLbaRJNSeFi4xg2Tgk5qO1YXnty6bIo?= =?us-ascii?Q?ozgtafbfNDbMZ4p2Qq13OMOwCUX93SV9ISju2jZ+5sWIgqW4iUtQaOcJdtRj?= =?us-ascii?Q?0BZCvikhpWoxGt8k2FvRw3SwBbSnMrGwXzb283Jw1xPbIlFetBbVeNAh1Kkg?= =?us-ascii?Q?lsWXMzKNAoba+72gl8CjiAHvNxZGJQ5Q7W0NmiK+QCFwe6FXz9BVzHIwUg4F?= =?us-ascii?Q?lqHu5ff0gNtU+Imd9qhIM8M7pVMX9CB48qTVVJjtDcOXJL2rLLqbUORWs13i?= =?us-ascii?Q?QISsJJI1iDyFqvA4sUgJe+5Gb92dUuw=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f91f1f75-018c-4583-2e71-08da3323ecd1 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:41.8068 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mvhE6iwnbHXPhhAx3v9iICHit7c1s9dbOx1geqAD/kLj7hwaP1FFU1DfblZEWSIYddFKA7MqMVtpFNI5koMmQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2653 Content-Type: text/plain; charset="utf-8" This patch implements a new struct bpf_struct_ops, bpf_mptcp_sched_ops. Register and unregister the bpf scheduler in .reg and .unreg. This MPTCP BPF scheduler implementation is similar to BPF TCP CC. And net/ipv4/bpf_tcp_ca.c is a frame of reference for this patch. Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- kernel/bpf/bpf_struct_ops_types.h | 4 + net/mptcp/bpf.c | 153 ++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) diff --git a/kernel/bpf/bpf_struct_ops_types.h b/kernel/bpf/bpf_struct_ops_= types.h index 5678a9ddf817..5a6b0c0d8d3d 100644 --- a/kernel/bpf/bpf_struct_ops_types.h +++ b/kernel/bpf/bpf_struct_ops_types.h @@ -8,5 +8,9 @@ BPF_STRUCT_OPS_TYPE(bpf_dummy_ops) #ifdef CONFIG_INET #include BPF_STRUCT_OPS_TYPE(tcp_congestion_ops) +#ifdef CONFIG_MPTCP +#include +BPF_STRUCT_OPS_TYPE(mptcp_sched_ops) +#endif #endif #endif diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 535602ba2582..b7cde38f7a6b 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -10,8 +10,161 @@ #define pr_fmt(fmt) "MPTCP: " fmt =20 #include +#include +#include +#include #include "protocol.h" =20 +#ifdef CONFIG_BPF_JIT +extern struct bpf_struct_ops bpf_mptcp_sched_ops; +extern struct btf *btf_vmlinux; +static const struct btf_type *mptcp_sched_type __read_mostly; +static u32 mptcp_sched_id; + +static u32 optional_ops[] =3D { + offsetof(struct mptcp_sched_ops, init), + offsetof(struct mptcp_sched_ops, release), +}; + +static const struct bpf_func_proto * +bpf_mptcp_sched_get_func_proto(enum bpf_func_id func_id, + const struct bpf_prog *prog) +{ + return bpf_base_func_proto(func_id); +} + +static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log, + const struct btf *btf, + const struct btf_type *t, int off, + int size, enum bpf_access_type atype, + u32 *next_btf_id, + enum bpf_type_flag *flag) +{ + size_t end; + + if (atype =3D=3D BPF_READ) + return btf_struct_access(log, btf, t, off, size, atype, + next_btf_id, flag); + + if (t !=3D mptcp_sched_type) { + bpf_log(log, "only access to mptcp_sched_data is supported\n"); + return -EACCES; + } + + switch (off) { + case offsetof(struct mptcp_sched_data, sock): + end =3D offsetofend(struct mptcp_sched_data, sock); + break; + case offsetof(struct mptcp_sched_data, call_again): + end =3D offsetofend(struct mptcp_sched_data, call_again); + break; + default: + bpf_log(log, "no write support to mptcp_sched_data at off %d\n", off); + return -EACCES; + } + + if (off + size > end) { + bpf_log(log, "access beyond mptcp_sched_data at off %u size %u ended at = %zu", + off, size, end); + return -EACCES; + } + + return NOT_INIT; +} + +static const struct bpf_verifier_ops bpf_mptcp_sched_verifier_ops =3D { + .get_func_proto =3D bpf_mptcp_sched_get_func_proto, + .is_valid_access =3D bpf_tracing_btf_ctx_access, + .btf_struct_access =3D bpf_mptcp_sched_btf_struct_access, +}; + +static int bpf_mptcp_sched_reg(void *kdata) +{ + return mptcp_register_scheduler(kdata); +} + +static void bpf_mptcp_sched_unreg(void *kdata) +{ + mptcp_unregister_scheduler(kdata); +} + +static int bpf_mptcp_sched_check_member(const struct btf_type *t, + const struct btf_member *member) +{ + return 0; +} + +static bool is_optional(u32 member_offset) +{ + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(optional_ops); i++) { + if (member_offset =3D=3D optional_ops[i]) + return true; + } + + return false; +} + +static int bpf_mptcp_sched_init_member(const struct btf_type *t, + const struct btf_member *member, + void *kdata, const void *udata) +{ + const struct mptcp_sched_ops *usched; + struct mptcp_sched_ops *sched; + int prog_fd; + u32 moff; + + usched =3D (const struct mptcp_sched_ops *)udata; + sched =3D (struct mptcp_sched_ops *)kdata; + + moff =3D __btf_member_bit_offset(t, member) / 8; + switch (moff) { + case offsetof(struct mptcp_sched_ops, name): + if (bpf_obj_name_cpy(sched->name, usched->name, + sizeof(sched->name)) <=3D 0) + return -EINVAL; + if (mptcp_sched_find(usched->name)) + return -EEXIST; + return 1; + } + + if (!btf_type_resolve_func_ptr(btf_vmlinux, member->type, NULL)) + return 0; + + /* Ensure bpf_prog is provided for compulsory func ptr */ + prog_fd =3D (int)(*(unsigned long *)(udata + moff)); + if (!prog_fd && !is_optional(moff)) + return -EINVAL; + + return 0; +} + +static int bpf_mptcp_sched_init(struct btf *btf) +{ + s32 type_id; + + type_id =3D btf_find_by_name_kind(btf, "mptcp_sched_data", + BTF_KIND_STRUCT); + if (type_id < 0) + return -EINVAL; + mptcp_sched_id =3D type_id; + mptcp_sched_type =3D btf_type_by_id(btf, mptcp_sched_id); + + return 0; +} + +struct bpf_struct_ops bpf_mptcp_sched_ops =3D { + .verifier_ops =3D &bpf_mptcp_sched_verifier_ops, + .reg =3D bpf_mptcp_sched_reg, + .unreg =3D bpf_mptcp_sched_unreg, + .check_member =3D bpf_mptcp_sched_check_member, + .init_member =3D bpf_mptcp_sched_init_member, + .init =3D bpf_mptcp_sched_init, + .name =3D "mptcp_sched_ops", +}; +#endif /* CONFIG_BPF_JIT */ + struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) { if (sk && sk_fullsock(sk) && sk->sk_protocol =3D=3D IPPROTO_TCP && sk_is_= mptcp(sk)) --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146815pis; Wed, 11 May 2022 00:58:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0F5KWQwN+P/QjTvoC6m0xPNYUtPNFuAe8O0qySSf9JQkaZ+++W9Rb0EKbB0kBUegC173e X-Received: by 2002:a17:907:7247:b0:6f9:bb40:efd8 with SMTP id ds7-20020a170907724700b006f9bb40efd8mr14708765ejc.273.1652255880853; Wed, 11 May 2022 00:58:00 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id d5-20020a50cd45000000b00428510254fasi1514913edj.118.2022.05.11.00.58.00 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:58:00 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5240-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=UOYgGDdi; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5240-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5240-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 6854C2E0A0D for ; Wed, 11 May 2022 07:57:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 24FC115DE; Wed, 11 May 2022 07:57:57 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) (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 EB44115B9 for ; Wed, 11 May 2022 07:57:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255873; 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=h2R3aIfRF88N4fKuF7WMISdk28j88e6veR2C6sFhhHg=; b=UOYgGDdir+jFXEKamZU6iZSnHS6kiRDzyJuKrYWIKBK7dVO1alO03b0TkCieYyJJlEOWcx lpj/kaoe/KCfT31ZVJxLQFWX8WFizfOxvxSz3BlGS2LmsIUeb7VqVWBIp0X5y5USncfj9+ 9n/aJMoP0OUcuHZUwsEwr2MH5SsJEr8= Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2170.outbound.protection.outlook.com [104.47.17.170]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-19-HOMkhzXIPEuv9rXXHIHTVw-1; Wed, 11 May 2022 09:57:51 +0200 X-MC-Unique: HOMkhzXIPEuv9rXXHIHTVw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G/ApQIB3lZNtAWKmWEHKtUdxyfJL2j5hsyoXwg4LKIdmpgct5OK3wd9pWEu4f719J4siPnOOe4PKZzVoA5A27IwzgcE+sAgjkHyjqe4IWR3tZgqfkdKLKxTw0/NBO8pLMiy256WRwCAAzN/LUn+OWNrBcQ3B3GQ4qiliZZ1BFsuomw7A86trpr4dBEbQFtdhi798rWSYtnr3reOHyKjuLLQmDFFK70vQ2ezBYO3eXWF/b4L7t8z1TeRJC5FLPOPTK08ATpB20pC/h/1E3S1kKMN2WDMBwWp5f9t6SxosQI6TldyutSYx9onizQOBtYMM336NUpMW1w0OZ8r5nX8FnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uOMM6qvB5KWBoElwhlSGobiSp1e0WnPwL2Y/XX1dHAg=; b=l2027g4hTV3Ns10gjGgG8krZ3cKnqnlmLyvu7VjaqsHoJM/R4x6sDLUHB2TvNrFm8LEiFHMXzeGrhh7oG8ffV/BA7jV2n8AtFOOwJUuHA6RXt7NpYMpj/1kE0CJ1kOGYIlL1ZFJab6gIybRDaHHJyP134A0wK4wcWhFcFMFluHDSEdtgumzPCX6PpYQM8RWndZ0eBEukX56KUh2KDSDIF8bOv2pNVew6lKrK9IKF7C5XW/e/HX5iPN2CbacMbDD01rZAqSNjEBWBM7y2FNUuo5GXfGvrJIJeNUkkbk3ujZ1S1vGeW0XviL3U6/GTEUmr93Yaqv0jQH4r1U/w3nI/9w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by DBBPR04MB6169.eurprd04.prod.outlook.com (2603:10a6:10:c2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.23; Wed, 11 May 2022 07:57:48 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:48 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 13/14] selftests/bpf: add bpf_first scheduler Date: Wed, 11 May 2022 15:56:19 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR06CA0235.apcprd06.prod.outlook.com (2603:1096:4:ac::19) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fc6c967b-9a5c-4155-16f3-08da3323f0b8 X-MS-TrafficTypeDiagnostic: DBBPR04MB6169:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MxOXWLgnyKQ2FJfllI/P7fkmiVmtlFVhMqFF4qQE2qOvAZHJKHOadJiYVrttbzBORORZF0Aho4fTSkcbMdWItSUembB91eH+WicuIF9OcYxFC04zJ60spiR5g4EmiXRI2mGPmEyRHuSh0uIJ7WLhMRXvNsXaAWeYDAFJcJU2F3fPgt4iZQ2Gjk4DY0PE7CIM/n9uaIV2peUEeGNHTmSUdIM1cxbutCoj6mSEKnMCJ8xaGEEXm0HdrAis3ofNrPm9LGFd6rxMMeDPOXkAvmJPZwF/LyKBx65Te1tPmhCbuCShkGzUInrpBAUTRSBgQx1yzQXm48yvfwmgq3DOT8iiteqXNfRDHpHPMHaWlfAESDFPl7zpLipSrX3+frrh4JI2qZISHBFB8ZIog3yHk8sEe/aOzAsAPC7ERIuYUB3QBVBwefLxVpwevySF1+a39j8cYdjMQ7X2ocdI5dzLvAbXCmZO6odNArWnuSr5eaktkCY/zSXubmumVkoFV0Tx1jBkSCCwoil0ZQyYOWa/0j5dDG7v1Q8UJDyqqa1AmtZAhNFHG3XuSGJMDGBKh5wkETGDe0NcdiknJhgokf43tsUkni//xC+fArMUOzem4rmAJYNFO1MZ5JeZrMMkT9lG/GxzPIc5Rnz+fwx64ea8ayWSE5A5QWZpCIPyjy44hXvArwILpef+U9FZqXrqkfeh5XPYhuxUaTcEAg/cJ9wz57gjDA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66946007)(186003)(5660300002)(8936002)(6916009)(44832011)(54906003)(26005)(6512007)(66556008)(316002)(86362001)(2616005)(4326008)(8676002)(66476007)(6666004)(6506007)(36756003)(6486002)(2906002)(38100700002)(508600001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ASAu5p4LFrtLFLP7zXRYzjsZXUCezkpFTiNQ0iNaPVDNMRiC3OHb5djqMCDA?= =?us-ascii?Q?rWa8Tf4FrP914PhqDMMwhL27hGtzMxdqbwFCqxsZYbTfzdUUt/yXeli3/SLx?= =?us-ascii?Q?wakjsOeGmx1SXELQGHB4CaICEgaiK/xeZ8qL/S4tioDu0t00U7V4JN8A4WWk?= =?us-ascii?Q?hnpnwqjR+gxxqEJ2ZqqARGwXBUeiRN0n6f/HvlRcdYgu50NjUboRUeflbDvK?= =?us-ascii?Q?nwfWtQCJlqP66Xsx4K0IUE2+JZyKysH1u5RD7B7i0S3rOJur9GdZb+vG60ez?= =?us-ascii?Q?LS8ZV2Fm+FrpoWirPI/VblV1blpxqDHIIjz4XXRi1SLRlz/2ektOTawx6eR4?= =?us-ascii?Q?cZa8Gc2aQCYZelFA6GRoLmWE7LMyxtgRWEgsfXzhjNmelBd0kZEAnaCHUZri?= =?us-ascii?Q?+RFVhHHdJmAQuIcxusH7PmidnfljAldcxK4ja0BMhMNBESZf5VJwonL5tl0F?= =?us-ascii?Q?4P95f74cD/6z7msyXesdI1D0Dz4FsgT3N8Rrm522r9sP1DVgQHpPeeLvzrfr?= =?us-ascii?Q?6CPd59Ftb80PplZ3oSiao1Mc/MqnimyjTXKhhSabnvkD4GCKwStpEyoxQTyS?= =?us-ascii?Q?9mU76qINiLrlgIzGJVNLRT826VzRXOL59oTH7m3RoolvmXWuakqoL5Ajdkxh?= =?us-ascii?Q?8Pe5kAv6L9IF73kGBheeF6CPRLOjEdlMtgirIQLIL383knCRhUBs4DazpDsl?= =?us-ascii?Q?hM2fwO8krEUG3BKamYJgsVk1W1bKxNxTuqZFJZAM+YTVU/SrZFCBSSv983bd?= =?us-ascii?Q?oKUgXqbAYKfOWTGwt+Yc1aFPgkTlocevwC1JKFNy+JiI8vegkPOD7IidNy8H?= =?us-ascii?Q?6gcDo244guh3bOGdZKTohZh+fwdZjPiAYxrPiwN/s5raGrlV3vYgXY5RN8yl?= =?us-ascii?Q?YOKMRk8DLl23VkYmKDKDDmtX1AQQS2ucUQ2MAMdg+DHgKC68D0TmpNE+N3ae?= =?us-ascii?Q?2fentZym2SYb9F0Txa///ZFOAuGqIEZh/16wrj4LwCOi/Tb0RLyKDIt16VgM?= =?us-ascii?Q?Co06AweAEzZa0NajqS3SdVZBC/7WV7k7ZkN+0h+mrAx83GIDcAbEqeYii16C?= =?us-ascii?Q?+EC0Z/Cype2183a3psMbcMxx5fkSR4mNsMTVj7WScVTnSEBef0jfXIgRkW7Y?= =?us-ascii?Q?9OHlAZ7UFaRJ0z8PwN10Oe4AS/8yOjIkYj4Gioh+uPIKbVsw4/c1u9xDEfLJ?= =?us-ascii?Q?1Q0CFcMo9+s76+wqdlblbjT0UIp+UDTGGIarO+OkVtMhxS938Vr3SJ70f/Tu?= =?us-ascii?Q?1AUpISdqZB4gNgIaOVWmpYQ1CSyuKlqUziYmNuFc2mpxg+mHcc9UtwkTxAO9?= =?us-ascii?Q?dGDUampq3NVridz9eQ34od7lvUr1kTtFyhzzpjzP6f6bHTt0hHjBNWhk2qAH?= =?us-ascii?Q?57Pi6UyFBv57zwU07k2lA8iVw4+KP/QOnqMVu7o3Ci7jsjiJfVjZT7O7WSvS?= =?us-ascii?Q?W0ljAkKnh93xLPuyBhKpBlOXD8OdOVg+0S+Z24cXJKHCL0BtVqzVj4eKJDGl?= =?us-ascii?Q?bnjh1S+lY2/j1+arWbKBUvHhn3YfuRv8HKQpPb6nWfIAJui8f/bVGd29lqSV?= =?us-ascii?Q?jiBXIbjkKHAupt08AsyPpOujjM8hyMmI8/aJlJKldGZhRPm2WsbhyGosx4fP?= =?us-ascii?Q?kUU9KSqcX88Ffo92qAFkd6+tFfza1RpJP8/E1HFbUyXJ/OkK/QHT3rbbxw8e?= =?us-ascii?Q?t0K5ViZ9BxCqvq2SR7Y5OjbL+y3IQEfwPP3ljrzfOhehYlhi7oo0ph9W6rXR?= =?us-ascii?Q?Fh5Cr3e9CE+14Zi1kdu8pV8qcp4w7/Y=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc6c967b-9a5c-4155-16f3-08da3323f0b8 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:48.4314 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: n14js8Qn5oENEsML+DUdySWsAmFuSiExNoy79eEgHfyf0VpQKcVdNMB0Y1SQMaXtzeRWFfjHFz6NfB1pNQ62gA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB6169 Content-Type: text/plain; charset="utf-8" This patch implements the simplest MPTCP scheduler, named bpf_first, which always picks the first subflow to send data. It's a sample of MPTCP BPF scheduler implementations. Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_bpf_first.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_first.c diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/te= sting/selftests/bpf/progs/mptcp_bpf_first.c new file mode 100644 index 000000000000..fd67b5f42964 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2022, SUSE. */ + +#include +#include "bpf_tcp_helpers.h" + +char _license[] SEC("license") =3D "GPL"; + +SEC("struct_ops/mptcp_sched_first_init") +void BPF_PROG(mptcp_sched_first_init, const struct mptcp_sock *msk) +{ +} + +SEC("struct_ops/mptcp_sched_first_release") +void BPF_PROG(mptcp_sched_first_release, const struct mptcp_sock *msk) +{ +} + +void BPF_STRUCT_OPS(bpf_first_get_subflow, const struct mptcp_sock *msk, + bool reinject, struct mptcp_sched_data *data) +{ + data->sock =3D msk->first; + data->call_again =3D 0; +} + +SEC(".struct_ops") +struct mptcp_sched_ops first =3D { + .init =3D (void *)mptcp_sched_first_init, + .release =3D (void *)mptcp_sched_first_release, + .get_subflow =3D (void *)bpf_first_get_subflow, + .name =3D "bpf_first", +}; --=20 2.34.1 From nobody Sun Feb 8 01:33:38 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp4146836pis; Wed, 11 May 2022 00:58:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyy2mj1gQv9XMh2eMhWgKr49NHFGHNz0SFwz5cTaDQwaFzZGZWV+7Pz5DcfgT+mWB4f7jy7 X-Received: by 2002:a17:907:9805:b0:6f4:fe0e:5547 with SMTP id ji5-20020a170907980500b006f4fe0e5547mr23280642ejc.426.1652255887330; Wed, 11 May 2022 00:58:07 -0700 (PDT) Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id q20-20020a056402519400b00425d9526723si1808004edd.88.2022.05.11.00.58.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 May 2022 00:58:07 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5241-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=mimecast20200619 header.b=EA+IeNcw; arc=fail (body hash mismatch); spf=pass (google.com: domain of mptcp+bounces-5241-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5241-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id C66172E0A21 for ; Wed, 11 May 2022 07:58:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 54DFF15DE; Wed, 11 May 2022 07:58:03 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) (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 AF46315B9 for ; Wed, 11 May 2022 07:58:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1652255880; 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=K7zQKCn14xxiVLEwTVTt+pl3CZZbVbDOCIkUlcCRSMM=; b=EA+IeNcwLH3Ov0SQ9c3mfJNhAUdVp+fKSaNpbi5QA2tPFtfaNtwEQGeQRQ4ePrzSN6aRNz xPK8hxPc6d3sy5fUUyNX7P5XBt0oIe0xpTxGkj6+JNKyE6M0HgrBGWEqJfis6Q8XsZ76ZY LVhPU5k/V2Knh4pqj3Xp7tRzHqz7FmI= Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-41-6y1UVRiqOm-mHQxCMdIW5A-1; Wed, 11 May 2022 09:57:59 +0200 X-MC-Unique: 6y1UVRiqOm-mHQxCMdIW5A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TjH1iqXvadDAH4CUeYU+xOLr+okkZOzppBzk84LlGlEiyuON8DAHPxkZvG7mDrd12y0fv5R7JN2PptC7wmfReau79hM0OmqNFttz22zRGAhsgfchaU23yRHTYDGYpOaSG08sDX5sn2ZFYDbmq2ZJp84b6k2CLavhNcuuhXo4/xqiNqsuIAablAAtcgGYyTCEAMVmO61ySZUTTv46wBuW+xKcSV2viwiglYAOKb9s+YmTuXOKNJJdys43KxilKUK8cBJmGgsVW7TaTPQfhy1LeT7H9HVWrPIYI0ZdhF7wSiobBQT8qXhcDyW9wy0TvkvgI+GZ6f4Gv4VDt7pvVuayvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uCMa2tjPOfDjxGZRa7gSwnyDial+zK8DZhmU3DmXAoQ=; b=hIXGJ6t3gICwod8sJIkdX2Kp3MLY/S/xMeQhMHfSuLtMnbPg+FcSw3nT5R0d7NJHhStNao4rGUuEpPEWoFJM62uI05GG6aHfhSa5PuCC24/x2y75usnIimjach7M4vQUHC7Hvyiqj5SAs3TmYRDWfEZTd6S03SxzcSLcJ5K+WF3f4hQYkc0USjxxXxafzkFLDFCFyoG1O+ssLf86KsXi9uHVLQE+uvElPKaFAlKaEEAUZ9aZWJ74ZMmYhwdKURQAYq8ryJNQuF+LuxxLwgUD6Fg8QvP8FAY3y6orW5H03DW/ISEZEzp1NGODfM0xOFN+IpW+z5a74IoWqtXFk9/eLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) by DBBPR04MB6169.eurprd04.prod.outlook.com (2603:10a6:10:c2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.23; Wed, 11 May 2022 07:57:57 +0000 Received: from VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7]) by VI1PR0402MB3503.eurprd04.prod.outlook.com ([fe80::b5c8:f15:91fb:33f7%6]) with mapi id 15.20.5227.023; Wed, 11 May 2022 07:57:55 +0000 From: Geliang Tang To: mptcp@lists.linux.dev CC: Geliang Tang , Paolo Abeni , Mat Martineau Subject: [PATCH mptcp-next v2 14/14] selftests/bpf: add bpf_first test Date: Wed, 11 May 2022 15:56:20 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR06CA0238.apcprd06.prod.outlook.com (2603:1096:4:ac::22) To VI1PR0402MB3503.eurprd04.prod.outlook.com (2603:10a6:803:d::26) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 54c62680-6d64-4adf-afc2-08da3323f4af X-MS-TrafficTypeDiagnostic: DBBPR04MB6169:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3nLJaVF5t/OFC7HOMUSNdawlglVkdzgBP68YLpxCAPQQjtH1q0pF8PcJPoj4XGa3qy3EzrfxZ7utuy7NFqaoXQ/XOr6f3/UY9gxX9byFKezRV03pEeRvc3p9+Ycv+khq0jxwSY06V9hkG4gCRZkUi8ciuuqo2XtRvuo/o4iWWge+t8KN2dd/5mxVjBW3ZKFbYsphIinQc8AwIjE2wynfvtGPzDPcx9JCaQPCWstUZ7t+cdqvgxcL26iokZOagrNk8qulr6TK6YtJgQbtN3ms9BHQlnbVGUb5YozKyFXzAOyeYzKApyJeh8DU0xEgLLZAIRIN3hPUAB6+QY3RRG4kx0u/z+LJuSOuDlO/kP1LZP0XBGWHO175MTKhcPk3doUB5g2Lhkkawt3Xy+j8yFp+3mrZ4NpH9ZMSWwcKGyfVahExzzSUtxqduqB83vZL7TXXrCL7iBnsQuXNp+3sWBHPK2jhedTOBar5iAz9KL8MmORq7mVzoI9rUuN/C52Vfkcaiqoz/8KCInMJbZPRsmgq9d/EUlFcFGXGsdTYPOVTdnVdkqLMz23z+zkPMAKbrfM7BVZg2smRvJejLIqiGJhEAB7nlZ0AtO7OVVYY/xC4KbMDDvfXMqImqtYwZetjKkUe86hTTJeEDI12OQTO39W596YFUfgfzZql+y31GBmioavTDtyZMtf6AvJoKXLzcp7zXaJtUTpMv92yHmGOxXNyuQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR0402MB3503.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66946007)(186003)(5660300002)(8936002)(6916009)(44832011)(54906003)(26005)(6512007)(66556008)(316002)(86362001)(2616005)(4326008)(8676002)(66476007)(83380400001)(6666004)(6506007)(36756003)(6486002)(2906002)(38100700002)(508600001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eUtfCPj2vZ0yVvAOS7E2KtLalx9fdNWpXv0ydv1vnh0NR3+ddT1fynjRqyZ9?= =?us-ascii?Q?d3ZiBjRbfntQkFBqh6kIYt1drmBddusrdZmO8GKS3pzs+6iw4r6AR0Hnp/Mr?= =?us-ascii?Q?Z/0e9IvJAOc3BH4X0K++yI1H/57/ckHTpiWALjp7wmMvGdqI9RWhItvFn3zF?= =?us-ascii?Q?5hSQQODe2TkAdX0kPyvcnM0LVgbhVyVCWRuZGzJWUbRlPL5c+4E4AOVY/NlP?= =?us-ascii?Q?Fr9JxFNuwjP9LW8JRaLsr9UoygeSFWwb42cjjMazsd/Kk8YSPfnTsbGqFSph?= =?us-ascii?Q?uwT1ArwZXYQwK6gfpetpz90jTf2V/68CoEcAIwamylHrAIpsjMS4Nj6EqAs7?= =?us-ascii?Q?3PK4W6VS4eK5PxTgNw4FBEeOLSVu34+IIK5fY98v9CgVUoewlP0+qlYO6CSq?= =?us-ascii?Q?H1UKdtNm3PE4J55uk3ZAI/iZWeCh34I2aRK2TsEbrSeDHSaqeAEDwOvm8DjM?= =?us-ascii?Q?JakEUfFSluz9b88lZX3fb60M6UQ+FyYcnlG2sC+RV0RzHZaWHJlVANZnDqso?= =?us-ascii?Q?32XFXbhPJM364ovMHeJqTNfC01isu1Tsbrh3aOYKHTvlCT9W7KZktEZR2uB8?= =?us-ascii?Q?jdUkCFcSr7N23oBtJVB0rjMEGewqfRjU/JEgpyZR1ccv4AKSizr5vRZL2+2v?= =?us-ascii?Q?wy40qNqoYUWsblQWdmjJBlVpYm+kZ9z13KwT6IGHdYJOsXKm+C8uKS7BEWUs?= =?us-ascii?Q?CZ0MpTLN5oIFS4zFYgaqMZrsjXK5l/WT94o2ZbBo7H1ZjFDXrJSOxxAFDt01?= =?us-ascii?Q?FlHVXkOMopOjhJeXEDPZDzeJBQNKT3koKlFDAO3YJz2nB5hzEnP7cxlfDkDd?= =?us-ascii?Q?yuHr5pTxPap/E7CtCWpA7JKzxNC5huJfCTPtJ+Tt2GJaOaX6qpfPAuYEs2NR?= =?us-ascii?Q?KZOAiH8u9Vk2rv7/vzXwPPDRQ6CBc8vHkBiNAJzjPwWYa2dfFfNTpNqzK5aN?= =?us-ascii?Q?Ok8VMTrBupX8GjKuphqaYnc3bzsV/Ny6+s+JsnOvwYqCidr81mr9/R1Vg1HW?= =?us-ascii?Q?2pyqoh1Sienz9mLzW5Yoguj2zXZDp6aH7NmUcD/AzKrmFD3HCYJTxp5RUPxL?= =?us-ascii?Q?dYu5uFpyAdBuYtHN8f0JrIsOgVO0cj3Th6GI453olKdYXfipCUXf3UM9OBd1?= =?us-ascii?Q?i+psOiynJfI+QdyWBr1a3DlX1smck5aTDjtzcStmvUm+D8Q4rNySFbi5LWVK?= =?us-ascii?Q?ykZutgy9zggmSqjYMkRAq+FEsRg2obendTLu/6u+he89oKdIcf/IiQL0og3r?= =?us-ascii?Q?hhb1nav2pOU7BhDmBJoiSfqRfZnTmMfUUlpcsp2i4DjpORu3ow4d+zHyINY+?= =?us-ascii?Q?7jHUTYABx4HvWAd5e2PizzCYKekv20/z4NIOG7hrGLKbaYcMVJQt7GC1JStB?= =?us-ascii?Q?4lDhyQJjj5kADcM+NpLFvIqRZ0qzpO6v7SlaH6Gmiejt7UcshYVURzdPvC4a?= =?us-ascii?Q?xqCSc12JbTT8wjBH8++iz0lcTQ7a5kqjNbMk5fPavw4OGSBybmuiKaHKE7kA?= =?us-ascii?Q?XK3YoJikVbbENqtBfjCdbPVjxFaSDyVJcbTLG4V4f1wpFqwlntESh+ManE+E?= =?us-ascii?Q?XGeERwEOP7CQ39M9ZCEP5PV58NondJYWkcmQlBLKRQWEboL4VN5q6proBHot?= =?us-ascii?Q?Iz3MB6tb/mMB/4vh0mI7gAWUac9qf74r+xY69H2X5wzqYon4AR1h3H7fi7N5?= =?us-ascii?Q?kUVPWn1BwD4pCKjddifkiO81rnZAEHn8mb9yjwo+0J4/L3xoMdm57TXt09wy?= =?us-ascii?Q?CZLlKdUWNTHV0spn6UvfsYf21Pwcc/U=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54c62680-6d64-4adf-afc2-08da3323f4af X-MS-Exchange-CrossTenant-AuthSource: VI1PR0402MB3503.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2022 07:57:55.1185 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Je+qx3RFtrfEcdzoL5666HqKTQA3MAKFLM28SvfkmxSqo/pTlE0xdwMGdQ32OoU8UGXpz+f/nb2SnmgcScO5DQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB6169 Content-Type: text/plain; charset="utf-8" This patch expends the MPTCP test base to support MPTCP packet scheduler tests. Add the bpf_first scheduler test in it. Use sysctl to set net.mptcp.scheduler to use this sched. Some code in send_data() is from prog_tests/bpf_tcp_ca.c. Acked-by: Paolo Abeni Reviewed-by: Mat Martineau Signed-off-by: Geliang Tang --- .../testing/selftests/bpf/prog_tests/mptcp.c | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index 51a3e17acb9e..93a5739712ce 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -5,6 +5,7 @@ #include #include "cgroup_helpers.h" #include "network_helpers.h" +#include "mptcp_bpf_first.skel.h" =20 #ifndef TCP_CA_NAME_MAX #define TCP_CA_NAME_MAX 16 @@ -20,6 +21,8 @@ struct mptcp_storage { }; =20 static char monitor_log_path[64]; +static const unsigned int total_bytes =3D 10 * 1024 * 1024; +static int stop, duration; =20 static int verify_tsk(int map_fd, int client_fd) { @@ -258,8 +261,118 @@ void test_base(void) close(cgroup_fd); } =20 +static void *server(void *arg) +{ + int lfd =3D (int)(long)arg, err =3D 0, fd; + ssize_t nr_sent =3D 0, bytes =3D 0; + char batch[1500]; + + fd =3D accept(lfd, NULL, NULL); + while (fd =3D=3D -1) { + if (errno =3D=3D EINTR) + continue; + err =3D -errno; + goto done; + } + + if (settimeo(fd, 0)) { + err =3D -errno; + goto done; + } + + while (bytes < total_bytes && !READ_ONCE(stop)) { + nr_sent =3D send(fd, &batch, + MIN(total_bytes - bytes, sizeof(batch)), 0); + if (nr_sent =3D=3D -1 && errno =3D=3D EINTR) + continue; + if (nr_sent =3D=3D -1) { + err =3D -errno; + break; + } + bytes +=3D nr_sent; + } + + CHECK(bytes !=3D total_bytes, "send", "%zd !=3D %u nr_sent:%zd errno:%d\n= ", + bytes, total_bytes, nr_sent, errno); + +done: + if (fd >=3D 0) + close(fd); + if (err) { + WRITE_ONCE(stop, 1); + return ERR_PTR(err); + } + return NULL; +} + +static void send_data(int lfd, int fd) +{ + ssize_t nr_recv =3D 0, bytes =3D 0; + pthread_t srv_thread; + void *thread_ret; + char batch[1500]; + int err; + + WRITE_ONCE(stop, 0); + + err =3D pthread_create(&srv_thread, NULL, server, (void *)(long)lfd); + if (CHECK(err !=3D 0, "pthread_create", "err:%d errno:%d\n", err, errno)) + return; + + /* recv total_bytes */ + while (bytes < total_bytes && !READ_ONCE(stop)) { + nr_recv =3D recv(fd, &batch, + MIN(total_bytes - bytes, sizeof(batch)), 0); + if (nr_recv =3D=3D -1 && errno =3D=3D EINTR) + continue; + if (nr_recv =3D=3D -1) + break; + bytes +=3D nr_recv; + } + + CHECK(bytes !=3D total_bytes, "recv", "%zd !=3D %u nr_recv:%zd errno:%d\n= ", + bytes, total_bytes, nr_recv, errno); + + WRITE_ONCE(stop, 1); + + pthread_join(srv_thread, &thread_ret); + CHECK(IS_ERR(thread_ret), "pthread_join", "thread_ret:%ld", + PTR_ERR(thread_ret)); +} + +static void test_first(void) +{ + struct mptcp_bpf_first *first_skel; + int server_fd, client_fd; + struct bpf_link *link; + + first_skel =3D mptcp_bpf_first__open_and_load(); + if (!ASSERT_OK_PTR(first_skel, "bpf_first__open_and_load")) + return; + + link =3D bpf_map__attach_struct_ops(first_skel->maps.first); + if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) { + mptcp_bpf_first__destroy(first_skel); + return; + } + + system("sysctl -qw net.mptcp.scheduler=3Dbpf_first"); + server_fd =3D start_mptcp_server(AF_INET, NULL, 0, 0); + client_fd =3D connect_to_mptcp_fd(server_fd, 0); + + send_data(server_fd, client_fd); + + close(client_fd); + close(server_fd); + system("sysctl -qw net.mptcp.scheduler=3Ddefault"); + bpf_link__destroy(link); + mptcp_bpf_first__destroy(first_skel); +} + void test_mptcp(void) { if (test__start_subtest("base")) test_base(); + if (test__start_subtest("first")) + test_first(); } --=20 2.34.1