On 18/06/2024 19:38, Andrii Nakryiko wrote: > New versions of bpftool now emit additional link placeholders for BPF > maps (struct_ops maps are the only maps right now that support > attachment), and set up BPF skeleton in such a way that libbpf will > auto-attach BPF maps automatically, assumming libbpf is recent enough > (v1.5+). Old libbpf will do nothing with those links and won't attempt > to auto-attach maps. This allows user code to handle both pre-v1.5 and > v1.5+ versions of libbpf at runtime, if necessary. > > But if users don't have (or don't want to) control bpftool version that > generates skeleton, then they can't just assume that skeleton will have > link placeholders. To make this detection possible and easy, let's add > the following to generated skeleton header file: > > #define BPF_SKEL_SUPPORTS_MAP_AUTO_ATTACH 1 > > This can be used during compilation time to guard code that accesses > skel->links.<map> slots. > > Note, if auto-attachment is undesirable, libbpf allows to disable this > through bpf_map__set_autoattach(map, false). This is necessary only on > libbpf v1.5+, older libbpf doesn't support map auto-attach anyways. > > Libbpf version can be detected at compilation time using > LIBBPF_MAJOR_VERSION and LIBBPF_MINOR_VERSION macros, or at runtime with > libbpf_major_version() and libbpf_minor_version() APIs. > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> Looks good, thanks. Acked-by: Quentin Monnet <qmo@xxxxxxxxxx>