On Thu, Oct 13, 2022 at 07:11:29AM -0400, mtahhan@xxxxxxxxxx wrote: > diff --git a/Documentation/bpf/map_devmap.rst b/Documentation/bpf/map_devmap.rst > new file mode 100644 > index 000000000000..bdba55640f4c > --- /dev/null > +++ b/Documentation/bpf/map_devmap.rst > @@ -0,0 +1,192 @@ > +.. SPDX-License-Identifier: GPL-2.0-only > +.. Copyright (C) 2022 Red Hat, Inc. > + > +================================================= > +BPF_MAP_TYPE_DEVMAP and BPF_MAP_TYPE_DEVMAP_HASH > +================================================= > + > +.. note:: > + - ``BPF_MAP_TYPE_DEVMAP`` was introduced in kernel version 4.14 > + - ``BPF_MAP_TYPE_DEVMAP_HASH`` was introduced in kernel version 5.4 > + > +``BPF_MAP_TYPE_DEVMAP`` and ``BPF_MAP_TYPE_DEVMAP_HASH`` are BPF maps primarily > +used as backend maps for the XDP BPF helper call ``bpf_redirect_map()``. > +``BPF_MAP_TYPE_DEVMAP`` is backed by an array that uses the key as > +the index to lookup a reference to a net device. While ``BPF_MAP_TYPE_DEVMAP_HASH`` > +is backed by a hash table that uses the ``ifindex`` as the key to lookup a reference > +to a net device. The user provides either <``key``/ ``ifindex``> or > +<``key``/ ``struct bpf_devmap_val``> pairs to update the maps with new net devices. > + > +.. note:: > + While ``BPF_MAP_TYPE_DEVMAP_HASH`` allows for densely packing the net devices > + it comes at the cost of a hash of the key when performing a look up. > + > +The setup and packet enqueue/send code is shared between the two types of > +devmap; only the lookup and insertion is different. > + > +Usage > +===== > + > +.. c:function:: > + long bpf_map_update_elem(struct bpf_map *map, const void *key, const void *value, u64 flags) > + > + Net device entries can be added or updated using the ``bpf_map_update_elem()`` > + helper. This helper replaces existing elements atomically. The ``value`` parameter > + can be ``struct bpf_devmap_val`` or a simple ``int ifindex`` for backwards > + compatibility. > + > +.. note:: > + The maps can only be updated from user space and not from a BPF program. > + Only the sentence above should be in the note directive, so align the directive to the surrounding text: ---- >8 ---- diff --git a/Documentation/bpf/map_devmap.rst b/Documentation/bpf/map_devmap.rst index bdba55640f4c7d..b4f2b1a9ef9b09 100644 --- a/Documentation/bpf/map_devmap.rst +++ b/Documentation/bpf/map_devmap.rst @@ -35,7 +35,7 @@ Usage can be ``struct bpf_devmap_val`` or a simple ``int ifindex`` for backwards compatibility. -.. note:: + .. note:: The maps can only be updated from user space and not from a BPF program. .. code-block:: c > + When a program is associated with a device index, the program is run on an > + ``XDP_REDIRECT`` and before the buffer is added to the per-cpu queue. Examples > + of how to attach/use xdp_devmap progs can be found in the kernel selftests: > + > + - test_xdp_with_devmap_helpers_ > + - xdp_devmap_attach_ > + > +.. _xdp_devmap_attach: https://github.com/torvalds/linux/blob/master/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c > +.. _test_xdp_with_devmap_helpers: https://github.com/torvalds/linux/blob/master/tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c > + Instead of external link to the Linus's tree, just specify the file location of these selftests: ---- >8 ---- diff --git a/Documentation/bpf/map_devmap.rst b/Documentation/bpf/map_devmap.rst index b4f2b1a9ef9b09..55ad36d4a8dbd5 100644 --- a/Documentation/bpf/map_devmap.rst +++ b/Documentation/bpf/map_devmap.rst @@ -56,11 +56,8 @@ Usage ``XDP_REDIRECT`` and before the buffer is added to the per-cpu queue. Examples of how to attach/use xdp_devmap progs can be found in the kernel selftests: - - test_xdp_with_devmap_helpers_ - - xdp_devmap_attach_ - -.. _xdp_devmap_attach: https://github.com/torvalds/linux/blob/master/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c -.. _test_xdp_with_devmap_helpers: https://github.com/torvalds/linux/blob/master/tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c + - ``test_xdp_with_devmap_helpers`` (in ``tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c``) + - ``xdp_devmap_attach`` (in ``tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c``) .. c:function:: void *bpf_map_lookup_elem(struct bpf_map *map, const void *key) Thanks. -- An old man doll... just what I always wanted! - Clara
Attachment:
signature.asc
Description: PGP signature