Commit Graph

91 Commits

Author SHA1 Message Date
Viktor Malik 4c6f518e3f bpftool: Introduce btf c dump sorting
JIRA: https://issues.redhat.com/browse/RHEL-30774

commit 94133cf24bb33889aac267a7f0e3e6a08b8a8e5a
Author: Mykyta Yatsenko <yatsenko@meta.com>
Date:   Tue May 14 14:12:21 2024 +0100

    bpftool: Introduce btf c dump sorting
    
    Sort bpftool c dump output; aiming to simplify vmlinux.h diffing and
    forcing more natural type definitions ordering.
    
    Definitions are sorted first by their BTF kind ranks, then by their base
    type name and by their own name.
    
    Type ranks
    
    Assign ranks to btf kinds (defined in function btf_type_rank) to set
    next order:
    1. Anonymous enums/enums64
    2. Named enums/enums64
    3. Trivial types typedefs (ints, then floats)
    4. Structs/Unions
    5. Function prototypes
    6. Forward declarations
    
    Type rank is set to maximum for unnamed reference types, structs and
    unions to avoid emitting those types early. They will be emitted as
    part of the type chain starting with named type.
    
    Lexicographical ordering
    
    Each type is assigned a sort_name and own_name.
    sort_name is the resolved name of the final base type for reference
    types (typedef, pointer, array etc). Sorting by sort_name allows to
    group typedefs of the same base type. sort_name for non-reference type
    is the same as own_name. own_name is a direct name of particular type,
    is used as final sorting step.
    
    Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Tested-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Quentin Monnet <qmo@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20240514131221.20585-1-yatsenko@meta.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-11-26 08:57:39 +01:00
Viktor Malik 057c37d840
bpftool: Address minor issues in bash completion
JIRA: https://issues.redhat.com/browse/RHEL-30773

commit ad2d22b617b7c0ca2cff4da6dc063183822484bb
Author: Quentin Monnet <qmo@kernel.org>
Date:   Sat Apr 13 02:14:27 2024 +0100

    bpftool: Address minor issues in bash completion
    
    This commit contains a series of clean-ups and fixes for bpftool's bash
    completion file:
    
    - Make sure all local variables are declared as such.
    - Make sure variables are initialised before being read.
    - Update ELF section ("maps" -> ".maps") for looking up map names in
      object files.
    - Fix call to _init_completion.
    - Move definition for MAP_TYPE and PROG_TYPE higher up in the scope to
      avoid defining them multiple times, reuse MAP_TYPE where relevant.
    - Simplify completion for "duration" keyword in "bpftool prog profile".
    - Fix completion for "bpftool struct_ops register" and "bpftool link
      (pin|detach)" where we would repeatedly suggest file names instead of
      suggesting just one name.
    - Fix completion for "bpftool iter pin ... map MAP" to account for the
      "map" keyword.
    - Add missing "detach" suggestion for "bpftool link".
    
    Signed-off-by: Quentin Monnet <qmo@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20240413011427.14402-3-qmo@kernel.org

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-11-11 07:44:47 +01:00
Artem Savkov 202911a97f bpftool: Add support for cgroup unix socket address hooks
JIRA: https://issues.redhat.com/browse/RHEL-23643

Upstream Status: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

commit 8b3cba987e6d9464bb533d957de923f891b57bf8
Author: Daan De Meyer <daan.j.demeyer@gmail.com>
Date:   Wed Oct 11 20:51:08 2023 +0200

    bpftool: Add support for cgroup unix socket address hooks

    Add the necessary plumbing to hook up the new cgroup unix sockaddr
    hooks into bpftool.

    Signed-off-by: Daan De Meyer <daan.j.demeyer@gmail.com>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20231011185113.140426-7-daan.j.demeyer@gmail.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2024-03-28 09:04:05 +01:00
Viktor Malik b346e0d603
bpftool: Specify XDP Hints ifname when loading program
JIRA: https://issues.redhat.com/browse/RHEL-9957

commit f46392ee3dec24066e5fb260d9bd497b4cd4d191
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Wed May 17 18:01:04 2023 +0200

    bpftool: Specify XDP Hints ifname when loading program
    
    Add ability to specify a network interface used to resolve XDP hints
    kfuncs when loading program through bpftool.
    
    Usage:
    
      bpftool prog load [...] xdpmeta_dev <ifname>
    
    Writing just 'dev <ifname>' instead of 'xdpmeta_dev' is a very probable
    mistake that results in not very descriptive errors,
    so 'bpftool prog load [...] dev <ifname>' syntax becomes deprecated,
    followed by 'bpftool map create [...] dev <ifname>' for consistency.
    
    Now, to offload program, execute:
    
      bpftool prog load [...] offload_dev <ifname>
    
    To offload map:
    
      bpftool map create [...] offload_dev <ifname>
    
    'dev <ifname>' still performs offloading in the commands above, but now
    triggers a warning and is excluded from bash completion.
    
    'xdpmeta_dev' and 'offload_dev' are mutually exclusive options, because
    'xdpmeta_dev' basically makes a program device-bound without loading it
    onto the said device. For now, offloaded programs cannot use XDP hints [0],
    but if this changes, using 'offload_dev <ifname>' should cover this case.
    
      [0] https://lore.kernel.org/bpf/a5a636cc-5b03-686f-4be0-000383b05cfc@linux.dev
    
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20230517160103.1088185-1-larysa.zaremba@intel.com

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2023-10-26 17:06:23 +02:00
Artem Savkov 2471ca12bc bpftool: Clean up _bpftool_once_attr() calls in bash completion
Bugzilla: https://bugzilla.redhat.com/2221599

commit 7319296855f1bac0e7fb003388f44ecbd4515102
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Apr 5 14:21:20 2023 +0100

    bpftool: Clean up _bpftool_once_attr() calls in bash completion
    
    In bpftool's bash completion file, function _bpftool_once_attr() is able
    to process multiple arguments. There are a few locations where this
    function is called multiple times in a row, each time for a single
    argument; let's pass all arguments instead to minimize the number of
    function calls required for the completion.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20230405132120.59886-8-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-09-22 09:12:27 +02:00
Artem Savkov 6f802fad55 bpftool: Support "opcodes", "linum", "visual" simultaneously
Bugzilla: https://bugzilla.redhat.com/2221599

commit 9b79f02722bbf24f060b2ab79513ad6e22c8e2f0
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Apr 5 14:21:18 2023 +0100

    bpftool: Support "opcodes", "linum", "visual" simultaneously
    
    When dumping a program, the keywords "opcodes" (for printing the raw
    opcodes), "linum" (for displaying the filename, line number, column
    number along with the source code), and "visual" (for generating the
    control flow graph for translated programs) are mutually exclusive. But
    there's no reason why they should be. Let's make it possible to pass
    several of them at once. The "file FILE" option, which makes bpftool
    output a binary image to a file, remains incompatible with the others.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20230405132120.59886-6-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-09-22 09:12:26 +02:00
Artem Savkov a642bbf9a1 bpftool: Return an error on prog dumps if both CFG and JSON are required
Bugzilla: https://bugzilla.redhat.com/2221599

commit 05a06be722896e51f65dbbb6a3610f85a8353d6b
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Apr 5 14:21:17 2023 +0100

    bpftool: Return an error on prog dumps if both CFG and JSON are required
    
    We do not support JSON output for control flow graphs of programs with
    bpftool. So far, requiring both the CFG and JSON output would result in
    producing a null JSON object. It makes more sense to raise an error
    directly when parsing command line arguments and options, so that users
    know they won't get any output they might expect.
    
    If JSON is required for the graph, we leave it to Graphviz instead:
    
        # bpftool prog dump xlated <REF> visual | dot -Tjson
    
    Suggested-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20230405132120.59886-5-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-09-22 09:12:26 +02:00
Jerome Marchand c6027db6c9 bpftool: remove support of --legacy option for bpftool
Bugzilla: https://bugzilla.redhat.com/2177177

commit 9b8107553424fd87955fed257a807672c2097297
Author: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
Date:   Sun Nov 20 11:25:55 2022 +0000

    bpftool: remove support of --legacy option for bpftool

    Following:
      commit bd054102a8c7 ("libbpf: enforce strict libbpf 1.0 behaviors")
      commit 93b8952d223a ("libbpf: deprecate legacy BPF map definitions")

    The --legacy option is no longer relevant as libbpf no longer supports
    it. libbpf_set_strict_mode() is a no-op operation.

    Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
    Acked-by: Yonghong Song <yhs@fb.com>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20221120112515.38165-2-sahid.ferdjaoui@industrialdiscipline.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:43:09 +02:00
Jerome Marchand b9c0ecf5e7 bpftool: Update the bash completion(add autoattach to prog load)
Bugzilla: https://bugzilla.redhat.com/2177177

commit b81a677400755cf24c971d1342c4c53d81744d82
Author: Wang Yufen <wangyufen@huawei.com>
Date:   Fri Oct 14 16:31:15 2022 +0800

    bpftool: Update the bash completion(add autoattach to prog load)

    Add autoattach optional to prog load|loadall for supporting
    one-step load-attach-pin_link.

    Signed-off-by: Wang Yufen <wangyufen@huawei.com>
    Link: https://lore.kernel.org/r/1665736275-28143-4-git-send-email-wangyufen@huawei.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:54 +02:00
Artem Savkov d61da5afb7 bpftool: Rename "bpftool feature list" into "... feature list_builtins"
Bugzilla: https://bugzilla.redhat.com/2137876

commit 990a6194f7e16cc23334892287f32899e241b1a9
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jul 1 10:38:05 2022 +0100

    bpftool: Rename "bpftool feature list" into "... feature list_builtins"
    
    To make it more explicit that the features listed with "bpftool feature
    list" are known to bpftool, but not necessary available on the system
    (as opposed to the probed features), rename the "feature list" command
    into "feature list_builtins".
    
    Note that "bpftool feature list" still works as before given that we
    recognise arguments from their prefixes; but the real name of the
    subcommand, in particular as displayed in the man page or the
    interactive help, will now include "_builtins".
    
    Since we update the bash completion accordingly, let's also take this
    chance to redirect error output to /dev/null in the completion script,
    to avoid displaying unexpected error messages when users attempt to
    tab-complete.
    
    Suggested-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220701093805.16920-1-quentin@isovalent.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:34 +01:00
Artem Savkov 40dc86a91e bpftool: Use feature list in bash completion
Bugzilla: https://bugzilla.redhat.com/2137876

commit 6d304871e3ef4c339c06aa9b4ab55b6c77642884
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Jun 29 21:36:37 2022 +0100

    bpftool: Use feature list in bash completion
    
    Now that bpftool is able to produce a list of known program, map, attach
    types, let's use as much of this as we can in the bash completion file,
    so that we don't have to expand the list each time a new type is added
    to the kernel.
    
    Also update the relevant test script to remove some checks that are no
    longer needed.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Müller <deso@posteo.net>
    Link: https://lore.kernel.org/bpf/20220629203637.138944-3-quentin@isovalent.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:34 +01:00
Artem Savkov 36511b54cf bpftool: Add feature list (prog/map/link/attach types, helpers)
Bugzilla: https://bugzilla.redhat.com/2137876

commit 27b3f70553432114b3d26f4d9c72cf02f38b84ee
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Jun 29 21:36:36 2022 +0100

    bpftool: Add feature list (prog/map/link/attach types, helpers)
    
    Add a "bpftool feature list" subcommand to list BPF "features".
    Contrarily to "bpftool feature probe", this is not about the features
    available on the system. Instead, it lists all features known to bpftool
    from compilation time; in other words, all program, map, attach, link
    types known to the libbpf version in use, and all helpers found in the
    UAPI BPF header.
    
    The first use case for this feature is bash completion: running the
    command provides a list of types that can be used to produce the list of
    candidate map types, for example.
    
    Now that bpftool uses "standard" names provided by libbpf for the
    program, map, link, and attach types, having the ability to list these
    types and helpers could also be useful in scripts to loop over existing
    items.
    
    Sample output:
    
        # bpftool feature list prog_types | grep -vw unspec | head -n 6
        socket_filter
        kprobe
        sched_cls
        sched_act
        tracepoint
        xdp
    
        # bpftool -p feature list map_types | jq '.[1]'
        "hash"
    
        # bpftool feature list attach_types | grep '^cgroup_'
        cgroup_inet_ingress
        cgroup_inet_egress
        [...]
        cgroup_inet_sock_release
    
        # bpftool feature list helpers | grep -vw bpf_unspec | wc -l
        207
    
    The "unspec" types and helpers are not filtered out by bpftool, so as to
    remain closer to the enums, and to preserve the indices in the JSON
    arrays (e.g. "hash" at index 1 == BPF_MAP_TYPE_HASH in map types list).
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Müller <deso@posteo.net>
    Link: https://lore.kernel.org/bpf/20220629203637.138944-2-quentin@isovalent.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:34 +01:00
Artem Savkov 03a91b85bf bpftool: Use libbpf_bpf_attach_type_str
Bugzilla: https://bugzilla.redhat.com/2137876

commit 1ba5ad36e00f46e3f7676f5de6b87f5a2f57f1f1
Author: Daniel Müller <deso@posteo.net>
Date:   Mon May 23 23:04:25 2022 +0000

    bpftool: Use libbpf_bpf_attach_type_str
    
    This change switches bpftool over to using the recently introduced
    libbpf_bpf_attach_type_str function instead of maintaining its own
    string representation for the bpf_attach_type enum.
    
    Note that contrary to other enum types, the variant names that bpftool
    maps bpf_attach_type to do not adhere a simple to follow rule. With
    bpf_prog_type, for example, the textual representation can easily be
    inferred by stripping the BPF_PROG_TYPE_ prefix and lowercasing the
    remaining string. bpf_attach_type violates this rule for various
    variants.
    We decided to fix up this deficiency with this change, meaning that
    bpftool uses the same textual representations as libbpf. Supporting
    tests, completion scripts, and man pages have been adjusted accordingly.
    However, we did add support for accepting (the now undocumented)
    original attach type names when they are provided by users.
    
    For the test (test_bpftool_synctypes.py), I have removed the enum
    representation checks, because we no longer mirror the various enum
    variant names in bpftool source code. For the man page, help text, and
    completion script checks we are now using enum definitions from
    uapi/linux/bpf.h as the source of truth directly.
    
    Signed-off-by: Daniel Müller <deso@posteo.net>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20220523230428.3077108-10-deso@posteo.net

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:28 +01:00
Jerome Marchand 6bb9c2053e bpftool: Add support for subskeletons
Bugzilla: https://bugzilla.redhat.com/2120966

commit 00389c58ffe993782a8ba4bb5a34a102b1f6fe24
Author: Delyan Kratunov <delyank@fb.com>
Date:   Wed Mar 16 23:37:28 2022 +0000

    bpftool: Add support for subskeletons

    Subskeletons are headers which require an already loaded program to
    operate.

    For example, when a BPF library is linked into a larger BPF object file,
    the library userspace needs a way to access its own global variables
    without requiring knowledge about the larger program at build time.

    As a result, subskeletons require a loaded bpf_object to open().
    Further, they find their own symbols in the larger program by
    walking BTF type data at run time.

    At this time, programs, maps, and globals are supported through
    non-owning pointers.

    Signed-off-by: Delyan Kratunov <delyank@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/ca8a48b4841c72d285ecce82371bef4a899756cb.1647473511.git.delyank@fb.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:58:05 +02:00
Jerome Marchand 25b6d15483 bpftool: Add gen min_core_btf command
Bugzilla: https://bugzilla.redhat.com/2120966

commit 0a9f4a20c6153d187c8ee58133357ac671372f5f
Author: Mauricio Vásquez <mauricio@kinvolk.io>
Date:   Tue Feb 15 17:58:52 2022 -0500

    bpftool: Add gen min_core_btf command

    This command is implemented under the "gen" command in bpftool and the
    syntax is the following:

    $ bpftool gen min_core_btf INPUT OUTPUT OBJECT [OBJECT...]

    INPUT is the file that contains all the BTF types for a kernel and
    OUTPUT is the path of the minimize BTF file that will be created with
    only the types needed by the objects.

    Signed-off-by: Mauricio Vásquez <mauricio@kinvolk.io>
    Signed-off-by: Rafael David Tinoco <rafael.tinoco@aquasec.com>
    Signed-off-by: Lorenzo Fontana <lorenzo.fontana@elastic.co>
    Signed-off-by: Leonardo Di Donato <leonardo.didonato@elastic.co>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220215225856.671072-4-mauricio@kinvolk.io

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:57:50 +02:00
Artem Savkov db7ced1257 bpftool: Update the lists of names for maps and prog-attach types
Bugzilla: https://bugzilla.redhat.com/2069046

Upstream Status: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

commit 3811e2753a39efb8aa5b8c133dc24f6d26f6cd96
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Nov 10 11:46:31 2021 +0000

    bpftool: Update the lists of names for maps and prog-attach types

    To support the different BPF map or attach types, bpftool must remain
    up-to-date with the types supported by the kernel. Let's update the
    lists, by adding the missing Bloom filter map type and the perf_event
    attach type.

    Both missing items were found with test_bpftool_synctypes.py.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211110114632.24537-6-quentin@isovalent.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:37 +02:00
Yauheni Kaliuta 7a361a5ee9 bpftool: Enable libbpf's strict mode by default
Bugzilla: http://bugzilla.redhat.com/2100795

commit 314f14abdeca78de6b16f97d796a9966ce4b90ae
Author: Stanislav Fomichev <sdf@google.com>
Date:   Wed Nov 10 11:23:24 2021 -0800

    bpftool: Enable libbpf's strict mode by default
    
    Otherwise, attaching with bpftool doesn't work with strict section names.
    
    Also:
    
      - Add --legacy option to switch back to pre-1.0 behavior
      - Print a warning when program fails to load in strict mode to
        point to --legacy flag
      - By default, don't append / to the section name; in strict
        mode it's relevant only for a small subset of prog types
    
    + bpftool --legacy prog loadall tools/testing/selftests/bpf/test_cgroup_link.o /sys/fs/bpf/kprobe type kprobe
    libbpf: failed to pin program: File exists
    Error: failed to pin all programs
    + bpftool prog loadall tools/testing/selftests/bpf/test_cgroup_link.o /sys/fs/bpf/kprobe type kprobe
    
    v1 -> v2:
      - strict by default (Quentin Monnet)
      - add more info to --legacy description (Quentin Monnet)
      - add bash completion (Quentin Monnet)
    
    Signed-off-by: Stanislav Fomichev <sdf@google.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20211110192324.920934-1-sdf@google.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-28 18:32:56 +03:00
Jerome Marchand b676c4085d tools: bpftool: Complete metrics list in "bpftool prog profile" doc
Bugzilla: http://bugzilla.redhat.com/2041365

commit 475a23c2c15fb2af76a27f89f632a48c03166f45
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jul 30 22:54:35 2021 +0100

    tools: bpftool: Complete metrics list in "bpftool prog profile" doc

    Profiling programs with bpftool was extended some time ago to support
    two new metrics, namely itlb_misses and dtlb_misses (misses for the
    instruction/data translation lookaside buffer). Update the manual page
    and bash completion accordingly.

    Fixes: 450d060e8f ("bpftool: Add {i,d}tlb_misses support for bpftool profile")
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20210730215435.7095-8-quentin@isovalent.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-04-29 18:14:37 +02:00
Jerome Marchand 765e926fe8 tools: bpftool: Document and add bash completion for -L, -B options
Bugzilla: http://bugzilla.redhat.com/2041365

commit 8cc8c6357c8fa763c650f1bddb69871a254f427c
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jul 30 22:54:34 2021 +0100

    tools: bpftool: Document and add bash completion for -L, -B options

    The -L|--use-loader option for using loader programs when loading, or
    when generating a skeleton, did not have any documentation or bash
    completion. Same thing goes for -B|--base-btf, used to pass a path to a
    base BTF object for split BTF such as BTF for kernel modules.

    This patch documents and adds bash completion for those options.

    Fixes: 75fa177769 ("tools/bpftool: Add bpftool support for split BTF")
    Fixes: d510296d33 ("bpftool: Use syscall/loader program in "prog load" and "gen skeleton" command.")
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20210730215435.7095-7-quentin@isovalent.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-04-29 18:14:37 +02:00
Jerome Marchand cf0368f888 tools: bpftool: Complete and synchronise attach or map types
Bugzilla: http://bugzilla.redhat.com/2041365

commit b544342e52fc3dfcc1d430fff8d1a7a3be920ffd
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jul 30 22:54:31 2021 +0100

    tools: bpftool: Complete and synchronise attach or map types

    Update bpftool's list of attach type names to tell it about the latest
    attach types, or the "ringbuf" map. Also update the documentation, help
    messages, and bash completion when relevant.

    These missing items were reported by the newly added Python script used
    to help maintain consistency in bpftool.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20210730215435.7095-4-quentin@isovalent.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-04-29 18:14:37 +02:00
Jerome Marchand 37dec8d7ab tools: bpftool: Slightly ease bash completion updates
Bugzilla: http://bugzilla.redhat.com/2041365

commit 510b4d4c5d4cbfdeaf35e4bc6483e8afa16b0e9e
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jul 30 22:54:29 2021 +0100

    tools: bpftool: Slightly ease bash completion updates

    Bash completion for bpftool gets two minor improvements in this patch.

    Move the detection of attach types for "bpftool cgroup attach" outside
    of the "case/esac" bloc, where we cannot reuse our variable holding the
    list of supported attach types as a pattern list. After the change, we
    have only one list of cgroup attach types to update when new types are
    added, instead of the former two lists.

    Also rename the variables holding lists of names for program types, map
    types, and attach types, to make them more unique. This can make it
    slightly easier to point people to the relevant variables to update, but
    the main objective here is to help run a script to check that bash
    completion is up-to-date with bpftool's source code.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20210730215435.7095-2-quentin@isovalent.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-04-29 18:14:36 +02:00
Liu Jian a8deba8547 bpftool: Add sock_release help info for cgroup attach/prog load command
The help information was not added at the time when the function got added.
Fix this and add the missing information to its cli, documentation and bash
completion.

Fixes: db94cc0b48 ("bpftool: Add support for BPF_CGROUP_INET_SOCK_RELEASE")
Signed-off-by: Liu Jian <liujian56@huawei.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20210525014139.323859-1-liujian56@huawei.com
2021-05-25 16:18:32 +02:00
Andrii Nakryiko d80b2fcbe0 bpftool: Add `gen object` command to perform BPF static linking
Add `bpftool gen object <output-file> <input_file>...` command to statically
link multiple BPF ELF object files into a single output BPF ELF object file.

This patch also updates bash completions and man page. Man page gets a short
section on `gen object` command, but also updates the skeleton example to show
off workflow for BPF application with two .bpf.c files, compiled individually
with Clang, then resulting object files are linked together with `gen object`,
and then final object file is used to generate usable BPF skeleton. This
should help new users understand realistic workflow w.r.t. compiling
mutli-file BPF application.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20210318194036.3521577-10-andrii@kernel.org
2021-03-18 16:14:23 -07:00
Andrii Nakryiko c412266545 bpftool: Add ability to specify custom skeleton object name
Add optional name OBJECT_NAME parameter to `gen skeleton` command to override
default object name, normally derived from input file name. This allows much
more flexibility during build time.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210318194036.3521577-9-andrii@kernel.org
2021-03-18 16:14:23 -07:00
KP Singh 864ab0616d bpftool: Add support for task local storage
Updates the binary to handle the BPF_MAP_TYPE_TASK_STORAGE as
"task_storage" for printing and parsing. Also updates the documentation
and bash completion

Signed-off-by: KP Singh <kpsingh@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Song Liu <songliubraving@fb.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20201106103747.2780972-5-kpsingh@chromium.org
2020-11-06 08:08:37 -08:00
Quentin Monnet e3b9626f09 tools: bpftool: Add "inner_map" to "bpftool map create" outer maps
There is no support for creating maps of types array-of-map or
hash-of-map in bpftool. This is because the kernel needs an inner_map_fd
to collect metadata on the inner maps to be supported by the new map,
but bpftool does not provide a way to pass this file descriptor.

Add a new optional "inner_map" keyword that can be used to pass a
reference to a map, retrieve a fd to that map, and pass it as the
inner_map_fd.

Add related documentation and bash completion. Note that we can
reference the inner map by its name, meaning we can have several times
the keyword "name" with different meanings (mandatory outer map name,
and possibly a name to use to find the inner_map_fd). The bash
completion will offer it just once, and will not suggest "name" on the
following command:

    # bpftool map create /sys/fs/bpf/my_outer_map type hash_of_maps \
        inner_map name my_inner_map [TAB]

Fixing that specific case seems too convoluted. Completion will work as
expected, however, if the outer map name comes first and the "inner_map
name ..." is passed second.

Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200910102652.10509-4-quentin@isovalent.com
2020-09-10 17:29:21 -07:00
KP Singh 8ea636848a bpf: Implement bpf_local_storage for inodes
Similar to bpf_local_storage for sockets, add local storage for inodes.
The life-cycle of storage is managed with the life-cycle of the inode.
i.e. the storage is destroyed along with the owning inode.

The BPF LSM allocates an __rcu pointer to the bpf_local_storage in the
security blob which are now stackable and can co-exist with other LSMs.

Signed-off-by: KP Singh <kpsingh@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200825182919.1118197-6-kpsingh@chromium.org
2020-08-25 15:00:04 -07:00
Andrii Nakryiko e85f99aa77 tools/bpftool: Add documentation and bash-completion for `link detach`
Add info on link detach sub-command to man page. Add detach to bash-completion
as well.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Song Liu <songliubraving@fb.com>
Acked-by: John Fastabend <john.fastabend@gmail.com.
Link: https://lore.kernel.org/bpf/20200731182830.286260-6-andriin@fb.com
2020-08-01 20:38:29 -07:00
Yonghong Song d8793aca70 tools/bpftool: Add bpftool support for bpf map element iterator
The optional parameter "map MAP" can be added to "bpftool iter"
command to create a bpf iterator for map elements. For example,
  bpftool iter pin ./prog.o /sys/fs/bpf/p1 map id 333

For map element bpf iterator "map MAP" parameter is required.
Otherwise, bpf link creation will return an error.

Quentin Monnet kindly provided bash-completion implementation
for new "map MAP" option.

Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200723184119.590799-1-yhs@fb.com
2020-07-25 20:16:33 -07:00
Jakub Sitnicki 93a3545d81 tools/bpftool: Add name mappings for SK_LOOKUP prog and attach type
Make bpftool show human-friendly identifiers for newly introduced program
and attach type, BPF_PROG_TYPE_SK_LOOKUP and BPF_SK_LOOKUP, respectively.

Also, add the new prog type bash-completion, man page and help message.

Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200717103536.397595-14-jakub@cloudflare.com
2020-07-17 20:18:17 -07:00
Daniel Borkmann 05ee19c18c bpf, bpftool: Enable get{peer, sock}name attach types
Make bpftool aware and add the new get{peer,sock}name attach types to its
cli, documentation and bash completion to allow attachment/detachment of
sock_addr programs there.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: Andrey Ignatov <rdna@fb.com>
Link: https://lore.kernel.org/bpf/9765b3d03e4c29210c4df56a9cc7e52f5f7bb5ef.1589841594.git.daniel@iogearbox.net
2020-05-19 11:32:04 -07:00
Yonghong Song 9406b485de tools/bpftool: Add bpf_iter support for bptool
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>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200509175920.2477247-1-yhs@fb.com
2020-05-09 17:05:27 -07:00
Quentin Monnet cf9bf71452 tools: bpftool: Allow unprivileged users to probe features
There is demand for a way to identify what BPF helper functions are
available to unprivileged users. To do so, allow unprivileged users to
run "bpftool feature probe" to list BPF-related features. This will only
show features accessible to those users, and may not reflect the full
list of features available (to administrators) on the system.

To avoid the case where bpftool is inadvertently run as non-root and
would list only a subset of the features supported by the system when it
would be expected to list all of them, running as unprivileged is gated
behind the "unprivileged" keyword passed to the command line. When used
by a privileged user, this keyword allows to drop the CAP_SYS_ADMIN and
to list the features available to unprivileged users. Note that this
addsd a dependency on libpcap for compiling bpftool.

Note that there is no particular reason why the probes were restricted
to root, other than the fact I did not need them for unprivileged and
did not bother with the additional checks at the time probes were added.

Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20200429144506.8999-3-quentin@isovalent.com
2020-04-29 23:25:11 +02:00
Andrii Nakryiko 5d085ad2e6 bpftool: Add link bash completions
Extend bpftool's bash-completion script to handle new link command and its
sub-commands.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20200429001614.1544-11-andriin@fb.com
2020-04-28 17:27:08 -07:00
Martin KaFai Lau 65c9362859 bpftool: Add struct_ops support
This patch adds struct_ops support to the bpftool.

To recap a bit on the recent bpf_struct_ops feature on the kernel side:
It currently supports "struct tcp_congestion_ops" to be implemented
in bpf.  At a high level, bpf_struct_ops is struct_ops map populated
with a number of bpf progs.  bpf_struct_ops currently supports the
"struct tcp_congestion_ops".  However, the bpf_struct_ops design is
generic enough that other kernel struct ops can be supported in
the future.

Although struct_ops is map+progs at a high lever, there are differences
in details.  For example,
1) After registering a struct_ops, the struct_ops is held by the kernel
   subsystem (e.g. tcp-cc).  Thus, there is no need to pin a
   struct_ops map or its progs in order to keep them around.
2) To iterate all struct_ops in a system, it iterates all maps
   in type BPF_MAP_TYPE_STRUCT_OPS.  BPF_MAP_TYPE_STRUCT_OPS is
   the current usual filter.  In the future, it may need to
   filter by other struct_ops specific properties.  e.g. filter by
   tcp_congestion_ops or other kernel subsystem ops in the future.
3) struct_ops requires the running kernel having BTF info.  That allows
   more flexibility in handling other kernel structs.  e.g. it can
   always dump the latest bpf_map_info.
4) Also, "struct_ops" command is not intended to repeat all features
   already provided by "map" or "prog".  For example, if there really
   is a need to pin the struct_ops map, the user can use the "map" cmd
   to do that.

While the first attempt was to reuse parts from map/prog.c,  it ended up
not a lot to share.  The only obvious item is the map_parse_fds() but
that still requires modifications to accommodate struct_ops map specific
filtering (for the immediate and the future needs).  Together with the
earlier mentioned differences, it is better to part away from map/prog.c.

The initial set of subcmds are, register, unregister, show, and dump.

For register, it registers all struct_ops maps that can be found in an
obj file.  Option can be added in the future to specify a particular
struct_ops map.  Also, the common bpf_tcp_cc is stateless (e.g.
bpf_cubic.c and bpf_dctcp.c).  The "reuse map" feature is not
implemented in this patch and it can be considered later also.

For other subcmds, please see the man doc for details.

A sample output of dump:
[root@arch-fb-vm1 bpf]# bpftool struct_ops dump name cubic
[{
        "bpf_map_info": {
            "type": 26,
            "id": 64,
            "key_size": 4,
            "value_size": 256,
            "max_entries": 1,
            "map_flags": 0,
            "name": "cubic",
            "ifindex": 0,
            "btf_vmlinux_value_type_id": 18452,
            "netns_dev": 0,
            "netns_ino": 0,
            "btf_id": 52,
            "btf_key_type_id": 0,
            "btf_value_type_id": 0
        }
    },{
        "bpf_struct_ops_tcp_congestion_ops": {
            "refcnt": {
                "refs": {
                    "counter": 1
                }
            },
            "state": "BPF_STRUCT_OPS_STATE_INUSE",
            "data": {
                "list": {
                    "next": 0,
                    "prev": 0
                },
                "key": 0,
                "flags": 0,
                "init": "void (struct sock *) bictcp_init/prog_id:138",
                "release": "void (struct sock *) 0",
                "ssthresh": "u32 (struct sock *) bictcp_recalc_ssthresh/prog_id:141",
                "cong_avoid": "void (struct sock *, u32, u32) bictcp_cong_avoid/prog_id:140",
                "set_state": "void (struct sock *, u8) bictcp_state/prog_id:142",
                "cwnd_event": "void (struct sock *, enum tcp_ca_event) bictcp_cwnd_event/prog_id:139",
                "in_ack_event": "void (struct sock *, u32) 0",
                "undo_cwnd": "u32 (struct sock *) tcp_reno_undo_cwnd/prog_id:144",
                "pkts_acked": "void (struct sock *, const struct ack_sample *) bictcp_acked/prog_id:143",
                "min_tso_segs": "u32 (struct sock *) 0",
                "sndbuf_expand": "u32 (struct sock *) 0",
                "cong_control": "void (struct sock *, const struct rate_sample *) 0",
                "get_info": "size_t (struct sock *, u32, int *, union tcp_cc_info *) 0",
                "name": "bpf_cubic",
                "owner": 0
            }
        }
    }
]

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20200318171656.129650-1-kafai@fb.com
2020-03-20 15:51:35 +01:00
Quentin Monnet 132c1af0a2 tools: bpftool: Fix minor bash completion mistakes
Minor fixes for bash completion: addition of program name completion for
two subcommands, and correction for program test-runs and map pinning.

The completion for the following commands is fixed or improved:

    # bpftool prog run [TAB]
    # bpftool prog pin [TAB]
    # bpftool map pin [TAB]
    # bpftool net attach xdp name [TAB]

Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20200312184608.12050-3-quentin@isovalent.com
2020-03-13 00:24:08 +01:00
Song Liu aad32f4c76 bpftool: Fix typo in bash-completion
_bpftool_get_map_names => _bpftool_get_prog_names for prog-attach|detach.

Fixes: 99f9863a0c ("bpftool: Match maps by name")
Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20200309173218.2739965-5-songliubraving@fb.com
2020-03-10 00:04:21 +01:00
Song Liu 397692eab3 bpftool: Bash completion for "bpftool prog profile"
Add bash completion for "bpftool prog profile" command.

Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20200309173218.2739965-4-songliubraving@fb.com
2020-03-10 00:04:19 +01:00
Michal Rostecki ad92b12a6e bpftool: Update bash completion for "bpftool feature" command
Update bash completion for "bpftool feature" command with the new
argument: "full".

Signed-off-by: Michal Rostecki <mrostecki@opensuse.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20200226165941.6379-5-mrostecki@opensuse.org
2020-02-26 18:34:34 +01:00
Andrey Ignatov 3494bec0f6 bpftool: Support struct_ops, tracing, ext prog types
Add support for prog types that were added to kernel but not present in
bpftool yet: struct_ops, tracing, ext prog types and corresponding
section names.

Before:
  # bpftool p l
  ...
  184: type 26  name test_subprog3  tag dda135a7dc0daf54  gpl
          loaded_at 2020-02-25T13:28:33-0800  uid 0
          xlated 112B  jited 103B  memlock 4096B  map_ids 136
          btf_id 85
  185: type 28  name new_get_skb_len  tag d2de5b87d8e5dc49  gpl
          loaded_at 2020-02-25T13:28:33-0800  uid 0
          xlated 72B  jited 69B  memlock 4096B  map_ids 136
          btf_id 85

After:
  # bpftool p l
  ...
  184: tracing  name test_subprog3  tag dda135a7dc0daf54  gpl
          loaded_at 2020-02-25T13:28:33-0800  uid 0
          xlated 112B  jited 103B  memlock 4096B  map_ids 136
          btf_id 85
  185: ext  name new_get_skb_len  tag d2de5b87d8e5dc49  gpl
          loaded_at 2020-02-25T13:28:33-0800  uid 0
          xlated 72B  jited 69B  memlock 4096B  map_ids 136
          btf_id 85

Signed-off-by: Andrey Ignatov <rdna@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20200225223441.689109-1-rdna@fb.com
2020-02-26 16:40:53 +01:00
Andrii Nakryiko d9c00c3b16 bpftool: Add `gen skeleton` BASH completions
Add BASH completions for gen sub-command.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Cc: Quentin Monnet <quentin.monnet@netronome.com>
Link: https://lore.kernel.org/bpf/20191214014341.3442258-18-andriin@fb.com
2019-12-15 15:58:06 -08:00
Paul Chaignon 99f9863a0c bpftool: Match maps by name
This patch implements lookup by name for maps and changes the behavior of
lookups by tag to be consistent with prog subcommands.  Similarly to
program subcommands, the show and dump commands will return all maps with
the given name (or tag), whereas other commands will error out if several
maps have the same name (resp. tag).

When a map has BTF info, it is dumped in JSON with available BTF info.
This patch requires that all matched maps have BTF info before switching
the output format to JSON.

Signed-off-by: Paul Chaignon <paul.chaignon@orange.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/8de1c9f273860b3ea1680502928f4da2336b853e.1576263640.git.paul.chaignon@gmail.com
2019-12-15 09:03:18 -08:00
Paul Chaignon a7d22ca2a4 bpftool: Match programs by name
When working with frequently modified BPF programs, both the ID and the
tag may change.  bpftool currently doesn't provide a "stable" way to match
such programs.

This patch implements lookup by name for programs.  The show and dump
commands will return all programs with the given name, whereas other
commands will error out if several programs have the same name.

Signed-off-by: Paul Chaignon <paul.chaignon@orange.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Link: https://lore.kernel.org/bpf/b5fc1a5dcfaeb5f16fc80295cdaa606dd2d91534.1576263640.git.paul.chaignon@gmail.com
2019-12-15 09:03:18 -08:00
Quentin Monnet 0bb52b0dfc tools: bpftool: add "bpftool map freeze" subcommand
Add a new subcommand to freeze maps from user space.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-08-21 21:17:27 +02:00
Quentin Monnet 4d374ba0bf tools: bpftool: implement "bpftool btf show|list"
Add a "btf list" (alias: "btf show") subcommand to bpftool in order to
dump all BTF objects loaded on a system.

When running the command, hash tables are built in bpftool to retrieve
all the associations between BTF objects and BPF maps and programs. This
allows for printing all such associations when listing the BTF objects.

The command is added at the top of the subcommands for "bpftool btf", so
that typing only "bpftool btf" also comes down to listing the programs.
We could not have this with the previous command ("dump"), which
required a BTF object id, so it should not break any previous behaviour.
This also makes the "btf" command behaviour consistent with "prog" or
"map".

Bash completion is updated to use "bpftool btf" instead of "bpftool
prog" to list the BTF ids, as it looks more consistent.

Example output (plain):

    # bpftool btf show
    9: size 2989B  prog_ids 21  map_ids 15
    17: size 2847B  prog_ids 36  map_ids 30,29,28
    26: size 2847B

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2019-08-20 09:51:06 -07:00
Daniel T. Lee 10a708c24a tools: bpftool: add bash-completion for net attach/detach
This commit adds bash-completion for new "net attach/detach"
subcommand for attaching XDP program on interface.

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2019-08-15 17:00:33 -07:00
Jakub Kicinski a98bf57391 tools: bpftool: add support for reporting the effective cgroup progs
Takshak said in the original submission:

With different bpf attach_flags available to attach bpf programs specially
with BPF_F_ALLOW_OVERRIDE and BPF_F_ALLOW_MULTI, the list of effective
bpf-programs available to any sub-cgroups really needs to be available for
easy debugging.

Using BPF_F_QUERY_EFFECTIVE flag, one can get the list of not only attached
bpf-programs to a cgroup but also the inherited ones from parent cgroup.

So a new option is introduced to use BPF_F_QUERY_EFFECTIVE query flag here
to list all the effective bpf-programs available for execution at a specified
cgroup.

Reused modified test program test_cgroup_attach from tools/testing/selftests/bpf:
  # ./test_cgroup_attach

With old bpftool:

 # bpftool cgroup show /sys/fs/cgroup/cgroup-test-work-dir/cg1/
  ID       AttachType      AttachFlags     Name
  271      egress          multi           pkt_cntr_1
  272      egress          multi           pkt_cntr_2

Attached new program pkt_cntr_4 in cg2 gives following:

 # bpftool cgroup show /sys/fs/cgroup/cgroup-test-work-dir/cg1/cg2
  ID       AttachType      AttachFlags     Name
  273      egress          override        pkt_cntr_4

And with new "effective" option it shows all effective programs for cg2:

 # bpftool cgroup show /sys/fs/cgroup/cgroup-test-work-dir/cg1/cg2 effective
  ID       AttachType      AttachFlags     Name
  273      egress          override        pkt_cntr_4
  271      egress          override        pkt_cntr_1
  272      egress          override        pkt_cntr_2

Compared to original submission use a local flag instead of global
option.

We need to clear query_flags on every command, in case batch mode
wants to use varying settings.

v2: (Takshak)
 - forbid duplicated flags;
 - fix cgroup path freeing.

Signed-off-by: Takshak Chahande <ctakshak@fb.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Takshak Chahande <ctakshak@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2019-07-30 21:15:02 -07:00
Toke Høiland-Jørgensen 1375dc4a45 tools: Add definitions for devmap_hash map type
This adds selftest and bpftool updates for the devmap_hash map type.

Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2019-07-29 13:50:48 -07:00
Quentin Monnet 8fc9f8bedf tools: bpftool: add completion for bpftool prog "loadall"
Bash completion for proposing the "loadall" subcommand is missing. Let's
add it to the completion script.

Add a specific case to propose "load" and "loadall" for completing:

    $ bpftool prog load
                       ^ cursor is here

Otherwise, completion considers that $command is in load|loadall and
starts making related completions (file or directory names, as the
number of words on the command line is below 6), when the only suggested
keywords should be "load" and "loadall" until one has been picked and a
space entered after that to move to the next word.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-07-08 17:20:34 +02:00
Quentin Monnet ba95c74524 tools: bpftool: add "prog run" subcommand to test-run programs
Add a new "bpftool prog run" subcommand to run a loaded program on input
data (and possibly with input context) passed by the user.

Print output data (and output context if relevant) into a file or into
the console. Print return value and duration for the test run into the
console.

A "repeat" argument can be passed to run the program several times in a
row.

The command does not perform any kind of verification based on program
type (Is this program type allowed to use an input context?) or on data
consistency (Can I work with empty input data?), this is left to the
kernel.

Example invocation:

    # perl -e 'print "\x0" x 14' | ./bpftool prog run \
            pinned /sys/fs/bpf/sample_ret0 \
            data_in - data_out - repeat 5
    0000000 0000 0000 0000 0000 0000 0000 0000      | ........ ......
    Return value: 0, duration (average): 260ns

When one of data_in or ctx_in is "-", bpftool reads from standard input,
in binary format. Other formats (JSON, hexdump) might be supported (via
an optional command line keyword like "data_fmt_in") in the future if
relevant, but this would require doing more parsing in bpftool.

v2:
- Fix argument names for function check_single_stdin(). (Yonghong)

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-07-05 23:48:07 +02:00