* [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops
@ 2019-09-26 15:29 Julien Fortin
2019-09-26 16:07 ` Stephen Hemminger
2019-10-01 15:14 ` David Ahern
0 siblings, 2 replies; 5+ messages in thread
From: Julien Fortin @ 2019-09-26 15:29 UTC (permalink / raw)
To: netdev; +Cc: roopa, dsahern, Julien Fortin
From: Julien Fortin <julien@cumulusnetworks.com>
print_rta_multipath doesn't support JSON output:
{
"dst":"27.0.0.13",
"protocol":"bgp",
"metric":20,
"flags":[],
"gateway":"169.254.0.1"dev uplink-1 weight 1 ,
"flags":["onlink"],
"gateway":"169.254.0.1"dev uplink-2 weight 1 ,
"flags":["onlink"]
},
since RTA_MULTIPATH has nested objects we should print them
in a json array.
With the path we have the following output:
{
"flags": [],
"dst": "36.0.0.13",
"protocol": "bgp",
"metric": 20,
"nexthops": [
{
"weight": 1,
"flags": [
"onlink"
],
"gateway": "169.254.0.1",
"dev": "uplink-1"
},
{
"weight": 1,
"flags": [
"onlink"
],
"gateway": "169.254.0.1",
"dev": "uplink-2"
}
]
}
Fixes: 663c3cb23103f4 ("iproute: implement JSON and color output")
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
---
ip/iproute.c | 46 ++++++++++++++++++++++++++++------------------
1 file changed, 28 insertions(+), 18 deletions(-)
diff --git a/ip/iproute.c b/ip/iproute.c
index a4533851..32bb52df 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -649,24 +649,26 @@ static void print_rta_multipath(FILE *fp, const struct rtmsg *r,
int len = RTA_PAYLOAD(rta);
int first = 1;
+ open_json_array(PRINT_JSON, "nexthops");
+
while (len >= sizeof(*nh)) {
struct rtattr *tb[RTA_MAX + 1];
if (nh->rtnh_len > len)
break;
- if (!is_json_context()) {
- if ((r->rtm_flags & RTM_F_CLONED) &&
- r->rtm_type == RTN_MULTICAST) {
- if (first) {
- fprintf(fp, "Oifs: ");
- first = 0;
- } else {
- fprintf(fp, " ");
- }
- } else
- fprintf(fp, "%s\tnexthop ", _SL_);
- }
+ open_json_object(NULL);
+
+ if ((r->rtm_flags & RTM_F_CLONED) &&
+ r->rtm_type == RTN_MULTICAST) {
+ if (first) {
+ print_string(PRINT_FP, NULL, "Oifs: ", NULL);
+ first = 0;
+ } else {
+ print_string(PRINT_FP, NULL, " ", NULL);
+ }
+ } else
+ print_string(PRINT_FP, NULL, "%s\tnexthop ", _SL_);
if (nh->rtnh_len > sizeof(*nh)) {
parse_rtattr(tb, RTA_MAX, RTNH_DATA(nh),
@@ -689,22 +691,30 @@ static void print_rta_multipath(FILE *fp, const struct rtmsg *r,
if ((r->rtm_flags & RTM_F_CLONED) &&
r->rtm_type == RTN_MULTICAST) {
- fprintf(fp, "%s", ll_index_to_name(nh->rtnh_ifindex));
+ print_string(PRINT_ANY, "dev",
+ "%s", ll_index_to_name(nh->rtnh_ifindex));
+
if (nh->rtnh_hops != 1)
- fprintf(fp, "(ttl>%d)", nh->rtnh_hops);
- fprintf(fp, " ");
+ print_int(PRINT_ANY, "ttl", "(ttl>%d)", nh->rtnh_hops);
+
+ print_string(PRINT_FP, NULL, " ", NULL);
} else {
- fprintf(fp, "dev %s ", ll_index_to_name(nh->rtnh_ifindex));
+ print_string(PRINT_ANY, "dev",
+ "dev %s ", ll_index_to_name(nh->rtnh_ifindex));
+
if (r->rtm_family != AF_MPLS)
- fprintf(fp, "weight %d ",
- nh->rtnh_hops+1);
+ print_int(PRINT_ANY, "weight",
+ "weight %d ", nh->rtnh_hops + 1);
}
print_rt_flags(fp, nh->rtnh_flags);
len -= NLMSG_ALIGN(nh->rtnh_len);
nh = RTNH_NEXT(nh);
+
+ close_json_object();
}
+ close_json_array(PRINT_JSON, NULL);
}
int print_route(struct nlmsghdr *n, void *arg)
--
2.23.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops
2019-09-26 15:29 [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops Julien Fortin
@ 2019-09-26 16:07 ` Stephen Hemminger
2019-09-26 18:16 ` Julien Fortin
2019-10-01 15:14 ` David Ahern
1 sibling, 1 reply; 5+ messages in thread
From: Stephen Hemminger @ 2019-09-26 16:07 UTC (permalink / raw)
To: Julien Fortin; +Cc: netdev, roopa, dsahern
On Thu, 26 Sep 2019 17:29:34 +0200
Julien Fortin <julien@cumulusnetworks.com> wrote:
> + print_string(PRINT_ANY, "dev",
> + "%s", ll_index_to_name(nh->rtnh_ifindex))
you might want to use interface color for this?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops
2019-09-26 16:07 ` Stephen Hemminger
@ 2019-09-26 18:16 ` Julien Fortin
0 siblings, 0 replies; 5+ messages in thread
From: Julien Fortin @ 2019-09-26 18:16 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, Roopa Prabhu, dsahern
On Thu, Sep 26, 2019 at 6:07 PM Stephen Hemminger
<stephen@networkplumber.org> wrote:
>
> On Thu, 26 Sep 2019 17:29:34 +0200
> Julien Fortin <julien@cumulusnetworks.com> wrote:
>
> > + print_string(PRINT_ANY, "dev",
> > + "%s", ll_index_to_name(nh->rtnh_ifindex))
>
> you might want to use interface color for this?
Since this is not part of the existing code, I guess this can be added
in a later patch.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops
2019-09-26 15:29 [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops Julien Fortin
2019-09-26 16:07 ` Stephen Hemminger
@ 2019-10-01 15:14 ` David Ahern
2019-10-01 15:16 ` Julien Fortin
1 sibling, 1 reply; 5+ messages in thread
From: David Ahern @ 2019-10-01 15:14 UTC (permalink / raw)
To: Julien Fortin, netdev; +Cc: roopa
On 9/26/19 9:29 AM, Julien Fortin wrote:
> From: Julien Fortin <julien@cumulusnetworks.com>
>
> print_rta_multipath doesn't support JSON output:
>
> {
> "dst":"27.0.0.13",
> "protocol":"bgp",
> "metric":20,
> "flags":[],
> "gateway":"169.254.0.1"dev uplink-1 weight 1 ,
> "flags":["onlink"],
> "gateway":"169.254.0.1"dev uplink-2 weight 1 ,
> "flags":["onlink"]
> },
>
> since RTA_MULTIPATH has nested objects we should print them
> in a json array.
>
> With the path we have the following output:
>
> {
> "flags": [],
> "dst": "36.0.0.13",
> "protocol": "bgp",
> "metric": 20,
> "nexthops": [
> {
> "weight": 1,
> "flags": [
> "onlink"
> ],
> "gateway": "169.254.0.1",
> "dev": "uplink-1"
> },
> {
> "weight": 1,
> "flags": [
> "onlink"
> ],
> "gateway": "169.254.0.1",
> "dev": "uplink-2"
> }
> ]
> }
>
> Fixes: 663c3cb23103f4 ("iproute: implement JSON and color output")
>
> Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
> ---
> ip/iproute.c | 46 ++++++++++++++++++++++++++++------------------
> 1 file changed, 28 insertions(+), 18 deletions(-)
>
applied to iproute2-next. Thanks
Stephen: I see only 1 place (mdb) that prints devices with color, so
that can be done across all of the commands by a follow up.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops
2019-10-01 15:14 ` David Ahern
@ 2019-10-01 15:16 ` Julien Fortin
0 siblings, 0 replies; 5+ messages in thread
From: Julien Fortin @ 2019-10-01 15:16 UTC (permalink / raw)
To: David Ahern; +Cc: netdev, Roopa Prabhu
Thanks David!
On Tue, Oct 1, 2019 at 5:14 PM David Ahern <dsahern@gmail.com> wrote:
>
> On 9/26/19 9:29 AM, Julien Fortin wrote:
> > From: Julien Fortin <julien@cumulusnetworks.com>
> >
> > print_rta_multipath doesn't support JSON output:
> >
> > {
> > "dst":"27.0.0.13",
> > "protocol":"bgp",
> > "metric":20,
> > "flags":[],
> > "gateway":"169.254.0.1"dev uplink-1 weight 1 ,
> > "flags":["onlink"],
> > "gateway":"169.254.0.1"dev uplink-2 weight 1 ,
> > "flags":["onlink"]
> > },
> >
> > since RTA_MULTIPATH has nested objects we should print them
> > in a json array.
> >
> > With the path we have the following output:
> >
> > {
> > "flags": [],
> > "dst": "36.0.0.13",
> > "protocol": "bgp",
> > "metric": 20,
> > "nexthops": [
> > {
> > "weight": 1,
> > "flags": [
> > "onlink"
> > ],
> > "gateway": "169.254.0.1",
> > "dev": "uplink-1"
> > },
> > {
> > "weight": 1,
> > "flags": [
> > "onlink"
> > ],
> > "gateway": "169.254.0.1",
> > "dev": "uplink-2"
> > }
> > ]
> > }
> >
> > Fixes: 663c3cb23103f4 ("iproute: implement JSON and color output")
> >
> > Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
> > ---
> > ip/iproute.c | 46 ++++++++++++++++++++++++++++------------------
> > 1 file changed, 28 insertions(+), 18 deletions(-)
> >
>
> applied to iproute2-next. Thanks
>
> Stephen: I see only 1 place (mdb) that prints devices with color, so
> that can be done across all of the commands by a follow up.
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-10-01 15:16 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-26 15:29 [PATCH iproute2(-next) v2 1/1] ip: fix ip route show json output for multipath nexthops Julien Fortin
2019-09-26 16:07 ` Stephen Hemminger
2019-09-26 18:16 ` Julien Fortin
2019-10-01 15:14 ` David Ahern
2019-10-01 15:16 ` Julien Fortin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).