• Andrii Nakryiko's avatar
    libbpf: Add bpf_link pinning/unpinning · c016b68e
    Andrii Nakryiko authored
    With bpf_link abstraction supported by kernel explicitly, add
    pinning/unpinning API for links. Also allow to create (open) bpf_link from BPF
    FS file.
    
    This API allows to have an "ephemeral" FD-based BPF links (like raw tracepoint
    or fexit/freplace attachments) surviving user process exit, by pinning them in
    a BPF FS, which is an important use case for long-running BPF programs.
    
    As part of this, expose underlying FD for bpf_link. While legacy bpf_link's
    might not have a FD associated with them (which will be expressed as
    a bpf_link with fd=-1), kernel's abstraction is based around FD-based usage,
    so match it closely. This, subsequently, allows to have a generic
    pinning/unpinning API for generalized bpf_link. For some types of bpf_links
    kernel might not support pinning, in which case bpf_link__pin() will return
    error.
    
    With FD being part of generic bpf_link, also get rid of bpf_link_fd in favor
    of using vanialla bpf_link.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200303043159.323675-3-andriin@fb.com
    c016b68e
libbpf.c 210 KB