Kernel version | Commit |
---|---|
3.15 | bd4cf0ed331a |
The list of supported architectures for your kernel can be retrieved with:
git grep HAVE_EBPF_JIT arch/
Feature / Architecture | Kernel version | Commit |
---|---|---|
x86_64 | 3.16 | 622582786c9e |
ARM64 | 3.18 | e54bcde3d69d |
s390 | 4.1 | 054623105728 |
Constant blinding for JIT machines | 4.7 | 4f3446bb809f |
PowerPC64 | 4.8 | 156d0e290e96 |
Constant blinding - PowerPC64 | 4.9 | b7b7013cac55 |
Sparc64 | 4.12 | 7a12b5031c6b |
MIPS | 4.13 | f381bf6d82f0 |
ARM32 | 4.14 | 39c13c204bb1 |
x86_32 | 4.18 | 03f5781be2c7 |
RISC-V RV64G | 5.1 | 2353ecc6f91f |
RISC-V RV32G | 5.7 | 5f316b65e99f |
Several (but not all) of these main features translate to an eBPF program type.
The list of such program types supported in your kernel can be found in file
include/uapi/linux/bpf.h
:
git grep -W 'bpf_prog_type {' include/uapi/linux/bpf.h
Feature | Kernel version | Commit |
---|---|---|
AF_PACKET (libpcap/tcpdump, cls_bpf classifier, netfilter's xt_bpf , team driver's load-balancing mode…) |
3.15 | bd4cf0ed331a |
Kernel helpers | 3.15 | bd4cf0ed331a |
bpf() syscall |
3.18 | 99c55f7d47c0 |
Tables (a.k.a. Maps; details below) | 3.18 | 99c55f7d47c0 |
BPF attached to sockets | 3.19 | 89aa075832b0 |
BPF attached to kprobes |
4.1 | 2541517c32be |
cls_bpf / act_bpf for tc |
4.1 | e2e9b6541dd4 |
Tail calls | 4.2 | 04fd61ab36ec |
Non-root programs on sockets | 4.4 | 1be7f75d1668 |
Persistent maps and programs (virtual FS) | 4.4 | b2197755b263 |
tc 's direct-action (da ) mode |
4.4 | 045efa82ff56 |
tc 's clsact qdisc |
4.5 | 1f211a1b929c |
BPF attached to tracepoints | 4.7 | 98b5c2c65c29 |
Direct packet access | 4.7 | 969bf05eb3ce |
XDP (see below) | 4.8 | 6a773a15a1e8 |
BPF attached to perf events | 4.9 | 0515e5999a46 |
Hardware offload for tc 's cls_bpf |
4.9 | 332ae8e2f6ec |
Verifier exposure and internal hooks | 4.9 | 13a27dfc6697 |
BPF attached to cgroups for socket filtering | 4.10 | 0e33661de493 |
Lightweight tunnel encapsulation | 4.10 | 3a0af8fd61f9 |
eBPF support for xt_bpf module (iptables) |
4.10 | 2c16d6033264 |
BPF program tag | 4.10 | 7bd509e311f4 |
Tracepoints to debug BPF | 4.11 (removed in 4.18) | a67edbf4fb6d 4d220ed0f814 |
Testing / benchmarking BPF programs | 4.12 | 1cf1cae963c2 |
BPF programs and maps IDs | 4.13 | dc4bb0e23561 |
BPF support for sock_ops |
4.13 | 40304b2a1567 |
BPF support for skbs on sockets | 4.14 | b005fd189cec |
bpftool utility in kernel sources | 4.15 | 71bb428fe2c1 |
BPF attached to cgroups as device controller | 4.15 | ebc614f68736 |
bpf2bpf function calls | 4.16 | cc8b0b92a169 |
BPF used for monitoring socket RX/TX data | 4.17 | 4f738adba30a |
BPF attached to raw tracepoints | 4.17 | c4f6699dfcb8 |
BPF attached to bind() system call |
4.17 | 4fbac77d2d09 |
BPF Type Format (BTF) | 4.18 | 69b693f0aefa |
AF_XDP | 4.18 | fbfc504a24f5 |
bpfilter | 4.18 | d2ba09c17a06 |
End.BPF action for seg6local LWT | 4.18 | 004d4b274e2a |
BPF attached to LIRC devices | 4.18 | f4364dcfc86d |
Pass map values to map helpers | 4.18 | d71962f3e627 |
BPF socket reuseport | 4.19 | 2dbb9b9e6df6 |
BPF flow dissector | 4.20 | d58e468b1112 |
BPF 1M insn limit | 5.2 | c04c0d2b968a |
BPF cgroup sysctl | 5.2 | 7b146cebe30c |
BPF raw tracepoint writable | 5.2 | 9df1c28bb752 |
BPF trampoline | 5.5 | fec56f5890d9 |
BPF LSM hook | 5.7 | fc611f47f218 641cd7b06c91 |
BPF iterator | 5.8 | 180139dca8b3 |
BPF socket lookup hook | 5.9 | e9ddbb7707ff |
Sleepable BPF programs | 5.10 | 1e6c62a88215 |
The list of map types supported in your kernel can be found in file
include/uapi/linux/bpf.h
:
git grep -W 'bpf_map_type {' include/uapi/linux/bpf.h
Table type | Kernel version | Commit |
---|---|---|
Hash | 3.19 | 0f8e4bd8a1fc |
Array | 3.19 | 28fbcfa08d8e |
Tail call (PROG_ARRAY ) |
4.2 | 04fd61ab36ec |
Perf events | 4.3 | ea317b267e9d |
Per-CPU hash | 4.6 | 824bd0ce6c7c |
Per-CPU array | 4.6 | a10423b87a7e |
Stack trace | 4.6 | d5a3b1f69186 |
cgroup array | 4.8 | 4ed8ec521ed5 |
LRU hash | 4.10 | 29ba732acbee 3a08c2fd7634 |
LRU per-CPU hash | 4.10 | 8f8449384ec3 961578b63474 |
LPM trie (longest-prefix match) | 4.11 | b95a5c4db09b |
Array of maps | 4.12 | 56f668dfe00d |
Hash of maps | 4.12 | bcc6b1b7ebf8 |
Netdevice references (array) | 4.14 | 546ac1ffb70d |
Socket references (array) | 4.14 | 174a79ff9515 |
CPU references | 4.15 | 6710e1126934 |
AF_XDP socket (XSK) references | 4.18 | fbfc504a24f5 |
Socket references (hashmap) | 4.18 | 81110384441a |
cgroup storage | 4.19 | de9cbbaadba5 |
reuseport sockarray | 4.19 | 5dc4c4b7d4e8 |
precpu cgroup storage | 4.20 | b741f1630346 |
queue | 4.20 | f1a2e44a3aec |
stack | 4.20 | f1a2e44a3aec |
socket local storage | 5.2 | 6ac99e8f23d4 |
Netdevice references (hashmap) | 5.4 | 6f9d451ab1a3 |
struct ops | 5.6 | 85d33df357b6 |
ring buffer | 5.8 | 457f44363a88 |
inode storage | 5.10 | 8ea636848aca |
task storage | 5.11 | 4cf1bc1f1045 |
Some (but not all) of these API features translate to a subcommand beginning with BPF_MAP_
.
The list of subcommands supported in your kernel can be found in file
include/uapi/linux/bpf.h
:
git grep -W 'bpf_cmd {' include/uapi/linux/bpf.h
Feature | Kernel version | Commit |
---|---|---|
Basic operations (lookup, update, delete, GET_NEXT_KEY ) |
3.18 | db20fd2b0108 |
Pass flags to UPDATE_ELEM |
3.19 | 3274f52073d8 |
Pre-alloc map memory by default | 4.6 | 6c9059817432 |
Pass NULL to GET_NEXT_KEY |
4.12 | 8fe45924387b |
Creation: select NUMA node | 4.14 | 96eabe7a40aa |
Restrict access from syscall side | 4.15 | 6e71b04a8224 |
Creation: specify map name | 4.15 | ad5b177bd73f |
LOOKUP_AND_DELETE_ELEM |
4.20 | bd513cd08f10 |
Creation: BPF_F_ZERO_SEED |
5.0 | 96b3b6c9091d |
BPF_F_LOCK flag for lookup / update |
5.1 | 96049f3afd50 |
Restrict access from BPF side | 5.2 | 591fe9888d78 |
FREEZE |
5.2 | 87df15de441b |
mmap() support for array maps | 5.5 | fc9702273e2e |
LOOKUP_BATCH |
5.6 | cb4d03ab499d |
UPDATE_BATCH , DELETE_BATCH |
5.6 | aa2e93b8e58e |
LOOKUP_AND_DELETE_BATCH |
5.6 | 057996380a42 |
LOOKUP_AND_DELETE_ELEM support for hash maps |
5.14 | 3e87f192b405 |
An approximate list of drivers or components supporting XDP programs for your kernel can be retrieved with:
git grep -l XDP_SETUP_PROG drivers/
Feature / Driver | Kernel version | Commit |
---|---|---|
XDP core architecture | 4.8 | 6a773a15a1e8 |
Action: drop | 4.8 | 6a773a15a1e8 |
Action: pass on to stack | 4.8 | 6a773a15a1e8 |
Action: direct forwarding (on same port) | 4.8 | 6ce96ca348a9 |
Direct packet data write | 4.8 | 4acf6c0b84c9 |
Mellanox mlx4 driver |
4.8 | 47a38e155037 |
Mellanox mlx5 driver |
4.9 | 86994156c736 |
Netronome nfp driver |
4.10 | ecd63a0217d5 |
QLogic (Cavium) qed* drivers |
4.10 | 496e05170958 |
virtio_net driver |
4.10 | f600b6905015 |
Broadcom bnxt_en driver |
4.11 | c6d30e8391b8 |
Intel ixgbe* drivers |
4.12 | 924708081629 |
Cavium thunderx driver |
4.12 | 05c773f52b96 |
Generic XDP | 4.12 | b5cdae3291f7 |
Intel i40e driver |
4.13 | 0c8493d90b6b |
Action: redirect | 4.14 | 6453073987ba |
Support for tap | 4.14 | 761876c857cb |
Support for veth | 4.14 | d445516966dc |
Intel ixgbevf driver |
4.17 | c7aec59657b6 |
Freescale dpaa2 driver |
5.0 | 7e273a8ebdd3 |
Socionext netsec driver |
5.3 | ba2b232108d3 |
TI cpsw driver |
5.3 | 9ed4050c0d75 |
Intel ice driver |
5.5 | efc2214b6047 |
Solarflare sfc driver |
5.5 | eb9a36be7f3e |
Marvell mvneta driver |
5.5 | 0db51da7a8e9 |
Microsoft hv_netvsc driver |
5.6 | 351e1581395f |
Amazon ena driver |
5.6 | 838c93dc5449 |
xen-netfront driver |
5.9 | 6c5aa6fc4def |
Intel igb driver |
5.10 | 9cbc948b5a20 |
Intel e1000 driver |
Not upstream yet | |
Intel e1000e driver |
Not planned for upstream at this time |
The list of helpers supported in your kernel can be found in file
include/uapi/linux/bpf.h
:
git grep ' FN(' include/uapi/linux/bpf.h
Alphabetical order
Helper | Kernel version | License | Commit |
---|---|---|---|
BPF_FUNC_bind() |
4.17 | d74bad4e74ee |
|
BPF_FUNC_bprm_opts_set() |
5.11 | 3f6719c7b62f |
|
BPF_FUNC_btf_find_by_name_kind() |
5.14 | 3d78417b60fb |
|
BPF_FUNC_check_mtu() |
5.12 | 34b2021cc616 |
|
BPF_FUNC_clone_redirect() |
4.2 | 3896d655f4d4 |
|
BPF_FUNC_copy_from_user() |
5.10 | 07be4c4a3e7a |
|
BPF_FUNC_copy_from_user_task() |
5.18 | GPL | 376040e47334 |
BPF_FUNC_csum_diff() |
4.6 | 7d672345ed29 |
|
BPF_FUNC_csum_level() |
5.7 | 7cdec54f9713 |
|
BPF_FUNC_csum_update() |
4.9 | 36bbef52c7eb |
|
BPF_FUNC_current_task_under_cgroup() |
4.9 | 60d20f9195b2 |
|
BPF_FUNC_d_path() |
5.10 | 6e22ab9da793 |
|
BPF_FUNC_fib_lookup() |
4.18 | GPL | 87f5fc7e48dd |
BPF_FUNC_find_vma() |
5.17 | 7c7e3d31e785 |
|
BPF_FUNC_for_each_map_elem() |
5.13 | 69c087ba6225 |
|
BPF_FUNC_get_attach_cookie() |
5.15 | 7adfc6c9b315 |
|
BPF_FUNC_get_branch_snapshot() |
5.16 | GPL | 856c02dbce4f |
BPF_FUNC_get_current_ancestor_cgroup_id() |
5.6 | b4490c5c4e02 |
|
BPF_FUNC_get_cgroup_classid() |
4.3 | 8d20aabe1c76 |
|
BPF_FUNC_get_current_cgroup_id() |
4.18 | bf6fa2c893c5 |
|
BPF_FUNC_get_current_comm() |
4.2 | ffeedafbf023 |
|
BPF_FUNC_get_current_pid_tgid() |
4.2 | ffeedafbf023 |
|
BPF_FUNC_get_current_task() |
4.8 | GPL | 606274c5abd8 |
BPF_FUNC_get_current_task_btf() |
5.11 | GPL | 3ca1032ab7ab |
BPF_FUNC_get_current_uid_gid() |
4.2 | ffeedafbf023 |
|
BPF_FUNC_get_func_arg() |
5.17 | f92c1e183604 |
|
BPF_FUNC_get_func_arg_cnt() |
5.17 | f92c1e183604 |
|
BPF_FUNC_get_func_ip() |
5.15 | 5d8b583d04ae |
|
BPF_FUNC_get_func_ret() |
5.17 | f92c1e183604 |
|
BPF_FUNC_get_retval() |
5.18 | b44123b4a3dc |
|
BPF_FUNC_get_hash_recalc() |
4.8 | 13c5c240f789 |
|
BPF_FUNC_get_listener_sock() |
5.1 | dbafd7ddd623 |
|
BPF_FUNC_get_local_storage() |
4.19 | cd3394317653 |
|
BPF_FUNC_get_netns_cookie() |
5.7 | f318903c0bf4 |
|
BPF_FUNC_get_ns_current_pid_tgid() |
5.7 | b4490c5c4e02 |
|
BPF_FUNC_get_numa_node_id() |
4.10 | 2d0e30c30f84 |
|
BPF_FUNC_get_prandom_u32() |
4.1 | 03e69b508b6f |
|
BPF_FUNC_get_route_realm() |
4.4 | c46646d0484f |
|
BPF_FUNC_get_smp_processor_id() |
4.1 | c04167ce2ca0 |
|
BPF_FUNC_get_socket_cookie() |
4.12 | 91b8270f2a4d |
|
BPF_FUNC_get_socket_uid() |
4.12 | 6acc5c291068 |
|
BPF_FUNC_get_stack() |
4.18 | GPL | de2ff05f48af |
BPF_FUNC_get_stackid() |
4.6 | GPL | d5a3b1f69186 |
BPF_FUNC_get_task_stack() |
5.9 | fa28dcb82a38 |
|
BPF_FUNC_getsockopt() |
4.15 | cd86d1fd2102 |
|
BPF_FUNC_ima_file_hash() |
5.18 | 174b16946e39 |
|
BPF_FUNC_ima_inode_hash() |
5.11 | 27672f0d280a |
|
BPF_FUNC_inode_storage_delete() |
5.10 | 8ea636848aca |
|
BPF_FUNC_inode_storage_get() |
5.10 | 8ea636848aca |
|
BPF_FUNC_jiffies64() |
5.5 | 5576b991e9c1 |
|
BPF_FUNC_kallsyms_lookup_name() |
5.16 | d6aef08a872b |
|
BPF_FUNC_ktime_get_boot_ns() |
5.7 | GPL | 71d19214776e |
BPF_FUNC_ktime_get_coarse_ns() |
5.11 | GPL | d05512618056 |
BPF_FUNC_ktime_get_ns() |
4.1 | GPL | d9847d310ab4 |
BPF_FUNC_l3_csum_replace() |
4.1 | 91bc4822c3d6 |
|
BPF_FUNC_l4_csum_replace() |
4.1 | 91bc4822c3d6 |
|
BPF_FUNC_load_hdr_opt() |
5.10 | 0813a841566f |
|
BPF_FUNC_loop() |
5.17 | e6f2dd0f8067 |
|
BPF_FUNC_lwt_push_encap() |
4.18 | fe94cc290f53 |
|
BPF_FUNC_lwt_seg6_action() |
4.18 | fe94cc290f53 |
|
BPF_FUNC_lwt_seg6_adjust_srh() |
4.18 | fe94cc290f53 |
|
BPF_FUNC_lwt_seg6_store_bytes() |
4.18 | fe94cc290f53 |
|
BPF_FUNC_map_delete_elem() |
3.19 | d0003ec01c66 |
|
BPF_FUNC_map_lookup_elem() |
3.19 | d0003ec01c66 |
|
BPF_FUNC_map_peek_elem() |
4.20 | f1a2e44a3aec |
|
BPF_FUNC_map_pop_elem() |
4.20 | f1a2e44a3aec |
|
BPF_FUNC_map_push_elem() |
4.20 | f1a2e44a3aec |
|
BPF_FUNC_map_update_elem() |
3.19 | d0003ec01c66 |
|
BPF_FUNC_msg_apply_bytes() |
4.17 | 2a100317c9eb |
|
BPF_FUNC_msg_cork_bytes() |
4.17 | 91843d540a13 |
|
BPF_FUNC_msg_pop_data() |
5.0 | 7246d8ed4dcc |
|
BPF_FUNC_msg_pull_data() |
4.17 | 015632bb30da |
|
BPF_FUNC_msg_push_data() |
4.20 | 6fff607e2f14 |
|
BPF_FUNC_msg_redirect_hash() |
4.18 | 81110384441a |
|
BPF_FUNC_msg_redirect_map() |
4.17 | 4f738adba30a |
|
BPF_FUNC_per_cpu_ptr() |
5.10 | eaa6bcb71ef6 |
|
BPF_FUNC_perf_event_output() |
4.4 | GPL | a43eec304259 |
BPF_FUNC_perf_event_read() |
4.3 | GPL | 35578d798400 |
BPF_FUNC_perf_event_read_value() |
4.15 | GPL | 908432ca84fc |
BPF_FUNC_perf_prog_read_value() |
4.15 | GPL | 4bebdc7a85aa |
BPF_FUNC_probe_read() |
4.1 | GPL | 2541517c32be |
BPF_FUNC_probe_read_kernel() |
5.5 | GPL | 6ae08ae3dea2 |
BPF_FUNC_probe_read_kernel_str() |
5.5 | GPL | 6ae08ae3dea2 |
BPF_FUNC_probe_read_user() |
5.5 | GPL | 6ae08ae3dea2 |
BPF_FUNC_probe_read_user_str() |
5.5 | GPL | 6ae08ae3dea2 |
BPF_FUNC_probe_read_str() |
4.11 | GPL | a5e8c07059d0 |
BPF_FUNC_probe_write_user() |
4.8 | GPL | 96ae52279594 |
BPF_FUNC_rc_keydown() |
4.18 | GPL | f4364dcfc86d |
BPF_FUNC_rc_pointer_rel() |
5.0 | GPL | 01d3240a04f4 |
BPF_FUNC_rc_repeat() |
4.18 | GPL | f4364dcfc86d |
BPF_FUNC_read_branch_records() |
5.6 | GPL | fff7b64355ea |
BPF_FUNC_redirect() |
4.4 | 27b29f63058d |
|
BPF_FUNC_redirect_map() |
4.14 | 97f91a7cf04f |
|
BPF_FUNC_redirect_neigh() |
5.10 | b4ab31414970 |
|
BPF_FUNC_redirect_peer() |
5.10 | 9aa1206e8f48 |
|
BPF_FUNC_reserve_hdr_opt() |
5.10 | 0813a841566f |
|
BPF_FUNC_ringbuf_discard() |
5.8 | 457f44363a88 |
|
BPF_FUNC_ringbuf_output() |
5.8 | 457f44363a88 |
|
BPF_FUNC_ringbuf_query() |
5.8 | 457f44363a88 |
|
BPF_FUNC_ringbuf_reserve() |
5.8 | 457f44363a88 |
|
BPF_FUNC_ringbuf_submit() |
5.8 | 457f44363a88 |
|
BPF_FUNC_send_signal() |
5.3 | 8b401f9ed244 |
|
BPF_FUNC_send_signal_thread() |
5.5 | 8482941f0906 |
|
BPF_FUNC_seq_printf() |
5.7 | GPL | 492e639f0c22 |
BPF_FUNC_seq_printf_btf() |
5.10 | eb411377aed9 |
|
BPF_FUNC_seq_write() |
5.7 | GPL | 492e639f0c22 |
BPF_FUNC_set_hash() |
4.13 | ded092cd73c2 |
|
BPF_FUNC_set_hash_invalid() |
4.9 | 7a4b28c6cc9f |
|
BPF_FUNC_set_retval() |
5.18 | b44123b4a3dc |
|
BPF_FUNC_setsockopt() |
4.13 | 8c4b4c7e9ff0 |
|
BPF_FUNC_sk_ancestor_cgroup_id() |
5.7 | f307fa2cb4c9 |
|
BPF_FUNC_sk_assign() |
5.6 | cf7fbe660f2d |
|
BPF_FUNC_sk_cgroup_id() |
5.7 | f307fa2cb4c9 |
|
BPF_FUNC_sk_fullsock() |
5.1 | 46f8bc92758c |
|
BPF_FUNC_sk_lookup_tcp() |
4.20 | 6acc9b432e67 |
|
BPF_FUNC_sk_lookup_udp() |
4.20 | 6acc9b432e67 |
|
BPF_FUNC_sk_redirect_hash() |
4.18 | 81110384441a |
|
BPF_FUNC_sk_redirect_map() |
4.14 | 174a79ff9515 |
|
BPF_FUNC_sk_release() |
4.20 | 6acc9b432e67 |
|
BPF_FUNC_sk_select_reuseport() |
4.19 | 2dbb9b9e6df6 |
|
BPF_FUNC_sk_storage_delete() |
5.2 | 6ac99e8f23d4 |
|
BPF_FUNC_sk_storage_get() |
5.2 | 6ac99e8f23d4 |
|
BPF_FUNC_skb_adjust_room() |
4.13 | 2be7e212d541 |
|
BPF_FUNC_skb_ancestor_cgroup_id() |
4.19 | 7723628101aa |
|
BPF_FUNC_skb_change_head() |
4.10 | 3a0af8fd61f9 |
|
BPF_FUNC_skb_change_proto() |
4.8 | 6578171a7ff0 |
|
BPF_FUNC_skb_change_tail() |
4.9 | 5293efe62df8 |
|
BPF_FUNC_skb_change_type() |
4.8 | d2485c4242a8 |
|
BPF_FUNC_skb_cgroup_classid() |
5.10 | b426ce83baa7 |
|
BPF_FUNC_skb_cgroup_id() |
4.18 | cb20b08ead40 |
|
BPF_FUNC_skb_ecn_set_ce() |
5.1 | f7c917ba11a6 |
|
BPF_FUNC_skb_get_tunnel_key() |
4.3 | d3aa45ce6b94 |
|
BPF_FUNC_skb_get_tunnel_opt() |
4.6 | 14ca0751c96f |
|
BPF_FUNC_skb_get_xfrm_state() |
4.18 | 12bed760a78d |
|
BPF_FUNC_skb_load_bytes() |
4.5 | 05c74e5e53f6 |
|
BPF_FUNC_skb_load_bytes_relative() |
4.18 | 4e1ec56cdc59 |
|
BPF_FUNC_skb_output() |
5.5 | a7658e1a4164 |
|
BPF_FUNC_skb_pull_data() |
4.9 | 36bbef52c7eb |
|
BPF_FUNC_skb_set_tstamp() |
5.18 | 9bb984f28d5b |
|
BPF_FUNC_skb_set_tunnel_key() |
4.3 | d3aa45ce6b94 |
|
BPF_FUNC_skb_set_tunnel_opt() |
4.6 | 14ca0751c96f |
|
BPF_FUNC_skb_store_bytes() |
4.1 | 91bc4822c3d6 |
|
BPF_FUNC_skb_under_cgroup() |
4.8 | 4a482f34afcc |
|
BPF_FUNC_skb_vlan_pop() |
4.3 | 4e10df9a60d9 |
|
BPF_FUNC_skb_vlan_push() |
4.3 | 4e10df9a60d9 |
|
BPF_FUNC_skc_lookup_tcp() |
5.2 | edbf8c01de5a |
|
BPF_FUNC_skc_to_tcp_sock() |
5.9 | 478cfbdf5f13 |
|
BPF_FUNC_skc_to_tcp_request_sock() |
5.9 | 478cfbdf5f13 |
|
BPF_FUNC_skc_to_tcp_timewait_sock() |
5.9 | 478cfbdf5f13 |
|
BPF_FUNC_skc_to_tcp6_sock() |
5.9 | af7ec1383361 |
|
BPF_FUNC_skc_to_udp6_sock() |
5.9 | 0d4fad3e57df |
|
BPF_FUNC_skc_to_unix_sock() |
5.16 | 9eeb3aa33ae0 |
|
BPF_FUNC_snprintf() |
5.13 | 7b15523a989b |
|
BPF_FUNC_snprintf_btf() |
5.10 | c4d0bfb45068 |
|
BPF_FUNC_sock_from_file() |
5.11 | 4f19cab76136 |
|
BPF_FUNC_sock_hash_update() |
4.18 | 81110384441a |
|
BPF_FUNC_sock_map_update() |
4.14 | 174a79ff9515 |
|
BPF_FUNC_spin_lock() |
5.1 | d83525ca62cf |
|
BPF_FUNC_spin_unlock() |
5.1 | d83525ca62cf |
|
BPF_FUNC_store_hdr_opt() |
5.10 | 0813a841566f |
|
BPF_FUNC_strncmp() |
5.17 | c5fb19937455 |
|
BPF_FUNC_strtol() |
5.2 | d7a4cb9b6705 |
|
BPF_FUNC_strtoul() |
5.2 | d7a4cb9b6705 |
|
BPF_FUNC_sys_bpf() |
5.14 | 79a7f8bdb159 |
|
BPF_FUNC_sys_close() |
5.14 | 3abea089246f |
|
BPF_FUNC_sysctl_get_current_value() |
5.2 | 1d11b3016cec |
|
BPF_FUNC_sysctl_get_name() |
5.2 | 808649fb787d |
|
BPF_FUNC_sysctl_get_new_value() |
5.2 | 4e63acdff864 |
|
BPF_FUNC_sysctl_set_new_value() |
5.2 | 4e63acdff864 |
|
BPF_FUNC_tail_call() |
4.2 | 04fd61ab36ec |
|
BPF_FUNC_task_pt_regs() |
5.15 | GPL | dd6e10fbd9f |
BPF_FUNC_task_storage_delete() |
5.11 | 4cf1bc1f1045 |
|
BPF_FUNC_task_storage_get() |
5.11 | 4cf1bc1f1045 |
|
BPF_FUNC_tcp_check_syncookie() |
5.2 | 399040847084 |
|
BPF_FUNC_tcp_gen_syncookie() |
5.3 | 70d66244317e |
|
BPF_FUNC_tcp_send_ack() |
5.5 | 206057fe020a |
|
BPF_FUNC_tcp_sock() |
5.1 | 655a51e536c0 |
|
BPF_FUNC_this_cpu_ptr() |
5.10 | 63d9b80dcf2c |
|
BPF_FUNC_timer_init() |
5.15 | b00628b1c7d5 |
|
BPF_FUNC_timer_set_callback() |
5.15 | b00628b1c7d5 |
|
BPF_FUNC_timer_start() |
5.15 | b00628b1c7d5 |
|
BPF_FUNC_timer_cancel() |
5.15 | b00628b1c7d5 |
|
BPF_FUNC_trace_printk() |
4.1 | GPL | 9c959c863f82 |
BPF_FUNC_trace_vprintk() |
5.16 | GPL | 10aceb629e19 |
BPF_FUNC_xdp_adjust_head() |
4.10 | 17bedab27231 |
|
BPF_FUNC_xdp_adjust_meta() |
4.15 | de8f3a83b0a0 |
|
BPF_FUNC_xdp_adjust_tail() |
4.18 | b32cc5b9a346 |
|
BPF_FUNC_xdp_get_buff_len() |
5.18 | 0165cc817075 |
|
BPF_FUNC_xdp_load_bytes() |
5.18 | 3f364222d032 |
|
BPF_FUNC_xdp_store_bytes() |
5.18 | 3f364222d032 |
|
BPF_FUNC_xdp_output() |
5.6 | GPL | d831ee84bfc9 |
BPF_FUNC_override_return() |
4.16 | GPL | 9802d86585db |
BPF_FUNC_sock_ops_cb_flags_set() |
4.16 | b13d88072172 |
Note: GPL-only BPF helpers require a GPL-compatible license. The current licenses considered GPL-compatible by the kernel are:
- GPL
- GPL v2
- GPL and additional rights
- Dual BSD/GPL
- Dual MIT/GPL
- Dual MPL/GPL
Check the list of GPL-compatible licenses in your kernel source code.
The list of program types and supported helper functions can be retrieved with:
git grep -W 'func_proto(enum bpf_func_id func_id' kernel/ net/ drivers/
Program Type | Helper Functions |
---|---|
BPF_PROG_TYPE_SOCKET_FILTER |
BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_load_bytes_relative() BPF_FUNC_get_socket_cookie() BPF_FUNC_get_socket_uid() BPF_FUNC_perf_event_output() Base functions |
BPF_PROG_TYPE_KPROBE |
BPF_FUNC_perf_event_output() BPF_FUNC_get_stackid() BPF_FUNC_get_stack() BPF_FUNC_perf_event_read_value() BPF_FUNC_override_return() Tracing functions |
BPF_PROG_TYPE_SCHED_CLS BPF_PROG_TYPE_SCHED_ACT |
BPF_FUNC_skb_store_bytes() BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_load_bytes_relative() BPF_FUNC_skb_pull_data() BPF_FUNC_csum_diff() BPF_FUNC_csum_update() BPF_FUNC_l3_csum_replace() BPF_FUNC_l4_csum_replace() BPF_FUNC_clone_redirect() BPF_FUNC_get_cgroup_classid() BPF_FUNC_skb_vlan_push() BPF_FUNC_skb_vlan_pop() BPF_FUNC_skb_change_proto() BPF_FUNC_skb_change_type() BPF_FUNC_skb_adjust_room() BPF_FUNC_skb_change_tail() BPF_FUNC_skb_get_tunnel_key() BPF_FUNC_skb_set_tunnel_key() BPF_FUNC_skb_get_tunnel_opt() BPF_FUNC_skb_set_tunnel_opt() BPF_FUNC_redirect() BPF_FUNC_get_route_realm() BPF_FUNC_get_hash_recalc() BPF_FUNC_set_hash_invalid() BPF_FUNC_set_hash() BPF_FUNC_perf_event_output() BPF_FUNC_get_smp_processor_id() BPF_FUNC_skb_under_cgroup() BPF_FUNC_get_socket_cookie() BPF_FUNC_get_socket_uid() BPF_FUNC_fib_lookup() BPF_FUNC_skb_get_xfrm_state() BPF_FUNC_skb_cgroup_id() Base functions |
BPF_PROG_TYPE_TRACEPOINT |
BPF_FUNC_perf_event_output() BPF_FUNC_get_stackid() BPF_FUNC_get_stack() BPF_FUNC_d_path() Tracing functions |
BPF_PROG_TYPE_XDP |
BPF_FUNC_perf_event_output() BPF_FUNC_get_smp_processor_id() BPF_FUNC_csum_diff() BPF_FUNC_xdp_adjust_head() BPF_FUNC_xdp_adjust_meta() BPF_FUNC_redirect() BPF_FUNC_redirect_map() BPF_FUNC_xdp_adjust_tail() BPF_FUNC_fib_lookup() Base functions |
BPF_PROG_TYPE_PERF_EVENT |
BPF_FUNC_perf_event_output() BPF_FUNC_get_stackid() BPF_FUNC_get_stack() BPF_FUNC_perf_prog_read_value() Tracing functions |
BPF_PROG_TYPE_CGROUP_SKB |
BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_load_bytes_relative() BPF_FUNC_get_socket_cookie() BPF_FUNC_get_socket_uid() Base functions |
BPF_PROG_TYPE_CGROUP_SOCK |
BPF_FUNC_get_current_uid_gid() Base functions |
BPF_PROG_TYPE_LWT_IN |
BPF_FUNC_lwt_push_encap() LWT functions Base functions |
BPF_PROG_TYPE_LWT_OUT |
LWT functions Base functions |
BPF_PROG_TYPE_LWT_XMIT |
BPF_FUNC_skb_get_tunnel_key() BPF_FUNC_skb_set_tunnel_key() BPF_FUNC_skb_get_tunnel_opt() BPF_FUNC_skb_set_tunnel_opt() BPF_FUNC_redirect() BPF_FUNC_clone_redirect() BPF_FUNC_skb_change_tail() BPF_FUNC_skb_change_head() BPF_FUNC_skb_store_bytes() BPF_FUNC_csum_update() BPF_FUNC_l3_csum_replace() BPF_FUNC_l4_csum_replace() BPF_FUNC_set_hash_invalid() LWT functions |
BPF_PROG_TYPE_SOCK_OPS |
BPF_FUNC_setsockopt() BPF_FUNC_getsockopt() BPF_FUNC_sock_ops_cb_flags_set() BPF_FUNC_sock_map_update() BPF_FUNC_sock_hash_update() BPF_FUNC_get_socket_cookie() Base functions |
BPF_PROG_TYPE_SK_SKB |
BPF_FUNC_skb_store_bytes() BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_pull_data() BPF_FUNC_skb_change_tail() BPF_FUNC_skb_change_head() BPF_FUNC_get_socket_cookie() BPF_FUNC_get_socket_uid() BPF_FUNC_sk_redirect_map() BPF_FUNC_sk_redirect_hash() BPF_FUNC_sk_lookup_tcp() BPF_FUNC_sk_lookup_udp() BPF_FUNC_sk_release() Base functions |
BPF_PROG_TYPE_CGROUP_DEVICE |
BPF_FUNC_map_lookup_elem() BPF_FUNC_map_update_elem() BPF_FUNC_map_delete_elem() BPF_FUNC_get_current_uid_gid() BPF_FUNC_trace_printk() |
BPF_PROG_TYPE_SK_MSG |
BPF_FUNC_msg_redirect_map() BPF_FUNC_msg_redirect_hash() BPF_FUNC_msg_apply_bytes() BPF_FUNC_msg_cork_bytes() BPF_FUNC_msg_pull_data() BPF_FUNC_msg_push_data() BPF_FUNC_msg_pop_data() Base functions |
BPF_PROG_TYPE_RAW_TRACEPOINT |
BPF_FUNC_perf_event_output() BPF_FUNC_get_stackid() BPF_FUNC_get_stack() BPF_FUNC_skb_output() Tracing functions |
BPF_PROG_TYPE_CGROUP_SOCK_ADDR |
BPF_FUNC_get_current_uid_gid() BPF_FUNC_bind() BPF_FUNC_get_socket_cookie() Base functions |
BPF_PROG_TYPE_LWT_SEG6LOCAL |
BPF_FUNC_lwt_seg6_store_bytes() BPF_FUNC_lwt_seg6_action() BPF_FUNC_lwt_seg6_adjust_srh() LWT functions |
BPF_PROG_TYPE_LIRC_MODE2 |
BPF_FUNC_rc_repeat() BPF_FUNC_rc_keydown() BPF_FUNC_rc_pointer_rel() BPF_FUNC_map_lookup_elem() BPF_FUNC_map_update_elem() BPF_FUNC_map_delete_elem() BPF_FUNC_ktime_get_ns() BPF_FUNC_tail_call() BPF_FUNC_get_prandom_u32() BPF_FUNC_trace_printk() |
BPF_PROG_TYPE_SK_REUSEPORT |
BPF_FUNC_sk_select_reuseport() BPF_FUNC_skb_load_bytes() BPF_FUNC_load_bytes_relative() Base functions |
BPF_PROG_TYPE_FLOW_DISSECTOR |
BPF_FUNC_skb_load_bytes() Base functions |
Function Group | Functions |
---|---|
Base functions |
BPF_FUNC_map_lookup_elem() BPF_FUNC_map_update_elem() BPF_FUNC_map_delete_elem() BPF_FUNC_map_peek_elem() BPF_FUNC_map_pop_elem() BPF_FUNC_map_push_elem() BPF_FUNC_get_prandom_u32() BPF_FUNC_get_smp_processor_id() BPF_FUNC_get_numa_node_id() BPF_FUNC_tail_call() BPF_FUNC_ktime_get_boot_ns() BPF_FUNC_ktime_get_ns() BPF_FUNC_trace_printk() BPF_FUNC_spin_lock() BPF_FUNC_spin_unlock() |
Tracing functions |
BPF_FUNC_map_lookup_elem() BPF_FUNC_map_update_elem() BPF_FUNC_map_delete_elem() BPF_FUNC_probe_read() BPF_FUNC_ktime_get_boot_ns() BPF_FUNC_ktime_get_ns() BPF_FUNC_tail_call() BPF_FUNC_get_current_pid_tgid() BPF_FUNC_get_current_task() BPF_FUNC_get_current_uid_gid() BPF_FUNC_get_current_comm() BPF_FUNC_trace_printk() BPF_FUNC_get_smp_processor_id() BPF_FUNC_get_numa_node_id() BPF_FUNC_perf_event_read() BPF_FUNC_probe_write_user() BPF_FUNC_current_task_under_cgroup() BPF_FUNC_get_prandom_u32() BPF_FUNC_probe_read_str() BPF_FUNC_get_current_cgroup_id() BPF_FUNC_send_signal() BPF_FUNC_probe_read_kernel() BPF_FUNC_probe_read_kernel_str() BPF_FUNC_probe_read_user() BPF_FUNC_probe_read_user_str() BPF_FUNC_send_signal_thread() BPF_FUNC_get_ns_current_pid_tgid() BPF_FUNC_xdp_output() BPF_FUNC_get_task_stack() |
LWT functions |
BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_pull_data() BPF_FUNC_csum_diff() BPF_FUNC_get_cgroup_classid() BPF_FUNC_get_route_realm() BPF_FUNC_get_hash_recalc() BPF_FUNC_perf_event_output() BPF_FUNC_get_smp_processor_id() BPF_FUNC_skb_under_cgroup() |