The last few month BPF community has been discussing an approach to call chaining, since exiting bpt_tail_call() mechanism used in production XDP programs has plenty of downsides. The outcome of these discussion was a conclusion to implement dynamic re-linking of BPF programs. Where rootlet XDP program attached to a netdevice can programmatically define a policy of execution of other XDP programs. Such rootlet would be compiled as normal XDP program and provide a number of placeholder global functions which later can be replaced with future XDP programs. BPF trampoline, function by function verification were building blocks towards that goal. The patch 1 is a final building block. It introduces dynamic program extensions. A number of improvements like more flexible function by function verification and better libbpf api will be implemented in future patches. v1->v2: - addressed Andrii's comments - rebase Alexei Starovoitov (3): bpf: Introduce dynamic program extensions libbpf: Add support for program extensions selftests/bpf: Add tests for program extensions include/linux/bpf.h | 10 +- include/linux/bpf_types.h | 2 + include/linux/btf.h | 5 + include/uapi/linux/bpf.h | 1 + kernel/bpf/btf.c | 152 +++++++++++++++++- kernel/bpf/syscall.c | 15 +- kernel/bpf/trampoline.c | 41 ++++- kernel/bpf/verifier.c | 85 +++++++--- tools/include/uapi/linux/bpf.h | 1 + tools/lib/bpf/bpf.c | 3 +- tools/lib/bpf/libbpf.c | 13 +- tools/lib/bpf/libbpf.h | 2 + tools/lib/bpf/libbpf.map | 2 + tools/lib/bpf/libbpf_probes.c | 1 + .../selftests/bpf/prog_tests/fexit_bpf2bpf.c | 20 ++- .../selftests/bpf/progs/fexit_bpf2bpf.c | 57 +++++++ .../selftests/bpf/progs/test_pkt_access.c | 8 +- 17 files changed, 384 insertions(+), 34 deletions(-) -- 2.23.0