• Yonghong Song's avatar
    bpf: Implement bpf iterator for map elements · a5cbe05a
    Yonghong Song authored
    The bpf iterator for map elements are implemented.
    The bpf program will receive four parameters:
      bpf_iter_meta *meta: the meta data
      bpf_map *map:        the bpf_map whose elements are traversed
      void *key:           the key of one element
      void *value:         the value of the same element
    
    Here, meta and map pointers are always valid, and
    key has register type PTR_TO_RDONLY_BUF_OR_NULL and
    value has register type PTR_TO_RDWR_BUF_OR_NULL.
    The kernel will track the access range of key and value
    during verification time. Later, these values will be compared
    against the values in the actual map to ensure all accesses
    are within range.
    
    A new field iter_seq_info is added to bpf_map_ops which
    is used to add map type specific information, i.e., seq_ops,
    init/fini seq_file func and seq_file private data size.
    Subsequent patches will have actual implementation
    for bpf_map_ops->iter_seq_info.
    
    In user space, BPF_ITER_LINK_MAP_FD needs to be
    specified in prog attr->link_create.flags, which indicates
    that attr->link_create.target_fd is a map_fd.
    The reason for such an explicit flag is for possible
    future cases where one bpf iterator may allow more than
    one possible customization, e.g., pid and cgroup id for
    task_file.
    
    Current kernel internal implementation only allows
    the target to register at most one required bpf_iter_link_info.
    To support the above case, optional bpf_iter_link_info's
    are needed, the target can be extended to register such link
    infos, and user provided link_info needs to match one of
    target supported ones.
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200723184112.590360-1-yhs@fb.com
    a5cbe05a
bpf_iter.c 12.8 KB