Libbpf v1.3.0 has been released ([0]). It has been over 4 months since the release of libbpf v1.2.2, and a significant number of new features are now available. So it looks like a good time for a new release. A big thank you to all the contributors that are constantly making libbpf a better BPF loader library! Please find the summary of libbpf v1.3.0 changes below. ## User space-side features and APIs - support for `netfilter` programs is added: - `SEC("netfilter")` is now available - API function `bpf_program__attach_netfilter()` is now available - support for `tcx` BPF programs is added: - the following new SEC definitions are now available: - `SEC("tc/egress")` - `SEC("tc/ingress")` - `SEC("tcx/egress")` - `SEC("tcx/ingress")` - the following SEC definitions are now considered legacy: - `SEC("tc")` - `SEC("action")` - `SEC("classifier")` - functions `bpf_prog_attach_opts()` and `bpf_prog_query_opts()` are extended to work with `tcx` programs, plus two new API functions are added: - `bpf_prog_detach_opts()` - `bpf_program__attach_tcx()` - support for multi-uprobe programs is added: - the following new SEC definitions are now available: - `SEC("uprobe.multi")` - `SEC("uprobe.multi.s")` - `SEC("uretprobe.multi")` - `SEC("uretprobe.multi.s")` - plus a new API function: - `bpf_program__attach_uprobe_multi()` - support for section `SEC("usdt.s")` is added for sleepable `usdt` programs; - support for Unix domain socket cgroup BPF programs is added the following new SEC definitions are now available: - `SEC("cgroup/connect_unix")` - `SEC("cgroup/sendmsg_unix")` - `SEC("cgroup/recvmsg_unix")` - `SEC("cgroup/getpeername_unix")` - `SEC("cgroup/getsockname_unix")` - new `LIBBPF_OPTS_RESET()` utility macro; - new `bpf_object__unpin()` function to complement existing `bpf_object__pin()`; - new API functions for work with ring buffers: - `ring_buffer__ring()` - `ring__producer_pos()` - `ring__consumer_pos()` - `ring__avail_data_size()` - `ring__size()` - `ring__map_fd()` - `ring__consume()` - `path_fd` support for `bpf_obj_pin()` and `bpf_obj_get()`; - uprobe SEC matcher extended to allow golang symbols; - uprobe support for symbols versioning; - `bpf_map__set_value_size()` can now be used to resize memory mapped region for memory mapped maps; - `struct bpf_xdp_query_opts` extended with `xdp_zc_max_segs` output field; - basic BTF sanity check pass added to reject bogus BTF. ## BPF-side features and APIs - triple-underscore flavors for kfunc relocation: like with CO-RE structs `___.*` suffix is ignored when kfunc relocations are resolved; - `__percpu_kptr` macro definition in `bpf_helpers.h`; - support for exception callbacks, use `__attribute__(btf_decl_tag("exception_callback:<func_name>"))` to specify exception callback for a program; ## Bug fixes - fix for btf_dump__dump_type_data() when type contains bitfields; - fix for correct work of offsetof() and container_of() macro with CO-RE; - no longer attempt to load modules BTF when resolving CO-RE relocations if CAP_SYS_ADMIN are absent; - regex based function search for "kprobe.multi/" programs no longer attempts to trace functions that cannot be traced; - bpf_program__set_type() no longer resets sec_def if it is set to a custom fallback SEC handler; - fix for memory leak possible after bpf_program__set_attach_target() call; [0] https://github.com/libbpf/libbpf/releases/tag/v1.3.0 [1] Full Changelog: https://github.com/libbpf/libbpf/compare/v1.2.2...v1.3.0 Best regards, Eduard