From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Yonghong Song <yhs@fb.com>
Cc: Andrii Nakryiko <andriin@fb.com>, bpf <bpf@vger.kernel.org>,
Martin KaFai Lau <kafai@fb.com>,
Networking <netdev@vger.kernel.org>,
Alexei Starovoitov <ast@fb.com>,
Daniel Borkmann <daniel@iogearbox.net>,
Kernel Team <kernel-team@fb.com>
Subject: Re: [PATCH bpf-next v3 18/21] tools/bpftool: add bpf_iter support for bptool
Date: Fri, 8 May 2020 12:51:58 -0700 [thread overview]
Message-ID: <CAEf4Bzb1VJj5gWvL0Jiip8P9KhSfT6seCRH8N7Q49Fw3_jNOGQ@mail.gmail.com> (raw)
In-Reply-To: <20200507053936.1545284-1-yhs@fb.com>
On Wed, May 6, 2020 at 10:40 PM Yonghong Song <yhs@fb.com> wrote:
>
> Currently, only one command is supported
> bpftool iter pin <bpf_prog.o> <path>
>
> It will pin the trace/iter bpf program in
> the object file <bpf_prog.o> to the <path>
> where <path> should be on a bpffs mount.
>
> For example,
> $ bpftool iter pin ./bpf_iter_ipv6_route.o \
> /sys/fs/bpf/my_route
> User can then do a `cat` to print out the results:
> $ cat /sys/fs/bpf/my_route
> fe800000000000000000000000000000 40 00000000000000000000000000000000 ...
> 00000000000000000000000000000000 00 00000000000000000000000000000000 ...
> 00000000000000000000000000000001 80 00000000000000000000000000000000 ...
> fe800000000000008c0162fffebdfd57 80 00000000000000000000000000000000 ...
> ff000000000000000000000000000000 08 00000000000000000000000000000000 ...
> 00000000000000000000000000000000 00 00000000000000000000000000000000 ...
>
> The implementation for ipv6_route iterator is in one of subsequent
> patches.
>
> This patch also added BPF_LINK_TYPE_ITER to link query.
>
> In the future, we may add additional parameters to pin command
> by parameterizing the bpf iterator. For example, a map_id or pid
> may be added to let bpf program only traverses a single map or task,
> similar to kernel seq_file single_open().
>
> We may also add introspection command for targets/iterators by
> leveraging the bpf_iter itself.
>
> Signed-off-by: Yonghong Song <yhs@fb.com>
> ---
> .../bpftool/Documentation/bpftool-iter.rst | 83 ++++++++++++++++++
> tools/bpf/bpftool/bash-completion/bpftool | 13 +++
> tools/bpf/bpftool/iter.c | 84 +++++++++++++++++++
> tools/bpf/bpftool/link.c | 1 +
> tools/bpf/bpftool/main.c | 3 +-
> tools/bpf/bpftool/main.h | 1 +
> 6 files changed, 184 insertions(+), 1 deletion(-)
> create mode 100644 tools/bpf/bpftool/Documentation/bpftool-iter.rst
> create mode 100644 tools/bpf/bpftool/iter.c
>
[...]
> diff --git a/tools/bpf/bpftool/iter.c b/tools/bpf/bpftool/iter.c
> new file mode 100644
> index 000000000000..a8fb1349c103
> --- /dev/null
> +++ b/tools/bpf/bpftool/iter.c
> @@ -0,0 +1,84 @@
> +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +// Copyright (C) 2020 Facebook
> +
> +#define _GNU_SOURCE
> +#include <linux/err.h>
> +#include <bpf/libbpf.h>
> +
> +#include "main.h"
> +
> +static int do_pin(int argc, char **argv)
> +{
> + const char *objfile, *path;
> + struct bpf_program *prog;
> + struct bpf_object *obj;
> + struct bpf_link *link;
> + int err;
> +
> + if (!REQ_ARGS(2))
> + usage();
> +
> + objfile = GET_ARG();
> + path = GET_ARG();
> +
> + obj = bpf_object__open(objfile);
> + if (IS_ERR_OR_NULL(obj)) {
nit: can't be NULL
> + p_err("can't open objfile %s", objfile);
> + return -1;
> + }
> +
> + err = bpf_object__load(obj);
> + if (err) {
> + p_err("can't load objfile %s", objfile);
> + goto close_obj;
> + }
> +
> + prog = bpf_program__next(NULL, obj);
check for null and printf error? Crashing is not good.
> + link = bpf_program__attach_iter(prog, NULL);
> + if (IS_ERR(link)) {
> + err = PTR_ERR(link);
> + p_err("attach_iter failed for program %s",
> + bpf_program__name(prog));
> + goto close_obj;
> + }
> +
> + err = mount_bpffs_for_pin(path);
> + if (err)
> + goto close_link;
> +
> + err = bpf_link__pin(link, path);
> + if (err) {
> + p_err("pin_iter failed for program %s to path %s",
> + bpf_program__name(prog), path);
> + goto close_link;
> + }
> +
> +close_link:
> + bpf_link__disconnect(link);
this is wrong, just destroy()
> + bpf_link__destroy(link);
> +close_obj:
> + bpf_object__close(obj);
> + return err;
> +}
> +
[...]
next prev parent reply other threads:[~2020-05-08 19:52 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-07 5:39 [PATCH bpf-next v3 00/21] bpf: implement bpf iterator for kernel data Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 01/21] bpf: implement an interface to register bpf_iter targets Yonghong Song
2020-05-08 18:18 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 02/21] bpf: allow loading of a bpf_iter program Yonghong Song
2020-05-08 18:20 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 03/21] bpf: support bpf tracing/iter programs for BPF_LINK_CREATE Yonghong Song
2020-05-08 18:24 ` Andrii Nakryiko
2020-05-09 1:36 ` Yonghong Song
2020-05-12 3:15 ` Andrii Nakryiko
2020-05-13 16:57 ` Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 04/21] bpf: support bpf tracing/iter programs for BPF_LINK_UPDATE Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 05/21] bpf: implement bpf_seq_read() for bpf iterator Yonghong Song
2020-05-08 18:52 ` Andrii Nakryiko
2020-05-09 1:41 ` Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 06/21] bpf: create anonymous " Yonghong Song
2020-05-08 18:57 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 07/21] bpf: create file " Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 08/21] bpf: implement common macros/helpers for target iterators Yonghong Song
2020-05-08 19:07 ` Andrii Nakryiko
2020-05-09 3:18 ` Yonghong Song
2020-05-12 3:16 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 09/21] bpf: add bpf_map iterator Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 10/21] net: bpf: add netlink and ipv6_route bpf_iter targets Yonghong Song
2020-05-08 19:17 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 11/21] bpf: add task and task/file iterator targets Yonghong Song
2020-05-08 19:36 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 12/21] bpf: add PTR_TO_BTF_ID_OR_NULL support Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 13/21] bpf: add bpf_seq_printf and bpf_seq_write helpers Yonghong Song
2020-05-08 19:44 ` Andrii Nakryiko
2020-05-09 4:18 ` Yonghong Song
2020-05-09 5:30 ` Alexei Starovoitov
2020-05-09 6:04 ` Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 14/21] bpf: handle spilled PTR_TO_BTF_ID properly when checking stack_boundary Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 15/21] bpf: support variable length array in tracing programs Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 16/21] tools/libbpf: add bpf_iter support Yonghong Song
2020-05-08 19:46 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 17/21] tools/libpf: add offsetof/container_of macro in bpf_helpers.h Yonghong Song
2020-05-08 19:48 ` Andrii Nakryiko
2020-05-07 5:39 ` [PATCH bpf-next v3 18/21] tools/bpftool: add bpf_iter support for bptool Yonghong Song
2020-05-08 19:51 ` Andrii Nakryiko [this message]
2020-05-09 5:26 ` Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 19/21] tools/bpf: selftests: add iterator programs for ipv6_route and netlink Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 20/21] tools/bpf: selftests: add iter progs for bpf_map/task/task_file Yonghong Song
2020-05-07 5:39 ` [PATCH bpf-next v3 21/21] tools/bpf: selftests: add bpf_iter selftests Yonghong Song
2020-05-08 19:57 ` Andrii Nakryiko
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=CAEf4Bzb1VJj5gWvL0Jiip8P9KhSfT6seCRH8N7Q49Fw3_jNOGQ@mail.gmail.com \
--to=andrii.nakryiko@gmail.com \
--cc=andriin@fb.com \
--cc=ast@fb.com \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kafai@fb.com \
--cc=kernel-team@fb.com \
--cc=netdev@vger.kernel.org \
--cc=yhs@fb.com \
/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;
as well as URLs for NNTP newsgroup(s).