• Andrii Nakryiko's avatar
    bpftool: Allow compile-time checks of BPF map auto-attach support in skeleton · 651337c7
    Andrii Nakryiko authored
    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: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarQuentin Monnet <qmo@kernel.org>
    Link: https://lore.kernel.org/bpf/20240618183832.2535876-1-andrii@kernel.org
    651337c7
gen.c 63.5 KB