diff options
author | Alexei Starovoitov <ast@plumgrid.com> | 2014-09-26 03:16:59 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-26 15:05:14 -0400 |
commit | db20fd2b01087bdfbe30bce314a198eefedcc42e (patch) | |
tree | c43a4e3edb46deae542c8e79d74d24703ffbdcca /include/linux | |
parent | 749730ce42a2121e1c88350d69478bff3994b10a (diff) |
bpf: add lookup/update/delete/iterate methods to BPF maps
'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: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/bpf.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 48014a71f0fe..2887f3f9da59 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <uapi/linux/bpf.h> | 10 | #include <uapi/linux/bpf.h> |
11 | #include <linux/workqueue.h> | 11 | #include <linux/workqueue.h> |
12 | #include <linux/file.h> | ||
12 | 13 | ||
13 | struct bpf_map; | 14 | struct bpf_map; |
14 | 15 | ||
@@ -17,6 +18,12 @@ struct bpf_map_ops { | |||
17 | /* funcs callable from userspace (via syscall) */ | 18 | /* funcs callable from userspace (via syscall) */ |
18 | struct bpf_map *(*map_alloc)(union bpf_attr *attr); | 19 | struct bpf_map *(*map_alloc)(union bpf_attr *attr); |
19 | void (*map_free)(struct bpf_map *); | 20 | void (*map_free)(struct bpf_map *); |
21 | int (*map_get_next_key)(struct bpf_map *map, void *key, void *next_key); | ||
22 | |||
23 | /* funcs callable from userspace and from eBPF programs */ | ||
24 | void *(*map_lookup_elem)(struct bpf_map *map, void *key); | ||
25 | int (*map_update_elem)(struct bpf_map *map, void *key, void *value); | ||
26 | int (*map_delete_elem)(struct bpf_map *map, void *key); | ||
20 | }; | 27 | }; |
21 | 28 | ||
22 | struct bpf_map { | 29 | struct bpf_map { |
@@ -37,5 +44,6 @@ struct bpf_map_type_list { | |||
37 | 44 | ||
38 | void bpf_register_map_type(struct bpf_map_type_list *tl); | 45 | void bpf_register_map_type(struct bpf_map_type_list *tl); |
39 | void bpf_map_put(struct bpf_map *map); | 46 | void bpf_map_put(struct bpf_map *map); |
47 | struct bpf_map *bpf_map_get(struct fd f); | ||
40 | 48 | ||
41 | #endif /* _LINUX_BPF_H */ | 49 | #endif /* _LINUX_BPF_H */ |