summaryrefslogtreecommitdiff
path: root/Documentation/bpf/maps.rst
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2021-11-19 17:32:14 +0100
committerAlexei Starovoitov <ast@kernel.org>2021-11-30 10:52:11 -0800
commitbc84e959e5aed4a79597d03e810fd1d7067b4ff7 (patch)
tree44bc4d7aa7f94dcf47a199030c723337250ab5c7 /Documentation/bpf/maps.rst
parent06edc59c1fd7aababc8361655b20f4cc9870aef2 (diff)
bpf, docs: Move handling of maps to Documentation/bpf/maps.rst
Move the general maps documentation into the maps.rst file from the overall networking filter documentation and add a link instead. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Song Liu <songliubraving@fb.com> Link: https://lore.kernel.org/bpf/20211119163215.971383-5-hch@lst.de
Diffstat (limited to 'Documentation/bpf/maps.rst')
-rw-r--r--Documentation/bpf/maps.rst43
1 files changed, 43 insertions, 0 deletions
diff --git a/Documentation/bpf/maps.rst b/Documentation/bpf/maps.rst
index 2084b0e7cde8..f41619e312ac 100644
--- a/Documentation/bpf/maps.rst
+++ b/Documentation/bpf/maps.rst
@@ -1,4 +1,47 @@
+
+=========
+eBPF 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
+ ``map_fd = bpf(BPF_MAP_CREATE, union bpf_attr *attr, u32 size)``
+ using attr->map_type, attr->key_size, attr->value_size, attr->max_entries
+ returns process-local file descriptor or negative error
+
+- lookup key in a given map
+ ``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
+
+- to delete map: close(fd)
+ Exiting process will delete maps automatically
+
+userspace programs use this syscall to create/access maps that eBPF programs
+are concurrently updating.
+
+maps can have different types: hash, array, bloom filter, radix-tree, etc.
+
+The map is defined by:
+
+ - type
+ - max number of elements
+ - key size in bytes
+ - value size in bytes
+
Map Types
=========