| ================ |
| bpftool-net |
| ================ |
| ------------------------------------------------------------------------------- |
| tool for inspection of netdev/tc related bpf prog attachments |
| ------------------------------------------------------------------------------- |
| |
| :Manual section: 8 |
| |
| SYNOPSIS |
| ======== |
| |
| **bpftool** [*OPTIONS*] **net** *COMMAND* |
| |
| *OPTIONS* := { [{ **-j** | **--json** }] [{ **-p** | **--pretty** }] } |
| |
| *COMMANDS* := |
| { **show** | **list** | **attach** | **detach** | **help** } |
| |
| NET COMMANDS |
| ============ |
| |
| | **bpftool** **net** { **show** | **list** } [ **dev** *NAME* ] |
| | **bpftool** **net attach** *ATTACH_TYPE* *PROG* **dev** *NAME* [ **overwrite** ] |
| | **bpftool** **net detach** *ATTACH_TYPE* **dev** *NAME* |
| | **bpftool** **net help** |
| | |
| | *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* } |
| | *ATTACH_TYPE* := { **xdp** | **xdpgeneric** | **xdpdrv** | **xdpoffload** } |
| |
| DESCRIPTION |
| =========== |
| **bpftool net { show | list }** [ **dev** *NAME* ] |
| List bpf program attachments in the kernel networking subsystem. |
| |
| Currently, only device driver xdp attachments and tc filter |
| classification/action attachments are implemented, i.e., for |
| program types **BPF_PROG_TYPE_SCHED_CLS**, |
| **BPF_PROG_TYPE_SCHED_ACT** and **BPF_PROG_TYPE_XDP**. |
| For programs attached to a particular cgroup, e.g., |
| **BPF_PROG_TYPE_CGROUP_SKB**, **BPF_PROG_TYPE_CGROUP_SOCK**, |
| **BPF_PROG_TYPE_SOCK_OPS** and **BPF_PROG_TYPE_CGROUP_SOCK_ADDR**, |
| users can use **bpftool cgroup** to dump cgroup attachments. |
| For sk_{filter, skb, msg, reuseport} and lwt/seg6 |
| bpf programs, users should consult other tools, e.g., iproute2. |
| |
| The current output will start with all xdp program attachments, followed by |
| all tc class/qdisc bpf program attachments. Both xdp programs and |
| tc programs are ordered based on ifindex number. If multiple bpf |
| programs attached to the same networking device through **tc filter**, |
| the order will be first all bpf programs attached to tc classes, then |
| all bpf programs attached to non clsact qdiscs, and finally all |
| bpf programs attached to root and clsact qdisc. |
| |
| **bpftool** **net attach** *ATTACH_TYPE* *PROG* **dev** *NAME* [ **overwrite** ] |
| Attach bpf program *PROG* to network interface *NAME* with |
| type specified by *ATTACH_TYPE*. Previously attached bpf program |
| can be replaced by the command used with **overwrite** option. |
| Currently, only XDP-related modes are supported for *ATTACH_TYPE*. |
| |
| *ATTACH_TYPE* can be of: |
| **xdp** - try native XDP and fallback to generic XDP if NIC driver does not support it; |
| **xdpgeneric** - Generic XDP. runs at generic XDP hook when packet already enters receive path as skb; |
| **xdpdrv** - Native XDP. runs earliest point in driver's receive path; |
| **xdpoffload** - Offload XDP. runs directly on NIC on each packet reception; |
| |
| **bpftool** **net detach** *ATTACH_TYPE* **dev** *NAME* |
| Detach bpf program attached to network interface *NAME* with |
| type specified by *ATTACH_TYPE*. To detach bpf program, same |
| *ATTACH_TYPE* previously used for attach must be specified. |
| Currently, only XDP-related modes are supported for *ATTACH_TYPE*. |
| |
| **bpftool net help** |
| Print short help message. |
| |
| OPTIONS |
| ======= |
| -h, --help |
| Print short generic help message (similar to **bpftool help**). |
| |
| -V, --version |
| Print version number (similar to **bpftool version**). |
| |
| -j, --json |
| Generate JSON output. For commands that cannot produce JSON, this |
| option has no effect. |
| |
| -p, --pretty |
| Generate human-readable JSON output. Implies **-j**. |
| |
| -d, --debug |
| Print all logs available from libbpf, including debug-level |
| information. |
| |
| EXAMPLES |
| ======== |
| |
| | **# bpftool net** |
| |
| :: |
| |
| xdp: |
| eth0(2) driver id 198 |
| |
| tc: |
| eth0(2) htb name prefix_matcher.o:[cls_prefix_matcher_htb] id 111727 act [] |
| eth0(2) clsact/ingress fbflow_icmp id 130246 act [] |
| eth0(2) clsact/egress prefix_matcher.o:[cls_prefix_matcher_clsact] id 111726 |
| eth0(2) clsact/egress cls_fg_dscp id 108619 act [] |
| eth0(2) clsact/egress fbflow_egress id 130245 |
| |
| | |
| | **# bpftool -jp net** |
| |
| :: |
| |
| [{ |
| "xdp": [{ |
| "devname": "eth0", |
| "ifindex": 2, |
| "mode": "driver", |
| "id": 198 |
| } |
| ], |
| "tc": [{ |
| "devname": "eth0", |
| "ifindex": 2, |
| "kind": "htb", |
| "name": "prefix_matcher.o:[cls_prefix_matcher_htb]", |
| "id": 111727, |
| "act": [] |
| },{ |
| "devname": "eth0", |
| "ifindex": 2, |
| "kind": "clsact/ingress", |
| "name": "fbflow_icmp", |
| "id": 130246, |
| "act": [] |
| },{ |
| "devname": "eth0", |
| "ifindex": 2, |
| "kind": "clsact/egress", |
| "name": "prefix_matcher.o:[cls_prefix_matcher_clsact]", |
| "id": 111726, |
| },{ |
| "devname": "eth0", |
| "ifindex": 2, |
| "kind": "clsact/egress", |
| "name": "cls_fg_dscp", |
| "id": 108619, |
| "act": [] |
| },{ |
| "devname": "eth0", |
| "ifindex": 2, |
| "kind": "clsact/egress", |
| "name": "fbflow_egress", |
| "id": 130245, |
| } |
| ] |
| } |
| ] |
| |
| | |
| | **# bpftool net attach xdpdrv id 16 dev enp6s0np0** |
| | **# bpftool net** |
| |
| :: |
| |
| xdp: |
| enp6s0np0(4) driver id 16 |
| |
| | |
| | **# bpftool net attach xdpdrv id 16 dev enp6s0np0** |
| | **# bpftool net attach xdpdrv id 20 dev enp6s0np0 overwrite** |
| | **# bpftool net** |
| |
| :: |
| |
| xdp: |
| enp6s0np0(4) driver id 20 |
| |
| | |
| | **# bpftool net attach xdpdrv id 16 dev enp6s0np0** |
| | **# bpftool net detach xdpdrv dev enp6s0np0** |
| | **# bpftool net** |
| |
| :: |
| |
| xdp: |
| |
| |
| SEE ALSO |
| ======== |
| **bpf**\ (2), |
| **bpf-helpers**\ (7), |
| **bpftool**\ (8), |
| **bpftool-btf**\ (8), |
| **bpftool-cgroup**\ (8), |
| **bpftool-feature**\ (8), |
| **bpftool-gen**\ (8), |
| **bpftool-iter**\ (8), |
| **bpftool-link**\ (8), |
| **bpftool-map**\ (8), |
| **bpftool-perf**\ (8), |
| **bpftool-prog**\ (8), |
| **bpftool-struct_ops**\ (8) |