================
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)
