From patchwork Wed Sep 5 23:58:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonghong Song X-Patchwork-Id: 966736 Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="XU08lqRR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 425LHp4C5fz9sCn for ; Thu, 6 Sep 2018 09:58:14 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726131AbeIFEar (ORCPT ); Thu, 6 Sep 2018 00:30:47 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:32870 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725963AbeIFEaq (ORCPT ); Thu, 6 Sep 2018 00:30:46 -0400 Received: from pps.filterd (m0044010.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w85NtGtO010043 for ; Wed, 5 Sep 2018 16:58:11 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : mime-version : content-type; s=facebook; bh=TnFf4G4pP1vlcGNQD3NuOJrNCcj1CD4CsY/KOesJAU4=; b=XU08lqRRGTGSmX3FZfyDj5ALxPpsKErmg1SolIzwM7lp97U0Y46+wP8qS5CkywNMwOvu BCu0XVjW3m2c8JTh+bulk7MOMoY/1OdK8z44ubgjLam7zg11pnUmPBIzIKp5vRzYqwjQ xLM+qZawxY7OU6sOIw0kaTY5n7zYZwFDjhQ= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2maqsxg8pj-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Wed, 05 Sep 2018 16:58:11 -0700 Received: from mx-out.facebook.com (192.168.52.123) by mail.thefacebook.com (192.168.16.17) with Microsoft SMTP Server (TLS) id 14.3.361.1; Wed, 5 Sep 2018 16:58:10 -0700 Received: by devbig003.ftw2.facebook.com (Postfix, from userid 128203) id 3D9B537017AF; Wed, 5 Sep 2018 16:58:06 -0700 (PDT) Smtp-Origin-Hostprefix: devbig From: Yonghong Song Smtp-Origin-Hostname: devbig003.ftw2.facebook.com To: , , CC: Smtp-Origin-Cluster: ftw2c04 Subject: [PATCH bpf-next 0/4] tools/bpf: add bpftool net support Date: Wed, 5 Sep 2018 16:58:02 -0700 Message-ID: <20180905235806.1536396-1-yhs@fb.com> X-Mailer: git-send-email 2.17.1 X-FB-Internal: Safe MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-09-05_14:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org As bpf usage becomes more pervasive, people starts to worry about their cpu and memory cost. On a particular host, people often wanted to know all running bpf programs and their attachment context. So they can relate a performance/memory anormly quickly to a particular bpf program or an application. bpftool already provides a pretty good coverage for perf and cgroup related attachments. This patch set enabled to dump attachment info for xdp and tc bpf programs. Currently, users can already use "ip link show " and "tc filter show dev ..." to dump bpf program attachment information for xdp and tc bpf programs. The main reason to implement such functionality in bpftool as well is for better user experience. We want the bpftool to be the ultimate tool for bpf introspection. The bpftool net implementation will only present necessary bpf attachment information to the user, ignoring most other ip/tc specific information. For example, the below is a pretty json print for xdp and tc_filters. $ ./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" } ] } ] Patch #1 synced kernel uapi header if_link.h to tools directory. Patch #2 moved tools/bpf/lib/bpf.c netlink related functions to a new file. Patch #3 implemented additional functions in libbpf which will be used in Patch #4. Patch #4 implemented bpftool net support to dump xdp and tc bpf program attachments. 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 .../bpf/bpftool/Documentation/bpftool-net.rst | 133 +++++++ tools/bpf/bpftool/Documentation/bpftool.rst | 6 +- tools/bpf/bpftool/bash-completion/bpftool | 17 +- tools/bpf/bpftool/main.c | 3 +- tools/bpf/bpftool/main.h | 7 + tools/bpf/bpftool/net.c | 233 +++++++++++++ tools/bpf/bpftool/netlink_dumper.c | 181 ++++++++++ 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 | 324 ++++++++++++++++++ tools/lib/bpf/nlattr.c | 33 +- tools/lib/bpf/nlattr.h | 38 ++ 16 files changed, 1094 insertions(+), 149 deletions(-) create mode 100644 tools/bpf/bpftool/Documentation/bpftool-net.rst 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