xref: /linux/Documentation/bpf/redirect.rst (revision 24168c5e6dfbdd5b414f048f47f75d64533296ca)
1.. SPDX-License-Identifier: GPL-2.0-only
2.. Copyright (C) 2022 Red Hat, Inc.
3
4========
5Redirect
6========
7XDP_REDIRECT
8############
9Supported maps
10--------------
11
12XDP_REDIRECT works with the following map types:
13
14- ``BPF_MAP_TYPE_DEVMAP``
15- ``BPF_MAP_TYPE_DEVMAP_HASH``
16- ``BPF_MAP_TYPE_CPUMAP``
17- ``BPF_MAP_TYPE_XSKMAP``
18
19For more information on these maps, please see the specific map documentation.
20
21Process
22-------
23
24.. kernel-doc:: net/core/filter.c
25   :doc: xdp redirect
26
27.. note::
28    Not all drivers support transmitting frames after a redirect, and for
29    those that do, not all of them support non-linear frames. Non-linear xdp
30    bufs/frames are bufs/frames that contain more than one fragment.
31
32Debugging packet drops
33----------------------
34Silent packet drops for XDP_REDIRECT can be debugged using:
35
36- bpf_trace
37- perf_record
38
39bpf_trace
40^^^^^^^^^
41The following bpftrace command can be used to capture and count all XDP tracepoints:
42
43.. code-block:: none
44
45    sudo bpftrace -e 'tracepoint:xdp:* { @cnt[probe] = count(); }'
46    Attaching 12 probes...
47    ^C
48
49    @cnt[tracepoint:xdp:mem_connect]: 18
50    @cnt[tracepoint:xdp:mem_disconnect]: 18
51    @cnt[tracepoint:xdp:xdp_exception]: 19605
52    @cnt[tracepoint:xdp:xdp_devmap_xmit]: 1393604
53    @cnt[tracepoint:xdp:xdp_redirect]: 22292200
54
55.. note::
56    The various xdp tracepoints can be found in ``source/include/trace/events/xdp.h``
57
58The following bpftrace command can be used to extract the ``ERRNO`` being returned as
59part of the err parameter:
60
61.. code-block:: none
62
63    sudo bpftrace -e \
64    'tracepoint:xdp:xdp_redirect*_err {@redir_errno[-args->err] = count();}
65    tracepoint:xdp:xdp_devmap_xmit {@devmap_errno[-args->err] = count();}'
66
67perf record
68^^^^^^^^^^^
69The perf tool also supports recording tracepoints:
70
71.. code-block:: none
72
73    perf record -a -e xdp:xdp_redirect_err \
74        -e xdp:xdp_redirect_map_err \
75        -e xdp:xdp_exception \
76        -e xdp:xdp_devmap_xmit
77
78References
79===========
80
81- https://github.com/xdp-project/xdp-tutorial/tree/master/tracing02-xdp-monitor
82