diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/bpf.h | 8 | ||||
| -rw-r--r-- | include/uapi/linux/bpf.h | 38 |
2 files changed, 46 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 */ |
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index f58a10f9670c..395cabd2ca0a 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h | |||
| @@ -70,6 +70,35 @@ enum bpf_cmd { | |||
| 70 | * map is deleted when fd is closed | 70 | * map is deleted when fd is closed |
| 71 | */ | 71 | */ |
| 72 | BPF_MAP_CREATE, | 72 | BPF_MAP_CREATE, |
| 73 | |||
| 74 | /* lookup key in a given map | ||
| 75 | * err = bpf(BPF_MAP_LOOKUP_ELEM, union bpf_attr *attr, u32 size) | ||
| 76 | * Using attr->map_fd, attr->key, attr->value | ||
| 77 | * returns zero and stores found elem into value | ||
| 78 | * or negative error | ||
| 79 | */ | ||
| 80 | BPF_MAP_LOOKUP_ELEM, | ||
| 81 | |||
| 82 | /* create or update key/value pair in a given map | ||
| 83 | * err = bpf(BPF_MAP_UPDATE_ELEM, union bpf_attr *attr, u32 size) | ||
| 84 | * Using attr->map_fd, attr->key, attr->value | ||
| 85 | * returns zero or negative error | ||
| 86 | */ | ||
| 87 | BPF_MAP_UPDATE_ELEM, | ||
| 88 | |||
| 89 | /* find and delete elem by key in a given map | ||
| 90 | * err = bpf(BPF_MAP_DELETE_ELEM, union bpf_attr *attr, u32 size) | ||
| 91 | * Using attr->map_fd, attr->key | ||
| 92 | * returns zero or negative error | ||
| 93 | */ | ||
| 94 | BPF_MAP_DELETE_ELEM, | ||
| 95 | |||
| 96 | /* lookup key in a given map and return next key | ||
| 97 | * err = bpf(BPF_MAP_GET_NEXT_KEY, union bpf_attr *attr, u32 size) | ||
| 98 | * Using attr->map_fd, attr->key, attr->next_key | ||
| 99 | * returns zero and stores next key or negative error | ||
| 100 | */ | ||
| 101 | BPF_MAP_GET_NEXT_KEY, | ||
| 73 | }; | 102 | }; |
| 74 | 103 | ||
| 75 | enum bpf_map_type { | 104 | enum bpf_map_type { |
| @@ -83,6 +112,15 @@ union bpf_attr { | |||
| 83 | __u32 value_size; /* size of value in bytes */ | 112 | __u32 value_size; /* size of value in bytes */ |
| 84 | __u32 max_entries; /* max number of entries in a map */ | 113 | __u32 max_entries; /* max number of entries in a map */ |
| 85 | }; | 114 | }; |
| 115 | |||
| 116 | struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */ | ||
| 117 | __u32 map_fd; | ||
| 118 | __aligned_u64 key; | ||
| 119 | union { | ||
| 120 | __aligned_u64 value; | ||
| 121 | __aligned_u64 next_key; | ||
| 122 | }; | ||
| 123 | }; | ||
| 86 | } __attribute__((aligned(8))); | 124 | } __attribute__((aligned(8))); |
| 87 | 125 | ||
| 88 | #endif /* _UAPI__LINUX_BPF_H__ */ | 126 | #endif /* _UAPI__LINUX_BPF_H__ */ |
