From patchwork Mon Oct 23 16:24:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 829399 X-Patchwork-Delegate: davem@davemloft.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="rsPsX5pj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yLMFL67lqz9t5s for ; Tue, 24 Oct 2017 03:25:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751662AbdJWQZJ (ORCPT ); Mon, 23 Oct 2017 12:25:09 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:50504 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751636AbdJWQZE (ORCPT ); Mon, 23 Oct 2017 12:25:04 -0400 Received: by mail-pf0-f196.google.com with SMTP id b6so17475979pfh.7 for ; Mon, 23 Oct 2017 09:25:04 -0700 (PDT) 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=QGBaqGCebRJkxst1kabqguVidbTLre/NQKrsZfBupoI=; b=rsPsX5pjyQRrQWlUjeR9KGDWi9nW12udvH3GX8IuXhj70Cojzk9t7Tgp5VPeD2l5t0 ++PisrHawEJ5TmALMOKADog1QxkNqn/QgmojSzAVBsHEuqUxNEkdF4Otq+HuE8mLjPIj 4Ge9K9D7h1i2MCeJ3m9YFX+m6QsjS/Vl8JtUOaCtWYX0BvfsAF9AyqsrEfBBxN2kplsb /RVIN+pkzkX0plTtJmN6C7kLD15cYOOdgifKgbMS0MD6BeM20UjFyVfObX7UF3EuXczg WQyLIDkWDiHsNliYE3a08vArC/JomWnbJ1gWnN9eHMvN6e3kEsWPdmF7Tc3QtQ1w9kfk F7Yw== 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=QGBaqGCebRJkxst1kabqguVidbTLre/NQKrsZfBupoI=; b=s+SS2MFfWXJrFcnHG8Zf/F1XHJMIfl/9hSNvST8FkyqdGKdTSeWpHYAWSGN9r/RcQ+ F36F/39bU2vOp80j41lZQ0Q1zQ+MHGny+6rjhwH/78Hl/cK8b3O+6EF9cVXVyx/HU3tt scXkXokwrEWy1UZp00Tkrh+f15YyyLjaH2MVHBy3eFdGrRhL/J7xdLY3L5qE++5yURSp RM2LEdmZ4BsO0XXPGTFbwCoD0RYyBvO3EzuDksLENw3ULPWJDFjrOrLkb2H1wwJe3x7+ KI6rCy7jcveg8cxCVNinR1bCrQxrXSK3w0a9x3AMjdtXd8TkXTqMM8VJLCyJrtYo4Wz3 Aqzw== X-Gm-Message-State: AMCzsaXGx+XYNjo+9OStArz2+CrEjB4D0ZZqDlQ9HVbITPhuUB9jD4ic iIub/STmHpINKL5ls0EG4OvtDn2B X-Google-Smtp-Source: ABhQp+SNsaYs0M6vSg30VL+dvCcf/A3eOcVJo9Jk3mD3A7fjMDPIaCACRk0xSHaojV9cZUnowb34Yg== X-Received: by 10.84.244.2 with SMTP id g2mr10908544pll.400.1508775903943; Mon, 23 Oct 2017 09:25:03 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id a19sm13586540pfh.30.2017.10.23.09.25.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 Oct 2017 09:25:03 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, alexei.starovoitov@gmail.com, daniel@iogearbox.net, Quentin Monnet Subject: [PATCH net-next 10/12] tools: bpftool: provide JSON output for all possible commands Date: Mon, 23 Oct 2017 09:24:14 -0700 Message-Id: <20171023162416.32753-11-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171023162416.32753-1-jakub.kicinski@netronome.com> References: <20171023162416.32753-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet As all commands can now return JSON output (possibly just a "null" value), output of `bpftool --json batch file FILE` should also be fully JSON compliant. Signed-off-by: Quentin Monnet Acked-by: Daniel Borkmann --- tools/bpf/bpftool/main.c | 25 +++++++++++++++++++++---- tools/bpf/bpftool/map.c | 16 +++++++++++++++- tools/bpf/bpftool/prog.c | 12 +++++++++++- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c index 9989a77fdc4a..55ba0a04c102 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -64,6 +64,11 @@ void usage(void) static int do_help(int argc, char **argv) { + if (json_output) { + jsonw_null(json_wtr); + return 0; + } + fprintf(stderr, "Usage: %s OBJECT { COMMAND | help }\n" " %s batch file FILE\n" @@ -77,10 +82,22 @@ static int do_help(int argc, char **argv) static int do_version(int argc, char **argv) { - printf("%s v%d.%d.%d\n", bin_name, - LINUX_VERSION_CODE >> 16, - LINUX_VERSION_CODE >> 8 & 0xf, - LINUX_VERSION_CODE & 0xf); + unsigned int version[3]; + + version[0] = LINUX_VERSION_CODE >> 16; + version[1] = LINUX_VERSION_CODE >> 8 & 0xf; + version[2] = LINUX_VERSION_CODE & 0xf; + + if (json_output) { + jsonw_start_object(json_wtr); + jsonw_name(json_wtr, "version"); + jsonw_printf(json_wtr, "\"%u.%u.%u\"", + version[0], version[1], version[2]); + jsonw_end_object(json_wtr); + } else { + printf("%s v%u.%u.%u\n", bin_name, + version[0], version[1], version[2]); + } return 0; } diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c index 86c128c433ba..a611f31f574f 100644 --- a/tools/bpf/bpftool/map.c +++ b/tools/bpf/bpftool/map.c @@ -651,6 +651,8 @@ static int do_update(int argc, char **argv) free(value); close(fd); + if (!err && json_output) + jsonw_null(json_wtr); return err; } @@ -812,16 +814,28 @@ static int do_delete(int argc, char **argv) free(key); close(fd); + if (!err && json_output) + jsonw_null(json_wtr); return err; } static int do_pin(int argc, char **argv) { - return do_pin_any(argc, argv, bpf_map_get_fd_by_id); + int err; + + err = do_pin_any(argc, argv, bpf_map_get_fd_by_id); + if (!err && json_output) + jsonw_null(json_wtr); + return err; } static int do_help(int argc, char **argv) { + if (json_output) { + jsonw_null(json_wtr); + return 0; + } + fprintf(stderr, "Usage: %s %s show [MAP]\n" " %s %s dump MAP\n" diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 41bd5390b4fc..e07f35ff80d1 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -602,11 +602,21 @@ static int do_dump(int argc, char **argv) static int do_pin(int argc, char **argv) { - return do_pin_any(argc, argv, bpf_prog_get_fd_by_id); + int err; + + err = do_pin_any(argc, argv, bpf_prog_get_fd_by_id); + if (!err && json_output) + jsonw_null(json_wtr); + return err; } static int do_help(int argc, char **argv) { + if (json_output) { + jsonw_null(json_wtr); + return 0; + } + fprintf(stderr, "Usage: %s %s show [PROG]\n" " %s %s dump xlated PROG [{ file FILE | opcodes }]\n"