| .. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | |
| ================ | |
| bpftool-net | |
| ================ | |
| ------------------------------------------------------------------------------- | |
| tool for inspection of networking related bpf prog attachments | |
| ------------------------------------------------------------------------------- | |
| :Manual section: 8 | |
| .. include:: substitutions.rst | |
| SYNOPSIS | |
| ======== | |
| **bpftool** [*OPTIONS*] **net** *COMMAND* | |
| *OPTIONS* := { |COMMON_OPTIONS| } | |
| *COMMANDS* := { **show** | **list** | **attach** | **detach** | **help** } | |
| NET COMMANDS | |
| ============ | |
| | **bpftool** **net** { **show** | **list** } [ **dev** *NAME* ] | |
| | **bpftool** **net attach** *ATTACH_TYPE* *PROG* **dev** *NAME* [ **overwrite** | **prepend** ] | |
| | **bpftool** **net detach** *ATTACH_TYPE* **dev** *NAME* | |
| | **bpftool** **net help** | |
| | | |
| | *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* | **name** *PROG_NAME* } | |
| | *ATTACH_TYPE* := { **xdp** | **xdpgeneric** | **xdpdrv** | **xdpoffload** | **tcx_ingress** | **tcx_egress** } | |
| DESCRIPTION | |
| =========== | |
| bpftool net { show | list } [ dev *NAME* ] | |
| List bpf program attachments in the kernel networking subsystem. | |
| Currently, device driver xdp attachments, tcx, netkit and old-style tc | |
| classifier/action attachments, flow_dissector as well as netfilter | |
| attachments are implemented, i.e., for program types **BPF_PROG_TYPE_XDP**, | |
| **BPF_PROG_TYPE_SCHED_CLS**, **BPF_PROG_TYPE_SCHED_ACT**, | |
| **BPF_PROG_TYPE_FLOW_DISSECTOR**, **BPF_PROG_TYPE_NETFILTER**. | |
| 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 tcx, netkit, then tc class/qdisc bpf program attachments, then | |
| flow_dissector and finally netfilter programs. Both xdp programs and | |
| tcx/netkit/tc programs are ordered based on ifindex number. If multiple bpf | |
| programs attached to the same networking device through **tc**, the order | |
| will be first all bpf programs attached to tcx, netkit, then 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 | prepend ] | |
| Attach bpf program *PROG* to network interface *NAME* with type specified | |
| by *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; | |
| **tcx_ingress** - Ingress TCX. runs on ingress net traffic; | |
| **tcx_egress** - Egress TCX. runs on egress net traffic; | |
| For XDP-related attach types (**xdp**, **xdpgeneric**, **xdpdrv**, | |
| **xdpoffload**), the **overwrite** option can be used to replace a | |
| previously attached bpf program. | |
| For **tcx_ingress** and **tcx_egress** attach types, the **prepend** option | |
| can be used to attach the program at the beginning of the chain instead of | |
| at the end. | |
| 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. | |
| bpftool net help | |
| Print short help message. | |
| OPTIONS | |
| ======= | |
| .. include:: common_options.rst | |
| 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: | |
| | | |
| | **# bpftool net attach tcx_ingress name tc_prog dev lo** | |
| | **# bpftool net** | |
| | | |
| :: | |
| tc: | |
| lo(1) tcx/ingress tc_prog prog_id 29 | |
| | | |
| | **# bpftool net attach tcx_ingress name tc_prog2 dev lo prepend** | |
| | **# bpftool net** | |
| | | |
| :: | |
| tc: | |
| lo(1) tcx/ingress tc_prog2 prog_id 30 | |
| lo(1) tcx/ingress tc_prog prog_id 29 | |
| | | |
| | **# bpftool net attach tcx_ingress name tc_prog dev lo** | |
| | **# bpftool net detach tcx_ingress dev lo** | |
| | **# bpftool net** | |
| | | |
| :: | |
| tc: |