From: Julien Fortin Date: Thu, 17 Aug 2017 17:36:01 +0000 (-0700) Subject: ip: iplink_ipoib.c: add json output support X-Git-Tag: v4.14.0~39^2~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3bec1cf84efeafe51b32cc93b00dfc5bfb24f277;p=thirdparty%2Fiproute2.git ip: iplink_ipoib.c: add json output support Schema: { "key": { "type": "string", "attr": "IFLA_IPOIB_PKEY" }, "mode": { "type": "string", "attr": "IFLA_IPOIB_PKEY" }, "umcast": { "type": "string", "attr": "IFLA_IPOIB_UMCAST" } } Signed-off-by: Julien Fortin --- diff --git a/ip/iplink_ipoib.c b/ip/iplink_ipoib.c index 86dc65caa..e69bda0e8 100644 --- a/ip/iplink_ipoib.c +++ b/ip/iplink_ipoib.c @@ -91,23 +91,43 @@ static void ipoib_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) RTA_PAYLOAD(tb[IFLA_IPOIB_PKEY]) < sizeof(__u16)) return; - fprintf(f, "pkey %#.4x ", rta_getattr_u16(tb[IFLA_IPOIB_PKEY])); + __u16 pkey = rta_getattr_u16(tb[IFLA_IPOIB_PKEY]); + + if (is_json_context()) { + SPRINT_BUF(b1); + + snprintf(b1, sizeof(b1), "%#.4x", pkey); + print_string(PRINT_JSON, "key", NULL, b1); + } else { + fprintf(f, "pkey %#.4x ", pkey); + } if (!tb[IFLA_IPOIB_MODE] || RTA_PAYLOAD(tb[IFLA_IPOIB_MODE]) < sizeof(__u16)) return; mode = rta_getattr_u16(tb[IFLA_IPOIB_MODE]); - fprintf(f, "mode %s ", + + const char *mode_str = mode == IPOIB_MODE_DATAGRAM ? "datagram" : - mode == IPOIB_MODE_CONNECTED ? "connected" : - "unknown"); + mode == IPOIB_MODE_CONNECTED ? "connected" : "unknown"; + + print_string(PRINT_ANY, "mode", "mode %s ", mode_str); if (!tb[IFLA_IPOIB_UMCAST] || RTA_PAYLOAD(tb[IFLA_IPOIB_UMCAST]) < sizeof(__u16)) return; - fprintf(f, "umcast %.4x ", rta_getattr_u16(tb[IFLA_IPOIB_UMCAST])); + __u16 umcast = rta_getattr_u16(tb[IFLA_IPOIB_UMCAST]); + + if (is_json_context()) { + SPRINT_BUF(b1); + + snprintf(b1, sizeof(b1), "%.4x", umcast); + print_string(PRINT_JSON, "umcast", NULL, b1); + } else { + fprintf(f, "umcast %.4x ", umcast); + } } static void ipoib_print_help(struct link_util *lu, int argc, char **argv,