Hi David, hi Jakub, The following pull-request contains BPF updates for your *net-next* tree. We've added 50 non-merge commits during the last 25 day(s) which contain a total of 148 files changed, 4779 insertions(+), 1248 deletions(-). The main changes are: 1) BPF infrastructure to migrate TCP child sockets from a listener to another in the same reuseport group/map, from Kuniyuki Iwashima. 2) Add a provably sound, faster and more precise algorithm for tnum_mul() as noted in https://arxiv.org/abs/2105.05398, from Harishankar Vishwanathan. 3) Streamline error reporting changes in libbpf as planned out in the 'libbpf: the road to v1.0' effort, from Andrii Nakryiko. 4) Add broadcast support to xdp_redirect_map(), from Hangbin Liu. 5) Extends bpf_map_lookup_and_delete_elem() functionality to 4 more map types, that is, {LRU_,PERCPU_,LRU_PERCPU_,}HASH, from Denis Salopek. 6) Support new LLVM relocations in libbpf to make them more linker friendly, also add a doc to describe the BPF backend relocations, from Yonghong Song. 7) Silence long standing KUBSAN complaints on register-based shifts in interpreter, from Daniel Borkmann and Eric Biggers. 8) Add dummy PT_REGS macros in libbpf to fail BPF program compilation when target arch cannot be determined, from Lorenz Bauer. 9) Extend AF_XDP to support large umems with 1M+ pages, from Magnus Karlsson. 10) Fix two minor libbpf tc BPF API issues, from Kumar Kartikeya Dwivedi. 11) Move libbpf BPF_SEQ_PRINTF/BPF_SNPRINTF macros that can be used by BPF programs to bpf_helpers.h header, from Florent Revest. Please consider pulling these changes from: git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git Thanks a lot! Also thanks to reporters, reviewers and testers of commits in this pull-request: Alexei Starovoitov, Andrii Nakryiko, Benjamin Herrenschmidt, Björn Töpel, Colin Ian King, Dan Siemon, Edward Cree, Eric Dumazet, Hulk Robot, Jesper Dangaard Brouer, John Fastabend, Kuniyuki Iwashima, Kurt Manucredo, Martin KaFai Lau, Quentin Monnet, Randy Dunlap, Toke Høiland-Jørgensen, Yonghong Song ---------------------------------------------------------------- The following changes since commit ec7d6dd870d421a853ffa692d4bce5783a519342: ethernet: ucc_geth: Use kmemdup() rather than kmalloc+memcpy (2021-05-23 18:51:42 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git for you to fetch changes up to f20792d425d2efd2680f2855c1e3fec01c2e569e: selftests/bpf: Fix selftests build with old system-wide headers (2021-06-17 13:05:10 +0200) ---------------------------------------------------------------- Aditya Srivastava (1): samples: bpf: Ix kernel-doc syntax in file header Alexei Starovoitov (1): Merge branch 'libbpf: error reporting changes for v1.0' Andrii Nakryiko (11): Merge branch 'Add lookup_and_delete_elem support to BPF hash map types' libbpf: Add libbpf_set_strict_mode() API to turn on libbpf 1.0 behaviors selftests/bpf: Turn on libbpf 1.0 mode and fix all IS_ERR checks libbpf: Streamline error reporting for low-level APIs libbpf: Streamline error reporting for high-level APIs bpftool: Set errno on skeleton failures and propagate errors libbpf: Move few APIs from 0.4 to 0.5 version libbpf: Refactor header installation portions of Makefile libbpf: Install skel_internal.h header used from light skeletons selftests/bpf: Add xdp_redirect_multi into .gitignore selftests/bpf: Fix selftests build with old system-wide headers Daniel Borkmann (3): Merge branch 'bpf-xdp-bcast' Merge branch 'bpf-sock-migration' bpf: Fix up register-based shifts in interpreter to silence KUBSAN Daniel Xu (1): selftests/bpf: Whitelist test_progs.h from .gitignore Denis Salopek (3): bpf: Add lookup_and_delete_elem support to hashtab bpf: Extend libbpf with bpf_map_lookup_and_delete_elem_flags selftests/bpf: Add bpf_lookup_and_delete_elem tests Florent Revest (1): libbpf: Move BPF_SEQ_PRINTF and BPF_SNPRINTF to bpf_helpers.h Hangbin Liu (4): xdp: Extend xdp_redirect_map with broadcast support sample/bpf: Add xdp_redirect_map_multi for redirect_map broadcast test selftests/bpf: Add xdp_redirect_multi test bpf, devmap: Remove drops variable from bq_xmit_all() Harishankar Vishwanathan (1): bpf, tnums: Provably sound, faster, and more precise algorithm for tnum_mul Jean-Philippe Brucker (1): tools/bpftool: Fix cross-build Jesper Dangaard Brouer (1): bpf: Run devmap xdp_prog on flush instead of bulk enqueue Joe Stringer (1): selftests, bpf: Make docs tests fail more reliably Kumar Kartikeya Dwivedi (2): libbpf: Remove unneeded check for flags during tc detach libbpf: Set NLM_F_EXCL when creating qdisc Kuniyuki Iwashima (11): net: Introduce net.ipv4.tcp_migrate_req. tcp: Add num_closed_socks to struct sock_reuseport. tcp: Keep TCP_CLOSE sockets in the reuseport group. tcp: Add reuseport_migrate_sock() to select a new listener. tcp: Migrate TCP_ESTABLISHED/TCP_SYN_RECV sockets in accept queues. tcp: Migrate TCP_NEW_SYN_RECV requests at retransmitting SYN+ACKs. tcp: Migrate TCP_NEW_SYN_RECV requests at receiving the final ACK. bpf: Support BPF_FUNC_get_socket_cookie() for BPF_PROG_TYPE_SK_REUSEPORT. bpf: Support socket migration by eBPF. libbpf: Set expected_attach_type for BPF_PROG_TYPE_SK_REUSEPORT. bpf: Test BPF_SK_REUSEPORT_SELECT_OR_MIGRATE. Lorenz Bauer (1): libbpf: Fail compilation if target arch is missing Magnus Karlsson (1): xsk: Use kvcalloc to support large umems Michal Suchanek (1): libbpf: Fix pr_warn type warnings on 32bit Shuyi Cheng (1): bpf: Fix typo in kernel/bpf/bpf_lsm.c Stanislav Fomichev (1): libbpf: Skip bpf_object__probe_loading for light skeleton Wang Hai (3): libbpf: Simplify the return expression of bpf_object__init_maps function samples/bpf: Add missing option to xdp_fwd usage samples/bpf: Add missing option to xdp_sample_pkts usage Yonghong Song (2): libbpf: Add support for new llvm bpf relocations bpf, docs: Add llvm_reloc.rst to explain llvm bpf relocations Zhen Lei (1): bpf: Fix spelling mistakes Zhihao Cheng (1): tools/bpftool: Fix error return code in do_batch() Documentation/bpf/index.rst | 1 + Documentation/bpf/llvm_reloc.rst | 240 +++++++++ Documentation/networking/ip-sysctl.rst | 25 + include/linux/bpf.h | 23 + include/linux/bpf_local_storage.h | 4 +- include/linux/filter.h | 21 +- include/net/netns/ipv4.h | 1 + include/net/sock_reuseport.h | 9 +- include/net/xdp.h | 1 + include/trace/events/xdp.h | 6 +- include/uapi/linux/bpf.h | 43 +- kernel/bpf/bpf_inode_storage.c | 2 +- kernel/bpf/bpf_lsm.c | 2 +- kernel/bpf/btf.c | 6 +- kernel/bpf/core.c | 61 ++- kernel/bpf/cpumap.c | 3 +- kernel/bpf/devmap.c | 305 +++++++++-- kernel/bpf/hashtab.c | 102 +++- kernel/bpf/preload/iterators/iterators.bpf.c | 1 - kernel/bpf/reuseport_array.c | 2 +- kernel/bpf/syscall.c | 47 +- kernel/bpf/tnum.c | 41 +- kernel/bpf/trampoline.c | 2 +- kernel/bpf/verifier.c | 12 +- net/core/filter.c | 60 ++- net/core/sock_reuseport.c | 359 +++++++++++-- net/core/xdp.c | 28 ++ net/ipv4/inet_connection_sock.c | 191 ++++++- net/ipv4/inet_hashtables.c | 2 +- net/ipv4/sysctl_net_ipv4.c | 9 + net/ipv4/tcp_ipv4.c | 20 +- net/ipv4/tcp_minisocks.c | 4 +- net/ipv6/tcp_ipv6.c | 14 +- net/xdp/xdp_umem.c | 7 +- net/xdp/xskmap.c | 3 +- samples/bpf/Makefile | 3 + samples/bpf/ibumad_kern.c | 2 +- samples/bpf/ibumad_user.c | 2 +- samples/bpf/xdp_fwd_user.c | 2 + samples/bpf/xdp_redirect_map_multi_kern.c | 88 ++++ samples/bpf/xdp_redirect_map_multi_user.c | 302 +++++++++++ samples/bpf/xdp_sample_pkts_user.c | 3 +- tools/bpf/bpftool/Makefile | 5 +- tools/bpf/bpftool/gen.c | 27 +- tools/bpf/bpftool/main.c | 4 +- tools/include/uapi/linux/bpf.h | 43 +- tools/lib/bpf/Makefile | 18 +- tools/lib/bpf/bpf.c | 179 +++++-- tools/lib/bpf/bpf.h | 2 + tools/lib/bpf/bpf_helpers.h | 66 +++ tools/lib/bpf/bpf_prog_linfo.c | 18 +- tools/lib/bpf/bpf_tracing.h | 108 ++-- tools/lib/bpf/btf.c | 302 +++++------ tools/lib/bpf/btf_dump.c | 14 +- tools/lib/bpf/libbpf.c | 535 +++++++++++--------- tools/lib/bpf/libbpf.h | 1 + tools/lib/bpf/libbpf.map | 10 +- tools/lib/bpf/libbpf_errno.c | 7 +- tools/lib/bpf/libbpf_internal.h | 59 +++ tools/lib/bpf/libbpf_legacy.h | 59 +++ tools/lib/bpf/linker.c | 25 +- tools/lib/bpf/netlink.c | 85 ++-- tools/lib/bpf/ringbuf.c | 26 +- tools/testing/selftests/bpf/.gitignore | 3 + tools/testing/selftests/bpf/Makefile | 3 +- tools/testing/selftests/bpf/Makefile.docs | 3 +- tools/testing/selftests/bpf/README.rst | 19 + tools/testing/selftests/bpf/bench.c | 1 + tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +- .../testing/selftests/bpf/benchs/bench_ringbufs.c | 6 +- tools/testing/selftests/bpf/benchs/bench_trigger.c | 2 +- tools/testing/selftests/bpf/network_helpers.c | 2 +- tools/testing/selftests/bpf/network_helpers.h | 1 + .../selftests/bpf/prog_tests/attach_probe.c | 12 +- tools/testing/selftests/bpf/prog_tests/bpf_iter.c | 31 +- .../testing/selftests/bpf/prog_tests/bpf_tcp_ca.c | 8 +- tools/testing/selftests/bpf/prog_tests/btf.c | 93 ++-- tools/testing/selftests/bpf/prog_tests/btf_dump.c | 8 +- tools/testing/selftests/bpf/prog_tests/btf_write.c | 4 +- .../selftests/bpf/prog_tests/cg_storage_multi.c | 84 ++-- .../selftests/bpf/prog_tests/cgroup_attach_multi.c | 2 +- .../testing/selftests/bpf/prog_tests/cgroup_link.c | 14 +- .../bpf/prog_tests/cgroup_skb_sk_lookup.c | 2 +- tools/testing/selftests/bpf/prog_tests/check_mtu.c | 2 +- .../testing/selftests/bpf/prog_tests/core_reloc.c | 15 +- .../selftests/bpf/prog_tests/fexit_bpf2bpf.c | 25 +- .../selftests/bpf/prog_tests/flow_dissector.c | 2 +- .../bpf/prog_tests/flow_dissector_reattach.c | 10 +- .../selftests/bpf/prog_tests/get_stack_raw_tp.c | 10 +- .../bpf/prog_tests/get_stackid_cannot_attach.c | 9 +- tools/testing/selftests/bpf/prog_tests/hashmap.c | 9 +- tools/testing/selftests/bpf/prog_tests/kfree_skb.c | 19 +- tools/testing/selftests/bpf/prog_tests/ksyms_btf.c | 3 +- .../selftests/bpf/prog_tests/link_pinning.c | 7 +- .../selftests/bpf/prog_tests/lookup_and_delete.c | 288 +++++++++++ .../selftests/bpf/prog_tests/migrate_reuseport.c | 559 +++++++++++++++++++++ tools/testing/selftests/bpf/prog_tests/obj_name.c | 8 +- .../selftests/bpf/prog_tests/perf_branches.c | 4 +- .../testing/selftests/bpf/prog_tests/perf_buffer.c | 2 +- .../selftests/bpf/prog_tests/perf_event_stackmap.c | 3 +- .../testing/selftests/bpf/prog_tests/probe_user.c | 7 +- .../selftests/bpf/prog_tests/prog_run_xattr.c | 4 +- .../selftests/bpf/prog_tests/raw_tp_test_run.c | 4 +- .../testing/selftests/bpf/prog_tests/rdonly_maps.c | 7 +- .../selftests/bpf/prog_tests/reference_tracking.c | 2 +- .../selftests/bpf/prog_tests/resolve_btfids.c | 2 +- .../selftests/bpf/prog_tests/ringbuf_multi.c | 2 +- .../selftests/bpf/prog_tests/select_reuseport.c | 53 +- .../testing/selftests/bpf/prog_tests/send_signal.c | 3 +- tools/testing/selftests/bpf/prog_tests/sk_lookup.c | 2 +- .../testing/selftests/bpf/prog_tests/sock_fields.c | 14 +- .../selftests/bpf/prog_tests/sockmap_basic.c | 8 +- .../selftests/bpf/prog_tests/sockmap_ktls.c | 2 +- .../selftests/bpf/prog_tests/sockmap_listen.c | 10 +- .../bpf/prog_tests/stacktrace_build_id_nmi.c | 3 +- .../selftests/bpf/prog_tests/stacktrace_map.c | 2 +- .../bpf/prog_tests/stacktrace_map_raw_tp.c | 5 +- .../selftests/bpf/prog_tests/tcp_hdr_options.c | 15 +- .../selftests/bpf/prog_tests/test_overhead.c | 12 +- .../selftests/bpf/prog_tests/trampoline_count.c | 14 +- tools/testing/selftests/bpf/prog_tests/udp_limit.c | 7 +- .../testing/selftests/bpf/prog_tests/xdp_bpf2bpf.c | 2 +- tools/testing/selftests/bpf/prog_tests/xdp_link.c | 8 +- .../selftests/bpf/progs/bpf_iter_bpf_hash_map.c | 1 - .../testing/selftests/bpf/progs/bpf_iter_bpf_map.c | 1 - .../selftests/bpf/progs/bpf_iter_ipv6_route.c | 1 - .../testing/selftests/bpf/progs/bpf_iter_netlink.c | 1 - tools/testing/selftests/bpf/progs/bpf_iter_task.c | 1 - .../selftests/bpf/progs/bpf_iter_task_btf.c | 1 - .../selftests/bpf/progs/bpf_iter_task_file.c | 1 - .../selftests/bpf/progs/bpf_iter_task_stack.c | 1 - .../selftests/bpf/progs/bpf_iter_task_vma.c | 1 - tools/testing/selftests/bpf/progs/bpf_iter_tcp4.c | 1 - tools/testing/selftests/bpf/progs/bpf_iter_tcp6.c | 1 - tools/testing/selftests/bpf/progs/bpf_iter_udp4.c | 1 - tools/testing/selftests/bpf/progs/bpf_iter_udp6.c | 1 - .../selftests/bpf/progs/test_lookup_and_delete.c | 26 + .../selftests/bpf/progs/test_migrate_reuseport.c | 135 +++++ tools/testing/selftests/bpf/progs/test_snprintf.c | 1 - .../selftests/bpf/progs/xdp_redirect_multi_kern.c | 94 ++++ tools/testing/selftests/bpf/test_doc_build.sh | 1 + tools/testing/selftests/bpf/test_lru_map.c | 8 + tools/testing/selftests/bpf/test_maps.c | 185 ++++--- tools/testing/selftests/bpf/test_progs.c | 3 + tools/testing/selftests/bpf/test_progs.h | 9 +- tools/testing/selftests/bpf/test_tcpnotify_user.c | 7 +- .../selftests/bpf/test_xdp_redirect_multi.sh | 204 ++++++++ tools/testing/selftests/bpf/xdp_redirect_multi.c | 226 +++++++++ 148 files changed, 4779 insertions(+), 1248 deletions(-) create mode 100644 Documentation/bpf/llvm_reloc.rst create mode 100644 samples/bpf/xdp_redirect_map_multi_kern.c create mode 100644 samples/bpf/xdp_redirect_map_multi_user.c create mode 100644 tools/lib/bpf/libbpf_legacy.h create mode 100644 tools/testing/selftests/bpf/prog_tests/lookup_and_delete.c create mode 100644 tools/testing/selftests/bpf/prog_tests/migrate_reuseport.c create mode 100644 tools/testing/selftests/bpf/progs/test_lookup_and_delete.c create mode 100644 tools/testing/selftests/bpf/progs/test_migrate_reuseport.c create mode 100644 tools/testing/selftests/bpf/progs/xdp_redirect_multi_kern.c create mode 100755 tools/testing/selftests/bpf/test_xdp_redirect_multi.sh create mode 100644 tools/testing/selftests/bpf/xdp_redirect_multi.c