2021-11-15 22:58:42 +00:00
|
|
|
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
|
|
|
2017-10-04 20:10:05 -07:00
|
|
|
================
|
|
|
|
bpftool-prog
|
|
|
|
================
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
tool for inspection and simple manipulation of eBPF progs
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
:Manual section: 8
|
|
|
|
|
bpftool: Update doc (use susbtitutions) and test_bpftool_synctypes.py
test_bpftool_synctypes.py helps detecting inconsistencies in bpftool
between the different list of types and options scattered in the
sources, the documentation, and the bash completion. For options that
apply to all bpftool commands, the script had a hardcoded list of
values, and would use them to check whether the man pages are
up-to-date. When writing the script, it felt acceptable to have this
list in order to avoid to open and parse bpftool's main.h every time,
and because the list of global options in bpftool doesn't change so
often.
However, this is prone to omissions, and we recently added a new
-l|--legacy option which was described in common_options.rst, but not
listed in the options summary of each manual page. The script did not
complain, because it keeps comparing the hardcoded list to the (now)
outdated list in the header file.
To address the issue, this commit brings the following changes:
- Options that are common to all bpftool commands (--json, --pretty, and
--debug) are moved to a dedicated file, and used in the definition of
a RST substitution. This substitution is used in the sources of all
the man pages.
- This list of common options is updated, with the addition of the new
-l|--legacy option.
- The script test_bpftool_synctypes.py is updated to compare:
- Options specific to a command, found in C files, for the
interactive help messages, with the same specific options from the
relevant man page for that command.
- Common options, checked just once: the list in main.h is
compared with the new list in substitutions.rst.
Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20211115225844.33943-3-quentin@isovalent.com
2021-11-15 22:58:43 +00:00
|
|
|
.. include:: substitutions.rst
|
|
|
|
|
2017-10-04 20:10:05 -07:00
|
|
|
SYNOPSIS
|
|
|
|
========
|
|
|
|
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
**bpftool** [*OPTIONS*] **prog** *COMMAND*
|
2017-10-23 09:24:16 -07:00
|
|
|
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
*OPTIONS* := { |COMMON_OPTIONS| |
|
|
|
|
{ **-f** | **--bpffs** } | { **-m** | **--mapcompat** } | { **-n** | **--nomount** } |
|
|
|
|
{ **-L** | **--use-loader** } }
|
2017-10-23 09:24:16 -07:00
|
|
|
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
*COMMANDS* :=
|
|
|
|
{ **show** | **list** | **dump xlated** | **dump jited** | **pin** | **load** |
|
|
|
|
**loadall** | **help** }
|
2017-10-23 09:24:16 -07:00
|
|
|
|
2019-02-06 10:47:23 +09:00
|
|
|
PROG COMMANDS
|
2017-10-23 09:24:16 -07:00
|
|
|
=============
|
|
|
|
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
| **bpftool** **prog** { **show** | **list** } [*PROG*]
|
|
|
|
| **bpftool** **prog dump xlated** *PROG* [{ **file** *FILE* | [**opcodes**] [**linum**] [**visual**] }]
|
|
|
|
| **bpftool** **prog dump jited** *PROG* [{ **file** *FILE* | [**opcodes**] [**linum**] }]
|
|
|
|
| **bpftool** **prog pin** *PROG* *FILE*
|
|
|
|
| **bpftool** **prog** { **load** | **loadall** } *OBJ* *PATH* [**type** *TYPE*] [**map** { **idx** *IDX* | **name** *NAME* } *MAP*] [{ **offload_dev** | **xdpmeta_dev** } *NAME*] [**pinmaps** *MAP_DIR*] [**autoattach**]
|
|
|
|
| **bpftool** **prog attach** *PROG* *ATTACH_TYPE* [*MAP*]
|
|
|
|
| **bpftool** **prog detach** *PROG* *ATTACH_TYPE* [*MAP*]
|
|
|
|
| **bpftool** **prog tracelog**
|
|
|
|
| **bpftool** **prog run** *PROG* **data_in** *FILE* [**data_out** *FILE* [**data_size_out** *L*]] [**ctx_in** *FILE* [**ctx_out** *FILE* [**ctx_size_out** *M*]]] [**repeat** *N*]
|
|
|
|
| **bpftool** **prog profile** *PROG* [**duration** *DURATION*] *METRICs*
|
|
|
|
| **bpftool** **prog help**
|
2017-10-04 20:10:05 -07:00
|
|
|
|
|
2024-04-13 02:14:26 +01:00
|
|
|
| *MAP* := { **id** *MAP_ID* | **pinned** *FILE* | **name** *MAP_NAME* }
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
| *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* | **name** *PROG_NAME* }
|
|
|
|
| *TYPE* := {
|
|
|
|
| **socket** | **kprobe** | **kretprobe** | **classifier** | **action** |
|
|
|
|
| **tracepoint** | **raw_tracepoint** | **xdp** | **perf_event** | **cgroup/skb** |
|
|
|
|
| **cgroup/sock** | **cgroup/dev** | **lwt_in** | **lwt_out** | **lwt_xmit** |
|
|
|
|
| **lwt_seg6local** | **sockops** | **sk_skb** | **sk_msg** | **lirc_mode2** |
|
|
|
|
| **cgroup/bind4** | **cgroup/bind6** | **cgroup/post_bind4** | **cgroup/post_bind6** |
|
|
|
|
| **cgroup/connect4** | **cgroup/connect6** | **cgroup/connect_unix** |
|
|
|
|
| **cgroup/getpeername4** | **cgroup/getpeername6** | **cgroup/getpeername_unix** |
|
|
|
|
| **cgroup/getsockname4** | **cgroup/getsockname6** | **cgroup/getsockname_unix** |
|
|
|
|
| **cgroup/sendmsg4** | **cgroup/sendmsg6** | **cgroup/sendmsg_unix** |
|
|
|
|
| **cgroup/recvmsg4** | **cgroup/recvmsg6** | **cgroup/recvmsg_unix** | **cgroup/sysctl** |
|
|
|
|
| **cgroup/getsockopt** | **cgroup/setsockopt** | **cgroup/sock_release** |
|
|
|
|
| **struct_ops** | **fentry** | **fexit** | **freplace** | **sk_lookup**
|
|
|
|
| }
|
|
|
|
| *ATTACH_TYPE* := {
|
|
|
|
| **sk_msg_verdict** | **sk_skb_verdict** | **sk_skb_stream_verdict** |
|
|
|
|
| **sk_skb_stream_parser** | **flow_dissector**
|
|
|
|
| }
|
|
|
|
| *METRICs* := {
|
|
|
|
| **cycles** | **instructions** | **l1d_loads** | **llc_misses** |
|
|
|
|
| **itlb_misses** | **dtlb_misses**
|
|
|
|
| }
|
2018-07-10 14:43:00 -07:00
|
|
|
|
2017-10-04 20:10:05 -07:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
===========
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog { show | list } [*PROG*]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Show information about loaded programs. If *PROG* is specified show
|
|
|
|
information only about given programs, otherwise list all programs
|
|
|
|
currently loaded on the system. In case of **tag** or **name**, *PROG* may
|
|
|
|
match several programs which will all be shown.
|
|
|
|
|
|
|
|
Output will start with program ID followed by program type and zero or more
|
|
|
|
named attributes (depending on kernel version).
|
|
|
|
|
|
|
|
Since Linux 5.1 the kernel can collect statistics on BPF programs (such as
|
|
|
|
the total time spent running the program, and the number of times it was
|
|
|
|
run). If available, bpftool shows such statistics. However, the kernel does
|
|
|
|
not collect them by defaults, as it slightly impacts performance on each
|
|
|
|
program run. Activation or deactivation of the feature is performed via the
|
|
|
|
**kernel.bpf_stats_enabled** sysctl knob.
|
|
|
|
|
|
|
|
Since Linux 5.8 bpftool is able to discover information about processes
|
|
|
|
that hold open file descriptors (FDs) against BPF programs. On such kernels
|
|
|
|
bpftool will automatically emit this information as well.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog dump xlated *PROG* [{ file *FILE* | [opcodes] [linum] [visual] }]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Dump eBPF instructions of the programs from the kernel. By default, eBPF
|
|
|
|
will be disassembled and printed to standard output in human-readable
|
|
|
|
format. In this case, **opcodes** controls if raw opcodes should be printed
|
|
|
|
as well.
|
|
|
|
|
|
|
|
In case of **tag** or **name**, *PROG* may match several programs which
|
|
|
|
will all be dumped. However, if **file** or **visual** is specified,
|
|
|
|
*PROG* must match a single program.
|
|
|
|
|
|
|
|
If **file** is specified, the binary image will instead be written to
|
|
|
|
*FILE*.
|
|
|
|
|
|
|
|
If **visual** is specified, control flow graph (CFG) will be built instead,
|
|
|
|
and eBPF instructions will be presented with CFG in DOT format, on standard
|
|
|
|
output.
|
|
|
|
|
|
|
|
If the programs have line_info available, the source line will be
|
|
|
|
displayed. If **linum** is specified, the filename, line number and line
|
|
|
|
column will also be displayed.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog dump jited *PROG* [{ file *FILE* | [opcodes] [linum] }]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Dump jited image (host machine code) of the program.
|
|
|
|
|
|
|
|
If *FILE* is specified image will be written to a file, otherwise it will
|
|
|
|
be disassembled and printed to stdout. *PROG* must match a single program
|
|
|
|
when **file** is specified.
|
|
|
|
|
|
|
|
**opcodes** controls if raw opcodes will be printed.
|
|
|
|
|
|
|
|
If the prog has line_info available, the source line will be displayed. If
|
|
|
|
**linum** is specified, the filename, line number and line column will also
|
|
|
|
be displayed.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog pin *PROG* *FILE*
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Pin program *PROG* as *FILE*.
|
|
|
|
|
|
|
|
Note: *FILE* must be located in *bpffs* mount. It must not contain a dot
|
|
|
|
character ('.'), which is reserved for future extensions of *bpffs*.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog { load | loadall } *OBJ* *PATH* [type *TYPE*] [map { idx *IDX* | name *NAME* } *MAP*] [{ offload_dev | xdpmeta_dev } *NAME*] [pinmaps *MAP_DIR*] [autoattach]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Load bpf program(s) from binary *OBJ* and pin as *PATH*. **bpftool prog
|
|
|
|
load** pins only the first program from the *OBJ* as *PATH*. **bpftool prog
|
|
|
|
loadall** pins all programs from the *OBJ* under *PATH* directory. **type**
|
|
|
|
is optional, if not specified program type will be inferred from section
|
|
|
|
names. By default bpftool will create new maps as declared in the ELF
|
|
|
|
object being loaded. **map** parameter allows for the reuse of existing
|
|
|
|
maps. It can be specified multiple times, each time for a different map.
|
|
|
|
*IDX* refers to index of the map to be replaced in the ELF file counting
|
|
|
|
from 0, while *NAME* allows to replace a map by name. *MAP* specifies the
|
|
|
|
map to use, referring to it by **id** or through a **pinned** file. If
|
|
|
|
**offload_dev** *NAME* is specified program will be loaded onto given
|
|
|
|
networking device (offload). If **xdpmeta_dev** *NAME* is specified program
|
|
|
|
will become device-bound without offloading, this facilitates access to XDP
|
|
|
|
metadata. Optional **pinmaps** argument can be provided to pin all maps
|
|
|
|
under *MAP_DIR* directory.
|
|
|
|
|
|
|
|
If **autoattach** is specified program will be attached before pin. In that
|
|
|
|
case, only the link (representing the program attached to its hook) is
|
|
|
|
pinned, not the program as such, so the path won't show in **bpftool prog
|
|
|
|
show -f**, only show in **bpftool link show -f**. Also, this only works
|
|
|
|
when bpftool (libbpf) is able to infer all necessary information from the
|
|
|
|
object file, in particular, it's not supported for all program types. If a
|
|
|
|
program does not support autoattach, bpftool falls back to regular pinning
|
|
|
|
for that program instead.
|
|
|
|
|
|
|
|
Note: *PATH* must be located in *bpffs* mount. It must not contain a dot
|
|
|
|
character ('.'), which is reserved for future extensions of *bpffs*.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog attach *PROG* *ATTACH_TYPE* [*MAP*]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Attach bpf program *PROG* (with type specified by *ATTACH_TYPE*). Most
|
|
|
|
*ATTACH_TYPEs* require a *MAP* parameter, with the exception of
|
|
|
|
*flow_dissector* which is attached to current networking name space.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog detach *PROG* *ATTACH_TYPE* [*MAP*]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Detach bpf program *PROG* (with type specified by *ATTACH_TYPE*). Most
|
|
|
|
*ATTACH_TYPEs* require a *MAP* parameter, with the exception of
|
|
|
|
*flow_dissector* which is detached from the current networking name space.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog tracelog
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Dump the trace pipe of the system to the console (stdout). Hit <Ctrl+C> to
|
|
|
|
stop printing. BPF programs can write to this trace pipe at runtime with
|
|
|
|
the **bpf_trace_printk**\ () helper. This should be used only for debugging
|
|
|
|
purposes. For streaming data from BPF programs to user space, one can use
|
|
|
|
perf events (see also **bpftool-map**\ (8)).
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog run *PROG* data_in *FILE* [data_out *FILE* [data_size_out *L*]] [ctx_in *FILE* [ctx_out *FILE* [ctx_size_out *M*]]] [repeat *N*]
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Run BPF program *PROG* in the kernel testing infrastructure for BPF,
|
|
|
|
meaning that the program works on the data and context provided by the
|
|
|
|
user, and not on actual packets or monitored functions etc. Return value
|
|
|
|
and duration for the test run are printed out to the console.
|
|
|
|
|
|
|
|
Input data is read from the *FILE* passed with **data_in**. If this *FILE*
|
|
|
|
is "**-**", input data is read from standard input. Input context, if any,
|
|
|
|
is read from *FILE* passed with **ctx_in**. Again, "**-**" can be used to
|
|
|
|
read from standard input, but only if standard input is not already in use
|
|
|
|
for input data. If a *FILE* is passed with **data_out**, output data is
|
|
|
|
written to that file. Similarly, output context is written to the *FILE*
|
|
|
|
passed with **ctx_out**. For both output flows, "**-**" can be used to
|
|
|
|
print to the standard output (as plain text, or JSON if relevant option was
|
|
|
|
passed). If output keywords are omitted, output data and context are
|
|
|
|
discarded. Keywords **data_size_out** and **ctx_size_out** are used to pass
|
|
|
|
the size (in bytes) for the output buffers to the kernel, although the
|
|
|
|
default of 32 kB should be more than enough for most cases.
|
|
|
|
|
|
|
|
Keyword **repeat** is used to indicate the number of consecutive runs to
|
|
|
|
perform. Note that output data and context printed to files correspond to
|
|
|
|
the last of those runs. The duration printed out at the end of the runs is
|
|
|
|
an average over all runs performed by the command.
|
|
|
|
|
|
|
|
Not all program types support test run. Among those which do, not all of
|
|
|
|
them can take the **ctx_in**/**ctx_out** arguments. bpftool does not
|
|
|
|
perform checks on program types.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog profile *PROG* [duration *DURATION*] *METRICs*
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Profile *METRICs* for bpf program *PROG* for *DURATION* seconds or until
|
|
|
|
user hits <Ctrl+C>. *DURATION* is optional. If *DURATION* is not specified,
|
|
|
|
the profiling will run up to **UINT_MAX** seconds.
|
|
|
|
|
2024-03-31 21:03:45 +01:00
|
|
|
bpftool prog help
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
Print short help message.
|
2017-10-04 20:10:05 -07:00
|
|
|
|
2017-10-23 09:24:06 -07:00
|
|
|
OPTIONS
|
|
|
|
=======
|
bpftool: Use simpler indentation in source rST for documentation
The rST manual pages for bpftool would use a mix of tabs and spaces for
indentation. While this is the norm in C code, this is rather unusual
for rST documents, and over time we've seen many contributors use a
wrong level of indentation for documentation update.
Let's fix bpftool's indentation in docs once and for all:
- Let's use spaces, that are more common in rST files.
- Remove one level of indentation for the synopsis, the command
description, and the "see also" section. As a result, all sections
start with the same indentation level in the generated man page.
- Rewrap the paragraphs after the changes.
There is no content change in this patch, only indentation and
rewrapping changes. The wrapping in the generated source files for the
manual pages is changed, but the pages displayed with "man" remain the
same, apart from the adjusted indentation level on relevant sections.
[ Quentin: rebased on bpf-next, removed indent level for command
description and options, updated synopsis, command summary, and "see
also" sections. ]
Signed-off-by: Rameez Rehman <rameezrehman408@hotmail.com>
Signed-off-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240331200346.29118-2-qmo@kernel.org
2024-03-31 21:03:44 +01:00
|
|
|
.. include:: common_options.rst
|
|
|
|
|
|
|
|
-f, --bpffs
|
|
|
|
When showing BPF programs, show file names of pinned programs.
|
|
|
|
|
|
|
|
-m, --mapcompat
|
|
|
|
Allow loading maps with unknown map definitions.
|
|
|
|
|
|
|
|
-n, --nomount
|
|
|
|
Do not automatically attempt to mount any virtual file system (such as
|
|
|
|
tracefs or BPF virtual file system) when necessary.
|
|
|
|
|
|
|
|
-L, --use-loader
|
|
|
|
Load program as a "loader" program. This is useful to debug the generation
|
|
|
|
of such programs. When this option is in use, bpftool attempts to load the
|
|
|
|
programs from the object file into the kernel, but does not pin them
|
|
|
|
(therefore, the *PATH* must not be provided).
|
|
|
|
|
|
|
|
When combined with the **-d**\ \|\ **--debug** option, additional debug
|
|
|
|
messages are generated, and the execution of the loader program will use
|
|
|
|
the **bpf_trace_printk**\ () helper to log each step of loading BTF,
|
|
|
|
creating the maps, and loading the programs (see **bpftool prog tracelog**
|
|
|
|
as a way to dump those messages).
|
2021-07-30 22:54:34 +01:00
|
|
|
|
2017-10-04 20:10:05 -07:00
|
|
|
EXAMPLES
|
|
|
|
========
|
|
|
|
**# bpftool prog show**
|
2018-12-14 13:55:58 +00:00
|
|
|
|
2017-10-04 20:10:05 -07:00
|
|
|
::
|
|
|
|
|
tools/bpftool: recognize bpf_prog_info run_time_ns and run_cnt
$ bpftool p s
1: kprobe tag a56587d488d216c9 gpl run_time_ns 79786 run_cnt 8
loaded_at 2019-02-22T12:22:51-0800 uid 0
xlated 352B not jited memlock 4096B
$ bpftool --json --pretty p s
[{
"id": 1,
"type": "kprobe",
"tag": "a56587d488d216c9",
"gpl_compatible": true,
"run_time_ns": 79786,
"run_cnt": 8,
"loaded_at": 1550866971,
"uid": 0,
"bytes_xlated": 352,
"jited": false,
"bytes_memlock": 4096
}
]
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-02-25 14:28:42 -08:00
|
|
|
10: xdp name some_prog tag 005a3d2123620c8b gpl run_time_ns 81632 run_cnt 10
|
2018-12-14 13:55:58 +00:00
|
|
|
loaded_at 2017-09-29T20:11:00+0000 uid 0
|
|
|
|
xlated 528B jited 370B memlock 4096B map_ids 10
|
2020-06-19 16:17:03 -07:00
|
|
|
pids systemd(1)
|
2017-10-04 20:10:05 -07:00
|
|
|
|
2017-10-23 09:24:16 -07:00
|
|
|
**# bpftool --json --pretty prog show**
|
|
|
|
|
|
|
|
::
|
|
|
|
|
2018-12-14 13:55:58 +00:00
|
|
|
[{
|
|
|
|
"id": 10,
|
|
|
|
"type": "xdp",
|
|
|
|
"tag": "005a3d2123620c8b",
|
|
|
|
"gpl_compatible": true,
|
tools/bpftool: recognize bpf_prog_info run_time_ns and run_cnt
$ bpftool p s
1: kprobe tag a56587d488d216c9 gpl run_time_ns 79786 run_cnt 8
loaded_at 2019-02-22T12:22:51-0800 uid 0
xlated 352B not jited memlock 4096B
$ bpftool --json --pretty p s
[{
"id": 1,
"type": "kprobe",
"tag": "a56587d488d216c9",
"gpl_compatible": true,
"run_time_ns": 79786,
"run_cnt": 8,
"loaded_at": 1550866971,
"uid": 0,
"bytes_xlated": 352,
"jited": false,
"bytes_memlock": 4096
}
]
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-02-25 14:28:42 -08:00
|
|
|
"run_time_ns": 81632,
|
|
|
|
"run_cnt": 10,
|
2018-12-14 13:55:58 +00:00
|
|
|
"loaded_at": 1506715860,
|
|
|
|
"uid": 0,
|
|
|
|
"bytes_xlated": 528,
|
|
|
|
"jited": true,
|
|
|
|
"bytes_jited": 370,
|
|
|
|
"bytes_memlock": 4096,
|
|
|
|
"map_ids": [10
|
2020-06-19 16:17:03 -07:00
|
|
|
],
|
|
|
|
"pids": [{
|
|
|
|
"pid": 1,
|
|
|
|
"comm": "systemd"
|
|
|
|
}
|
2018-12-14 13:55:58 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
2017-10-23 09:24:16 -07:00
|
|
|
|
2017-10-04 20:10:05 -07:00
|
|
|
|
|
|
|
|
| **# bpftool prog dump xlated id 10 file /tmp/t**
|
2020-05-11 17:15:34 +01:00
|
|
|
| **$ ls -l /tmp/t**
|
2017-10-04 20:10:05 -07:00
|
|
|
|
2018-12-14 13:55:58 +00:00
|
|
|
::
|
|
|
|
|
|
|
|
-rw------- 1 root root 560 Jul 22 01:42 /tmp/t
|
|
|
|
|
|
|
|
**# bpftool prog dump jited tag 005a3d2123620c8b**
|
2017-10-04 20:10:05 -07:00
|
|
|
|
|
|
|
::
|
|
|
|
|
2018-12-14 13:55:58 +00:00
|
|
|
0: push %rbp
|
|
|
|
1: mov %rsp,%rbp
|
|
|
|
2: sub $0x228,%rsp
|
|
|
|
3: sub $0x28,%rbp
|
|
|
|
4: mov %rbx,0x0(%rbp)
|
2017-10-04 20:10:05 -07:00
|
|
|
|
2017-10-23 09:24:16 -07:00
|
|
|
|
|
|
|
|
| **# mount -t bpf none /sys/fs/bpf/**
|
|
|
|
| **# bpftool prog pin id 10 /sys/fs/bpf/prog**
|
2017-12-13 15:18:53 +00:00
|
|
|
| **# bpftool prog load ./my_prog.o /sys/fs/bpf/prog2**
|
2017-10-23 09:24:16 -07:00
|
|
|
| **# ls -l /sys/fs/bpf/**
|
|
|
|
|
2018-12-14 13:55:58 +00:00
|
|
|
::
|
|
|
|
|
|
|
|
-rw------- 1 root root 0 Jul 22 01:43 prog
|
|
|
|
-rw------- 1 root root 0 Jul 22 01:44 prog2
|
|
|
|
|
|
|
|
**# bpftool prog dump jited pinned /sys/fs/bpf/prog opcodes**
|
2017-10-23 09:24:16 -07:00
|
|
|
|
|
|
|
::
|
|
|
|
|
2018-12-14 13:55:58 +00:00
|
|
|
0: push %rbp
|
|
|
|
55
|
|
|
|
1: mov %rsp,%rbp
|
|
|
|
48 89 e5
|
|
|
|
4: sub $0x228,%rsp
|
|
|
|
48 81 ec 28 02 00 00
|
|
|
|
b: sub $0x28,%rbp
|
|
|
|
48 83 ed 28
|
|
|
|
f: mov %rbx,0x0(%rbp)
|
|
|
|
48 89 5d 00
|
2017-10-04 20:10:05 -07:00
|
|
|
|
2018-07-10 14:43:07 -07:00
|
|
|
|
|
|
|
|
| **# bpftool prog load xdp1_kern.o /sys/fs/bpf/xdp1 type xdp map name rxcnt id 7**
|
|
|
|
| **# bpftool prog show pinned /sys/fs/bpf/xdp1**
|
2018-12-14 13:55:58 +00:00
|
|
|
|
|
|
|
::
|
|
|
|
|
|
|
|
9: xdp name xdp_prog1 tag 539ec6ce11b52f98 gpl
|
|
|
|
loaded_at 2018-06-25T16:17:31-0700 uid 0
|
|
|
|
xlated 488B jited 336B memlock 4096B map_ids 7
|
|
|
|
|
|
|
|
**# rm /sys/fs/bpf/xdp1**
|
2017-10-04 20:10:05 -07:00
|
|
|
|
2020-03-09 10:32:16 -07:00
|
|
|
|
|
|
|
|
| **# bpftool prog profile id 337 duration 10 cycles instructions llc_misses**
|
|
|
|
|
|
|
|
::
|
2020-05-11 17:15:34 +01:00
|
|
|
|
2020-03-09 10:32:16 -07:00
|
|
|
51397 run_cnt
|
|
|
|
40176203 cycles (83.05%)
|
|
|
|
42518139 instructions # 1.06 insns per cycle (83.39%)
|
|
|
|
123 llc_misses # 2.89 LLC misses per million insns (83.15%)
|
2021-07-30 22:54:34 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
| Output below is for the trace logs.
|
|
|
|
| Run in separate terminals:
|
|
|
|
| **# bpftool prog tracelog**
|
|
|
|
| **# bpftool prog load -L -d file.o**
|
|
|
|
|
|
|
|
::
|
|
|
|
|
|
|
|
bpftool-620059 [004] d... 2634685.517903: bpf_trace_printk: btf_load size 665 r=5
|
|
|
|
bpftool-620059 [004] d... 2634685.517912: bpf_trace_printk: map_create sample_map idx 0 type 2 value_size 4 value_btf_id 0 r=6
|
|
|
|
bpftool-620059 [004] d... 2634685.517997: bpf_trace_printk: prog_load sample insn_cnt 13 r=7
|
|
|
|
bpftool-620059 [004] d... 2634685.517999: bpf_trace_printk: close(5) = 0
|