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