From patchwork Thu Jan 23 10:32:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Diskin X-Patchwork-Id: 1227754 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 483JWy5TdXz9s1x for ; Thu, 23 Jan 2020 21:33:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727453AbgAWKdJ (ORCPT ); Thu, 23 Jan 2020 05:33:09 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:47580 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726026AbgAWKdI (ORCPT ); Thu, 23 Jan 2020 05:33:08 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from rondi@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (nps-server-35.mtl.labs.mlnx [10.137.1.140]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00NAX1ZN002802; Thu, 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (localhost [127.0.0.1]) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Debian-11ubuntu1) with ESMTP id 00NAX1cq022712; Thu, 23 Jan 2020 12:33:01 +0200 Received: (from rondi@localhost) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Submit) id 00NAX1VZ022711; Thu, 23 Jan 2020 12:33:01 +0200 From: Ron Diskin To: Stephen Hemminger , David Ahern Cc: Jiri Pirko , Moshe Shemesh , netdev@vger.kernel.org, Ron Diskin Subject: [PATCH iproute2 1/6] json_print: Introduce print_#type_name_value Date: Thu, 23 Jan 2020 12:32:26 +0200 Message-Id: <1579775551-22659-2-git-send-email-rondi@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1579775551-22659-1-git-send-email-rondi@mellanox.com> References: <1579775551-22659-1-git-send-email-rondi@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Until now print_#type functions supported printing constant names and unknown (variable) values only. Add functions to allow printing when the name is also sent to the function as a variable. Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Reviewed-by: Jiri Pirko --- include/json_print.h | 7 +++++++ lib/json_print.c | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/json_print.h b/include/json_print.h index 6695654f..fd76cf75 100644 --- a/include/json_print.h +++ b/include/json_print.h @@ -72,4 +72,11 @@ _PRINT_FUNC(lluint, unsigned long long) _PRINT_FUNC(float, double) #undef _PRINT_FUNC +#define _PRINT_NAME_VALUE_FUNC(type_name, type, format_char) \ + void print_##type_name##_name_value(const char *name, type value); \ + +_PRINT_NAME_VALUE_FUNC(uint, unsigned int, u) +_PRINT_NAME_VALUE_FUNC(string, const char*, s) +#undef _PRINT_NAME_VALUE_FUNC + #endif /* _JSON_PRINT_H_ */ diff --git a/lib/json_print.c b/lib/json_print.c index 43ea69bb..fb5f0e5d 100644 --- a/lib/json_print.c +++ b/lib/json_print.c @@ -127,6 +127,19 @@ _PRINT_FUNC(lluint, unsigned long long); _PRINT_FUNC(float, double); #undef _PRINT_FUNC +#define _PRINT_NAME_VALUE_FUNC(type_name, type, format_char) \ + void print_##type_name##_name_value(const char *name, type value)\ + { \ + SPRINT_BUF(format); \ + \ + snprintf(format, SPRINT_BSIZE, \ + "%s %%"#format_char, name); \ + print_##type_name(PRINT_ANY, name, format, value); \ + } +_PRINT_NAME_VALUE_FUNC(uint, unsigned int, u); +_PRINT_NAME_VALUE_FUNC(string, const char*, s); +#undef _PRINT_NAME_VALUE_FUNC + void print_color_string(enum output_type type, enum color_attr color, const char *key, From patchwork Thu Jan 23 10:32:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Diskin X-Patchwork-Id: 1227755 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 483JX035Qyz9s1x for ; Thu, 23 Jan 2020 21:33:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727278AbgAWKdJ (ORCPT ); Thu, 23 Jan 2020 05:33:09 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:47579 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726191AbgAWKdI (ORCPT ); Thu, 23 Jan 2020 05:33:08 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from rondi@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (nps-server-35.mtl.labs.mlnx [10.137.1.140]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00NAX19T002810; Thu, 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (localhost [127.0.0.1]) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Debian-11ubuntu1) with ESMTP id 00NAX1AT022715; Thu, 23 Jan 2020 12:33:01 +0200 Received: (from rondi@localhost) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Submit) id 00NAX1ND022714; Thu, 23 Jan 2020 12:33:01 +0200 From: Ron Diskin To: Stephen Hemminger , David Ahern Cc: Jiri Pirko , Moshe Shemesh , netdev@vger.kernel.org, Ron Diskin Subject: [PATCH iproute2 2/6] json_print: Add new json object function not as array item Date: Thu, 23 Jan 2020 12:32:27 +0200 Message-Id: <1579775551-22659-3-git-send-email-rondi@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1579775551-22659-1-git-send-email-rondi@mellanox.com> References: <1579775551-22659-1-git-send-email-rondi@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently new json object opens (and delete_json_obj closes) the object as an array, what adds prints for the matching bracket '[' ']' at the start/end of the object. This patch adds new_json_obj_plain() and the matching delete_json_obj_plain() to enable opening and closing json object, not as array and leave it to the using function to decide which type of object to open/close as the main object. Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Reviewed-by: Jiri Pirko --- include/json_print.h | 2 ++ lib/json_print.c | 30 ++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/include/json_print.h b/include/json_print.h index fd76cf75..4bcaccf7 100644 --- a/include/json_print.h +++ b/include/json_print.h @@ -31,6 +31,8 @@ enum output_type { void new_json_obj(int json); void delete_json_obj(void); +void new_json_obj_plain(int json); +void delete_json_obj_plain(void); bool is_json_context(void); diff --git a/lib/json_print.c b/lib/json_print.c index fb5f0e5d..8e7f32dc 100644 --- a/lib/json_print.c +++ b/lib/json_print.c @@ -20,7 +20,7 @@ static json_writer_t *_jw; #define _IS_JSON_CONTEXT(type) ((type & PRINT_JSON || type & PRINT_ANY) && _jw) #define _IS_FP_CONTEXT(type) (!_jw && (type & PRINT_FP || type & PRINT_ANY)) -void new_json_obj(int json) +static void __new_json_obj(int json, bool have_array) { if (json) { _jw = jsonw_new(stdout); @@ -30,18 +30,40 @@ void new_json_obj(int json) } if (pretty) jsonw_pretty(_jw, true); - jsonw_start_array(_jw); + if (have_array) + jsonw_start_array(_jw); } } -void delete_json_obj(void) +static void __delete_json_obj(bool have_array) { if (_jw) { - jsonw_end_array(_jw); + if (have_array) + jsonw_end_array(_jw); jsonw_destroy(&_jw); } } +void new_json_obj(int json) +{ + __new_json_obj(json, true); +} + +void delete_json_obj(void) +{ + __delete_json_obj(true); +} + +void new_json_obj_plain(int json) +{ + __new_json_obj(json, false); +} + +void delete_json_obj_plain(void) +{ + __delete_json_obj(false); +} + bool is_json_context(void) { return _jw != NULL; From patchwork Thu Jan 23 10:32:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Diskin X-Patchwork-Id: 1227753 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 483JWw3dJ2z9s1x for ; Thu, 23 Jan 2020 21:33:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728797AbgAWKdP (ORCPT ); Thu, 23 Jan 2020 05:33:15 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:47578 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726771AbgAWKdJ (ORCPT ); Thu, 23 Jan 2020 05:33:09 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from rondi@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (nps-server-35.mtl.labs.mlnx [10.137.1.140]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00NAX1xB002813; Thu, 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (localhost [127.0.0.1]) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Debian-11ubuntu1) with ESMTP id 00NAX1Fr022717; Thu, 23 Jan 2020 12:33:01 +0200 Received: (from rondi@localhost) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Submit) id 00NAX1bk022716; Thu, 23 Jan 2020 12:33:01 +0200 From: Ron Diskin To: Stephen Hemminger , David Ahern Cc: Jiri Pirko , Moshe Shemesh , netdev@vger.kernel.org, Ron Diskin Subject: [PATCH iproute2 3/6] devlink: Replace json prints by common library functions Date: Thu, 23 Jan 2020 12:32:28 +0200 Message-Id: <1579775551-22659-4-git-send-email-rondi@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1579775551-22659-1-git-send-email-rondi@mellanox.com> References: <1579775551-22659-1-git-send-email-rondi@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Substitute json prints to use json_print.c common library functions, instead of directly calling jsonw_functions. Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Acked-by: Jiri Pirko --- devlink/devlink.c | 147 +++++++++++++++++++--------------------------- 1 file changed, 61 insertions(+), 86 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 95f05a0b..a641c4dc 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -1715,19 +1715,17 @@ static void __pr_out_handle_start(struct dl *dl, struct nlattr **tb, if (dl->json_output) { if (array) { if (should_arr_last_handle_end(dl, bus_name, dev_name)) - jsonw_end_array(dl->jw); + close_json_array(PRINT_JSON, NULL); if (should_arr_last_handle_start(dl, bus_name, dev_name)) { - jsonw_name(dl->jw, buf); - jsonw_start_array(dl->jw); - jsonw_start_object(dl->jw); + open_json_array(PRINT_JSON, buf); + open_json_object(NULL); arr_last_handle_set(dl, bus_name, dev_name); } else { - jsonw_start_object(dl->jw); + open_json_object(NULL); } } else { - jsonw_name(dl->jw, buf); - jsonw_start_object(dl->jw); + open_json_object(buf); } } else { if (array) { @@ -1754,7 +1752,7 @@ static void pr_out_handle_start_arr(struct dl *dl, struct nlattr **tb) static void pr_out_handle_end(struct dl *dl) { if (dl->json_output) - jsonw_end_object(dl->jw); + close_json_object(); else __pr_out_newline(); } @@ -1816,21 +1814,19 @@ static void __pr_out_port_handle_start(struct dl *dl, const char *bus_name, if (should_arr_last_port_handle_end(dl, bus_name, dev_name, port_index)) - jsonw_end_array(dl->jw); + close_json_array(PRINT_JSON, NULL); if (should_arr_last_port_handle_start(dl, bus_name, dev_name, port_index)) { - jsonw_name(dl->jw, buf); - jsonw_start_array(dl->jw); - jsonw_start_object(dl->jw); + open_json_array(PRINT_JSON, buf); + open_json_object(NULL); arr_last_port_handle_set(dl, bus_name, dev_name, port_index); } else { - jsonw_start_object(dl->jw); + open_json_object(NULL); } } else { - jsonw_name(dl->jw, buf); - jsonw_start_object(dl->jw); + open_json_object(buf); } } else { pr_out("%s:", buf); @@ -1864,7 +1860,7 @@ static void pr_out_port_handle_start_arr(struct dl *dl, struct nlattr **tb, bool static void pr_out_port_handle_end(struct dl *dl) { if (dl->json_output) - jsonw_end_object(dl->jw); + close_json_object(); else pr_out("\n"); } @@ -1874,7 +1870,7 @@ static void pr_out_str(struct dl *dl, const char *name, const char *val) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_string_field(dl->jw, name, val); + print_string(PRINT_JSON, name, NULL, val); else pr_out("%s %s", name, val); } @@ -1882,7 +1878,7 @@ static void pr_out_str(struct dl *dl, const char *name, const char *val) static void pr_out_bool(struct dl *dl, const char *name, bool val) { if (dl->json_output) - jsonw_bool_field(dl->jw, name, val); + print_bool(PRINT_JSON, name, NULL, val); else pr_out_str(dl, name, val ? "true" : "false"); } @@ -1891,7 +1887,7 @@ static void pr_out_uint(struct dl *dl, const char *name, unsigned int val) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_uint_field(dl->jw, name, val); + print_uint(PRINT_JSON, name, NULL, val); else pr_out("%s %u", name, val); } @@ -1903,7 +1899,7 @@ static void pr_out_u64(struct dl *dl, const char *name, uint64_t val) return pr_out_str(dl, name, "unlimited"); if (dl->json_output) - jsonw_u64_field(dl->jw, name, val); + print_u64(PRINT_JSON, name, NULL, val); else pr_out("%s %"PRIu64, name, val); } @@ -1912,7 +1908,7 @@ static void pr_out_bool_value(struct dl *dl, bool value) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_bool(dl->jw, value); + print_bool(PRINT_JSON, NULL, NULL, value); else pr_out("%s", value ? "true" : "false"); } @@ -1921,7 +1917,7 @@ static void pr_out_uint_value(struct dl *dl, unsigned int value) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_uint(dl->jw, value); + print_uint(PRINT_JSON, NULL, NULL, value); else pr_out("%u", value); } @@ -1930,7 +1926,7 @@ static void pr_out_uint64_value(struct dl *dl, uint64_t value) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_u64(dl->jw, value); + print_u64(PRINT_JSON, NULL, NULL, value); else pr_out("%"PRIu64, value); } @@ -1946,7 +1942,7 @@ static void pr_out_binary_value(struct dl *dl, uint8_t *data, uint32_t len) while (i < len) { if (dl->json_output) - jsonw_printf(dl->jw, "%d", data[i]); + print_int(PRINT_JSON, NULL, NULL, data[i]); else pr_out("%02x ", data[i]); i++; @@ -1961,7 +1957,7 @@ static void pr_out_str_value(struct dl *dl, const char *value) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_string(dl->jw, value); + print_string(PRINT_JSON, NULL, NULL, value); else pr_out("%s", value); } @@ -1970,7 +1966,7 @@ static void pr_out_name(struct dl *dl, const char *name) { __pr_out_indent_newline(dl); if (dl->json_output) - jsonw_name(dl->jw, name); + print_string(PRINT_JSON, name, NULL, NULL); else pr_out("%s:", name); } @@ -1978,17 +1974,15 @@ static void pr_out_name(struct dl *dl, const char *name) static void pr_out_region_chunk_start(struct dl *dl, uint64_t addr) { if (dl->json_output) { - jsonw_name(dl->jw, "address"); - jsonw_uint(dl->jw, addr); - jsonw_name(dl->jw, "data"); - jsonw_start_array(dl->jw); + print_uint(PRINT_JSON, "address", NULL, addr); + open_json_array(PRINT_JSON, "data"); } } static void pr_out_region_chunk_end(struct dl *dl) { if (dl->json_output) - jsonw_end_array(dl->jw); + close_json_array(PRINT_JSON, NULL); } static void pr_out_region_chunk(struct dl *dl, uint8_t *data, uint32_t len, @@ -2008,7 +2002,7 @@ static void pr_out_region_chunk(struct dl *dl, uint8_t *data, uint32_t len, align_val++; if (dl->json_output) - jsonw_printf(dl->jw, "%d", data[i]); + print_int(PRINT_JSON, NULL, NULL, data[i]); else pr_out("%02x ", data[i]); @@ -2021,9 +2015,8 @@ static void pr_out_region_chunk(struct dl *dl, uint8_t *data, uint32_t len, static void pr_out_section_start(struct dl *dl, const char *name) { if (dl->json_output) { - jsonw_start_object(dl->jw); - jsonw_name(dl->jw, name); - jsonw_start_object(dl->jw); + open_json_object(NULL); + open_json_object(name); } } @@ -2031,17 +2024,16 @@ static void pr_out_section_end(struct dl *dl) { if (dl->json_output) { if (dl->arr_last.present) - jsonw_end_array(dl->jw); - jsonw_end_object(dl->jw); - jsonw_end_object(dl->jw); + close_json_array(PRINT_JSON, NULL); + close_json_object(); + close_json_object(); } } static void pr_out_array_start(struct dl *dl, const char *name) { if (dl->json_output) { - jsonw_name(dl->jw, name); - jsonw_start_array(dl->jw); + open_json_array(PRINT_JSON, name); } else { __pr_out_indent_inc(); __pr_out_newline(); @@ -2054,7 +2046,7 @@ static void pr_out_array_start(struct dl *dl, const char *name) static void pr_out_array_end(struct dl *dl) { if (dl->json_output) { - jsonw_end_array(dl->jw); + close_json_array(PRINT_JSON, NULL); } else { __pr_out_indent_dec(); __pr_out_indent_dec(); @@ -2064,8 +2056,7 @@ static void pr_out_array_end(struct dl *dl) static void pr_out_object_start(struct dl *dl, const char *name) { if (dl->json_output) { - jsonw_name(dl->jw, name); - jsonw_start_object(dl->jw); + open_json_object(name); } else { __pr_out_indent_inc(); __pr_out_newline(); @@ -2078,7 +2069,7 @@ static void pr_out_object_start(struct dl *dl, const char *name) static void pr_out_object_end(struct dl *dl) { if (dl->json_output) { - jsonw_end_object(dl->jw); + close_json_object(); } else { __pr_out_indent_dec(); __pr_out_indent_dec(); @@ -2088,13 +2079,13 @@ static void pr_out_object_end(struct dl *dl) static void pr_out_entry_start(struct dl *dl) { if (dl->json_output) - jsonw_start_object(dl->jw); + open_json_object(NULL); } static void pr_out_entry_end(struct dl *dl) { if (dl->json_output) - jsonw_end_object(dl->jw); + close_json_object(); else __pr_out_newline(); } @@ -3887,20 +3878,18 @@ static void pr_out_json_occ_show_item_list(struct dl *dl, const char *label, struct occ_item *occ_item; char buf[32]; - jsonw_name(dl->jw, label); - jsonw_start_object(dl->jw); + open_json_object(label); list_for_each_entry(occ_item, list, list) { sprintf(buf, "%u", occ_item->index); - jsonw_name(dl->jw, buf); - jsonw_start_object(dl->jw); + open_json_object(buf); if (bound_pool) - jsonw_uint_field(dl->jw, "bound_pool", - occ_item->bound_pool_index); - jsonw_uint_field(dl->jw, "current", occ_item->cur); - jsonw_uint_field(dl->jw, "max", occ_item->max); - jsonw_end_object(dl->jw); + print_uint(PRINT_JSON, "bound_pool", NULL, + occ_item->bound_pool_index); + print_uint(PRINT_JSON, "current", NULL, occ_item->cur); + print_uint(PRINT_JSON, "max", NULL, occ_item->max); + close_json_object(); } - jsonw_end_object(dl->jw); + close_json_object(); } static void pr_out_occ_show_port(struct dl *dl, struct occ_port *occ_port) @@ -6140,18 +6129,16 @@ static void pr_out_region_handle_start(struct dl *dl, struct nlattr **tb) char buf[256]; sprintf(buf, "%s/%s/%s", bus_name, dev_name, region_name); - if (dl->json_output) { - jsonw_name(dl->jw, buf); - jsonw_start_object(dl->jw); - } else { + if (dl->json_output) + open_json_object(buf); + else pr_out("%s:", buf); - } } static void pr_out_region_handle_end(struct dl *dl) { if (dl->json_output) - jsonw_end_object(dl->jw); + close_json_object(); else pr_out("\n"); } @@ -6159,18 +6146,16 @@ static void pr_out_region_handle_end(struct dl *dl) static void pr_out_region_snapshots_start(struct dl *dl, bool array) { __pr_out_indent_newline(dl); - if (dl->json_output) { - jsonw_name(dl->jw, "snapshot"); - jsonw_start_array(dl->jw); - } else { + if (dl->json_output) + open_json_array(PRINT_JSON, "snapshot"); + else pr_out("snapshot %s", array ? "[" : ""); - } } static void pr_out_region_snapshots_end(struct dl *dl, bool array) { if (dl->json_output) - jsonw_end_array(dl->jw); + close_json_array(PRINT_JSON, NULL); else if (array) pr_out("]"); } @@ -6185,7 +6170,7 @@ static void pr_out_region_snapshots_id(struct dl *dl, struct nlattr **tb, int in snapshot_id = mnl_attr_get_u32(tb[DEVLINK_ATTR_REGION_SNAPSHOT_ID]); if (dl->json_output) - jsonw_uint(dl->jw, snapshot_id); + print_uint(PRINT_JSON, NULL, NULL, snapshot_id); else pr_out("%s%u", index ? " " : "", snapshot_id); } @@ -6527,7 +6512,7 @@ static void pr_out_fmsg_start_object(struct dl *dl, char **name) { if (dl->json_output) { pr_out_fmsg_name(dl, name); - jsonw_start_object(dl->jw); + open_json_object(NULL); } else { pr_out_fmsg_group_start(dl, name); } @@ -6536,7 +6521,7 @@ static void pr_out_fmsg_start_object(struct dl *dl, char **name) static void pr_out_fmsg_end_object(struct dl *dl) { if (dl->json_output) - jsonw_end_object(dl->jw); + close_json_object(); else pr_out_fmsg_group_end(dl); } @@ -6545,7 +6530,7 @@ static void pr_out_fmsg_start_array(struct dl *dl, char **name) { if (dl->json_output) { pr_out_fmsg_name(dl, name); - jsonw_start_array(dl->jw); + open_json_array(PRINT_JSON, NULL); } else { pr_out_fmsg_group_start(dl, name); } @@ -6554,7 +6539,7 @@ static void pr_out_fmsg_start_array(struct dl *dl, char **name) static void pr_out_fmsg_end_array(struct dl *dl) { if (dl->json_output) - jsonw_end_array(dl->jw); + close_json_array(PRINT_JSON, NULL); else pr_out_fmsg_group_end(dl); } @@ -7206,18 +7191,9 @@ static int dl_init(struct dl *dl) pr_err("Failed to create index map\n"); goto err_ifname_map_create; } - if (dl->json_output) { - dl->jw = jsonw_new(stdout); - if (!dl->jw) { - pr_err("Failed to create JSON writer\n"); - goto err_json_new; - } - jsonw_pretty(dl->jw, dl->pretty_output); - } + new_json_obj_plain(dl->json_output); return 0; -err_json_new: - ifname_map_fini(dl); err_ifname_map_create: mnlg_socket_close(dl->nlg); return err; @@ -7225,8 +7201,7 @@ err_ifname_map_create: static void dl_fini(struct dl *dl) { - if (dl->json_output) - jsonw_destroy(&dl->jw); + delete_json_obj_plain(); ifname_map_fini(dl); mnlg_socket_close(dl->nlg); } @@ -7333,7 +7308,7 @@ int main(int argc, char **argv) dl->json_output = true; break; case 'p': - dl->pretty_output = true; + pretty = true; break; case 'v': dl->verbose = true; From patchwork Thu Jan 23 10:32:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Diskin X-Patchwork-Id: 1227751 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 483JWq3q8sz9sSK for ; Thu, 23 Jan 2020 21:33:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728708AbgAWKdK (ORCPT ); Thu, 23 Jan 2020 05:33:10 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:47576 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726099AbgAWKdJ (ORCPT ); Thu, 23 Jan 2020 05:33:09 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from rondi@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (nps-server-35.mtl.labs.mlnx [10.137.1.140]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00NAX1e0002816; Thu, 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (localhost [127.0.0.1]) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Debian-11ubuntu1) with ESMTP id 00NAX1R1022719; Thu, 23 Jan 2020 12:33:01 +0200 Received: (from rondi@localhost) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Submit) id 00NAX1Vr022718; Thu, 23 Jan 2020 12:33:01 +0200 From: Ron Diskin To: Stephen Hemminger , David Ahern Cc: Jiri Pirko , Moshe Shemesh , netdev@vger.kernel.org, Ron Diskin Subject: [PATCH iproute2 4/6] devlink: Replace pr_out_str wrapper function with common function Date: Thu, 23 Jan 2020 12:32:29 +0200 Message-Id: <1579775551-22659-5-git-send-email-rondi@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1579775551-22659-1-git-send-email-rondi@mellanox.com> References: <1579775551-22659-1-git-send-email-rondi@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Replace calls for pr_out_str() and pr_out_str_value() with direct calls to common json_print library functions. Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Acked-by: Jiri Pirko --- devlink/devlink.c | 292 ++++++++++++++++++++++++++-------------------- 1 file changed, 166 insertions(+), 126 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index a641c4dc..a25dd818 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -395,6 +395,17 @@ static void __pr_out_indent_newline(struct dl *dl) pr_out(" "); } +static void check_indent_newline(struct dl *dl) +{ + __pr_out_indent_newline(dl); + + if (g_indent_newline && !is_json_context()) { + printf("%s", g_indent_str); + g_indent_newline = false; + } + g_new_line_count = 0; +} + static const enum mnl_attr_data_type devlink_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_BUS_NAME] = MNL_TYPE_NUL_STRING, [DEVLINK_ATTR_DEV_NAME] = MNL_TYPE_NUL_STRING, @@ -1865,22 +1876,12 @@ static void pr_out_port_handle_end(struct dl *dl) pr_out("\n"); } - -static void pr_out_str(struct dl *dl, const char *name, const char *val) -{ - __pr_out_indent_newline(dl); - if (dl->json_output) - print_string(PRINT_JSON, name, NULL, val); - else - pr_out("%s %s", name, val); -} - static void pr_out_bool(struct dl *dl, const char *name, bool val) { if (dl->json_output) print_bool(PRINT_JSON, name, NULL, val); else - pr_out_str(dl, name, val ? "true" : "false"); + print_string_name_value(name, val ? "true" : "false"); } static void pr_out_uint(struct dl *dl, const char *name, unsigned int val) @@ -1896,7 +1897,7 @@ static void pr_out_u64(struct dl *dl, const char *name, uint64_t val) { __pr_out_indent_newline(dl); if (val == (uint64_t) -1) - return pr_out_str(dl, name, "unlimited"); + return print_string_name_value(name, "unlimited"); if (dl->json_output) print_u64(PRINT_JSON, name, NULL, val); @@ -1953,15 +1954,6 @@ static void pr_out_binary_value(struct dl *dl, uint8_t *data, uint32_t len) __pr_out_newline(); } -static void pr_out_str_value(struct dl *dl, const char *value) -{ - __pr_out_indent_newline(dl); - if (dl->json_output) - print_string(PRINT_JSON, NULL, NULL, value); - else - pr_out("%s", value); -} - static void pr_out_name(struct dl *dl, const char *name) { __pr_out_indent_newline(dl); @@ -2156,19 +2148,24 @@ static void pr_out_eswitch(struct dl *dl, struct nlattr **tb) { __pr_out_handle_start(dl, tb, true, false); - if (tb[DEVLINK_ATTR_ESWITCH_MODE]) - pr_out_str(dl, "mode", - eswitch_mode_name(mnl_attr_get_u16(tb[DEVLINK_ATTR_ESWITCH_MODE]))); - - if (tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE]) - pr_out_str(dl, "inline-mode", - eswitch_inline_mode_name(mnl_attr_get_u8( - tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE]))); - + if (tb[DEVLINK_ATTR_ESWITCH_MODE]) { + check_indent_newline(dl); + print_string(PRINT_ANY, "mode", "mode %s", + eswitch_mode_name(mnl_attr_get_u16( + tb[DEVLINK_ATTR_ESWITCH_MODE]))); + } + if (tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE]) { + check_indent_newline(dl); + print_string(PRINT_ANY, "inline-mode", "inline-mode %s", + eswitch_inline_mode_name(mnl_attr_get_u8( + tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE]))); + } if (tb[DEVLINK_ATTR_ESWITCH_ENCAP_MODE]) { bool encap_mode = !!mnl_attr_get_u8(tb[DEVLINK_ATTR_ESWITCH_ENCAP_MODE]); - pr_out_str(dl, "encap", encap_mode ? "enable" : "disable"); + check_indent_newline(dl); + print_string(PRINT_ANY, "encap", "encap %s", + encap_mode ? "enable" : "disable"); } pr_out_handle_end(dl); @@ -2355,8 +2352,10 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, !nla_value[DEVLINK_ATTR_PARAM_VALUE_DATA])) return; - pr_out_str(dl, "cmode", - param_cmode_name(mnl_attr_get_u8(nla_value[DEVLINK_ATTR_PARAM_VALUE_CMODE]))); + check_indent_newline(dl); + print_string(PRINT_ANY, "cmode", "cmode %s", + param_cmode_name(mnl_attr_get_u8(nla_value[DEVLINK_ATTR_PARAM_VALUE_CMODE]))); + val_attr = nla_value[DEVLINK_ATTR_PARAM_VALUE_DATA]; conv_exists = param_val_conv_exists(param_val_conv, PARAM_VAL_CONV_LEN, @@ -2372,7 +2371,7 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, &vstr); if (err) return; - pr_out_str(dl, "value", vstr); + print_string(PRINT_ANY, "value", " value %s", vstr); } else { pr_out_uint(dl, "value", mnl_attr_get_u8(val_attr)); } @@ -2386,7 +2385,7 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, &vstr); if (err) return; - pr_out_str(dl, "value", vstr); + print_string(PRINT_ANY, "value", " value %s", vstr); } else { pr_out_uint(dl, "value", mnl_attr_get_u16(val_attr)); } @@ -2400,13 +2399,14 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, &vstr); if (err) return; - pr_out_str(dl, "value", vstr); + print_string(PRINT_ANY, "value", " value %s", vstr); } else { pr_out_uint(dl, "value", mnl_attr_get_u32(val_attr)); } break; case MNL_TYPE_STRING: - pr_out_str(dl, "value", mnl_attr_get_str(val_attr)); + print_string(PRINT_ANY, "value", " value %s", + mnl_attr_get_str(val_attr)); break; case MNL_TYPE_FLAG: pr_out_bool(dl, "value", val_attr ? true : false); @@ -2438,12 +2438,12 @@ static void pr_out_param(struct dl *dl, struct nlattr **tb, bool array) nla_type = mnl_attr_get_u8(nla_param[DEVLINK_ATTR_PARAM_TYPE]); nla_name = mnl_attr_get_str(nla_param[DEVLINK_ATTR_PARAM_NAME]); - pr_out_str(dl, "name", nla_name); - + check_indent_newline(dl); + print_string(PRINT_ANY, "name", "name %s ", nla_name); if (!nla_param[DEVLINK_ATTR_PARAM_GENERIC]) - pr_out_str(dl, "type", "driver-specific"); + print_string(PRINT_ANY, "type", "type %s", "driver-specific"); else - pr_out_str(dl, "type", "generic"); + print_string(PRINT_ANY, "type", "type %s", "generic"); pr_out_array_start(dl, "values"); mnl_attr_for_each_nested(param_value_attr, @@ -2807,7 +2807,8 @@ static void pr_out_versions_single(struct dl *dl, const struct nlmsghdr *nlh, ver_name = mnl_attr_get_str(tb[DEVLINK_ATTR_INFO_VERSION_NAME]); ver_value = mnl_attr_get_str(tb[DEVLINK_ATTR_INFO_VERSION_VALUE]); - pr_out_str(dl, ver_name, ver_value); + check_indent_newline(dl); + print_string_name_value(ver_name, ver_value); if (!dl->json_output) __pr_out_newline(); } @@ -2827,7 +2828,9 @@ static void pr_out_info(struct dl *dl, const struct nlmsghdr *nlh, if (!dl->json_output) __pr_out_newline(); - pr_out_str(dl, "driver", mnl_attr_get_str(nla_drv)); + check_indent_newline(dl); + print_string(PRINT_ANY, "driver", "driver %s", + mnl_attr_get_str(nla_drv)); } if (tb[DEVLINK_ATTR_INFO_SERIAL_NUMBER]) { @@ -2835,7 +2838,9 @@ static void pr_out_info(struct dl *dl, const struct nlmsghdr *nlh, if (!dl->json_output) __pr_out_newline(); - pr_out_str(dl, "serial_number", mnl_attr_get_str(nla_sn)); + check_indent_newline(dl); + print_string(PRINT_ANY, "serial_number", "serial_number %s", + mnl_attr_get_str(nla_sn)); } __pr_out_indent_dec(); @@ -3208,29 +3213,34 @@ static void pr_out_port(struct dl *dl, struct nlattr **tb) struct nlattr *dpt_attr = tb[DEVLINK_ATTR_PORT_DESIRED_TYPE]; pr_out_port_handle_start(dl, tb, false); + check_indent_newline(dl); if (pt_attr) { uint16_t port_type = mnl_attr_get_u16(pt_attr); - pr_out_str(dl, "type", port_type_name(port_type)); + print_string(PRINT_ANY, "type", "type %s", + port_type_name(port_type)); if (dpt_attr) { uint16_t des_port_type = mnl_attr_get_u16(dpt_attr); if (port_type != des_port_type) - pr_out_str(dl, "des_type", - port_type_name(des_port_type)); + print_string(PRINT_ANY, "des_type", " des_type %s", + port_type_name(des_port_type)); } } - if (tb[DEVLINK_ATTR_PORT_NETDEV_NAME]) - pr_out_str(dl, "netdev", - mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_NETDEV_NAME])); - if (tb[DEVLINK_ATTR_PORT_IBDEV_NAME]) - pr_out_str(dl, "ibdev", - mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_IBDEV_NAME])); + if (tb[DEVLINK_ATTR_PORT_NETDEV_NAME]) { + print_string(PRINT_ANY, "netdev", " netdev %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_NETDEV_NAME])); + } + if (tb[DEVLINK_ATTR_PORT_IBDEV_NAME]) { + print_string(PRINT_ANY, "ibdev", " ibdev %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_IBDEV_NAME])); + } if (tb[DEVLINK_ATTR_PORT_FLAVOUR]) { uint16_t port_flavour = mnl_attr_get_u16(tb[DEVLINK_ATTR_PORT_FLAVOUR]); - pr_out_str(dl, "flavour", port_flavour_name(port_flavour)); + print_string(PRINT_ANY, "flavour", " flavour %s", + port_flavour_name(port_flavour)); switch (port_flavour) { case DEVLINK_PORT_FLAVOUR_PCI_PF: @@ -3381,6 +3391,7 @@ static void cmd_sb_help(void) static void pr_out_sb(struct dl *dl, struct nlattr **tb) { pr_out_handle_start_arr(dl, tb); + check_indent_newline(dl); pr_out_uint(dl, "sb", mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); pr_out_uint(dl, "size", @@ -3462,12 +3473,12 @@ static void pr_out_sb_pool(struct dl *dl, struct nlattr **tb) mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); pr_out_uint(dl, "pool", mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); - pr_out_str(dl, "type", - pool_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_TYPE]))); + print_string(PRINT_ANY, "type", " type %s", + pool_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_TYPE]))); pr_out_uint(dl, "size", mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_POOL_SIZE])); - pr_out_str(dl, "thtype", - threshold_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE]))); + print_string(PRINT_ANY, "thtype", " thtype %s", + threshold_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE]))); if (tb[DEVLINK_ATTR_SB_POOL_CELL_SIZE]) pr_out_uint(dl, "cell_size", mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_POOL_CELL_SIZE])); @@ -3652,8 +3663,8 @@ static void pr_out_sb_tc_bind(struct dl *dl, struct nlattr **tb) mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); pr_out_uint(dl, "tc", mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_TC_INDEX])); - pr_out_str(dl, "type", - pool_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_TYPE]))); + print_string(PRINT_ANY, "type", " type %s", + pool_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_TYPE]))); pr_out_uint(dl, "pool", mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); pr_out_uint(dl, "threshold", @@ -4232,13 +4243,16 @@ static void pr_out_flash_update(struct dl *dl, struct nlattr **tb) { __pr_out_handle_start(dl, tb, true, false); - if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG]) - pr_out_str(dl, "msg", - mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG])); - - if (tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT]) - pr_out_str(dl, "component", - mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT])); + if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG]) { + check_indent_newline(dl); + print_string(PRINT_ANY, "msg", "msg %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG])); + } + if (tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT]) { + check_indent_newline(dl); + print_string(PRINT_ANY, "component", "component %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT])); + } if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE]) pr_out_u64(dl, "done", @@ -4705,13 +4719,15 @@ static void pr_out_dpipe_fields(struct dpipe_ctx *ctx, for (i = 0; i < field_count; i++) { field = &fields[i]; pr_out_entry_start(ctx->dl); - pr_out_str(ctx->dl, "name", field->name); + check_indent_newline(ctx->dl); + print_string(PRINT_ANY, "name", "name %s", field->name); if (ctx->dl->verbose) pr_out_uint(ctx->dl, "id", field->id); pr_out_uint(ctx->dl, "bitwidth", field->bitwidth); - if (field->mapping_type) - pr_out_str(ctx->dl, "mapping_type", - dpipe_field_mapping_e2s(field->mapping_type)); + if (field->mapping_type) { + print_string(PRINT_ANY, "mapping_type", " mapping_type %s", + dpipe_field_mapping_e2s(field->mapping_type)); + } pr_out_entry_end(ctx->dl); } } @@ -4721,11 +4737,11 @@ pr_out_dpipe_header(struct dpipe_ctx *ctx, struct nlattr **tb, struct dpipe_header *header, bool global) { pr_out_handle_start_arr(ctx->dl, tb); - pr_out_str(ctx->dl, "name", header->name); + check_indent_newline(ctx->dl); + print_string(PRINT_ANY, "name", "name %s", header->name); if (ctx->dl->verbose) { pr_out_uint(ctx->dl, "id", header->id); - pr_out_str(ctx->dl, "global", - global ? "true" : "false"); + print_bool(PRINT_ANY, "global", " global %s", global); } pr_out_array_start(ctx->dl, "field"); pr_out_dpipe_fields(ctx, header->fields, @@ -4949,20 +4965,21 @@ static void pr_out_dpipe_action(struct dpipe_action *action, struct dpipe_op_info *op_info = &action->info; const char *mapping; - pr_out_str(ctx->dl, "type", - dpipe_action_type_e2s(action->type)); - pr_out_str(ctx->dl, "header", - dpipe_header_id2s(ctx, op_info->header_id, - op_info->header_global)); - pr_out_str(ctx->dl, "field", - dpipe_field_id2s(ctx, op_info->header_id, - op_info->field_id, - op_info->header_global)); + check_indent_newline(ctx->dl); + print_string(PRINT_ANY, "type", "type %s", + dpipe_action_type_e2s(action->type)); + print_string(PRINT_ANY, "header", " header %s", + dpipe_header_id2s(ctx, op_info->header_id, + op_info->header_global)); + print_string(PRINT_ANY, "field", " field %s", + dpipe_field_id2s(ctx, op_info->header_id, + op_info->field_id, + op_info->header_global)); mapping = dpipe_mapping_get(ctx, op_info->header_id, op_info->field_id, op_info->header_global); if (mapping) - pr_out_str(ctx->dl, "mapping", mapping); + print_string(PRINT_ANY, "mapping", " mapping %s", mapping); } static int dpipe_action_parse(struct dpipe_action *action, struct nlattr *nl) @@ -5031,20 +5048,21 @@ static void pr_out_dpipe_match(struct dpipe_match *match, struct dpipe_op_info *op_info = &match->info; const char *mapping; - pr_out_str(ctx->dl, "type", - dpipe_match_type_e2s(match->type)); - pr_out_str(ctx->dl, "header", - dpipe_header_id2s(ctx, op_info->header_id, - op_info->header_global)); - pr_out_str(ctx->dl, "field", - dpipe_field_id2s(ctx, op_info->header_id, - op_info->field_id, - op_info->header_global)); + check_indent_newline(ctx->dl); + print_string(PRINT_ANY, "type", "type %s", + dpipe_match_type_e2s(match->type)); + print_string(PRINT_ANY, "header", " header %s", + dpipe_header_id2s(ctx, op_info->header_id, + op_info->header_global)); + print_string(PRINT_ANY, "field", " field %s", + dpipe_field_id2s(ctx, op_info->header_id, + op_info->field_id, + op_info->header_global)); mapping = dpipe_mapping_get(ctx, op_info->header_id, op_info->field_id, op_info->header_global); if (mapping) - pr_out_str(ctx->dl, "mapping", mapping); + print_string(PRINT_ANY, "mapping", " mapping %s", mapping); } static int dpipe_match_parse(struct dpipe_match *match, @@ -5149,7 +5167,8 @@ resource_path_print(struct dl *dl, struct resources *resources, path -= strlen(del); memcpy(path, del, strlen(del)); } - pr_out_str(dl, "resource_path", path); + check_indent_newline(dl); + print_string(PRINT_ANY, "resource_path", "resource_path %s", path); free(path); } @@ -5194,10 +5213,10 @@ static int dpipe_table_show(struct dpipe_ctx *ctx, struct nlattr *nl) if (!ctx->print_tables) return 0; - pr_out_str(ctx->dl, "name", table->name); + check_indent_newline(ctx->dl); + print_string(PRINT_ANY, "name", "name %s", table->name); pr_out_uint(ctx->dl, "size", size); - pr_out_str(ctx->dl, "counters_enabled", - counters_enabled ? "true" : "false"); + print_bool(PRINT_ANY, "counters_enabled", " counters_enabled %s", counters_enabled); if (resource_valid) { resource_units = mnl_attr_get_u32(nla_table[DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS]); @@ -5374,7 +5393,8 @@ static void dpipe_field_printer_ipv4_addr(struct dpipe_ctx *ctx, struct in_addr ip_addr; ip_addr.s_addr = htonl(*(uint32_t *)value); - pr_out_str(ctx->dl, dpipe_value_type_e2s(type), inet_ntoa(ip_addr)); + check_indent_newline(ctx->dl); + print_string_name_value(dpipe_value_type_e2s(type), inet_ntoa(ip_addr)); } static void @@ -5382,8 +5402,9 @@ dpipe_field_printer_ethernet_addr(struct dpipe_ctx *ctx, enum dpipe_value_type type, void *value) { - pr_out_str(ctx->dl, dpipe_value_type_e2s(type), - ether_ntoa((struct ether_addr *)value)); + check_indent_newline(ctx->dl); + print_string_name_value(dpipe_value_type_e2s(type), + ether_ntoa((struct ether_addr *)value)); } static void dpipe_field_printer_ipv6_addr(struct dpipe_ctx *ctx, @@ -5393,7 +5414,8 @@ static void dpipe_field_printer_ipv6_addr(struct dpipe_ctx *ctx, char str[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, value, str, INET6_ADDRSTRLEN); - pr_out_str(ctx->dl, dpipe_value_type_e2s(type), str); + check_indent_newline(ctx->dl); + print_string_name_value(dpipe_value_type_e2s(type), str); } static struct dpipe_field_printer dpipe_field_printers_ipv4[] = { @@ -5872,7 +5894,8 @@ static void resource_show(struct resource *resource, struct dl *dl = ctx->dl; bool array = false; - pr_out_str(dl, "name", resource->name); + check_indent_newline(dl); + print_string(PRINT_ANY, "name", "name %s", resource->name); if (dl->verbose) resource_path_print(dl, ctx->resources, resource->id); pr_out_u64(dl, "size", resource->size); @@ -5880,7 +5903,8 @@ static void resource_show(struct resource *resource, pr_out_u64(dl, "size_new", resource->size_new); if (resource->occ_valid) pr_out_uint(dl, "occ", resource->size_occ); - pr_out_str(dl, "unit", resource_unit_str_get(resource->unit)); + print_string(PRINT_ANY, "unit", " unit %s", + resource_unit_str_get(resource->unit)); if (resource->size_min != resource->size_max) { pr_out_uint(dl, "size_min", resource->size_min); @@ -5896,14 +5920,17 @@ static void resource_show(struct resource *resource, if (array) pr_out_array_start(dl, "dpipe_tables"); else - pr_out_str(dl, "dpipe_tables", "none"); + print_string(PRINT_ANY, "dpipe_tables", " dpipe_tables none", + "none"); list_for_each_entry(table, &ctx->tables->table_list, list) { if (table->resource_id != resource->id || !table->resource_valid) continue; pr_out_entry_start(dl); - pr_out_str(dl, "table_name", table->name); + check_indent_newline(dl); + print_string(PRINT_ANY, "table_name", "table_name %s", + table->name); pr_out_entry_end(dl); } if (array) @@ -5912,9 +5939,11 @@ static void resource_show(struct resource *resource, if (list_empty(&resource->resource_list)) return; - if (ctx->pending_change) - pr_out_str(dl, "size_valid", resource->size_valid ? - "true" : "false"); + if (ctx->pending_change) { + check_indent_newline(dl); + print_string(PRINT_ANY, "size_valid", "size_valid %s", + resource->size_valid ? "true" : "false"); + } pr_out_array_start(dl, "resources"); list_for_each_entry(child_resource, &resource->resource_list, list) { pr_out_entry_start(dl); @@ -6418,6 +6447,7 @@ static int fmsg_value_show(struct dl *dl, int type, struct nlattr *nl_data) uint8_t *data; uint32_t len; + check_indent_newline(dl); switch (type) { case MNL_TYPE_FLAG: pr_out_bool_value(dl, mnl_attr_get_u8(nl_data)); @@ -6435,7 +6465,7 @@ static int fmsg_value_show(struct dl *dl, int type, struct nlattr *nl_data) pr_out_uint64_value(dl, mnl_attr_get_u64(nl_data)); break; case MNL_TYPE_NUL_STRING: - pr_out_str_value(dl, mnl_attr_get_str(nl_data)); + print_string(PRINT_ANY, NULL, "%s", mnl_attr_get_str(nl_data)); break; case MNL_TYPE_BINARY: len = mnl_attr_get_payload_len(nl_data); @@ -6733,8 +6763,9 @@ static void pr_out_dump_reporter_format_logtime(struct dl *dl, const struct nlat out: strftime(dump_date, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%Y-%m-%d", info); strftime(dump_time, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%H:%M:%S", info); - pr_out_str(dl, "last_dump_date", dump_date); - pr_out_str(dl, "last_dump_time", dump_time); + check_indent_newline(dl); + print_string(PRINT_ANY, "last_dump_date", "last_dump_date %s", dump_date); + print_string(PRINT_ANY, "last_dump_time", " last_dump_time %s", dump_time); } static void pr_out_dump_report_timestamp(struct dl *dl, const struct nlattr *attr) @@ -6752,8 +6783,9 @@ static void pr_out_dump_report_timestamp(struct dl *dl, const struct nlattr *att strftime(dump_date, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%Y-%m-%d", tm); strftime(dump_time, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%H:%M:%S", tm); - pr_out_str(dl, "last_dump_date", dump_date); - pr_out_str(dl, "last_dump_time", dump_time); + check_indent_newline(dl); + print_string(PRINT_ANY, "last_dump_date", "last_dump_date %s", dump_date); + print_string(PRINT_ANY, "last_dump_time", " last_dump_time %s", dump_time); } static void pr_out_health(struct dl *dl, struct nlattr **tb_health) @@ -6775,14 +6807,16 @@ static void pr_out_health(struct dl *dl, struct nlattr **tb_health) pr_out_handle_start_arr(dl, tb_health); - pr_out_str(dl, "reporter", - mnl_attr_get_str(tb[DEVLINK_ATTR_HEALTH_REPORTER_NAME])); + check_indent_newline(dl); + print_string(PRINT_ANY, "reporter", "reporter %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_HEALTH_REPORTER_NAME])); if (!dl->json_output) { __pr_out_newline(); __pr_out_indent_inc(); } state = mnl_attr_get_u8(tb[DEVLINK_ATTR_HEALTH_REPORTER_STATE]); - pr_out_str(dl, "state", health_state_name(state)); + check_indent_newline(dl); + print_string(PRINT_ANY, "state", "state %s", health_state_name(state)); pr_out_u64(dl, "error", mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT])); pr_out_u64(dl, "recover", @@ -6923,8 +6957,11 @@ static void pr_out_trap_metadata(struct dl *dl, struct nlattr *attr) struct nlattr *attr_metadata; pr_out_array_start(dl, "metadata"); - mnl_attr_for_each_nested(attr_metadata, attr) - pr_out_str_value(dl, trap_metadata_name(attr_metadata)); + mnl_attr_for_each_nested(attr_metadata, attr) { + check_indent_newline(dl); + print_string(PRINT_ANY, NULL, "%s", + trap_metadata_name(attr_metadata)); + } pr_out_array_end(dl); } @@ -6938,12 +6975,14 @@ static void pr_out_trap(struct dl *dl, struct nlattr **tb, bool array) else __pr_out_handle_start(dl, tb, true, false); - pr_out_str(dl, "name", mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_NAME])); - pr_out_str(dl, "type", trap_type_name(type)); + check_indent_newline(dl); + print_string(PRINT_ANY, "name", "name %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_NAME])); + print_string(PRINT_ANY, "type", " type %s", trap_type_name(type)); pr_out_bool(dl, "generic", !!tb[DEVLINK_ATTR_TRAP_GENERIC]); - pr_out_str(dl, "action", trap_action_name(action)); - pr_out_str(dl, "group", - mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_GROUP_NAME])); + print_string(PRINT_ANY, "action", " action %s", trap_action_name(action)); + print_string(PRINT_ANY, "group", " group %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_GROUP_NAME])); if (dl->verbose) pr_out_trap_metadata(dl, tb[DEVLINK_ATTR_TRAP_METADATA]); pr_out_stats(dl, tb[DEVLINK_ATTR_STATS]); @@ -7025,8 +7064,9 @@ static void pr_out_trap_group(struct dl *dl, struct nlattr **tb, bool array) else __pr_out_handle_start(dl, tb, true, false); - pr_out_str(dl, "name", - mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_GROUP_NAME])); + check_indent_newline(dl); + print_string(PRINT_ANY, "name", "name %s", + mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_GROUP_NAME])); pr_out_bool(dl, "generic", !!tb[DEVLINK_ATTR_TRAP_GENERIC]); pr_out_stats(dl, tb[DEVLINK_ATTR_STATS]); pr_out_handle_end(dl); From patchwork Thu Jan 23 10:32:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Diskin X-Patchwork-Id: 1227749 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 483JWp42fSz9s1x for ; Thu, 23 Jan 2020 21:33:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727847AbgAWKdJ (ORCPT ); Thu, 23 Jan 2020 05:33:09 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:47582 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726227AbgAWKdI (ORCPT ); Thu, 23 Jan 2020 05:33:08 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from rondi@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (nps-server-35.mtl.labs.mlnx [10.137.1.140]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00NAX1XI002819; Thu, 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (localhost [127.0.0.1]) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Debian-11ubuntu1) with ESMTP id 00NAX10O022721; Thu, 23 Jan 2020 12:33:01 +0200 Received: (from rondi@localhost) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Submit) id 00NAX1bu022720; Thu, 23 Jan 2020 12:33:01 +0200 From: Ron Diskin To: Stephen Hemminger , David Ahern Cc: Jiri Pirko , Moshe Shemesh , netdev@vger.kernel.org, Ron Diskin Subject: [PATCH iproute2 5/6] devlink: Replace pr_#type_value wrapper functions with common functions Date: Thu, 23 Jan 2020 12:32:30 +0200 Message-Id: <1579775551-22659-6-git-send-email-rondi@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1579775551-22659-1-git-send-email-rondi@mellanox.com> References: <1579775551-22659-1-git-send-email-rondi@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Replace calls for pr_bool/uint/uint64_value with direct calls for the matching common json_print library function: print_bool(), print_uint() and print_u64() Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Acked-by: Jiri Pirko --- devlink/devlink.c | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index a25dd818..231a2838 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -1905,33 +1905,6 @@ static void pr_out_u64(struct dl *dl, const char *name, uint64_t val) pr_out("%s %"PRIu64, name, val); } -static void pr_out_bool_value(struct dl *dl, bool value) -{ - __pr_out_indent_newline(dl); - if (dl->json_output) - print_bool(PRINT_JSON, NULL, NULL, value); - else - pr_out("%s", value ? "true" : "false"); -} - -static void pr_out_uint_value(struct dl *dl, unsigned int value) -{ - __pr_out_indent_newline(dl); - if (dl->json_output) - print_uint(PRINT_JSON, NULL, NULL, value); - else - pr_out("%u", value); -} - -static void pr_out_uint64_value(struct dl *dl, uint64_t value) -{ - __pr_out_indent_newline(dl); - if (dl->json_output) - print_u64(PRINT_JSON, NULL, NULL, value); - else - pr_out("%"PRIu64, value); -} - static bool is_binary_eol(int i) { return !(i%16); @@ -6450,19 +6423,19 @@ static int fmsg_value_show(struct dl *dl, int type, struct nlattr *nl_data) check_indent_newline(dl); switch (type) { case MNL_TYPE_FLAG: - pr_out_bool_value(dl, mnl_attr_get_u8(nl_data)); + print_bool(PRINT_ANY, NULL, "%s", mnl_attr_get_u8(nl_data)); break; case MNL_TYPE_U8: - pr_out_uint_value(dl, mnl_attr_get_u8(nl_data)); + print_uint(PRINT_ANY, NULL, "%u", mnl_attr_get_u8(nl_data)); break; case MNL_TYPE_U16: - pr_out_uint_value(dl, mnl_attr_get_u16(nl_data)); + print_uint(PRINT_ANY, NULL, "%u", mnl_attr_get_u16(nl_data)); break; case MNL_TYPE_U32: - pr_out_uint_value(dl, mnl_attr_get_u32(nl_data)); + print_uint(PRINT_ANY, NULL, "%u", mnl_attr_get_u32(nl_data)); break; case MNL_TYPE_U64: - pr_out_uint64_value(dl, mnl_attr_get_u64(nl_data)); + print_u64(PRINT_ANY, NULL, "%"PRIu64, mnl_attr_get_u64(nl_data)); break; case MNL_TYPE_NUL_STRING: print_string(PRINT_ANY, NULL, "%s", mnl_attr_get_str(nl_data)); From patchwork Thu Jan 23 10:32:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Diskin X-Patchwork-Id: 1227752 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 483JWt1DMtz9s1x for ; Thu, 23 Jan 2020 21:33:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728765AbgAWKdM (ORCPT ); Thu, 23 Jan 2020 05:33:12 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:47581 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726234AbgAWKdL (ORCPT ); Thu, 23 Jan 2020 05:33:11 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from rondi@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (nps-server-35.mtl.labs.mlnx [10.137.1.140]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00NAX1Xt002822; Thu, 23 Jan 2020 12:33:01 +0200 Received: from nps-server-35.mtl.labs.mlnx (localhost [127.0.0.1]) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Debian-11ubuntu1) with ESMTP id 00NAX1aY022723; Thu, 23 Jan 2020 12:33:01 +0200 Received: (from rondi@localhost) by nps-server-35.mtl.labs.mlnx (8.15.2/8.15.2/Submit) id 00NAX1uV022722; Thu, 23 Jan 2020 12:33:01 +0200 From: Ron Diskin To: Stephen Hemminger , David Ahern Cc: Jiri Pirko , Moshe Shemesh , netdev@vger.kernel.org, Ron Diskin Subject: [PATCH iproute2 6/6] devlink: Replace pr_out_bool/uint() wrappers with common print functions Date: Thu, 23 Jan 2020 12:32:31 +0200 Message-Id: <1579775551-22659-7-git-send-email-rondi@mellanox.com> X-Mailer: git-send-email 1.8.4.3 In-Reply-To: <1579775551-22659-1-git-send-email-rondi@mellanox.com> References: <1579775551-22659-1-git-send-email-rondi@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Replace calls for pr_out_bool() and pr_out_uint() with direct calls to common json_print library function print_bool() and print_uint(). Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Acked-by: Jiri Pirko --- devlink/devlink.c | 150 ++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 77 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 231a2838..73ce9865 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -1876,23 +1876,6 @@ static void pr_out_port_handle_end(struct dl *dl) pr_out("\n"); } -static void pr_out_bool(struct dl *dl, const char *name, bool val) -{ - if (dl->json_output) - print_bool(PRINT_JSON, name, NULL, val); - else - print_string_name_value(name, val ? "true" : "false"); -} - -static void pr_out_uint(struct dl *dl, const char *name, unsigned int val) -{ - __pr_out_indent_newline(dl); - if (dl->json_output) - print_uint(PRINT_JSON, name, NULL, val); - else - pr_out("%s %u", name, val); -} - static void pr_out_u64(struct dl *dl, const char *name, uint64_t val) { __pr_out_indent_newline(dl); @@ -2346,7 +2329,8 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, return; print_string(PRINT_ANY, "value", " value %s", vstr); } else { - pr_out_uint(dl, "value", mnl_attr_get_u8(val_attr)); + print_uint(PRINT_ANY, "value", " value %u", + mnl_attr_get_u8(val_attr)); } break; case MNL_TYPE_U16: @@ -2360,7 +2344,8 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, return; print_string(PRINT_ANY, "value", " value %s", vstr); } else { - pr_out_uint(dl, "value", mnl_attr_get_u16(val_attr)); + print_uint(PRINT_ANY, "value", " value %u", + mnl_attr_get_u16(val_attr)); } break; case MNL_TYPE_U32: @@ -2374,7 +2359,8 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, return; print_string(PRINT_ANY, "value", " value %s", vstr); } else { - pr_out_uint(dl, "value", mnl_attr_get_u32(val_attr)); + print_uint(PRINT_ANY, "value", " value %u", + mnl_attr_get_u32(val_attr)); } break; case MNL_TYPE_STRING: @@ -2382,7 +2368,7 @@ static void pr_out_param_value(struct dl *dl, const char *nla_name, mnl_attr_get_str(val_attr)); break; case MNL_TYPE_FLAG: - pr_out_bool(dl, "value", val_attr ? true : false); + print_bool(PRINT_ANY, "value", " value %s", val_attr); break; } } @@ -2693,7 +2679,8 @@ static int cmd_dev_show_cb(const struct nlmsghdr *nlh, void *data) if (reload_failed) { __pr_out_handle_start(dl, tb, true, false); - pr_out_bool(dl, "reload_failed", true); + check_indent_newline(dl); + print_bool(PRINT_ANY, "reload_failed", "reload_failed %s", true); pr_out_handle_end(dl); } else { pr_out_handle(dl, tb); @@ -3172,11 +3159,11 @@ static void pr_out_port_pfvf_num(struct dl *dl, struct nlattr **tb) if (tb[DEVLINK_ATTR_PORT_PCI_PF_NUMBER]) { fn_num = mnl_attr_get_u16(tb[DEVLINK_ATTR_PORT_PCI_PF_NUMBER]); - pr_out_uint(dl, "pfnum", fn_num); + print_uint(PRINT_ANY, "pfnum", " pfnum %u", fn_num); } if (tb[DEVLINK_ATTR_PORT_PCI_VF_NUMBER]) { fn_num = mnl_attr_get_u16(tb[DEVLINK_ATTR_PORT_PCI_VF_NUMBER]); - pr_out_uint(dl, "vfnum", fn_num); + print_uint(PRINT_ANY, "vfnum", " vfnum %u", fn_num); } } @@ -3228,11 +3215,11 @@ static void pr_out_port(struct dl *dl, struct nlattr **tb) uint32_t port_number; port_number = mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_NUMBER]); - pr_out_uint(dl, "port", port_number); + print_uint(PRINT_ANY, "port", " port %u", port_number); } if (tb[DEVLINK_ATTR_PORT_SPLIT_GROUP]) - pr_out_uint(dl, "split_group", - mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_SPLIT_GROUP])); + print_uint(PRINT_ANY, "split_group", " split_group %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_SPLIT_GROUP])); pr_out_port_handle_end(dl); } @@ -3365,18 +3352,18 @@ static void pr_out_sb(struct dl *dl, struct nlattr **tb) { pr_out_handle_start_arr(dl, tb); check_indent_newline(dl); - pr_out_uint(dl, "sb", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); - pr_out_uint(dl, "size", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_SIZE])); - pr_out_uint(dl, "ing_pools", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_INGRESS_POOL_COUNT])); - pr_out_uint(dl, "eg_pools", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_EGRESS_POOL_COUNT])); - pr_out_uint(dl, "ing_tcs", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_INGRESS_TC_COUNT])); - pr_out_uint(dl, "eg_tcs", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_EGRESS_TC_COUNT])); + print_uint(PRINT_ANY, "sb", "sb %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); + print_uint(PRINT_ANY, "size", " size %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_SIZE])); + print_uint(PRINT_ANY, "ing_pools", " ing_pools %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_INGRESS_POOL_COUNT])); + print_uint(PRINT_ANY, "eg_pools", " eg_pools %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_EGRESS_POOL_COUNT])); + print_uint(PRINT_ANY, "ing_tcs", " ing_tcs %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_INGRESS_TC_COUNT])); + print_uint(PRINT_ANY, "eg_tcs", " eg_tcs %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_EGRESS_TC_COUNT])); pr_out_handle_end(dl); } @@ -3442,19 +3429,20 @@ static const char *threshold_type_name(uint8_t type) static void pr_out_sb_pool(struct dl *dl, struct nlattr **tb) { pr_out_handle_start_arr(dl, tb); - pr_out_uint(dl, "sb", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); - pr_out_uint(dl, "pool", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); + check_indent_newline(dl); + print_uint(PRINT_ANY, "sb", "sb %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); + print_uint(PRINT_ANY, "pool", " pool %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); print_string(PRINT_ANY, "type", " type %s", pool_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_TYPE]))); - pr_out_uint(dl, "size", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_POOL_SIZE])); + print_uint(PRINT_ANY, "size", " size %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_POOL_SIZE])); print_string(PRINT_ANY, "thtype", " thtype %s", threshold_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE]))); if (tb[DEVLINK_ATTR_SB_POOL_CELL_SIZE]) - pr_out_uint(dl, "cell_size", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_POOL_CELL_SIZE])); + print_uint(PRINT_ANY, "cell_size", " cell size %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_POOL_CELL_SIZE])); pr_out_handle_end(dl); } @@ -3534,12 +3522,13 @@ static int cmd_sb_pool(struct dl *dl) static void pr_out_sb_port_pool(struct dl *dl, struct nlattr **tb) { pr_out_port_handle_start_arr(dl, tb, true); - pr_out_uint(dl, "sb", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); - pr_out_uint(dl, "pool", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); - pr_out_uint(dl, "threshold", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_THRESHOLD])); + check_indent_newline(dl); + print_uint(PRINT_ANY, "sb", "sb %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); + print_uint(PRINT_ANY, "pool", " pool %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); + print_uint(PRINT_ANY, "threshold", " threshold %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_THRESHOLD])); pr_out_port_handle_end(dl); } @@ -3632,16 +3621,17 @@ static int cmd_sb_port(struct dl *dl) static void pr_out_sb_tc_bind(struct dl *dl, struct nlattr **tb) { pr_out_port_handle_start_arr(dl, tb, true); - pr_out_uint(dl, "sb", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); - pr_out_uint(dl, "tc", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_TC_INDEX])); + check_indent_newline(dl); + print_uint(PRINT_ANY, "sb", "sb %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_INDEX])); + print_uint(PRINT_ANY, "tc", " tc %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_TC_INDEX])); print_string(PRINT_ANY, "type", " type %s", pool_type_name(mnl_attr_get_u8(tb[DEVLINK_ATTR_SB_POOL_TYPE]))); - pr_out_uint(dl, "pool", - mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); - pr_out_uint(dl, "threshold", - mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_THRESHOLD])); + print_uint(PRINT_ANY, "pool", " pool %u", + mnl_attr_get_u16(tb[DEVLINK_ATTR_SB_POOL_INDEX])); + print_uint(PRINT_ANY, "threshold", " threshold %u", + mnl_attr_get_u32(tb[DEVLINK_ATTR_SB_THRESHOLD])); pr_out_port_handle_end(dl); } @@ -4695,8 +4685,8 @@ static void pr_out_dpipe_fields(struct dpipe_ctx *ctx, check_indent_newline(ctx->dl); print_string(PRINT_ANY, "name", "name %s", field->name); if (ctx->dl->verbose) - pr_out_uint(ctx->dl, "id", field->id); - pr_out_uint(ctx->dl, "bitwidth", field->bitwidth); + print_uint(PRINT_ANY, "id", " id %u", field->id); + print_uint(PRINT_ANY, "bitwidth", " bitwidth %u", field->bitwidth); if (field->mapping_type) { print_string(PRINT_ANY, "mapping_type", " mapping_type %s", dpipe_field_mapping_e2s(field->mapping_type)); @@ -4713,7 +4703,7 @@ pr_out_dpipe_header(struct dpipe_ctx *ctx, struct nlattr **tb, check_indent_newline(ctx->dl); print_string(PRINT_ANY, "name", "name %s", header->name); if (ctx->dl->verbose) { - pr_out_uint(ctx->dl, "id", header->id); + print_uint(PRINT_ANY, "id", " id %u", header->id); print_bool(PRINT_ANY, "global", " global %s", global); } pr_out_array_start(ctx->dl, "field"); @@ -5188,14 +5178,15 @@ static int dpipe_table_show(struct dpipe_ctx *ctx, struct nlattr *nl) check_indent_newline(ctx->dl); print_string(PRINT_ANY, "name", "name %s", table->name); - pr_out_uint(ctx->dl, "size", size); + print_uint(PRINT_ANY, "size", " size %u", size); print_bool(PRINT_ANY, "counters_enabled", " counters_enabled %s", counters_enabled); if (resource_valid) { resource_units = mnl_attr_get_u32(nla_table[DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS]); resource_path_print(ctx->dl, ctx->resources, table->resource_id); - pr_out_uint(ctx->dl, "resource_units", resource_units); + print_uint(PRINT_ANY, "resource_units", " resource_units %u", + resource_units); } pr_out_array_start(ctx->dl, "match"); @@ -5478,7 +5469,8 @@ static void __pr_out_entry_value(struct dpipe_ctx *ctx, if (value_len == sizeof(uint32_t)) { uint32_t *value_32 = value; - pr_out_uint(ctx->dl, dpipe_value_type_e2s(type), *value_32); + check_indent_newline(ctx->dl); + print_uint_name_value(dpipe_value_type_e2s(type), *value_32); } } @@ -5499,7 +5491,8 @@ static void pr_out_dpipe_entry_value(struct dpipe_ctx *ctx, if (mapping) { value_mapping = mnl_attr_get_u32(nla_match_value[DEVLINK_ATTR_DPIPE_VALUE_MAPPING]); - pr_out_uint(ctx->dl, "mapping_value", value_mapping); + check_indent_newline(ctx->dl); + print_uint(PRINT_ANY, "mapping_value", "mapping_value %u", value_mapping); } if (mask) { @@ -5616,12 +5609,13 @@ static int dpipe_entry_show(struct dpipe_ctx *ctx, struct nlattr *nl) return -EINVAL; } + check_indent_newline(ctx->dl); entry_index = mnl_attr_get_u32(nla_entry[DEVLINK_ATTR_DPIPE_ENTRY_INDEX]); - pr_out_uint(ctx->dl, "index", entry_index); + print_uint(PRINT_ANY, "index", "index %u", entry_index); if (nla_entry[DEVLINK_ATTR_DPIPE_ENTRY_COUNTER]) { counter = mnl_attr_get_u64(nla_entry[DEVLINK_ATTR_DPIPE_ENTRY_COUNTER]); - pr_out_uint(ctx->dl, "counter", counter); + print_uint(PRINT_ANY, "counter", " counter %u", counter); } pr_out_array_start(ctx->dl, "match_value"); @@ -5875,14 +5869,16 @@ static void resource_show(struct resource *resource, if (resource->size != resource->size_new) pr_out_u64(dl, "size_new", resource->size_new); if (resource->occ_valid) - pr_out_uint(dl, "occ", resource->size_occ); + print_uint(PRINT_ANY, "occ", " occ %u", resource->size_occ); print_string(PRINT_ANY, "unit", " unit %s", resource_unit_str_get(resource->unit)); if (resource->size_min != resource->size_max) { - pr_out_uint(dl, "size_min", resource->size_min); + print_uint(PRINT_ANY, "size_min", " size_min %u", + resource->size_min); pr_out_u64(dl, "size_max", resource->size_max); - pr_out_uint(dl, "size_gran", resource->size_gran); + print_uint(PRINT_ANY, "size_gran", " size_gran %u", + resource->size_gran); } list_for_each_entry(table, &ctx->tables->table_list, list) @@ -6802,8 +6798,8 @@ static void pr_out_health(struct dl *dl, struct nlattr **tb_health) pr_out_u64(dl, "grace_period", mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD])); if (tb[DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER]) - pr_out_bool(dl, "auto_recover", - mnl_attr_get_u8(tb[DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER])); + print_bool(PRINT_ANY, "auto_recover", " auto_recover %s", + mnl_attr_get_u8(tb[DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER])); __pr_out_indent_dec(); pr_out_handle_end(dl); @@ -6952,7 +6948,7 @@ static void pr_out_trap(struct dl *dl, struct nlattr **tb, bool array) print_string(PRINT_ANY, "name", "name %s", mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_NAME])); print_string(PRINT_ANY, "type", " type %s", trap_type_name(type)); - pr_out_bool(dl, "generic", !!tb[DEVLINK_ATTR_TRAP_GENERIC]); + print_bool(PRINT_ANY, "generic", " generic %s", !!tb[DEVLINK_ATTR_TRAP_GENERIC]); print_string(PRINT_ANY, "action", " action %s", trap_action_name(action)); print_string(PRINT_ANY, "group", " group %s", mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_GROUP_NAME])); @@ -7040,7 +7036,7 @@ static void pr_out_trap_group(struct dl *dl, struct nlattr **tb, bool array) check_indent_newline(dl); print_string(PRINT_ANY, "name", "name %s", mnl_attr_get_str(tb[DEVLINK_ATTR_TRAP_GROUP_NAME])); - pr_out_bool(dl, "generic", !!tb[DEVLINK_ATTR_TRAP_GENERIC]); + print_bool(PRINT_ANY, "generic", " generic %s", !!tb[DEVLINK_ATTR_TRAP_GENERIC]); pr_out_stats(dl, tb[DEVLINK_ATTR_STATS]); pr_out_handle_end(dl); }