From patchwork Thu Dec 28 02:39:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 853297 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="IpVlBN0D"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3z6Ypr3M5hz9s4s for ; Thu, 28 Dec 2017 13:40:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753212AbdL1CkC (ORCPT ); Wed, 27 Dec 2017 21:40:02 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:43886 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753181AbdL1Cj6 (ORCPT ); Wed, 27 Dec 2017 21:39:58 -0500 Received: by mail-pl0-f65.google.com with SMTP id z5so20403877plo.10 for ; Wed, 27 Dec 2017 18:39:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mqvB1nl3xvZ8DcgslS7Lf5ZYfC5ws5Xa6ivkrm7dND4=; b=IpVlBN0DAyU4zjCrv9dGYyRDKA9YAMqHVmiWs1CmhuQNOuNxqL1zHN9WqDhQq3A+vE K9yCmiMVWBBAgb+5+Hj7HZ+uEEB+IWKtLKKs3wtm1IEMwcwXTw3iha+UgdZsjUivBl+y qdplT5dG2PBb6FozHIqWQlOU0sr72JKPbyTU6ji71Ak5HWOdzZvsJs+Sphp6gmoVjNuR l4EFnU8Y/n7+90UBd/qikRX4wXH34nsH4HZcaosJ26zKA6cXvO8MINHA6d8tmri/9oI5 LPUUlo0FCWcexk00EFTeWUBxIQW/aCzCoY8OohQ0WqWqGYfn2b2Br4h02P10LGJCiIgq ZH6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mqvB1nl3xvZ8DcgslS7Lf5ZYfC5ws5Xa6ivkrm7dND4=; b=nMxDBB5JksLutKvryhNMVmcqZge59i/d3E7I5jVZmbXNXj/alyRWdjDqY3+0HP51pj DAV2vM782x540X0JcuJ1S2OYfkHYc5lKXdZrxakqKuAMPDwnTPiXWS39EVO7hXJLb8Z+ TlXiIVKCmRlV9DjCQy8Df+8n/PT5ioo7pPginl2hRh/wEYuyjM0kEyolffJKJMTIea+g PejtJRrH/KVr1r1s1q0HSZB6MA2kWJ6Lqid7/x84wiyQSN0bwHdbleBshb5HskOht3Lr cqkPhTiFRoSA09keax7MoqZqFx5CNLtuQa2rnsdnhgP6dZbL8Gn+XhBqa7u42XRYVZMX PM6w== X-Gm-Message-State: AKGB3mIDUQPLl/ef17EJRDa39BAxYt8KIbUMLgwRb58Ls3KCJfjAiO4q pKtwm/6XFJSfx+isCQYrjWahluAv X-Google-Smtp-Source: ACJfBovmG3tO8VhlpwYtt1d/9CdPutmdIbeD4Q6bw3uFK1Eh9VA6cNgPKFN0ij/x1yt7UVruqcJ1Rw== X-Received: by 10.159.194.18 with SMTP id x18mr30038327pln.31.1514428797840; Wed, 27 Dec 2017 18:39:57 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id a20sm10893192pgw.27.2017.12.27.18.39.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 27 Dec 2017 18:39:57 -0800 (PST) From: Jakub Kicinski To: netdev@vger.kernel.org, daniel@iogearbox.net, alexei.starovoitov@gmail.com Cc: oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH bpf-next v3 8/9] tools: bpftool: report device information for offloaded programs Date: Wed, 27 Dec 2017 18:39:10 -0800 Message-Id: <20171228023911.4251-9-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171228023911.4251-1-jakub.kicinski@netronome.com> References: <20171228023911.4251-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Print the just-exposed device information about device to which program is bound. Signed-off-by: Jakub Kicinski Reviewed-by: Quentin Monnet --- tools/bpf/bpftool/common.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++ tools/bpf/bpftool/main.h | 2 ++ tools/bpf/bpftool/prog.c | 3 +++ 3 files changed, 57 insertions(+) diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index b62c94e3997a..6601c95a9258 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -44,7 +44,9 @@ #include #include #include +#include #include +#include #include #include @@ -412,3 +414,53 @@ void delete_pinned_obj_table(struct pinned_obj_table *tab) free(obj); } } + +static char * +ifindex_to_name_ns(__u32 ifindex, __u32 ns_dev, __u32 ns_ino, char *buf) +{ + struct stat st; + int err; + + err = stat("/proc/self/ns/net", &st); + if (err) { + p_err("Can't stat /proc/self: %s", strerror(errno)); + return NULL; + } + + if (st.st_dev != ns_dev || st.st_ino != ns_ino) + return NULL; + + return if_indextoname(ifindex, buf); +} + +void print_dev_plain(__u32 ifindex, __u64 ns_dev, __u64 ns_inode) +{ + char name[IF_NAMESIZE]; + + if (!ifindex) + return; + + printf(" dev "); + if (ifindex_to_name_ns(ifindex, ns_dev, ns_inode, name)) + printf("%s", name); + else + printf("ifindex %u ns_dev %llu ns_ino %llu", + ifindex, ns_dev, ns_inode); +} + +void print_dev_json(__u32 ifindex, __u64 ns_dev, __u64 ns_inode) +{ + char name[IF_NAMESIZE]; + + if (!ifindex) + return; + + jsonw_name(json_wtr, "dev"); + jsonw_start_object(json_wtr); + jsonw_uint_field(json_wtr, "ifindex", ifindex); + jsonw_uint_field(json_wtr, "ns_dev", ns_dev); + jsonw_uint_field(json_wtr, "ns_inode", ns_inode); + if (ifindex_to_name_ns(ifindex, ns_dev, ns_inode, name)) + jsonw_string_field(json_wtr, "ifname", name); + jsonw_end_object(json_wtr); +} diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index 8f6d3cac0347..65b526fe6e7e 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h @@ -96,6 +96,8 @@ struct pinned_obj { int build_pinned_obj_table(struct pinned_obj_table *table, enum bpf_obj_type type); void delete_pinned_obj_table(struct pinned_obj_table *tab); +void print_dev_plain(__u32 ifindex, __u64 ns_dev, __u64 ns_inode); +void print_dev_json(__u32 ifindex, __u64 ns_dev, __u64 ns_inode); struct cmd { const char *cmd; diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 037484ceaeaf..4ccf6301f0fe 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -230,6 +230,8 @@ static void print_prog_json(struct bpf_prog_info *info, int fd) info->tag[0], info->tag[1], info->tag[2], info->tag[3], info->tag[4], info->tag[5], info->tag[6], info->tag[7]); + print_dev_json(info->ifindex, info->netns_dev, info->netns_ino); + if (info->load_time) { char buf[32]; @@ -287,6 +289,7 @@ static void print_prog_plain(struct bpf_prog_info *info, int fd) printf("tag "); fprint_hex(stdout, info->tag, BPF_TAG_SIZE, ""); + print_dev_plain(info->ifindex, info->netns_dev, info->netns_ino); printf("\n"); if (info->load_time) {