Message ID | 20190318171930.22705-2-mcroce@redhat.com |
---|---|
State | Accepted |
Delegated to: | stephen hemminger |
Headers | show |
Series | iproute JSON fixes | expand |
On Mon, 18 Mar 2019 18:19:29 +0100 Matteo Croce <mcroce@redhat.com> wrote: > 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 <phil@nwl.cc> > Reviewed-and-tested-by: Andrea Claudi <aclaudi@redhat.com> > Signed-off-by: Matteo Croce <mcroce@redhat.com> Applied both of these just before tagging 5.0
diff --git a/ip/iproute.c b/ip/iproute.c index cc02a3e1..e091927b 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;