Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6f3bac0 authored by Yonghong Song's avatar Yonghong Song Committed by Alexei Starovoitov
Browse files

tools/bpf: bpftool: add net support



Add "bpftool net" support. Networking devices are enumerated
to dump device index/name associated with xdp progs.

For each networking device, tc classes and qdiscs are enumerated
in order to check their bpf filters.
In addition, root handle and clsact ingress/egress are also checked for
bpf filters.  Not all filter information is printed out. Only ifindex,
kind, filter name, prog_id and tag are printed out, which are good
enough to show attachment information. If the filter action
is a bpf action, its bpf program id, bpf name and tag will be
printed out as well.

For example,
  $ ./bpftool net
  xdp [
  ifindex 2 devname eth0 prog_id 198
  ]
  tc_filters [
  ifindex 2 kind qdisc_htb name prefix_matcher.o:[cls_prefix_matcher_htb]
            prog_id 111727 tag d08fe3b4319bc2fd act []
  ifindex 2 kind qdisc_clsact_ingress name fbflow_icmp
            prog_id 130246 tag 3f265c7f26db62c9 act []
  ifindex 2 kind qdisc_clsact_egress name prefix_matcher.o:[cls_prefix_matcher_clsact]
            prog_id 111726 tag 99a197826974c876
  ifindex 2 kind qdisc_clsact_egress name cls_fg_dscp
            prog_id 108619 tag dc4630674fd72dcc act []
  ifindex 2 kind qdisc_clsact_egress name fbflow_egress
            prog_id 130245 tag 72d2d830d6888d2c
  ]
  $ ./bpftool -jp net
  [{
        "xdp": [{
                "ifindex": 2,
                "devname": "eth0",
                "prog_id": 198
            }
        ],
        "tc_filters": [{
                "ifindex": 2,
                "kind": "qdisc_htb",
                "name": "prefix_matcher.o:[cls_prefix_matcher_htb]",
                "prog_id": 111727,
                "tag": "d08fe3b4319bc2fd",
                "act": []
            },{
                "ifindex": 2,
                "kind": "qdisc_clsact_ingress",
                "name": "fbflow_icmp",
                "prog_id": 130246,
                "tag": "3f265c7f26db62c9",
                "act": []
            },{
                "ifindex": 2,
                "kind": "qdisc_clsact_egress",
                "name": "prefix_matcher.o:[cls_prefix_matcher_clsact]",
                "prog_id": 111726,
                "tag": "99a197826974c876"
            },{
                "ifindex": 2,
                "kind": "qdisc_clsact_egress",
                "name": "cls_fg_dscp",
                "prog_id": 108619,
                "tag": "dc4630674fd72dcc",
                "act": []
            },{
                "ifindex": 2,
                "kind": "qdisc_clsact_egress",
                "name": "fbflow_egress",
                "prog_id": 130245,
                "tag": "72d2d830d6888d2c"
            }
        ]
    }
  ]

Signed-off-by: default avatarYonghong Song <yhs@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 36f1678d
Loading
Loading
Loading
Loading
+133 −0
Original line number Diff line number Diff line
================
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** } [ **dev** name ] | **help**

NET COMMANDS
============

|	**bpftool** **net { show | list } [ dev name ]**
|	**bpftool** **net help**

DESCRIPTION
===========
	**bpftool net { show | list } [ dev name ]**
		  List all networking device driver and tc attachment in the system.

                  Output will start with all xdp program attachment, 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 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**.

EXAMPLES
========

| **# bpftool net**

::

      xdp [
      ifindex 2 devname eth0 prog_id 198
      ]
      tc_filters [
      ifindex 2 kind qdisc_htb name prefix_matcher.o:[cls_prefix_matcher_htb]
                prog_id 111727 tag d08fe3b4319bc2fd act []
      ifindex 2 kind qdisc_clsact_ingress name fbflow_icmp
                prog_id 130246 tag 3f265c7f26db62c9 act []
      ifindex 2 kind qdisc_clsact_egress name prefix_matcher.o:[cls_prefix_matcher_clsact]
                prog_id 111726 tag 99a197826974c876
      ifindex 2 kind qdisc_clsact_egress name cls_fg_dscp
                prog_id 108619 tag dc4630674fd72dcc act []
      ifindex 2 kind qdisc_clsact_egress name fbflow_egress
                prog_id 130245 tag 72d2d830d6888d2c
      ]

|
| **# bpftool -jp net**

::

    [{
            "xdp": [{
                    "ifindex": 2,
                    "devname": "eth0",
                    "prog_id": 198
                }
            ],
            "tc_filters": [{
                    "ifindex": 2,
                    "kind": "qdisc_htb",
                    "name": "prefix_matcher.o:[cls_prefix_matcher_htb]",
                    "prog_id": 111727,
                    "tag": "d08fe3b4319bc2fd",
                    "act": []
                },{
                    "ifindex": 2,
                    "kind": "qdisc_clsact_ingress",
                    "name": "fbflow_icmp",
                    "prog_id": 130246,
                    "tag": "3f265c7f26db62c9",
                    "act": []
                },{
                    "ifindex": 2,
                    "kind": "qdisc_clsact_egress",
                    "name": "prefix_matcher.o:[cls_prefix_matcher_clsact]",
                    "prog_id": 111726,
                    "tag": "99a197826974c876"
                },{
                    "ifindex": 2,
                    "kind": "qdisc_clsact_egress",
                    "name": "cls_fg_dscp",
                    "prog_id": 108619,
                    "tag": "dc4630674fd72dcc",
                    "act": []
                },{
                    "ifindex": 2,
                    "kind": "qdisc_clsact_egress",
                    "name": "fbflow_egress",
                    "prog_id": 130245,
                    "tag": "72d2d830d6888d2c"
                }
            ]
        }
    ]


SEE ALSO
========
	**bpftool**\ (8), **bpftool-prog**\ (8), **bpftool-map**\ (8)
+4 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ SYNOPSIS

	**bpftool** **version**

	*OBJECT* := { **map** | **program** | **cgroup** | **perf** }
	*OBJECT* := { **map** | **program** | **cgroup** | **perf** | **net** }

	*OPTIONS* := { { **-V** | **--version** } | { **-h** | **--help** }
	| { **-j** | **--json** } [{ **-p** | **--pretty** }] }
@@ -32,6 +32,8 @@ SYNOPSIS

	*PERF-COMMANDS* := { **show** | **list** | **help** }

	*NET-COMMANDS* := { **show** | **list** | **help** }

DESCRIPTION
===========
	*bpftool* allows for inspection and simple modification of BPF objects
@@ -58,4 +60,4 @@ OPTIONS
SEE ALSO
========
	**bpftool-map**\ (8), **bpftool-prog**\ (8), **bpftool-cgroup**\ (8)
        **bpftool-perf**\ (8)
        **bpftool-perf**\ (8), **bpftool-net**\ (8)
+13 −4
Original line number Diff line number Diff line
@@ -552,6 +552,15 @@ _bpftool()
                    ;;
            esac
            ;;
        net)
            case $command in
                *)
                    [[ $prev == $object ]] && \
                        COMPREPLY=( $( compgen -W 'help \
                            show list' -- "$cur" ) )
                    ;;
            esac
            ;;
    esac
} &&
complete -F _bpftool bpftool
+2 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ static int do_help(int argc, char **argv)
		"       %s batch file FILE\n"
		"       %s version\n"
		"\n"
		"       OBJECT := { prog | map | cgroup | perf }\n"
		"       OBJECT := { prog | map | cgroup | perf | net }\n"
		"       " HELP_SPEC_OPTIONS "\n"
		"",
		bin_name, bin_name, bin_name);
@@ -215,6 +215,7 @@ static const struct cmd cmds[] = {
	{ "map",	do_map },
	{ "cgroup",	do_cgroup },
	{ "perf",	do_perf },
	{ "net",	do_net },
	{ "version",	do_version },
	{ 0 }
};
+7 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ int do_map(int argc, char **arg);
int do_event_pipe(int argc, char **argv);
int do_cgroup(int argc, char **arg);
int do_perf(int argc, char **arg);
int do_net(int argc, char **arg);

int prog_parse_fd(int *argc, char ***argv);
int map_parse_fd(int *argc, char ***argv);
@@ -165,4 +166,10 @@ struct btf_dumper {
 */
int btf_dumper_type(const struct btf_dumper *d, __u32 type_id,
		    const void *data);

struct nlattr;
struct ifinfomsg;
struct tcmsg;
int do_xdp_dump(struct ifinfomsg *ifinfo, struct nlattr **tb);
int do_filter_dump(struct tcmsg *ifinfo, struct nlattr **tb, const char *kind);
#endif
Loading