Commit Graph

172 Commits

Author SHA1 Message Date
Viktor Malik ba90ab02d7
bpftool: Fix typo in usage help
JIRA: https://issues.redhat.com/browse/RHEL-30774

commit 3c870059e9f8897c032f4256f90c41ee822218a8
Author: Donald Hunter <donald.hunter@gmail.com>
Date:   Wed Jul 17 14:45:08 2024 +0100

    bpftool: Fix typo in usage help
    
    The usage help for "bpftool prog help" contains a ° instead of the _
    symbol for cgroup/sendmsg_unix. Fix the typo.
    
    Fixes: 8b3cba987e6d ("bpftool: Add support for cgroup unix socket address hooks")
    Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Quentin Monnet <qmo@kernel.org>
    Link: https://lore.kernel.org/bpf/20240717134508.77488-1-donald.hunter@gmail.com

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-11-26 15:55:18 +01:00
Viktor Malik fda5f71432
bpftool: Mount bpffs when pinmaps path not under the bpffs
JIRA: https://issues.redhat.com/browse/RHEL-30774

commit da5f8fd1f0d393d5eaaba9ad8c22d1c26bb2bf9b
Author: Tao Chen <chen.dylane@gmail.com>
Date:   Tue Jul 2 21:11:50 2024 +0800

    bpftool: Mount bpffs when pinmaps path not under the bpffs
    
    As Quentin said [0], BPF map pinning will fail if the pinmaps path is not
    under the bpffs, like:
    
      libbpf: specified path /home/ubuntu/test/sock_ops_map is not on BPF FS
      Error: failed to pin all maps
    
      [0] https://github.com/libbpf/bpftool/issues/146
    
    Fixes: 3767a94b32 ("bpftool: add pinmaps argument to the load/loadall")
    Signed-off-by: Tao Chen <chen.dylane@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Quentin Monnet <qmo@kernel.org>
    Reviewed-by: Quentin Monnet <qmo@kernel.org>
    Link: https://lore.kernel.org/bpf/20240702131150.15622-1-chen.dylane@gmail.com

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-11-26 15:55:13 +01:00
Viktor Malik db5c5c9760
bpftool: Fix typo in error message
JIRA: https://issues.redhat.com/browse/RHEL-30773

commit 23cc4fe44f1df5ccce088a7c9398f96794047c2a
Author: Thorsten Blum <thorsten.blum@toblux.com>
Date:   Thu Apr 11 18:43:00 2024 +0200

    bpftool: Fix typo in error message
    
    s/at at/at a/
    
    Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Quentin Monnet <qmo@kernel.org>
    Link: https://lore.kernel.org/bpf/20240411164258.533063-3-thorsten.blum@toblux.com

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-11-11 07:44:46 +01:00
Viktor Malik a411de1c99
bpftool: Mount bpffs on provided dir instead of parent dir
JIRA: https://issues.redhat.com/browse/RHEL-30773

commit 478a535ae54ad3831371904d93b5dfc403222e17
Author: Sahil Siddiq <icegambit91@gmail.com>
Date:   Fri Apr 5 00:52:19 2024 +0530

    bpftool: Mount bpffs on provided dir instead of parent dir
    
    When pinning programs/objects under PATH (eg: during "bpftool prog
    loadall") the bpffs is mounted on the parent dir of PATH in the
    following situations:
    - the given dir exists but it is not bpffs.
    - the given dir doesn't exist and the parent dir is not bpffs.
    
    Mounting on the parent dir can also have the unintentional side-
    effect of hiding other files located under the parent dir.
    
    If the given dir exists but is not bpffs, then the bpffs should
    be mounted on the given dir and not its parent dir.
    
    Similarly, if the given dir doesn't exist and its parent dir is not
    bpffs, then the given dir should be created and the bpffs should be
    mounted on this new dir.
    
    Fixes: 2a36c26fe3b8 ("bpftool: Support bpffs mountpoint as pin path for prog loadall")
    Signed-off-by: Sahil Siddiq <icegambit91@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/2da44d24-74ae-a564-1764-afccf395eeec@isovalent.com/T/#t
    Link: https://lore.kernel.org/bpf/20240404192219.52373-1-icegambit91@gmail.com
    
    Closes: https://github.com/libbpf/bpftool/issues/100
    
    Changes since v1:
     - Split "mount_bpffs_for_pin" into two functions.
       This is done to improve maintainability and readability.
    
    Changes since v2:
    - mount_bpffs_for_pin: rename to "create_and_mount_bpffs_dir".
    - mount_bpffs_given_file: rename to "mount_bpffs_given_file".
    - create_and_mount_bpffs_dir:
      - introduce "dir_exists" boolean.
      - remove new dir if "mnt_fs" fails.
    - improve error handling and error messages.
    
    Changes since v3:
    - Rectify function name.
    - Improve error messages and formatting.
    - mount_bpffs_for_file:
      - Check if dir exists before block_mount check.
    
    Changes since v4:
    - Use strdup instead of strcpy.
    - create_and_mount_bpffs_dir:
      - Use S_IRWXU instead of 0700.
    - Improve error handling and formatting.

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-11-07 13:58:44 +01:00
Jerome Marchand 8f01f03e4f bpftool: Silence build warning about calloc()
JIRA: https://issues.redhat.com/browse/RHEL-23649

commit f5f30386c78105cba520e443a6a9ee945ec1d066
Author: Tiezhu Yang <yangtiezhu@loongson.cn>
Date:   Tue Jan 16 14:19:20 2024 +0800

    bpftool: Silence build warning about calloc()

    There exists the following warning when building bpftool:

      CC      prog.o
    prog.c: In function ‘profile_open_perf_events’:
    prog.c:2301:24: warning: ‘calloc’ sizes specified with ‘sizeof’ in the earlier argument and not in the later argument [-Wcalloc-transposed-args]
     2301 |                 sizeof(int), obj->rodata->num_cpu * obj->rodata->num_metric);
          |                        ^~~
    prog.c:2301:24: note: earlier argument should specify number of elements, later size of each element

    Tested with the latest upstream GCC which contains a new warning option
    -Wcalloc-transposed-args. The first argument to calloc is documented to
    be number of elements in array, while the second argument is size of each
    element, just switch the first and second arguments of calloc() to silence
    the build warning, compile tested only.

    Fixes: 47c09d6a9f ("bpftool: Introduce "prog profile" command")
    Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20240116061920.31172-1-yangtiezhu@loongson.cn
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2024-10-15 10:49:00 +02:00
Viktor Malik 8564f3863c
bpftool: mark orphaned programs during prog show
JIRA: https://issues.redhat.com/browse/RHEL-23644

commit 876843ce1e4897e8ceade50bfa3d9a4ec483abf3
Author: Stanislav Fomichev <sdf@google.com>
Date:   Mon Nov 27 10:20:56 2023 -0800

    bpftool: mark orphaned programs during prog show
    
    Commit ef01f4e25c17 ("bpf: restore the ebpf program ID for BPF_AUDIT_UNLOAD
    and PERF_BPF_EVENT_PROG_UNLOAD") stopped removing program's id from
    idr when the offloaded/bound netdev goes away. I was supposed to
    take a look and check in [0], but apparently I did not.
    
    Martin points out it might be useful to keep it that way for
    observability sake, but we at least need to mark those programs as
    unusable.
    
    Mark those programs as 'orphaned' and keep printing the list when
    we encounter ENODEV.
    
    0: unspec  tag 0000000000000000
            xlated 0B  not jited  memlock 4096B  orphaned
    
    [0]: https://lore.kernel.org/all/CAKH8qBtyR20ZWAc11z1-6pGb3Hd47AQUTbE_cfoktG59TqaJ7Q@mail.gmail.com/
    
    v3:
    * use two spaces for "  orphaned" (Quentin)
    
    Cc: netdev@vger.kernel.org
    Fixes: ef01f4e25c17 ("bpf: restore the ebpf program ID for BPF_AUDIT_UNLOAD and PERF_BPF_EVENT_PROG_UNLOAD")
    Signed-off-by: Stanislav Fomichev <sdf@google.com>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20231127182057.1081138-1-sdf@google.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2024-06-25 10:51:57 +02: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
Viktor Malik 484e6a1603
bpftool: Support bpffs mountpoint as pin path for prog loadall
JIRA: https://issues.redhat.com/browse/RHEL-9957

commit 2a36c26fe3b8e2cf39e15e80ba1abc889a75da4f
Author: Pengcheng Yang <yangpc@wangsu.com>
Date:   Sat May 6 11:07:19 2023 +0800

    bpftool: Support bpffs mountpoint as pin path for prog loadall
    
    Currently, when using prog loadall and the pin path is a bpffs mountpoint,
    bpffs will be repeatedly mounted to the parent directory of the bpffs
    mountpoint path. For example, a `bpftool prog loadall test.o /sys/fs/bpf`
    will trigger this.
    
    Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/1683342439-3677-1-git-send-email-yangpc@wangsu.com

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2023-10-12 11:41:06 +02:00
Artem Savkov c0e51e119e bpftool: Register struct_ops with a link.
Bugzilla: https://bugzilla.redhat.com/2221599

commit 0232b788978652571c4f4e57dc26ff8e4837926a
Author: Kui-Feng Lee <thinker.li@gmail.com>
Date:   Wed Apr 19 17:28:21 2023 -0700

    bpftool: Register struct_ops with a link.
    
    You can include an optional path after specifying the object name for the
    'struct_ops register' subcommand.
    
    Since the commit 226bc6ae6405 ("Merge branch 'Transit between BPF TCP
    congestion controls.'") has been accepted, it is now possible to create a
    link for a struct_ops. This can be done by defining a struct_ops in
    SEC(".struct_ops.link") to make libbpf returns a real link. If we don't pin
    the links before leaving bpftool, they will disappear. To instruct bpftool
    to pin the links in a directory with the names of the maps, we need to
    provide the path of that directory.
    
    Signed-off-by: Kui-Feng Lee <kuifeng@meta.com>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20230420002822.345222-1-kuifeng@meta.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-09-22 09:12:32 +02:00
Artem Savkov 4cad22f54a bpftool: Set program type only if it differs from the desired one
Bugzilla: https://bugzilla.redhat.com/2221599

commit b24f0b049e706c6fc6e822dfc519ee33c3865092
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Fri Apr 7 08:14:26 2023 +0000

    bpftool: Set program type only if it differs from the desired one
    
    After commit d6e6286a12e7 ("libbpf: disassociate section handler on explicit
    bpf_program__set_type() call"), bpf_program__set_type() will force cleanup
    the program's SEC() definition, this commit fixed the test helper but missed
    the bpftool, which leads to bpftool prog autoattach broken as follows:
    
      $ bpftool prog load spi-xfer-r1v1.o /sys/fs/bpf/test autoattach
      Program spi_xfer_r1v1 does not support autoattach, falling back to pinning
    
    This patch fix bpftool to set program type only if it differs.
    
    Fixes: d6e6286a12e7 ("libbpf: disassociate section handler on explicit bpf_program__set_type() call")
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20230407081427.2621590-1-weiyongjun@huaweicloud.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-09-22 09:12:27 +02:00
Artem Savkov 788b01ae0e bpftool: Support printing opcodes and source file references in CFG
Bugzilla: https://bugzilla.redhat.com/2221599

commit 7483a7a70a12d7c00c9f80574d533b01689d39a7
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Wed Apr 5 14:21:19 2023 +0100

    bpftool: Support printing opcodes and source file references in CFG
    
    Add support for displaying opcodes or/and file references (filepath,
    line and column numbers) when dumping the control flow graphs of loaded
    BPF programs with bpftool.
    
    The filepaths in the records are absolute. To avoid blocks on the graph
    to get too wide, we truncate them when they get too long (but we always
    keep the entire file name). In the unlikely case where the resulting
    file name is ambiguous, it remains possible to get the full path with a
    regular dump (no CFG).
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20230405132120.59886-7-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 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
Artem Savkov 14e208e7fd bpftool: Support inline annotations when dumping the CFG of a program
Bugzilla: https://bugzilla.redhat.com/2221599

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

    bpftool: Support inline annotations when dumping the CFG of a program
    
    We support dumping the control flow graph of loaded programs to the DOT
    format with bpftool, but so far this feature wouldn't display the source
    code lines available through BTF along with the eBPF bytecode. Let's add
    support for these annotations, to make it easier to read the graph.
    
    In prog.c, we move the call to dump_xlated_cfg() in order to pass and
    use the full struct dump_data, instead of creating a minimal one in
    draw_bb_node().
    
    We pass the pointer to this struct down to dump_xlated_for_graph() in
    xlated_dumper.c, where most of the logics is added. We deal with BTF
    mostly like we do for plain or JSON output, except that we cannot use a
    "nr_skip" value to skip a given number of linfo records (we don't
    process the BPF instructions linearly, and apart from the root of the
    graph we don't know how many records we should skip, so we just store
    the last linfo and make sure the new one we find is different before
    printing it).
    
    When printing the source instructions to the label of a DOT graph node,
    there are a few subtleties to address. We want some special newline
    markers, and there are some characters that we must escape. To deal with
    them, we introduce a new dedicated function btf_dump_linfo_dotlabel() in
    btf_dumper.c. We'll reuse this function in a later commit to format the
    filepath, line, and column references as well.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20230405132120.59886-4-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
Viktor Malik d152843a35 bpftool: Use bpf_{btf,link,map,prog}_get_info_by_fd()
Bugzilla: https://bugzilla.redhat.com/2178930

commit 38f0408ef756e738387f7d8f62b8d58ca5938da4
Author: Ilya Leoshkevich <iii@linux.ibm.com>
Date:   Wed Feb 15 00:12:16 2023 +0100

    bpftool: Use bpf_{btf,link,map,prog}_get_info_by_fd()
    
    Use the new type-safe wrappers around bpf_obj_get_info_by_fd().
    
    Split the bpf_obj_get_info_by_fd() call in build_btf_type_table() in
    two, since knowing the type helps with the Memory Sanitizer.
    
    Improve map_parse_fd_and_info() type safety by using
    struct bpf_map_info * instead of void * for info.
    
    Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20230214231221.249277-4-iii@linux.ibm.com

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2023-06-13 22:45:39 +02:00
Viktor Malik 2cba2a20a2 bpftool: profile online CPUs instead of possible
Bugzilla: https://bugzilla.redhat.com/2178930

commit 377c16fa3f3c60d21e4b05314c8be034ce37f2eb
Author: Tonghao Zhang <tong@infragraf.org>
Date:   Thu Feb 2 21:17:01 2023 +0800

    bpftool: profile online CPUs instead of possible
    
    The number of online cpu may be not equal to possible cpu.
    "bpftool prog profile" can not create pmu event on possible
    but on online cpu.
    
    $ dmidecode -s system-product-name
    PowerEdge R620
    $ cat /sys/devices/system/cpu/possible
    0-47
    $ cat /sys/devices/system/cpu/online
    0-31
    
    Disable cpu dynamically:
    $ echo 0 > /sys/devices/system/cpu/cpuX/online
    
    If one cpu is offline, perf_event_open will return ENODEV.
    To fix this issue:
    * check value returned and skip offline cpu.
    * close pmu_fd immediately on error path, avoid fd leaking.
    
    Fixes: 47c09d6a9f ("bpftool: Introduce "prog profile" command")
    Signed-off-by: Tonghao Zhang <tong@infragraf.org>
    Cc: Quentin Monnet <quentin@isovalent.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Andrii Nakryiko <andrii@kernel.org>
    Cc: Martin KaFai Lau <martin.lau@linux.dev>
    Cc: Song Liu <song@kernel.org>
    Cc: Yonghong Song <yhs@fb.com>
    Cc: John Fastabend <john.fastabend@gmail.com>
    Cc: KP Singh <kpsingh@kernel.org>
    Cc: Stanislav Fomichev <sdf@google.com>
    Cc: Hao Luo <haoluo@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/r/20230202131701.29519-1-tong@infragraf.org
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>

Signed-off-by: Viktor Malik <vmalik@redhat.com>
2023-06-13 22:45:22 +02:00
Jerome Marchand c0a58b3566 bpftool: clean-up usage of libbpf_get_error()
Bugzilla: https://bugzilla.redhat.com/2177177

commit d1313e01271d2d8f33d6c82f1afb77e820a3540d
Author: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
Date:   Sun Nov 20 11:26:32 2022 +0000

    bpftool: clean-up usage of libbpf_get_error()

    bpftool is now totally compliant with libbpf 1.0 mode and is not
    expected to be compiled with pre-1.0, let's clean-up the usage of
    libbpf_get_error().

    The changes stay aligned with returned errors always negative.

    - In tools/bpf/bpftool/btf.c This fixes an uninitialized local
    variable `err` in function do_dump() because it may now be returned
    without having been set.
    - This also removes the checks on NULL pointers before calling
    btf__free() because that function already does the check.

    Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
    Link: https://lore.kernel.org/r/20221120112515.38165-5-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 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 24d396b55c libbpf: Hashmap interface update to allow both long and void* keys/values
Bugzilla: https://bugzilla.redhat.com/2177177

Conflicts: Some minor changes due to missing commits 09b73fe9e3de
("perf smt: Compute SMT from topology") and f0c4b97a2927 ("perf test:
Add basic core_wide expression test").

commit c302378bc157f6a73b6cae4ca67f5f6aa931dcec
Author: Eduard Zingerman <eddyz87@gmail.com>
Date:   Wed Nov 9 16:26:09 2022 +0200

    libbpf: Hashmap interface update to allow both long and void* keys/values

    An update for libbpf's hashmap interface from void* -> void* to a
    polymorphic one, allowing both long and void* keys and values.

    This simplifies many use cases in libbpf as hashmaps there are mostly
    integer to integer.

    Perf copies hashmap implementation from libbpf and has to be
    updated as well.

    Changes to libbpf, selftests/bpf and perf are packed as a single
    commit to avoid compilation issues with any future bisect.

    Polymorphic interface is acheived by hiding hashmap interface
    functions behind auxiliary macros that take care of necessary
    type casts, for example:

        #define hashmap_cast_ptr(p)                                         \
            ({                                                              \
                    _Static_assert((p) == NULL || sizeof(*(p)) == sizeof(long),\
                                   #p " pointee should be a long-sized integer or a pointer"); \
                    (long *)(p);                                            \
            })

        bool hashmap_find(const struct hashmap *map, long key, long *value);

        #define hashmap__find(map, key, value) \
                    hashmap_find((map), (long)(key), hashmap_cast_ptr(value))

    - hashmap__find macro casts key and value parameters to long
      and long* respectively
    - hashmap_cast_ptr ensures that value pointer points to a memory
      of appropriate size.

    This hack was suggested by Andrii Nakryiko in [1].
    This is a follow up for [2].

    [1] https://lore.kernel.org/bpf/CAEf4BzZ8KFneEJxFAaNCCFPGqp20hSpS2aCj76uRk3-qZUH5xg@mail.gmail.com/
    [2] https://lore.kernel.org/bpf/af1facf9-7bc8-8a3d-0db4-7b3f333589a2@meta.com/T/#m65b28f1d6d969fcd318b556db6a3ad499a42607d

    Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20221109142611.879983-2-eddyz87@gmail.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:43:02 +02:00
Jerome Marchand cf1ae9f9e0 bpftool: Support setting alternative arch for JIT disasm with LLVM
Bugzilla: https://bugzilla.redhat.com/2177177

commit ce4f660862359f2172ff4e3df30e641df5475cf6
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:28 2022 +0100

    bpftool: Support setting alternative arch for JIT disasm with LLVM

    For offloaded BPF programs, instead of failing to create the
    LLVM disassembler without even looking for a triple at all, do run the
    function that attempts to retrieve a valid architecture name for the
    device.

    It will still fail for the LLVM disassembler, because currently we have
    no valid triple to return (NFP disassembly is not supported by LLVM).
    But failing in that function is more logical than to assume in
    jit_disasm.c that passing an "arch" name is simply not supported.

    Suggested-by: Song Liu <song@kernel.org>
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20221025150329.97371-8-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:56 +02:00
Jerome Marchand f083571145 bpftool: Remove asserts from JIT disassembler
Bugzilla: https://bugzilla.redhat.com/2177177

commit 55b4de58d0e2aca810ed2b198a0173640300acf8
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:23 2022 +0100

    bpftool: Remove asserts from JIT disassembler

    The JIT disassembler in bpftool is the only components (with the JSON
    writer) using asserts to check the return values of functions. But it
    does not do so in a consistent way, and diasm_print_insn() returns no
    value, although sometimes the operation failed.

    Remove the asserts, and instead check the return values, print messages
    on errors, and propagate the error to the caller from prog.c.

    Remove the inclusion of assert.h from jit_disasm.c, and also from map.c
    where it is unused.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Tested-by: Niklas Söderlund <niklas.soderlund@corigine.com>
    Acked-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20221025150329.97371-3-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:55 +02:00
Jerome Marchand bbd94960ae bpftool: Define _GNU_SOURCE only once
Bugzilla: https://bugzilla.redhat.com/2177177

commit b3d84af7cdfc079ef86d94f7cf125821559925fa
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:22 2022 +0100

    bpftool: Define _GNU_SOURCE only once

    _GNU_SOURCE is defined in several source files for bpftool, but only one
    of them takes the precaution of checking whether the value is already
    defined. Add #ifndef for other occurrences too.

    This is in preparation for the support of disassembling JIT-ed programs
    with LLVM, with $(llvm-config --cflags) passing -D_GNU_SOURCE as a
    compilation argument.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Tested-by: Niklas Söderlund <niklas.soderlund@corigine.com>
    Acked-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20221025150329.97371-2-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:55 +02:00
Jerome Marchand 258f3a1d91 bpftool: Add autoattach for bpf prog load|loadall
Bugzilla: https://bugzilla.redhat.com/2177177

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

    bpftool: Add autoattach for bpf prog load|loadall

    Add autoattach optional to support one-step load-attach-pin_link.

    For example,
       $ bpftool prog loadall test.o /sys/fs/bpf/test autoattach

       $ bpftool link
       26: tracing  name test1  tag f0da7d0058c00236  gpl
       	loaded_at 2022-09-09T21:39:49+0800  uid 0
       	xlated 88B  jited 55B  memlock 4096B  map_ids 3
       	btf_id 55
       28: kprobe  name test3  tag 002ef1bef0723833  gpl
       	loaded_at 2022-09-09T21:39:49+0800  uid 0
       	xlated 88B  jited 56B  memlock 4096B  map_ids 3
       	btf_id 55
       57: tracepoint  name oncpu  tag 7aa55dfbdcb78941  gpl
       	loaded_at 2022-09-09T21:41:32+0800  uid 0
       	xlated 456B  jited 265B  memlock 4096B  map_ids 17,13,14,15
       	btf_id 82

       $ bpftool link
       1: tracing  prog 26
       	prog_type tracing  attach_type trace_fentry
       3: perf_event  prog 28
       10: perf_event  prog 57

    The autoattach optional can support tracepoints, k(ret)probes,
    u(ret)probes.

    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Signed-off-by: Wang Yufen <wangyufen@huawei.com>
    Link: https://lore.kernel.org/r/1665736275-28143-2-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 22cd1495d3 bpftool: Replace sizeof(arr)/sizeof(arr[0]) with ARRAY_SIZE macro
Bugzilla: https://bugzilla.redhat.com/2137876

commit 5eff8c18f124e47da0be79fb2b776e1c2cac0b07
Author: Rongguang Wei <weirongguang@kylinos.cn>
Date:   Tue Jul 26 17:30:45 2022 +0800

    bpftool: Replace sizeof(arr)/sizeof(arr[0]) with ARRAY_SIZE macro
    
    Use the ARRAY_SIZE macro and make the code more compact.
    
    Signed-off-by: Rongguang Wei <weirongguang@kylinos.cn>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20220726093045.3374026-1-clementwei90@163.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:44 +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
Artem Savkov ea100e07ed bpftool: Use libbpf_bpf_prog_type_str
Bugzilla: https://bugzilla.redhat.com/2137876

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

    bpftool: Use libbpf_bpf_prog_type_str
    
    This change switches bpftool over to using the recently introduced
    libbpf_bpf_prog_type_str function instead of maintaining its own string
    representation for the bpf_prog_type enum.
    
    Signed-off-by: Daniel Müller <deso@posteo.net>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20220523230428.3077108-4-deso@posteo.net

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:28 +01:00
Yauheni Kaliuta 002bc665cb Revert "bpftool: Use libbpf 1.0 API mode instead of RLIMIT_MEMLOCK"
Bugzilla: https://bugzilla.redhat.com/2120968

commit 6b4384ff108874cf336fe2fb1633313c2c7620bf
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jun 10 12:26:47 2022 +0100

    Revert "bpftool: Use libbpf 1.0 API mode instead of RLIMIT_MEMLOCK"
    
    This reverts commit a777e18f1bcd32528ff5dfd10a6629b655b05eb8.
    
    In commit a777e18f1bcd ("bpftool: Use libbpf 1.0 API mode instead of
    RLIMIT_MEMLOCK"), we removed the rlimit bump in bpftool, because the
    kernel has switched to memcg-based memory accounting. Thanks to the
    LIBBPF_STRICT_AUTO_RLIMIT_MEMLOCK, we attempted to keep compatibility
    with other systems and ask libbpf to raise the limit for us if
    necessary.
    
    How do we know if memcg-based accounting is supported? There is a probe
    in libbpf to check this. But this probe currently relies on the
    availability of a given BPF helper, bpf_ktime_get_coarse_ns(), which
    landed in the same kernel version as the memory accounting change. This
    works in the generic case, but it may fail, for example, if the helper
    function has been backported to an older kernel. This has been observed
    for Google Cloud's Container-Optimized OS (COS), where the helper is
    available but rlimit is still in use. The probe succeeds, the rlimit is
    not raised, and probing features with bpftool, for example, fails.
    
    A patch was submitted [0] to update this probe in libbpf, based on what
    the cilium/ebpf Go library does [1]. It would lower the soft rlimit to
    0, attempt to load a BPF object, and reset the rlimit. But it may induce
    some hard-to-debug flakiness if another process starts, or the current
    application is killed, while the rlimit is reduced, and the approach was
    discarded.
    
    As a workaround to ensure that the rlimit bump does not depend on the
    availability of a given helper, we restore the unconditional rlimit bump
    in bpftool for now.
    
      [0] https://lore.kernel.org/bpf/20220609143614.97837-1-quentin@isovalent.com/
      [1] https://github.com/cilium/ebpf/blob/v0.9.0/rlimit/rlimit.go#L39
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Yafang Shao <laoar.shao@gmail.com>
    Cc: Stanislav Fomichev <sdf@google.com>
    Link: https://lore.kernel.org/bpf/20220610112648.29695-2-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:07 +02:00
Yauheni Kaliuta 24ef9e29c2 bpftool: Use libbpf 1.0 API mode instead of RLIMIT_MEMLOCK
Bugzilla: https://bugzilla.redhat.com/2120968

commit a777e18f1bcd32528ff5dfd10a6629b655b05eb8
Author: Yafang Shao <laoar.shao@gmail.com>
Date:   Sat Apr 9 12:59:57 2022 +0000

    bpftool: Use libbpf 1.0 API mode instead of RLIMIT_MEMLOCK
    
    We have switched to memcg-based memory accouting and thus the rlimit is
    not needed any more. LIBBPF_STRICT_AUTO_RLIMIT_MEMLOCK was introduced in
    libbpf for backward compatibility, so we can use it instead now.
    
    libbpf_set_strict_mode always return 0, so we don't need to check whether
    the return value is 0 or not.
    
    Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220409125958.92629-4-laoar.shao@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-28 16:48:58 +02:00
Yauheni Kaliuta d39f2cbbf4 bpftool: Add syscall prog type
Bugzilla: https://bugzilla.redhat.com/2120968

commit 380341637ebb41f56031a0fd0779e85413a1da59
Author: Milan Landaverde <milan@mdaverde.com>
Date:   Thu Mar 31 11:45:53 2022 -0400

    bpftool: Add syscall prog type
    
    In addition to displaying the program type in bpftool prog show
    this enables us to be able to query bpf_prog_type_syscall
    availability through feature probe as well as see
    which helpers are available in those programs (such as
    bpf_sys_bpf and bpf_sys_close)
    
    Signed-off-by: Milan Landaverde <milan@mdaverde.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20220331154555.422506-2-milan@mdaverde.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-28 16:48:56 +02:00
Jerome Marchand 6555d9a912 bpftool: Ensure bytes_memlock json output is correct
Bugzilla: https://bugzilla.redhat.com/2120966

commit 357b3cc3c0467b2f7cd6c4a87f7a18bfd779ce5b
Author: Chris J Arges <carges@cloudflare.com>
Date:   Wed Mar 9 15:41:58 2022 -0600

    bpftool: Ensure bytes_memlock json output is correct

    If a BPF map is created over 2^32 the memlock value as displayed in JSON
    format will be incorrect. Use atoll instead of atoi so that the correct
    number is displayed.

      ```
      $ bpftool map create /sys/fs/bpf/test_bpfmap type hash key 4 \
        value 1024 entries 4194304 name test_bpfmap
      $ bpftool map list
      1: hash  name test_bpfmap  flags 0x0
              key 4B  value 1024B  max_entries 4194304  memlock 4328521728B
      $ sudo bpftool map list -j | jq .[].bytes_memlock
      33554432
      ```

    Signed-off-by: Chris J Arges <carges@cloudflare.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/b6601087-0b11-33cc-904a-1133d1500a10@cloudflare.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:58:02 +02:00
Jerome Marchand 7f2f400116 bpftool: Migrate from bpf_prog_test_run_xattr
Bugzilla: https://bugzilla.redhat.com/2120966

commit 9cce53138dd9ee8bd7354196297df24130f3529d
Author: Delyan Kratunov <delyank@fb.com>
Date:   Wed Feb 2 15:54:22 2022 -0800

    bpftool: Migrate from bpf_prog_test_run_xattr

    bpf_prog_test_run is being deprecated in favor of the OPTS-based
    bpf_prog_test_run_opts.

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

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:57:55 +02:00
Jerome Marchand 8aff886903 bpftool: Remove usage of reallocarray()
Bugzilla: https://bugzilla.redhat.com/2120966

commit a19df7139440258e02126f1c795ba64932a8e949
Author: Mauricio Vásquez <mauricio@kinvolk.io>
Date:   Mon Feb 21 07:56:17 2022 -0500

    bpftool: Remove usage of reallocarray()

    This commit fixes a compilation error on systems with glibc < 2.26 [0]:

    ```
    In file included from main.h:14:0,
                     from gen.c:24:
    linux/tools/include/tools/libc_compat.h:11:21: error: attempt to use poisoned "reallocarray"
     static inline void *reallocarray(void *ptr, size_t nmemb, size_t size)
    ```

    This happens because gen.c pulls <bpf/libbpf_internal.h>, and then
    <tools/libc_compat.h> (through main.h). When
    COMPAT_NEED_REALLOCARRAY is set, libc_compat.h defines reallocarray()
    which libbpf_internal.h poisons with a GCC pragma.

    This commit reuses libbpf_reallocarray() implemented in commit
    029258d7b2 ("libbpf: Remove any use of reallocarray() in libbpf").

    v1 -> v2:
    - reuse libbpf_reallocarray() instead of reimplementing it

    Fixes: a9caaba399f9 ("bpftool: Implement "gen min_core_btf" logic")
    Reported-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Mauricio Vásquez <mauricio@kinvolk.io>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20220221125617.39610-1-mauricio@kinvolk.io

    [0]: https://lore.kernel.org/bpf/3bf2bd49-9f2d-a2df-5536-bc0dde70a83b@isovalent.com/

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:57:51 +02:00
Jerome Marchand 0b09f05340 bpftool: use preferred setters/getters instead of deprecated ones
Bugzilla: https://bugzilla.redhat.com/2120966

commit 39748db1d6bc12b9f749a0aebe7ec71b00bd60eb
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Mon Jan 24 11:42:51 2022 -0800

    bpftool: use preferred setters/getters instead of deprecated ones

    Use bpf_program__type() instead of discouraged bpf_program__get_type().
    Also switch to bpf_map__set_max_entries() instead of bpf_map__resize().

    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220124194254.2051434-5-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:57:43 +02:00
Jerome Marchand 8e560069b1 bpftool: Adding support for BTF program names
Bugzilla: https://bugzilla.redhat.com/2120966

commit b662000aff84f2ca9660db15e5f8ac926681df27
Author: Raman Shukhau <ramasha@fb.com>
Date:   Wed Jan 19 02:02:55 2022 -0800

    bpftool: Adding support for BTF program names

    `bpftool prog list` and other bpftool subcommands that show
    BPF program names currently get them from bpf_prog_info.name.
    That field is limited to 16 (BPF_OBJ_NAME_LEN) chars which leads
    to truncated names since many progs have much longer names.

    The idea of this change is to improve all bpftool commands that
    output prog name so that bpftool uses info from BTF to print
    program names if available.

    It tries bpf_prog_info.name first and fall back to btf only if
    the name is suspected to be truncated (has 15 chars length).

    Right now `bpftool p show id <id>` returns capped prog name

    <id>: kprobe  name example_cap_cap  tag 712e...
    ...

    With this change it would return

    <id>: kprobe  name example_cap_capable  tag 712e...
    ...

    Note, other commands that print prog names (e.g. "bpftool
    cgroup tree") are also addressed in this change.

    Signed-off-by: Raman Shukhau <ramasha@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220119100255.1068997-1-ramasha@fb.com

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:57:40 +02:00
Artem Savkov bba63c6329 libbpf 1.0: Deprecate bpf_map__is_offload_neutral()
Bugzilla: https://bugzilla.redhat.com/2069046

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

commit 9855c131b9c8b0327ff5182f88bb1991f212415b
Author: Christy Lee <christylee@fb.com>
Date:   Tue Jan 4 16:06:01 2022 -0800

    libbpf 1.0: Deprecate bpf_map__is_offload_neutral()

    Deprecate bpf_map__is_offload_neutral(). It’s most probably broken
    already. PERF_EVENT_ARRAY isn’t the only map that’s not suitable
    for hardware offloading. Applications can directly check map type
    instead.

      [0] Closes: https://github.com/libbpf/libbpf/issues/306

    Signed-off-by: Christy Lee <christylee@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220105000601.2090044-1-christylee@fb.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:53 +02:00
Artem Savkov b51d8e947e bpftool: Switch bpf_object__load_xattr() to bpf_object__load()
Bugzilla: https://bugzilla.redhat.com/2069046

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

commit b59e4ce8bcaab6445f4a0d37a96ca8953caaf5cf
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Dec 9 11:38:40 2021 -0800

    bpftool: Switch bpf_object__load_xattr() to bpf_object__load()

    Switch all the uses of to-be-deprecated bpf_object__load_xattr() into
    a simple bpf_object__load() calls with optional log_level passed through
    open_opts.kernel_log_level, if -d option is specified.

    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20211209193840.1248570-13-andrii@kernel.org

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:46 +02:00
Artem Savkov af1bb73160 bpftool: Add debug mode for gen_loader.
Bugzilla: https://bugzilla.redhat.com/2069046

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

commit 942df4dc5ea159100466f198d8687a49c2359ca3
Author: Alexei Starovoitov <ast@kernel.org>
Date:   Sat Dec 4 11:46:23 2021 -0800

    bpftool: Add debug mode for gen_loader.

    Make -d flag functional for gen_loader style program loading.

    For example:
    $ bpftool prog load -L -d test_d_path.o
    ... // will print:
    libbpf: loading ./test_d_path.o
    libbpf: elf: section(3) fentry/security_inode_getattr, size 280, link 0, flags 6, type=1
    ...
    libbpf: prog 'prog_close': found data map 0 (test_d_p.bss, sec 7, off 0) for insn 30
    libbpf: gen: load_btf: size 5376
    libbpf: gen: map_create: test_d_p.bss idx 0 type 2 value_type_id 118
    libbpf: map 'test_d_p.bss': created successfully, fd=0
    libbpf: gen: map_update_elem: idx 0
    libbpf: sec 'fentry/filp_close': found 1 CO-RE relocations
    libbpf: record_relo_core: prog 1 insn[15] struct file 0:1 final insn_idx 15
    libbpf: gen: prog_load: type 26 insns_cnt 35 progi_idx 0
    libbpf: gen: find_attach_tgt security_inode_getattr 12
    libbpf: gen: prog_load: type 26 insns_cnt 37 progi_idx 1
    libbpf: gen: find_attach_tgt filp_close 12
    libbpf: gen: finish 0
    ... // at this point libbpf finished generating loader program
       0: (bf) r6 = r1
       1: (bf) r1 = r10
       2: (07) r1 += -136
       3: (b7) r2 = 136
       4: (b7) r3 = 0
       5: (85) call bpf_probe_read_kernel#113
       6: (05) goto pc+104
    ... // this is the assembly dump of the loader program
     390: (63) *(u32 *)(r6 +44) = r0
     391: (18) r1 = map[idx:0]+5584
     393: (61) r0 = *(u32 *)(r1 +0)
     394: (63) *(u32 *)(r6 +24) = r0
     395: (b7) r0 = 0
     396: (95) exit
    err 0  // the loader program was loaded and executed successfully
    (null)
    func#0 @0
    ...  // CO-RE in the kernel logs:
    CO-RE relocating STRUCT file: found target candidate [500]
    prog '': relo #0: kind <byte_off> (0), spec is [8] STRUCT file.f_path (0:1 @ offset 16)
    prog '': relo #0: matching candidate #0 [500] STRUCT file.f_path (0:1 @ offset 16)
    prog '': relo #0: patched insn #15 (ALU/ALU64) imm 16 -> 16
    vmlinux_cand_cache:[11]file(500),
    module_cand_cache:
    ... // verifier logs when it was checking test_d_path.o program:
    R1 type=ctx expected=fp
    0: R1=ctx(id=0,off=0,imm=0) R10=fp0
    ; int BPF_PROG(prog_close, struct file *file, void *id)
    0: (79) r6 = *(u64 *)(r1 +0)
    func 'filp_close' arg0 has btf_id 500 type STRUCT 'file'
    1: R1=ctx(id=0,off=0,imm=0) R6_w=ptr_file(id=0,off=0,imm=0) R10=fp0
    ; pid_t pid = bpf_get_current_pid_tgid() >> 32;
    1: (85) call bpf_get_current_pid_tgid#14

    ... // if there are multiple programs being loaded by the loader program
    ... // only the last program in the elf file will be printed, since
    ... // the same verifier log_buf is used for all PROG_LOAD commands.

    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211204194623.27779-1-alexei.starovoitov@gmail.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:45 +02:00
Artem Savkov 6c5210646e bpftool: Fix memory leak in prog_dump()
Bugzilla: https://bugzilla.redhat.com/2069046

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

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

    bpftool: Fix memory leak in prog_dump()

    Following the extraction of prog_dump() from do_dump(), the struct btf
    allocated in prog_dump() is no longer freed on error; the struct
    bpf_prog_linfo is not freed at all. Make sure we release them before
    exiting the function.

    Fixes: ec2025095c ("bpftool: Match several programs with same tag")
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211110114632.24537-2-quentin@isovalent.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:37 +02:00
Artem Savkov e3c0ae0ea8 bpftool: Use bpf_obj_get_info_by_fd directly
Bugzilla: https://bugzilla.redhat.com/2069046

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

commit c59765cfd193382b00454b1a4424cb78d4c065e2
Author: Dave Marchevsky <davemarchevsky@fb.com>
Date:   Mon Nov 1 15:43:55 2021 -0700

    bpftool: Use bpf_obj_get_info_by_fd directly

    To prepare for impending deprecation of libbpf's
    bpf_program__get_prog_info_linear, migrate uses of this function to use
    bpf_obj_get_info_by_fd.

    Since the profile_target_name and dump_prog_id_as_func_ptr helpers were
    only looking at the first func_info, avoid grabbing the rest to save a
    malloc. For do_dump, add a more full-featured helper, but avoid
    free/realloc of buffer when possible for multi-prog dumps.

    Signed-off-by: Dave Marchevsky <davemarchevsky@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20211101224357.2651181-3-davemarchevsky@fb.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:32 +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
Yauheni Kaliuta 11cec39963 bpftool: Fix error check when calling hashmap__new()
Bugzilla: http://bugzilla.redhat.com/2069045

commit 622a5b582cc27d3deedc38fcef68da2972e8e58d
Author: Mauricio Vásquez <mauricio@kinvolk.io>
Date:   Fri Jan 7 10:26:20 2022 -0500

    bpftool: Fix error check when calling hashmap__new()
    
    hashmap__new() encodes errors with ERR_PTR(), hence it's not valid to
    check the returned pointer against NULL and IS_ERR() has to be used
    instead.
    
    libbpf_get_error() can't be used in this case as hashmap__new() is not
    part of the public libbpf API and it'll continue using ERR_PTR() after
    libbpf 1.0.
    
    Fixes: 8f184732b60b ("bpftool: Switch to libbpf's hashmap for pinned paths of BPF objects")
    Fixes: 2828d0d75b73 ("bpftool: Switch to libbpf's hashmap for programs/maps in BTF listing")
    Fixes: d6699f8e0f83 ("bpftool: Switch to libbpf's hashmap for PIDs/names references")
    Signed-off-by: Mauricio Vásquez <mauricio@kinvolk.io>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20220107152620.192327-2-mauricio@kinvolk.io

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:53 +03:00
Yauheni Kaliuta 765bcf6418 bpftool: Switch to libbpf's hashmap for PIDs/names references
Bugzilla: http://bugzilla.redhat.com/2069045

commit d6699f8e0f834b40db35466f704705ae757be11a
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Sat Oct 23 21:51:54 2021 +0100

    bpftool: Switch to libbpf's hashmap for PIDs/names references
    
    In order to show PIDs and names for processes holding references to BPF
    programs, maps, links, or BTF objects, bpftool creates hash maps to
    store all relevant information. This commit is part of a set that
    transitions from the kernel's hash map implementation to the one coming
    with libbpf.
    
    The motivation is to make bpftool less dependent of kernel headers, to
    ease the path to a potential out-of-tree mirror, like libbpf has.
    
    This is the third and final step of the transition, in which we convert
    the hash maps used for storing the information about the processes
    holding references to BPF objects (programs, maps, links, BTF), and at
    last we drop the inclusion of tools/include/linux/hashtable.h.
    
    Note: Checkpatch complains about the use of __weak declarations, and the
    missing empty lines after the bunch of empty function declarations when
    compiling without the BPF skeletons (none of these were introduced in
    this patch). We want to keep things as they are, and the reports should
    be safe to ignore.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211023205154.6710-6-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:46 +03:00
Yauheni Kaliuta abac33d1f9 bpftool: Switch to libbpf's hashmap for pinned paths of BPF objects
Bugzilla: http://bugzilla.redhat.com/2069045

commit 8f184732b60b74a8f8ba0d9a5c248bf611b1ebba
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Sat Oct 23 21:51:52 2021 +0100

    bpftool: Switch to libbpf's hashmap for pinned paths of BPF objects
    
    In order to show pinned paths for BPF programs, maps, or links when
    listing them with the "-f" option, bpftool creates hash maps to store
    all relevant paths under the bpffs. So far, it would rely on the
    kernel implementation (from tools/include/linux/hashtable.h).
    
    We can make bpftool rely on libbpf's implementation instead. The
    motivation is to make bpftool less dependent of kernel headers, to ease
    the path to a potential out-of-tree mirror, like libbpf has.
    
    This commit is the first step of the conversion: the hash maps for
    pinned paths for programs, maps, and links are converted to libbpf's
    hashmap.{c,h}. Other hash maps used for the PIDs of process holding
    references to BPF objects are left unchanged for now. On the build side,
    this requires adding a dependency to a second header internal to libbpf,
    and making it a dependency for the bootstrap bpftool version as well.
    The rest of the changes are a rather straightforward conversion.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211023205154.6710-4-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:46 +03:00
Yauheni Kaliuta a947303109 bpftool: Do not expose and init hash maps for pinned path in main.c
Bugzilla: http://bugzilla.redhat.com/2069045

commit 46241271d18f3ae095b7ec3d9d136d8f4e28e025
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Sat Oct 23 21:51:51 2021 +0100

    bpftool: Do not expose and init hash maps for pinned path in main.c
    
    BPF programs, maps, and links, can all be listed with their pinned paths
    by bpftool, when the "-f" option is provided. To do so, bpftool builds
    hash maps containing all pinned paths for each kind of objects.
    
    These three hash maps are always initialised in main.c, and exposed
    through main.h. There appear to be no particular reason to do so: we can
    just as well make them static to the files that need them (prog.c,
    map.c, and link.c respectively), and initialise them only when we want
    to show objects and the "-f" switch is provided.
    
    This may prevent unnecessary memory allocations if the implementation of
    the hash maps was to change in the future.
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211023205154.6710-3-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:46 +03:00
Yauheni Kaliuta 13ef58e1c8 bpftool: Avoid leaking the JSON writer prepared for program metadata
Bugzilla: http://bugzilla.redhat.com/2069045

commit e89ef634f81c9d90e1824ab183721f3b361472e6
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Oct 22 10:47:43 2021 +0100

    bpftool: Avoid leaking the JSON writer prepared for program metadata
    
    Bpftool creates a new JSON object for writing program metadata in plain
    text mode, regardless of metadata being present or not. Then this writer
    is freed if any metadata has been found and printed, but it leaks
    otherwise. We cannot destroy the object unconditionally, because the
    destructor prints an undesirable line break. Instead, make sure the
    writer is created only after we have found program metadata to print.
    
    Found with valgrind.
    
    Fixes: aff52e685e ("bpftool: Support dumping metadata")
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211022094743.11052-1-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:45 +03:00
Yauheni Kaliuta f1e442bf06 bpftool: Remove unused includes to <bpf/bpf_gen_internal.h>
Bugzilla: http://bugzilla.redhat.com/2069045

commit c66a248f1950d41502fb67624147281d9de0e868
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Thu Oct 7 20:44:28 2021 +0100

    bpftool: Remove unused includes to <bpf/bpf_gen_internal.h>
    
    It seems that the header file was never necessary to compile bpftool,
    and it is not part of the headers exported from libbpf. Let's remove the
    includes from prog.c and gen.c.
    
    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/20211007194438.34443-3-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:40 +03:00
Yauheni Kaliuta aa580f2f50 selftests/bpf: Switch to new bpf_object__next_{map,program} APIs
Bugzilla: http://bugzilla.redhat.com/2069045

commit 6f2b219b62a4376ca2da15c503de79d0650c8155
Author: Hengqi Chen <hengqi.chen@gmail.com>
Date:   Mon Oct 4 00:58:44 2021 +0800

    selftests/bpf: Switch to new bpf_object__next_{map,program} APIs
    
    Replace deprecated bpf_{map,program}__next APIs with newly added
    bpf_object__next_{map,program} APIs, so that no compilation warnings
    emit.
    
    Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Song Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20211003165844.4054931-3-hengqi.chen@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-06-03 17:23:39 +03: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 b1eab37952 tools: bpftool: Update and synchronise option list in doc and help msg
Bugzilla: http://bugzilla.redhat.com/2041365

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

    tools: bpftool: Update and synchronise option list in doc and help msg

    All bpftool commands support the options for JSON output and debug from
    libbpf. In addition, some commands support additional options
    corresponding to specific use cases.

    The list of options described in the man pages for the different
    commands are not always accurate. The messages for interactive help are
    mostly limited to HELP_SPEC_OPTIONS, and are even less representative of
    the actual set of options supported for the commands.

    Let's update the lists:

    - HELP_SPEC_OPTIONS is modified to contain the "default" options (JSON
      and debug), and to be extensible (no ending curly bracket).
    - All commands use HELP_SPEC_OPTIONS in their help message, and then
      complete the list with their specific options.
    - The lists of options in the man pages are updated.
    - The formatting of the list for bpftool.rst is adjusted to match
      formatting for the other man pages. This is for consistency, and also
      because it will be helpful in a future patch to automatically check
      that the files are synchronised.

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

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-04-29 18:14:37 +02:00