This series adds BPF link support for tc BPF programs. We initially presented the motivation, related work and design at last year's LPC conference in the networking & BPF track [0], and a recent update on our progress of the rework during this year's LSF/MM/BPF summit [1]. The main changes are in first two patches and the last two have an extensive batch of test cases we developed along with it, please see individual patches for details. We tested this series with tc-testing selftest suite as well as BPF CI/selftests. Thanks! [0] https://lpc.events/event/16/contributions/1353/ [1] http://vger.kernel.org/bpfconf2023_material/tcx_meta_netdev_borkmann.pdf Daniel Borkmann (7): bpf: Add generic attach/detach/query API for multi-progs bpf: Add fd-based tcx multi-prog infra with link support libbpf: Add opts-based attach/detach/query API for tcx libbpf: Add link-based API for tcx bpftool: Extend net dump with tcx progs selftests/bpf: Add mprog API tests for BPF tcx opts selftests/bpf: Add mprog API tests for BPF tcx links MAINTAINERS | 5 +- include/linux/bpf_mprog.h | 245 ++ include/linux/netdevice.h | 15 +- include/linux/skbuff.h | 4 +- include/net/sch_generic.h | 2 +- include/net/tcx.h | 157 + include/uapi/linux/bpf.h | 72 +- kernel/bpf/Kconfig | 1 + kernel/bpf/Makefile | 3 +- kernel/bpf/mprog.c | 476 +++ kernel/bpf/syscall.c | 95 +- kernel/bpf/tcx.c | 347 +++ net/Kconfig | 5 + net/core/dev.c | 267 +- net/core/filter.c | 4 +- net/sched/Kconfig | 4 +- net/sched/sch_ingress.c | 45 +- tools/bpf/bpftool/net.c | 92 +- tools/include/uapi/linux/bpf.h | 72 +- tools/lib/bpf/bpf.c | 83 +- tools/lib/bpf/bpf.h | 61 +- tools/lib/bpf/libbpf.c | 50 +- tools/lib/bpf/libbpf.h | 17 + tools/lib/bpf/libbpf.map | 2 + .../selftests/bpf/prog_tests/tc_helpers.h | 72 + .../selftests/bpf/prog_tests/tc_links.c | 2279 ++++++++++++++ .../selftests/bpf/prog_tests/tc_opts.c | 2698 +++++++++++++++++ .../selftests/bpf/progs/test_tc_link.c | 40 + 28 files changed, 6995 insertions(+), 218 deletions(-) create mode 100644 include/linux/bpf_mprog.h create mode 100644 include/net/tcx.h create mode 100644 kernel/bpf/mprog.c create mode 100644 kernel/bpf/tcx.c create mode 100644 tools/testing/selftests/bpf/prog_tests/tc_helpers.h create mode 100644 tools/testing/selftests/bpf/prog_tests/tc_links.c create mode 100644 tools/testing/selftests/bpf/prog_tests/tc_opts.c create mode 100644 tools/testing/selftests/bpf/progs/test_tc_link.c -- 2.34.1