82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. 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
 |