mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-08 15:04:45 +00:00
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
This commit is contained in:
parent
06edc59c1f
commit
bc84e959e5
@ -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
|
Map Types
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
@ -1232,9 +1232,9 @@ pointer type. The types of pointers describe their base, as follows:
|
|||||||
Pointer to the value stored in a map element.
|
Pointer to the value stored in a map element.
|
||||||
PTR_TO_MAP_VALUE_OR_NULL
|
PTR_TO_MAP_VALUE_OR_NULL
|
||||||
Either a pointer to a map value, or NULL; map accesses
|
Either a pointer to a map value, or NULL; map accesses
|
||||||
(see section 'eBPF maps', below) return this type,
|
(see maps.rst) return this type, which becomes a
|
||||||
which becomes a PTR_TO_MAP_VALUE when checked != NULL.
|
a PTR_TO_MAP_VALUE when checked != NULL. Arithmetic on
|
||||||
Arithmetic on these pointers is forbidden.
|
these pointers is forbidden.
|
||||||
PTR_TO_STACK
|
PTR_TO_STACK
|
||||||
Frame pointer.
|
Frame pointer.
|
||||||
PTR_TO_PACKET
|
PTR_TO_PACKET
|
||||||
@ -1402,47 +1402,6 @@ using normal C code as::
|
|||||||
which makes such programs easier to write comparing to LD_ABS insn
|
which makes such programs easier to write comparing to LD_ABS insn
|
||||||
and significantly faster.
|
and significantly faster.
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Pruning
|
Pruning
|
||||||
-------
|
-------
|
||||||
The verifier does not actually walk all possible paths through the program. For
|
The verifier does not actually walk all possible paths through the program. For
|
||||||
|
Loading…
Reference in New Issue
Block a user