From: Matteo Croce Date: Mon, 18 Mar 2019 17:19:29 +0000 (+0100) Subject: ip route: print route type in JSON output X-Git-Tag: v5.0.0~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=073661773872709518d35d4d093f3a715281f21d;p=thirdparty%2Fiproute2.git ip route: print route type in JSON output ip route generates an invalid JSON if the route type has to be printed, eg. when detailed mode is active, or the type is different that unicast: $ ip -d -j -p route show [ {"unicast", "dst": "192.168.122.0/24", "dev": "virbr0", "protocol": "kernel", "scope": "link", "prefsrc": "192.168.122.1", "flags": [ "linkdown" ] } ] $ ip -j -p route show [ {"unreachable", "dst": "192.168.23.0/24", "flags": [ ] },{"prohibit", "dst": "192.168.24.0/24", "flags": [ ] },{"blackhole", "dst": "192.168.25.0/24", "flags": [ ] } ] Fix it by printing the route type as the "type" attribute: $ ip -d -j -p route show [ { "type": "unicast", "dst": "default", "gateway": "192.168.85.1", "dev": "wlp3s0", "protocol": "dhcp", "scope": "global", "metric": 600, "flags": [ ] },{ "type": "unreachable", "dst": "192.168.23.0/24", "protocol": "boot", "scope": "global", "flags": [ ] },{ "type": "prohibit", "dst": "192.168.24.0/24", "protocol": "boot", "scope": "global", "flags": [ ] },{ "type": "blackhole", "dst": "192.168.25.0/24", "protocol": "boot", "scope": "global", "flags": [ ] } ] Fixes: 663c3cb23103 ("iproute: implement JSON and color output") Acked-by: Phil Sutter Reviewed-and-tested-by: Andrea Claudi Signed-off-by: Matteo Croce Signed-off-by: Stephen Hemminger --- diff --git a/ip/iproute.c b/ip/iproute.c index cc02a3e1b..e091927b6 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -766,7 +766,7 @@ int print_route(struct nlmsghdr *n, void *arg) if ((r->rtm_type != RTN_UNICAST || show_details > 0) && (!filter.typemask || (filter.typemask & (1 << r->rtm_type)))) - print_string(PRINT_ANY, NULL, "%s ", + print_string(PRINT_ANY, "type", "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1))); color = COLOR_NONE;