From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yonghong Song Subject: [RFC PATCH bpf-next 0/4] tools/bpf: bpftool: add net support Date: Mon, 3 Sep 2018 11:26:43 -0700 Message-ID: <20180903182647.1244630-1-yhs@fb.com> Mime-Version: 1.0 Content-Type: text/plain Cc: To: , , Return-path: Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:43940 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727599AbeICWsN (ORCPT ); Mon, 3 Sep 2018 18:48:13 -0400 Received: from pps.filterd (m0109333.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w83IOvVO019030 for ; Mon, 3 Sep 2018 11:26:49 -0700 Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2m95u20kqv-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 03 Sep 2018 11:26:49 -0700 Sender: netdev-owner@vger.kernel.org List-ID: The functionality to dump network driver and tc related bpf programs are added. Currently, users can already use "ip link show " and "tc filter show dev ..." to dump bpf program attachment information for xdp programs and tc bpf programs. The implementation here allows bpftool as a central place for bpf introspection and users do not need to revert to other tools. Also, we can make command simpler to dump bpf related information, e.g., "bpftool net" is able to dump all xdp and tc bpf programs. For example, $ bpftool net xdp [ ] netdev_filters [ ifindex 2 name handle_icmp flags direct-action flags_gen [not_in_hw ] prog_id 3194 tag 846d29c14d0d7d26 act [] ifindex 2 name handle_egress flags direct-action flags_gen [not_in_hw ] prog_id 3193 tag 387d281be9fe77aa ] $ bpftool -jp net [{ "xdp": [], "netdev_filters": [{ "ifindex": 2, "name": "handle_icmp", "flags": "direct-action", "flags_gen": ["not_in_hw" ], "prog_id": 3194, "tag": "846d29c14d0d7d26", "act": [] },{ "ifindex": 2, "name": "handle_egress", "flags": "direct-action", "flags_gen": ["not_in_hw" ], "prog_id": 3193, "tag": "387d281be9fe77aa" } ] } ] This is labeled as RFC as . the current command line as "bpftool net {show|list} [dev name]", does this sound reasonable? When "dev name" is specified, only bpf programs for that particular device are displayed. . for some netlink attributes, currently I only print out the raw numbers, maybe I should print better similar to iproute2? . bpftool documentation and bash completion are not implemented. Patch #1 sync'd kernel uapi header if_link.h to tools directory. Patch #2 re-organized the bpf/lib bpf.c to have a separate file for netlink related functions. Patch #3 added additional netlink related functions. Patch #4 implemented "bpftool net" command. Yonghong Song (4): tools/bpf: sync kernel uapi header if_link.h to tools tools/bpf: move bpf/lib netlink related functions into a new file tools/bpf: add more netlink functionalities in lib/bpf tools/bpf: bpftool: add net support tools/bpf/bpftool/main.c | 3 +- tools/bpf/bpftool/main.h | 7 + tools/bpf/bpftool/net.c | 219 +++++++++++++++++++ tools/bpf/bpftool/netlink_dumper.c | 261 +++++++++++++++++++++++ tools/bpf/bpftool/netlink_dumper.h | 103 +++++++++ tools/include/uapi/linux/if_link.h | 17 ++ tools/lib/bpf/Build | 2 +- tools/lib/bpf/bpf.c | 129 ------------ tools/lib/bpf/libbpf.h | 16 ++ tools/lib/bpf/libbpf_errno.c | 1 + tools/lib/bpf/netlink.c | 323 +++++++++++++++++++++++++++++ tools/lib/bpf/nlattr.c | 33 +-- tools/lib/bpf/nlattr.h | 38 ++++ 13 files changed, 1009 insertions(+), 143 deletions(-) create mode 100644 tools/bpf/bpftool/net.c create mode 100644 tools/bpf/bpftool/netlink_dumper.c create mode 100644 tools/bpf/bpftool/netlink_dumper.h create mode 100644 tools/lib/bpf/netlink.c -- 2.17.1