.. 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