• Andrii Nakryiko's avatar
    libbpf: Add a bunch of attribute getters/setters for map definitions · 1bdb6c9a
    Andrii Nakryiko authored
    Add a bunch of getter for various aspects of BPF map. Some of these attribute
    (e.g., key_size, value_size, type, etc) are available right now in struct
    bpf_map_def, but this patch adds getter allowing to fetch them individually.
    bpf_map_def approach isn't very scalable, when ABI stability requirements are
    taken into account. It's much easier to extend libbpf and add support for new
    features, when each aspect of BPF map has separate getter/setter.
    
    Getters follow the common naming convention of not explicitly having "get" in
    its name: bpf_map__type() returns map type, bpf_map__key_size() returns
    key_size. Setters, though, explicitly have set in their name:
    bpf_map__set_type(), bpf_map__set_key_size().
    
    This patch ensures we now have a getter and a setter for the following
    map attributes:
      - type;
      - max_entries;
      - map_flags;
      - numa_node;
      - key_size;
      - value_size;
      - ifindex.
    
    bpf_map__resize() enforces unnecessary restriction of max_entries > 0. It is
    unnecessary, because libbpf actually supports zero max_entries for some cases
    (e.g., for PERF_EVENT_ARRAY map) and treats it specially during map creation
    time. To allow setting max_entries=0, new bpf_map__set_max_entries() setter is
    added. bpf_map__resize()'s behavior is preserved for backwards compatibility
    reasons.
    
    Map ifindex getter is added as well. There is a setter already, but no
    corresponding getter. Fix this assymetry as well. bpf_map__set_ifindex()
    itself is converted from void function into error-returning one, similar to
    other setters. The only error returned right now is -EBUSY, if BPF map is
    already loaded and has corresponding FD.
    
    One lacking attribute with no ability to get/set or even specify it
    declaratively is numa_node. This patch fixes this gap and both adds
    programmatic getter/setter, as well as adds support for numa_node field in
    BTF-defined map.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
    Link: https://lore.kernel.org/bpf/20200621062112.3006313-1-andriin@fb.com
    1bdb6c9a
libbpf.h 26.5 KB