BPF Features by Linux Kernel Version

eBPF support

Kernel versionCommit
3.15bd4cf0ed331a

JIT compiling

Feature / ArchitectureKernel versionCommit
x86_643.16622582786c9e
ARM643.18e54bcde3d69d
s3904.1054623105728
Constant blinding for JIT machines4.74f3446bb809f
PowerPC644.8156d0e290e96
Constant blinding - PowerPC644.9b7b7013cac55
Sparc644.127a12b5031c6b
MIPS4.13f381bf6d82f0
ARM324.1439c13c204bb1

Main features

FeatureKernel versionCommit
AF_PACKET (libpcap/tcpdump, cls_bpf classifier, netfilter's xt_bpf, team driver's load-balancing modeā€¦)3.15bd4cf0ed331a
Kernel helpers3.15bd4cf0ed331a
bpf() syscall3.1899c55f7d47c0
Tables (a.k.a. Maps; details below)3.1899c55f7d47c0
BPF attached to sockets3.1989aa075832b0
BPF attached to kprobes4.12541517c32be
cls_bpf / act_bpf for tc4.1e2e9b6541dd4
Tail calls4.204fd61ab36ec
Non-root programs on sockets4.41be7f75d1668
Persistent maps and programs (virtual FS)4.4b2197755b263
tc's direct-action (da) mode4.4045efa82ff56
tc's clsact qdisc4.51f211a1b929c
BPF attached to tracepoints4.798b5c2c65c29
Direct packet access4.7969bf05eb3ce
XDP (see below)4.86a773a15a1e8
BPF attached to perf events4.90515e5999a46
Hardware offload for tc's cls_bpf4.9332ae8e2f6ec
Verifier exposure and internal hooks4.913a27dfc6697
BPF attached to cgroups for socket filtering4.100e33661de493
Lightweight tunnel encapsulation4.103a0af8fd61f9
eBPF support for xt_bpf module (iptables)4.102c16d6033264
BPF program tag4.107bd509e311f4
Tracepoints to debug BPF4.11a67edbf4fb6d
Testing / benchmarking BPF programs4.121cf1cae963c2
BPF programs and maps IDs4.13dc4bb0e23561
BPF support for sock_ops4.1340304b2a1567
BPF support for skbs on sockets4.14b005fd189cec

Tables (a.k.a. Maps)

Table typeKernel versionCommit
Hash3.190f8e4bd8a1fc
Array3.1928fbcfa08d8e
Tail call (PROG_ARRAY)4.204fd61ab36ec
Perf events4.3ea317b267e9d
Per-CPU hash4.6824bd0ce6c7c
Per-CPU array4.6a10423b87a7e
Stack trace4.6d5a3b1f69186
Pre-alloc maps memory4.66c9059817432
cgroup array4.84ed8ec521ed5
LRU hash4.1029ba732acbee 3a08c2fd7634
LRU per-CPU hash4.108f8449384ec3 961578b63474
LPM trie (longest-prefix match)4.11b95a5c4db09b
Array of maps4.1256f668dfe00d
Hash of maps4.12bcc6b1b7ebf8
Netdevice references4.14546ac1ffb70d
Socket references4.14174a79ff9515
Text stringTo be done?
Variable-length mapsTo be done?

XDP

Feature / DriverKernel versionCommit
XDP core architecture4.86a773a15a1e8
Action: drop4.86a773a15a1e8
Action: pass on to stack4.86a773a15a1e8
Action: direct forwarding (on same port)4.86ce96ca348a9
Direct packet data write4.84acf6c0b84c9
Mellanox mlx4 driver4.847a38e155037
Mellanox mlx5 driver4.986994156c736
Netronome nfp driver4.10ecd63a0217d5
QLogic (Cavium) qed* drivers4.10496e05170958
virtio_net driver4.10f600b6905015
Broadcom bnxt_en driver4.11c6d30e8391b8
Intel ixgbe* drivers4.12924708081629
Cavium thunderx driver4.1205c773f52b96
Generic XDP4.12b5cdae3291f7
Intel i40e driver4.130c8493d90b6b
Action: redirect4.146453073987ba
Support for tap4.14761876c857cb
Support for veth4.14d445516966dc
Intel e1000 driverNot upstream yet
Intel e1000e driverNot planned for upstream at this time

Helpers

Alphabetical order

HelperKernel versionCommit
BPF_FUNC_clone_redirect()4.23896d655f4d4
BPF_FUNC_csum_diff()4.67d672345ed29
BPF_FUNC_csum_update()4.936bbef52c7eb
BPF_FUNC_current_task_under_cgroup()4.960d20f9195b2
BPF_FUNC_get_cgroup_classid()4.38d20aabe1c76
BPF_FUNC_get_current_comm()4.2ffeedafbf023
BPF_FUNC_get_current_pid_tgid()4.2ffeedafbf023
BPF_FUNC_get_current_task()4.8606274c5abd8
BPF_FUNC_get_current_uid_gid()4.2ffeedafbf023
BPF_FUNC_get_hash_recalc()4.813c5c240f789
BPF_FUNC_get_numa_node_id()4.102d0e30c30f84
BPF_FUNC_get_prandom_u32()4.103e69b508b6f
BPF_FUNC_get_route_realm()4.4c46646d0484f
BPF_FUNC_get_smp_processor_id()4.1c04167ce2ca0
BPF_FUNC_get_socket_cookie()4.1291b8270f2a4d
BPF_FUNC_get_socket_uid()4.126acc5c291068
BPF_FUNC_get_stackid()4.6d5a3b1f69186
BPF_FUNC_ktime_get_ns()4.1d9847d310ab4
BPF_FUNC_l3_csum_replace()4.191bc4822c3d6
BPF_FUNC_l4_csum_replace()4.191bc4822c3d6
BPF_FUNC_map_delete_elem()3.19d0003ec01c66
BPF_FUNC_map_lookup_elem()3.19d0003ec01c66
BPF_FUNC_map_update_elem()3.19d0003ec01c66
BPF_FUNC_perf_event_output()4.4a43eec304259
BPF_FUNC_perf_event_read()4.335578d798400
BPF_FUNC_perf_event_read_value()4.15908432ca84fc
BPF_FUNC_perf_prog_read_value()4.154bebdc7a85aa
BPF_FUNC_probe_read()4.12541517c32be
BPF_FUNC_probe_read_str()4.11a5e8c07059d0
BPF_FUNC_probe_write_user()4.896ae52279594
BPF_FUNC_redirect()4.427b29f63058d
BPF_FUNC_redirect_map()4.14174a79ff9515
BPF_FUNC_set_hash()4.138c4b4c7e9ff0
BPF_FUNC_set_hash_invalid()4.97a4b28c6cc9f
BPF_FUNC_setsockopt()4.134b4c7e9ff044
BPF_FUNC_sk_redirect_map()4.14174a79ff9515
BPF_FUNC_skb_adjust_room()4.132be7e212d541
BPF_FUNC_skb_change_head()4.103a0af8fd61f9
BPF_FUNC_skb_change_proto()4.86578171a7ff0
BPF_FUNC_skb_change_tail()4.95293efe62df8
BPF_FUNC_skb_change_type()4.8d2485c4242a82
BPF_FUNC_skb_get_tunnel_key()4.3d3aa45ce6b94
BPF_FUNC_skb_get_tunnel_opt()4.614ca0751c96f
BPF_FUNC_skb_load_bytes()4.505c74e5e53f6
BPF_FUNC_skb_pull_data()4.936bbef52c7eb
BPF_FUNC_skb_set_tunnel_key()4.3d3aa45ce6b94
BPF_FUNC_skb_set_tunnel_opt()4.614ca0751c96f
BPF_FUNC_skb_store_bytes()4.191bc4822c3d6
BPF_FUNC_skb_under_cgroup()4.84a482f34afcc
BPF_FUNC_skb_vlan_pop()4.34e10df9a60d9
BPF_FUNC_skb_vlan_push()4.34e10df9a60d9
BPF_FUNC_sock_map_update()4.14174a79ff9515
BPF_FUNC_tail_call()4.204fd61ab36ec
BPF_FUNC_trace_printk()4.19c959c863f82
BPF_FUNC_xdp_adjust_head()4.1017bedab27231
BPF_FUNC_xdp_adjust_meta()4.15de8f3a83b0a0