Commit Graph

17 Commits

Author SHA1 Message Date
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
Artem Savkov a80e4af486 bpftool: Wrap struct_ops dump in an array
JIRA: https://issues.redhat.com/browse/RHEL-23643

commit 6bd5e167af2e9d1aa79e4a1a2598abcdc8fafd59
Author: Manu Bretelle <chantr4@gmail.com>
Date:   Wed Oct 18 16:01:33 2023 -0700

    bpftool: Wrap struct_ops dump in an array
    
    When dumping a struct_ops, 2 dictionaries are emitted.
    
    When using `name`, they were already wrapped in an array, but not when
    using `id`. Causing `jq` to fail at parsing the payload as it reached
    the comma following the first dict.
    
    This change wraps those dictionaries in an array so valid json is emitted.
    
    Before, jq fails to parse the output:
    ```
     $ sudo bpftool struct_ops dump id 1523612 | jq . > /dev/null
    parse error: Expected value before ',' at line 19, column 2
    ```
    
    After, no error parsing the output:
    ```
    sudo ./bpftool  struct_ops dump id 1523612 | jq . > /dev/null
    ```
    
    Signed-off-by: Manu Bretelle <chantr4@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Eduard Zingerman <eddyz87@gmail.com>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/bpf/20231018230133.1593152-3-chantr4@gmail.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2024-03-27 10:27:54 +01: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
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
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 cddf117a0e bpftool: fix error message when function can't register struct_ops
Bugzilla: https://bugzilla.redhat.com/2177177

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

    bpftool: fix error message when function can't register struct_ops

    It is expected that errno be passed to strerror(). This also cleans
    this part of code from using libbpf_get_error().

    Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
    Acked-by: Yonghong Song <yhs@fb.com>
    Suggested-by: Quentin Monnet <quentin@isovalent.com>
    Reviewed-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20221120112515.38165-4-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 e45154fa31 bpftool: replace return value PTR_ERR(NULL) with 0
Bugzilla: https://bugzilla.redhat.com/2177177

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

    bpftool: replace return value PTR_ERR(NULL) with 0

    There is no reasons to keep PTR_ERR() when kern_btf=NULL, let's just
    return 0.
    This also cleans this part of code from using libbpf_get_error().

    Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
    Acked-by: Yonghong Song <yhs@fb.com>
    Suggested-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20221120112515.38165-3-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 3b2c47f45c bpftool: Stop using bpf_map__def() API
Bugzilla: https://bugzilla.redhat.com/2120966

commit 3c28919f0652a1952333b88e1af5ce408fafe238
Author: Christy Lee <christylee@fb.com>
Date:   Fri Jan 7 16:42:15 2022 -0800

    bpftool: Stop using bpf_map__def() API

    libbpf bpf_map__def() API is being deprecated, replace bpftool's
    usage with the appropriate getters and setters

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

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-10-25 14:57:39 +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 4638817e0a bpftool: Use libbpf_get_error() to check error
Bugzilla: https://bugzilla.redhat.com/2069046

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

commit e5043894b21f7d99d3db31ad06308d6c5726caa6
Author: Hengqi Chen <hengqi.chen@gmail.com>
Date:   Mon Nov 15 09:24:36 2021 +0800

    bpftool: Use libbpf_get_error() to check error

    Currently, LIBBPF_STRICT_ALL mode is enabled by default for
    bpftool which means on error cases, some libbpf APIs would
    return NULL pointers. This makes IS_ERR check failed to detect
    such cases and result in segfault error. Use libbpf_get_error()
    instead like we do in libbpf itself.

    Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20211115012436.3143318-1-hengqi.chen@gmail.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:37 +02:00
Artem Savkov 5d463445b3 bpftool: Migrate -1 err checks of libbpf fn calls
Bugzilla: https://bugzilla.redhat.com/2069046

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

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

    bpftool: Migrate -1 err checks of libbpf fn calls

    Per [0], callers of libbpf functions with LIBBPF_STRICT_DIRECT_ERRS set
    should handle negative error codes of various values (e.g. -EINVAL).
    Migrate two callsites which were explicitly checking for -1 only to
    handle the new scheme.

      [0]: https://github.com/libbpf/libbpf/wiki/Libbpf-1.0-migration-guide#direct-error-code-returning-libbpf_strict_direct_errs

    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-2-davemarchevsky@fb.com

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2022-08-24 12:53:32 +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
Quentin Monnet 90040351a8 tools, bpftool: Clean subcommand help messages
This is a clean-up for the formatting of the do_help functions for
bpftool's subcommands. The following fixes are included:

- Do not use argv[-2] for "iter" help message, as the help is shown by
  default if no "iter" action is selected, resulting in messages looking
  like "./bpftool bpftool pin...".

- Do not print unused HELP_SPEC_PROGRAM in help message for "bpftool
  link".

- Andrii used argument indexing to avoid having multiple occurrences of
  bin_name and argv[-2] in the fprintf() for the help message, for
  "bpftool gen" and "bpftool link". Let's reuse this for all other help
  functions. We can remove up to thirty arguments for the "bpftool map"
  help message.

- Harmonise all functions, e.g. use ending quotes-comma on a separate
  line.

Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20200523010751.23465-1-quentin@isovalent.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2020-06-01 14:38:18 -07:00
Martin KaFai Lau 32e4c6f4bc bpftool: Respect the -d option in struct_ops cmd
In the prog cmd, the "-d" option turns on the verifier log.
This is missed in the "struct_ops" cmd and this patch fixes it.

Fixes: 65c9362859 ("bpftool: Add struct_ops support")
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/20200424182911.1259355-1-kafai@fb.com
2020-04-24 17:40:54 -07:00
Daniel T. Lee 96b2eb6e77 tools, bpftool: Fix struct_ops command invalid pointer free
In commit 65c9362859 ("bpftool: Add struct_ops support") a new
type of command named struct_ops has been added. This command requires
a kernel with CONFIG_DEBUG_INFO_BTF=y set and for retrieving BTF info
in bpftool, the helper get_btf_vmlinux() is used.

When running this command on kernel without BTF debug info, this will
lead to 'btf_vmlinux' variable being an invalid(error) pointer. And by
this, btf_free() causes a segfault when executing 'bpftool struct_ops'.

This commit adds pointer validation with IS_ERR not to free invalid
pointer, and this will fix the segfault issue.

Fixes: 65c9362859 ("bpftool: Add struct_ops support")
Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20200410020612.2930667-1-danieltimlee@gmail.com
2020-04-14 21:33:53 +02: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