Documentation/bpf/redirect.rst
.. SPDX-License-Identifier: GPL-2.0-only .. Copyright (C) 2022 Red Hat, Inc.
XDP_REDIRECT works with the following map types:
BPF_MAP_TYPE_DEVMAPBPF_MAP_TYPE_DEVMAP_HASHBPF_MAP_TYPE_CPUMAPBPF_MAP_TYPE_XSKMAPFor more information on these maps, please see the specific map documentation.
.. kernel-doc:: net/core/filter.c :doc: xdp redirect
.. note:: Not all drivers support transmitting frames after a redirect, and for those that do, not all of them support non-linear frames. Non-linear xdp bufs/frames are bufs/frames that contain more than one fragment.
Silent packet drops for XDP_REDIRECT can be debugged using:
bpf_trace ^^^^^^^^^ The following bpftrace command can be used to capture and count all XDP tracepoints:
.. code-block:: none
sudo bpftrace -e 'tracepoint:xdp:* { @cnt[probe] = count(); }'
Attaching 12 probes...
^C
@cnt[tracepoint:xdp:mem_connect]: 18
@cnt[tracepoint:xdp:mem_disconnect]: 18
@cnt[tracepoint:xdp:xdp_exception]: 19605
@cnt[tracepoint:xdp:xdp_devmap_xmit]: 1393604
@cnt[tracepoint:xdp:xdp_redirect]: 22292200
.. note::
The various xdp tracepoints can be found in source/include/trace/events/xdp.h
The following bpftrace command can be used to extract the ERRNO being returned as
part of the err parameter:
.. code-block:: none
sudo bpftrace -e \
'tracepoint:xdp:xdp_redirect*_err {@redir_errno[-args->err] = count();}
tracepoint:xdp:xdp_devmap_xmit {@devmap_errno[-args->err] = count();}'
perf record ^^^^^^^^^^^ The perf tool also supports recording tracepoints:
.. code-block:: none
perf record -a -e xdp:xdp_redirect_err \
-e xdp:xdp_redirect_map_err \
-e xdp:xdp_exception \
-e xdp:xdp_devmap_xmit