diff mbox series

[iproute2,1/2] ip route: print route type in JSON output

Message ID 20190318171930.22705-2-mcroce@redhat.com
State Accepted
Delegated to: stephen hemminger
Headers show
Series iproute JSON fixes | expand

Commit Message

Matteo Croce March 18, 2019, 5:19 p.m. UTC
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>
---
 ip/iproute.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Stephen Hemminger March 19, 2019, 10:24 p.m. UTC | #1
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 mbox series

Patch

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;