| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- ========
- BPF maps
- ========
- BPF 'maps' provide generic storage of different types for sharing data between
- kernel and user space. There are several storage types available, including
- hash, array, bloom filter and radix-tree. Several of the map types exist to
- support specific BPF helpers that perform actions based on the map contents. The
- maps are accessed from BPF programs via BPF helpers which are documented in the
- `man-pages`_ for `bpf-helpers(7)`_.
- BPF maps are accessed from user space via the ``bpf`` syscall, which provides
- commands to create maps, lookup elements, update elements and delete elements.
- More details of the BPF syscall are available in `ebpf-syscall`_ and in the
- `man-pages`_ for `bpf(2)`_.
- Map Types
- =========
- .. toctree::
- :maxdepth: 1
- :glob:
- map_*
- Usage Notes
- ===========
- .. c:function::
- int bpf(int command, union bpf_attr *attr, u32 size)
- Use the ``bpf()`` system call to perform the operation specified by
- ``command``. The operation takes parameters provided in ``attr``. The ``size``
- argument is the size of the ``union bpf_attr`` in ``attr``.
- **BPF_MAP_CREATE**
- Create a map with the desired type and attributes in ``attr``:
- .. code-block:: c
- int fd;
- union bpf_attr attr = {
- .map_type = BPF_MAP_TYPE_ARRAY; /* mandatory */
- .key_size = sizeof(__u32); /* mandatory */
- .value_size = sizeof(__u32); /* mandatory */
- .max_entries = 256; /* mandatory */
- .map_flags = BPF_F_MMAPABLE;
- .map_name = "example_array";
- };
- fd = bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
- Returns a process-local file descriptor on success, or negative error in case of
- failure. The map can be deleted by calling ``close(fd)``. Maps held by open
- file descriptors will be deleted automatically when a process exits.
- .. note:: Valid characters for ``map_name`` are ``A-Z``, ``a-z``, ``0-9``,
- ``'_'`` and ``'.'``.
- **BPF_MAP_LOOKUP_ELEM**
- Lookup key in a given map using ``attr->map_fd``, ``attr->key``,
- ``attr->value``. Returns zero and stores found elem into ``attr->value`` on
- success, or negative error on failure.
- **BPF_MAP_UPDATE_ELEM**
- Create or update key/value pair in a given map using ``attr->map_fd``, ``attr->key``,
- ``attr->value``. Returns zero on success or negative error on failure.
- **BPF_MAP_DELETE_ELEM**
- Find and delete element by key in a given map using ``attr->map_fd``,
- ``attr->key``. Returns zero on success or negative error on failure.
- .. Links:
- .. _man-pages: https://www.kernel.org/doc/man-pages/
- .. _bpf(2): https://man7.org/linux/man-pages/man2/bpf.2.html
- .. _bpf-helpers(7): https://man7.org/linux/man-pages/man7/bpf-helpers.7.html
- .. _ebpf-syscall: https://docs.kernel.org/userspace-api/ebpf/syscall.html
|