bpf: Document BPF_PROG_QUERY syscall command
authorJoe Stringer <joe@cilium.io>
Tue, 2 Mar 2021 17:19:39 +0000 (09:19 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 5 Mar 2021 02:39:45 +0000 (18:39 -0800)
Commit 468e2f64d220 ("bpf: introduce BPF_PROG_QUERY command") originally
introduced this, but there have been several additions since then.
Unlike BPF_PROG_ATTACH, it appears that the sockmap progs are not able
to be queried so far.

Signed-off-by: Joe Stringer <joe@cilium.io>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20210302171947.2268128-8-joe@cilium.io
include/uapi/linux/bpf.h

index a6cd665..0cf92ef 100644 (file)
@@ -389,6 +389,43 @@ union bpf_iter_link_info {
  *             Obtain information about eBPF programs associated with the
  *             specified *attach_type* hook.
  *
+ *             The *target_fd* must be a valid file descriptor for a kernel
+ *             object which depends on the attach type of *attach_bpf_fd*:
+ *
+ *             **BPF_PROG_TYPE_CGROUP_DEVICE**,
+ *             **BPF_PROG_TYPE_CGROUP_SKB**,
+ *             **BPF_PROG_TYPE_CGROUP_SOCK**,
+ *             **BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,
+ *             **BPF_PROG_TYPE_CGROUP_SOCKOPT**,
+ *             **BPF_PROG_TYPE_CGROUP_SYSCTL**,
+ *             **BPF_PROG_TYPE_SOCK_OPS**
+ *
+ *                     Control Group v2 hierarchy with the eBPF controller
+ *                     enabled. Requires the kernel to be compiled with
+ *                     **CONFIG_CGROUP_BPF**.
+ *
+ *             **BPF_PROG_TYPE_FLOW_DISSECTOR**
+ *
+ *                     Network namespace (eg /proc/self/ns/net).
+ *
+ *             **BPF_PROG_TYPE_LIRC_MODE2**
+ *
+ *                     LIRC device path (eg /dev/lircN). Requires the kernel
+ *                     to be compiled with **CONFIG_BPF_LIRC_MODE2**.
+ *
+ *             **BPF_PROG_QUERY** always fetches the number of programs
+ *             attached and the *attach_flags* which were used to attach those
+ *             programs. Additionally, if *prog_ids* is nonzero and the number
+ *             of attached programs is less than *prog_cnt*, populates
+ *             *prog_ids* with the eBPF program ids of the programs attached
+ *             at *target_fd*.
+ *
+ *             The following flags may alter the result:
+ *
+ *             **BPF_F_QUERY_EFFECTIVE**
+ *                     Only return information regarding programs which are
+ *                     currently effective at the specified *target_fd*.
+ *
  *     Return
  *             Returns zero on success. On error, -1 is returned and *errno*
  *             is set appropriately.