| .. SPDX-License-Identifier: GPL-2.0-only |
| .. Copyright (C) 2022 Red Hat, Inc. |
| |
| ======== |
| Redirect |
| ======== |
| XDP_REDIRECT |
| ############ |
| Supported maps |
| -------------- |
| |
| XDP_REDIRECT works with the following map types: |
| |
| - ``BPF_MAP_TYPE_DEVMAP`` |
| - ``BPF_MAP_TYPE_DEVMAP_HASH`` |
| - ``BPF_MAP_TYPE_CPUMAP`` |
| - ``BPF_MAP_TYPE_XSKMAP`` |
| |
| For more information on these maps, please see the specific map documentation. |
| |
| Process |
| ------- |
| |
| .. 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. |
| |
| Debugging packet drops |
| ---------------------- |
| Silent packet drops for XDP_REDIRECT can be debugged using: |
| |
| - bpf_trace |
| - perf_record |
| |
| 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 |
| |
| References |
| =========== |
| |
| - https://github.com/xdp-project/xdp-tutorial/tree/master/tracing02-xdp-monitor |