From patchwork Thu Aug 17 06:56:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 802371 X-Patchwork-Delegate: shemminger@vyatta.com 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=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xXxpJ0WFFz9t3B for ; Thu, 17 Aug 2017 16:56:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752174AbdHQG4i (ORCPT ); Thu, 17 Aug 2017 02:56:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:57326 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752038AbdHQG4e (ORCPT ); Thu, 17 Aug 2017 02:56:34 -0400 Received: from localhost (unknown [213.57.247.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A5E7022C7D; Thu, 17 Aug 2017 06:56:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A5E7022C7D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=leon@kernel.org From: Leon Romanovsky To: Doug Ledford , Stephen Hemminger Cc: linux-rdma@vger.kernel.org, Leon Romanovsky , Dennis Dalessandro , Jason Gunthorpe , Jiri Pirko , Ariel Almog , David Laight , Linux Netdev Subject: [PATCH REPOST v5 iproute2 5/8] rdma: Add json and pretty outputs Date: Thu, 17 Aug 2017 09:56:11 +0300 Message-Id: <20170817065614.1393-6-leonro@mellanox.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170817065614.1393-1-leonro@mellanox.com> References: <20170817065614.1393-1-leonro@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Leon Romanovsky --- rdma/rdma.c | 31 ++++++++++++++++++++++++++++--- rdma/rdma.h | 4 ++++ 2 files changed, 32 insertions(+), 3 deletions(-) -- 2.14.1 diff --git a/rdma/rdma.c b/rdma/rdma.c index 74c09e8b..f9f4f2a2 100644 --- a/rdma/rdma.c +++ b/rdma/rdma.c @@ -16,7 +16,7 @@ static void help(char *name) { pr_out("Usage: %s [ OPTIONS ] OBJECT { COMMAND | help }\n" "where OBJECT := { dev | link | help }\n" - " OPTIONS := { -V[ersion] | -d[etails]}\n", name); + " OPTIONS := { -V[ersion] | -d[etails] | -j[son] | -p[retty]}\n", name); } static int cmd_help(struct rd *rd) @@ -47,6 +47,16 @@ static int rd_init(struct rd *rd, int argc, char **argv, char *filename) rd->argc = argc; rd->argv = argv; INIT_LIST_HEAD(&rd->dev_map_list); + + if (rd->json_output) { + rd->jw = jsonw_new(stdout); + if (!rd->jw) { + pr_err("Failed to create JSON writer\n"); + return -ENOMEM; + } + jsonw_pretty(rd->jw, rd->pretty_output); + } + rd->buff = malloc(MNL_SOCKET_BUFFER_SIZE); if (!rd->buff) return -ENOMEM; @@ -62,6 +72,8 @@ static int rd_init(struct rd *rd, int argc, char **argv, char *filename) static void rd_free(struct rd *rd) { + if (rd->json_output) + jsonw_destroy(&rd->jw); free(rd->buff); rd_free_devmap(rd); } @@ -71,10 +83,14 @@ int main(int argc, char **argv) static const struct option long_options[] = { { "version", no_argument, NULL, 'V' }, { "help", no_argument, NULL, 'h' }, + { "json", no_argument, NULL, 'j' }, + { "pretty", no_argument, NULL, 'p' }, { "details", no_argument, NULL, 'd' }, { NULL, 0, NULL, 0 } }; + bool pretty_output = false; bool show_details = false; + bool json_output = false; char *filename; struct rd rd; int opt; @@ -82,16 +98,22 @@ int main(int argc, char **argv) filename = basename(argv[0]); - while ((opt = getopt_long(argc, argv, "Vhd", + while ((opt = getopt_long(argc, argv, "Vhdpj", long_options, NULL)) >= 0) { switch (opt) { case 'V': printf("%s utility, iproute2-ss%s\n", filename, SNAPSHOT); return EXIT_SUCCESS; + case 'p': + pretty_output = true; + break; case 'd': show_details = true; break; + case 'j': + json_output = true; + break; case 'h': help(filename); return EXIT_SUCCESS; @@ -105,11 +127,14 @@ int main(int argc, char **argv) argc -= optind; argv += optind; + rd.show_details = show_details; + rd.json_output = json_output; + rd.pretty_output = pretty_output; + err = rd_init(&rd, argc, argv, filename); if (err) goto out; - rd.show_details = show_details; err = rd_cmd(&rd); out: /* Always cleanup */ diff --git a/rdma/rdma.h b/rdma/rdma.h index 8037e2e6..5904f177 100644 --- a/rdma/rdma.h +++ b/rdma/rdma.h @@ -23,6 +23,7 @@ #include "list.h" #include "utils.h" +#include "json_writer.h" #define pr_err(args...) fprintf(stderr, ##args) #define pr_out(args...) fprintf(stdout, ##args) @@ -48,6 +49,9 @@ struct rd { struct mnl_socket *nl; struct nlmsghdr *nlh; char *buff; + json_writer_t *jw; + bool json_output; + bool pretty_output; }; struct rd_cmd {