список вспомогательных функций eBPF (list of eBPF helper functions)
IMPLEMENTATION
This manual page is an effort to document the existing eBPF
helper functions. But as of this writing, the BPF sub-system is
under heavy development. New eBPF program or map types are added,
along with new helper functions. Some helpers are occasionally
made available for additional program types. So in spite of the
efforts of the community, this page might not be up-to-date. If
you want to check by yourself what helper functions exist in your
kernel, or what types of programs they can support, here are some
files among the kernel tree that you may be interested in:
• include/uapi/linux/bpf.h is the main BPF header. It contains
the full list of all helper functions, as well as many other
BPF definitions including most of the flags, structs or
constants used by the helpers.
• net/core/filter.c contains the definition of most
network-related helper functions, and the list of program types
from which they can be used.
• kernel/trace/bpf_trace.c is the equivalent for most tracing
program-related helpers.
• kernel/bpf/verifier.c contains the functions used to check that
valid types of eBPF maps are used with a given helper function.
• kernel/bpf/ directory contains other files in which additional
helpers are defined (for cgroups, sockmaps, etc.).
• The bpftool utility can be used to probe the availability of
helper functions on the system (as well as supported program
and map types, and a number of other parameters). To do so, run
bpftool feature probe
(see bpftool-feature
(8) for details). Add
the unprivileged
keyword to list features available to
unprivileged users.
Compatibility between helper functions and program types can
generally be found in the files where helper functions are
defined. Look for the struct bpf_func_proto
objects and for
functions returning them: these functions contain a list of
helpers that a given program type can call. Note that the
default:
label of the switch ... case
used to filter helpers can
call other functions, themselves allowing access to additional
helpers. The requirement for GPL license is also in those struct
bpf_func_proto
.
Compatibility between helper functions and map types can be found
in the check_map_func_compatibility
() function in file
kernel/bpf/verifier.c.
Helper functions that invalidate the checks on data
and data_end
pointers for network processing are listed in function
bpf_helper_changes_pkt_data
() in file net/core/filter.c.