From: John Fastabend <john.fastabend@gmail.com>
To: Geliang Tang <geliang@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Mykola Lysenko <mykolal@fb.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@google.com>,
Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>,
Shuah Khan <shuah@kernel.org>,
Jakub Sitnicki <jakub@cloudflare.com>
Cc: Geliang Tang <tanggeliang@kylinos.cn>,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: RE: [PATCH bpf-next 3/8] selftests/bpf: Use bpf_link attachments in test_sockmap
Date: Mon, 27 May 2024 10:12:31 -0700 [thread overview]
Message-ID: <6654beff96840_23de2086e@john.notmuch> (raw)
In-Reply-To: <32cf8376a810e2e9c719f8e4cfb97132ed2d1f9c.1716446893.git.tanggeliang@kylinos.cn>
Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> Switch attachments to bpf_link using bpf_program__attach_sockmap() instead
> of bpf_prog_attach().
Sorry it took me a few days to get to this.
Is there a reason to push this to links vs just leave it as is? I had
a plan to port all the test_sockmap tests into prog_tests anyways. I'll
try to push some initial patch next week.
The one advantage of test_sockmap is we can have it run for longer
runs by pushing different options through so might be worth keeping
just for that.
If you really want links here I'm OK with that I guess just asking.
Thanks,
John
>
> This patch adds a new array progs[] to replace prog_fd[] array, set in
> populate_progs() for each program in bpf object.
>
> And another new array links[] to save the attached bpf_link. It is
> initalized as NULL in populate_progs, set as the return valuses of
> bpf_program__attach_sockmap(), and detached by bpf_link__detach().
>
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
> tools/testing/selftests/bpf/test_sockmap.c | 59 ++++++++++++----------
> 1 file changed, 31 insertions(+), 28 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c
> index e7dbf49a2ca6..d7581bbbc473 100644
> --- a/tools/testing/selftests/bpf/test_sockmap.c
> +++ b/tools/testing/selftests/bpf/test_sockmap.c
> @@ -64,6 +64,8 @@ int failed;
> int map_fd[9];
> struct bpf_map *maps[9];
> int prog_fd[9];
> +struct bpf_program *progs[9];
> +struct bpf_link *links[9];
>
> int txmsg_pass;
> int txmsg_redir;
> @@ -960,43 +962,39 @@ static int run_options(struct sockmap_options *options, int cg_fd, int test)
>
> /* Attach programs to sockmap */
> if (!txmsg_omit_skb_parser) {
> - err = bpf_prog_attach(prog_fd[0], map_fd[0],
> - BPF_SK_SKB_STREAM_PARSER, 0);
> - if (err) {
> + links[0] = bpf_program__attach_sockmap(progs[0], map_fd[0]);
> + if (!links[0]) {
> fprintf(stderr,
> - "ERROR: bpf_prog_attach (sockmap %i->%i): %d (%s)\n",
> - prog_fd[0], map_fd[0], err, strerror(errno));
> - return err;
> + "ERROR: bpf_program__attach_sockmap (sockmap %i->%i): (%s)\n",
> + bpf_program__fd(progs[0]), map_fd[0], strerror(errno));
> + return -1;
> }
> }
>
> - err = bpf_prog_attach(prog_fd[1], map_fd[0],
> - BPF_SK_SKB_STREAM_VERDICT, 0);
> - if (err) {
> - fprintf(stderr, "ERROR: bpf_prog_attach (sockmap): %d (%s)\n",
> - err, strerror(errno));
> - return err;
> + links[1] = bpf_program__attach_sockmap(progs[1], map_fd[0]);
> + if (!links[1]) {
> + fprintf(stderr, "ERROR: bpf_program__attach_sockmap (sockmap): (%s)\n",
> + strerror(errno));
> + return -1;
> }
>
> /* Attach programs to TLS sockmap */
> if (txmsg_ktls_skb) {
> if (!txmsg_omit_skb_parser) {
> - err = bpf_prog_attach(prog_fd[0], map_fd[8],
> - BPF_SK_SKB_STREAM_PARSER, 0);
> - if (err) {
> + links[2] = bpf_program__attach_sockmap(progs[0], map_fd[8]);
> + if (!links[2]) {
> fprintf(stderr,
> - "ERROR: bpf_prog_attach (TLS sockmap %i->%i): %d (%s)\n",
> - prog_fd[0], map_fd[8], err, strerror(errno));
> - return err;
> + "ERROR: bpf_program__attach_sockmap (TLS sockmap %i->%i): (%s)\n",
> + bpf_program__fd(progs[0]), map_fd[8], strerror(errno));
> + return -1;
> }
> }
>
> - err = bpf_prog_attach(prog_fd[2], map_fd[8],
> - BPF_SK_SKB_STREAM_VERDICT, 0);
> - if (err) {
> - fprintf(stderr, "ERROR: bpf_prog_attach (TLS sockmap): %d (%s)\n",
> - err, strerror(errno));
> - return err;
> + links[3] = bpf_program__attach_sockmap(progs[2], map_fd[8]);
> + if (!links[3]) {
> + fprintf(stderr, "ERROR: bpf_program__attach_sockmap (TLS sockmap): (%s)\n",
> + strerror(errno));
> + return -1;
> }
> }
>
> @@ -1281,10 +1279,11 @@ static int run_options(struct sockmap_options *options, int cg_fd, int test)
> out:
> /* Detatch and zero all the maps */
> bpf_prog_detach2(prog_fd[3], cg_fd, BPF_CGROUP_SOCK_OPS);
> - bpf_prog_detach2(prog_fd[0], map_fd[0], BPF_SK_SKB_STREAM_PARSER);
> - bpf_prog_detach2(prog_fd[1], map_fd[0], BPF_SK_SKB_STREAM_VERDICT);
> - bpf_prog_detach2(prog_fd[0], map_fd[8], BPF_SK_SKB_STREAM_PARSER);
> - bpf_prog_detach2(prog_fd[2], map_fd[8], BPF_SK_SKB_STREAM_VERDICT);
> +
> + for (i = 0; i < ARRAY_SIZE(links); i++) {
> + if (links[i])
> + bpf_link__detach(links[i]);
> + }
>
> if (tx_prog_fd > 0)
> bpf_prog_detach2(tx_prog_fd, map_fd[1], BPF_SK_MSG_VERDICT);
> @@ -1836,6 +1835,7 @@ static int populate_progs(char *bpf_file)
> i = bpf_object__load(obj);
> i = 0;
> bpf_object__for_each_program(prog, obj) {
> + progs[i] = prog;
> prog_fd[i] = bpf_program__fd(prog);
> i++;
> }
> @@ -1850,6 +1850,9 @@ static int populate_progs(char *bpf_file)
> }
> }
>
> + for (i = 0; i < ARRAY_SIZE(links); i++)
> + links[i] = NULL;
> +
> return 0;
> }
>
> --
> 2.43.0
>
next prev parent reply other threads:[~2024-05-27 17:12 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-23 6:49 [PATCH bpf-next 0/8] fixes for test_sockmap Geliang Tang
2024-05-23 6:49 ` [PATCH bpf-next 1/8] selftests/bpf: Fix tx_prog_fd values in test_sockmap Geliang Tang
2024-05-27 17:02 ` John Fastabend
2024-05-23 6:49 ` [PATCH bpf-next 2/8] selftests/bpf: Drop duplicate definition of i " Geliang Tang
2024-05-27 17:03 ` John Fastabend
2024-05-23 6:49 ` [PATCH bpf-next 3/8] selftests/bpf: Use bpf_link attachments " Geliang Tang
2024-05-27 17:12 ` John Fastabend [this message]
2024-05-27 19:36 ` Jakub Sitnicki
2024-05-28 4:12 ` Geliang Tang
2024-05-30 23:45 ` John Fastabend
2024-05-31 11:13 ` Jakub Sitnicki
2024-05-31 14:35 ` Geliang Tang
2024-05-23 6:50 ` [PATCH bpf-next 4/8] selftests/bpf: Replace tx_prog_fd with tx_prog " Geliang Tang
2024-05-23 6:50 ` [PATCH bpf-next 5/8] selftests/bpf: Drop prog_fd array " Geliang Tang
2024-05-23 6:50 ` [PATCH bpf-next 6/8] selftests/bpf: Fix size of map_fd " Geliang Tang
2024-05-27 17:06 ` John Fastabend
2024-05-23 6:50 ` [PATCH bpf-next 7/8] selftests/bpf: Check length of recv " Geliang Tang
2024-05-27 17:06 ` John Fastabend
2024-05-23 6:50 ` [PATCH bpf-next 8/8] selftests/bpf: Drop duplicate bpf_map_lookup_elem " Geliang Tang
2024-05-27 17:06 ` John Fastabend
2024-05-31 11:06 ` [PATCH bpf-next 0/8] fixes for test_sockmap Jakub Sitnicki
2024-06-03 17:40 ` patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6654beff96840_23de2086e@john.notmuch \
--to=john.fastabend@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=geliang@kernel.org \
--cc=haoluo@google.com \
--cc=jakub@cloudflare.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=sdf@google.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=tanggeliang@kylinos.cn \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox