Skip to content
  • Alexei Starovoitov's avatar
    bpf: add lookup/update/delete/iterate methods to BPF maps · db20fd2b
    Alexei Starovoitov authored
    
    
    'maps' is a generic storage of different types for sharing data between kernel
    and userspace.
    
    The maps are accessed from user space via BPF syscall, which has commands:
    
    - create a map with given type and attributes
      fd = bpf(BPF_MAP_CREATE, union bpf_attr *attr, u32 size)
      returns fd or negative error
    
    - lookup key in a given map referenced by fd
      err = bpf(BPF_MAP_LOOKUP_ELEM, union bpf_attr *attr, u32 size)
      using attr->map_fd, attr->key, attr->value
      returns zero and stores found elem into value or negative error
    
    - create or update key/value pair in a given map
      err = bpf(BPF_MAP_UPDATE_ELEM, union bpf_attr *attr, u32 size)
      using attr->map_fd, attr->key, attr->value
      returns zero or negative error
    
    - find and delete element by key in a given map
      err = bpf(BPF_MAP_DELETE_ELEM, union bpf_attr *attr, u32 size)
      using attr->map_fd, attr->key
    
    - iterate map elements (based on input key return next_key)
      err = bpf(BPF_MAP_GET_NEXT_KEY, union bpf_attr *attr, u32 size)
      using attr->map_fd, attr->key, attr->next_key
    
    - close(fd) deletes the map
    
    Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    db20fd2b