summaryrefslogtreecommitdiffstats
path: root/xdp-loader/xdp-loader.8
diff options
context:
space:
mode:
Diffstat (limited to 'xdp-loader/xdp-loader.8')
-rw-r--r--xdp-loader/xdp-loader.8260
1 files changed, 260 insertions, 0 deletions
diff --git a/xdp-loader/xdp-loader.8 b/xdp-loader/xdp-loader.8
new file mode 100644
index 0000000..7e0b8eb
--- /dev/null
+++ b/xdp-loader/xdp-loader.8
@@ -0,0 +1,260 @@
+.TH "xdp-loader" "8" "JANUARY 9, 2023" "V1.3.1" "XDP program loader"
+
+.SH "NAME"
+xdp-loader \- an XDP program loader
+.SH "SYNOPSIS"
+.PP
+XDP-loader is a simple loader for XDP programs with support for attaching
+multiple programs to the same interface. To achieve this it exposes the same
+load and unload semantics exposed by the libxdp library. See the \fIlibxdp(3)\fP man
+page for details of how this works, and what kernel features it relies on.
+
+.SS "Running xdp-loader"
+.PP
+The syntax for running xdp-loader is:
+
+.RS
+.nf
+\fCxdp-loader COMMAND [options]
+
+Where COMMAND can be one of:
+ load - load an XDP program on an interface
+ unload - unload an XDP program from an interface
+ status - show current XDP program status
+ clean - clean up detached program links in XDP bpffs directory
+ help - show the list of available commands
+\fP
+.fi
+.RE
+
+.PP
+Each command, and its options are explained below. Or use \fIxdp\-loader COMMAND
+\-\-help\fP to see the options for each command.
+
+.SH "The LOAD command"
+.PP
+The \fIload\fP command loads one or more XDP programs onto an interface.
+
+.PP
+The syntax for the \fIload\fP command is:
+
+.PP
+\fIxdp\-loader load [options] <ifname> <programs>\fP
+
+.PP
+Where \fI<ifname>\fP is the name of the interface to load the programs onto, and the
+\fI<programs>\fP is one or more file names containing XDP programs. The programs
+will be loaded onto the interface in the order of their preference, as
+specified by the program metadata (see \fBlibxdp(3)\fP).
+
+.PP
+The supported options are:
+
+.SS "-m, --mode <mode>"
+.PP
+Specifies which mode to load the XDP program to be loaded in. The valid values
+are 'native', which is the default in-driver XDP mode, 'skb', which causes the
+so-called \fIskb mode\fP (also known as \fIgeneric XDP\fP) to be used, 'hw' which causes
+the program to be offloaded to the hardware, or 'unspecified' which leaves it up
+to the kernel to pick a mode (which it will do by picking native mode if the
+driver supports it, or generic mode otherwise). Note that using 'unspecified'
+can make it difficult to predict what mode a program will end up being loaded
+in. For this reason, the default is 'native'. Note that hardware with support
+for the 'hw' mode is rare: Solarflare cards (using the 'sfc' driver) are the
+only devices with support for this in the mainline Linux kernel.
+
+.SS "-p, --pin-path <path>"
+.PP
+This specifies a root path under which to pin any maps that define the 'pinning'
+attribute in their definitions. This path must be located on a \fIbpffs\fP file
+system. If not set, maps will not be pinned, even if they specify pinning in
+their definitions. When pinning maps, if the pinned location for a map already
+exist, the map pinned there will be reused if it is compatible with the type of
+the map being loaded.
+
+.SS "-s, --section <section>"
+.PP
+Specify which ELF section to load the XDP program(s) from in each file. The
+default is to use the first program in each file. If this option is set, it
+applies to all programs being loaded.
+
+.SS "-n, --prog-name <prog_name>"
+.PP
+Specify which BPF program with the name to load the XDP program(s) from in each
+file. The default is to use the first program in each file. Only one of
+--section and --prog-name may be specified. If this option is set, it applies to
+all programs being loaded.
+
+.SS "-P, --prio <priority>"
+.PP
+Specify the priority to load the XDP program(s) with (this affects the order of
+programs running on the interface). The default is to use the value from the metadata
+in the program ELF file, or a value of 50 if the program has no such metadata.
+If this option is set, it applies to all programs being loaded.
+
+.SS "-A, --actions <actions>"
+.PP
+Specify the "chain call actions" of the loaded XDP program(s). These are the XDP
+actions that will cause the next program loaded on the interface to be called,
+instead of returning immediately. The default is to use the value set in the metadata
+in the program ELF file, or XDP_PASS if no such metadata is set. If this option is set,
+it applies to all programs being loaded.
+
+.SS "-v, --verbose"
+.PP
+Enable debug logging. Specify twice for even more verbosity.
+
+.SS "-h, --help"
+.PP
+Display a summary of the available options
+
+.SH "The UNLOAD command"
+.PP
+The \fIunload\fP command is used for unloading programs from an interface.
+
+.PP
+The syntax for the \fIunload\fP command is:
+
+.PP
+\fIxdp\-loader unload [options] <ifname>\fP
+
+.PP
+Where \fI<ifname>\fP is the name of the interface to load the programs onto. Either
+the \fI\-\-all\fP or \fI\-\-id\fP options must be used to specify which program(s) to unload.
+
+.PP
+The supported options are:
+
+.SS "-i, --id <id>"
+.PP
+Unload a single program from the interface by ID. Use \fIxdp\-loader status\fP to
+obtain the ID of the program being unloaded. If this program is the last program
+loaded on the interface, the dispatcher program will also be removed, which
+makes the operation equivalent to specifying \fI\-\-all\fP.
+
+.SS "-a, --all"
+.PP
+Unload all XDP programs on the interface, as well as the multi-program
+dispatcher.
+
+.SS "-v, --verbose"
+.PP
+Enable debug logging. Specify twice for even more verbosity.
+
+.SS "-h, --help"
+.PP
+Display a summary of the available options
+
+.SH "The STATUS command"
+.PP
+The \fIstatus\fP command displays a list of interfaces in the system, and the XDP
+program(s) loaded on each interface. For each interface, a list of programs are
+shown, with the run priority and "chain actions" for each program. See the
+section on program metadata for the meaning of this metadata.
+
+.SS "-v, --verbose"
+.PP
+Enable debug logging. Specify twice for even more verbosity.
+
+.SS "-h, --help"
+.PP
+Display a summary of the available options
+
+.SH "The CLEAN command"
+.PP
+The syntax for the \fIclean\fP command is:
+
+.PP
+\fIxdp\-loader clean [options] [ifname]\fP
+
+.PP
+The \fIclean\fP command cleans up any detached program links in the XDP bpffs
+directory. When a network interface disappears, any programs loaded in software
+mode (e.g. skb, native) remain pinned in the bpffs directory, but become
+detached from the interface. These need to be unlinked from the filesystem. The
+\fIclean\fP command takes an optional interface parameter to only unlink detached
+programs corresponding to the interface. By default, all detached programs for
+all interfaces are unlinked.
+
+.PP
+The supported options are:
+
+.SS "-v, --verbose"
+.PP
+Enable debug logging. Specify twice for even more verbosity.
+
+.SS "-h, --help"
+.PP
+Display a summary of the available options
+
+.SH "Examples"
+.PP
+To load an XDP program on the eth0 interface simply do:
+
+.RS
+.nf
+\fC# xdp-loader load eth0 xdp_drop.o
+# xdp-loader status
+
+CURRENT XDP PROGRAM STATUS:
+
+Interface Prio Program name Mode ID Tag Chain actions
+-------------------------------------------------------------------------------------
+lo <no XDP program>
+eth0 xdp_dispatcher native 50 d51e469e988d81da
+ => 50 xdp_drop 55 57cd311f2e27366b XDP_PASS
+
+\fP
+.fi
+.RE
+
+.PP
+Which shows that a dispatcher program was loaded on the interface, and the
+xdp_drop program was installed as the first (and only) component program after
+it. In this instance, the program does not specify any of the metadata above, so
+the defaults (priority 50 and XDP_PASS as its chain call action) was used.
+
+.PP
+To use the automatic map pinning, include the \fIpinning\fP attribute into the map
+definition in the program, something like:
+
+.RS
+.nf
+\fCstruct {
+ __uint(type, BPF_MAP_TYPE_ARRAY);
+ __uint(max_entries, 10);
+ __type(key, __u32);
+ __type(value, __u64);
+ __uint(pinning, LIBBPF_PIN_BY_NAME);
+} my_map SEC(".maps");
+\fP
+.fi
+.RE
+
+.PP
+And load it with the \fI\-\-pin\-path\fP attribute:
+
+.RS
+.nf
+\fC# xdp-loader load eth0 my_prog.o --pin-path /sys/fs/bpf/my-prog
+\fP
+.fi
+.RE
+
+.PP
+This will pin the map at \fI/sys/fs/bpf/my\-prog/my_map\fP. If this already exists,
+the pinned map will be reused instead of creating a new one, which allows
+different BPF programs to share the map.
+
+.SH "SEE ALSO"
+.PP
+\fIlibxdp(3)\fP for details on the XDP loading semantics and kernel compatibility
+requirements.
+
+.SH "BUGS"
+.PP
+Please report any bugs on Github: \fIhttps://github.com/xdp-project/xdp-tools/issues\fP
+
+.SH "AUTHOR"
+.PP
+xdp-loader and this man page were written by Toke Høiland-Jørgensen.