1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2*4882a593Smuzhiyun // Copyright (C) 2018 Facebook 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef _NETLINK_DUMPER_H_ 5*4882a593Smuzhiyun #define _NETLINK_DUMPER_H_ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #define NET_START_OBJECT \ 8*4882a593Smuzhiyun { \ 9*4882a593Smuzhiyun if (json_output) \ 10*4882a593Smuzhiyun jsonw_start_object(json_wtr); \ 11*4882a593Smuzhiyun } 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define NET_START_OBJECT_NESTED(name) \ 14*4882a593Smuzhiyun { \ 15*4882a593Smuzhiyun if (json_output) { \ 16*4882a593Smuzhiyun jsonw_name(json_wtr, name); \ 17*4882a593Smuzhiyun jsonw_start_object(json_wtr); \ 18*4882a593Smuzhiyun } else { \ 19*4882a593Smuzhiyun fprintf(stdout, "%s {", name); \ 20*4882a593Smuzhiyun } \ 21*4882a593Smuzhiyun } 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define NET_START_OBJECT_NESTED2 \ 24*4882a593Smuzhiyun { \ 25*4882a593Smuzhiyun if (json_output) \ 26*4882a593Smuzhiyun jsonw_start_object(json_wtr); \ 27*4882a593Smuzhiyun else \ 28*4882a593Smuzhiyun fprintf(stdout, "{"); \ 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define NET_END_OBJECT_NESTED \ 32*4882a593Smuzhiyun { \ 33*4882a593Smuzhiyun if (json_output) \ 34*4882a593Smuzhiyun jsonw_end_object(json_wtr); \ 35*4882a593Smuzhiyun else \ 36*4882a593Smuzhiyun fprintf(stdout, "}"); \ 37*4882a593Smuzhiyun } 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define NET_END_OBJECT \ 40*4882a593Smuzhiyun { \ 41*4882a593Smuzhiyun if (json_output) \ 42*4882a593Smuzhiyun jsonw_end_object(json_wtr); \ 43*4882a593Smuzhiyun } 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define NET_END_OBJECT_FINAL \ 46*4882a593Smuzhiyun { \ 47*4882a593Smuzhiyun if (json_output) \ 48*4882a593Smuzhiyun jsonw_end_object(json_wtr); \ 49*4882a593Smuzhiyun else \ 50*4882a593Smuzhiyun fprintf(stdout, "\n"); \ 51*4882a593Smuzhiyun } 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define NET_START_ARRAY(name, fmt_str) \ 54*4882a593Smuzhiyun { \ 55*4882a593Smuzhiyun if (json_output) { \ 56*4882a593Smuzhiyun jsonw_name(json_wtr, name); \ 57*4882a593Smuzhiyun jsonw_start_array(json_wtr); \ 58*4882a593Smuzhiyun } else { \ 59*4882a593Smuzhiyun fprintf(stdout, fmt_str, name); \ 60*4882a593Smuzhiyun } \ 61*4882a593Smuzhiyun } 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define NET_END_ARRAY(endstr) \ 64*4882a593Smuzhiyun { \ 65*4882a593Smuzhiyun if (json_output) \ 66*4882a593Smuzhiyun jsonw_end_array(json_wtr); \ 67*4882a593Smuzhiyun else \ 68*4882a593Smuzhiyun fprintf(stdout, "%s", endstr); \ 69*4882a593Smuzhiyun } 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #define NET_DUMP_UINT(name, fmt_str, val) \ 72*4882a593Smuzhiyun { \ 73*4882a593Smuzhiyun if (json_output) \ 74*4882a593Smuzhiyun jsonw_uint_field(json_wtr, name, val); \ 75*4882a593Smuzhiyun else \ 76*4882a593Smuzhiyun fprintf(stdout, fmt_str, val); \ 77*4882a593Smuzhiyun } 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define NET_DUMP_STR(name, fmt_str, str) \ 80*4882a593Smuzhiyun { \ 81*4882a593Smuzhiyun if (json_output) \ 82*4882a593Smuzhiyun jsonw_string_field(json_wtr, name, str);\ 83*4882a593Smuzhiyun else \ 84*4882a593Smuzhiyun fprintf(stdout, fmt_str, str); \ 85*4882a593Smuzhiyun } 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #define NET_DUMP_STR_ONLY(str) \ 88*4882a593Smuzhiyun { \ 89*4882a593Smuzhiyun if (json_output) \ 90*4882a593Smuzhiyun jsonw_string(json_wtr, str); \ 91*4882a593Smuzhiyun else \ 92*4882a593Smuzhiyun fprintf(stdout, "%s ", str); \ 93*4882a593Smuzhiyun } 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun #endif 96