]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip route: Do not imply pref and ttl-propagate are per nexthop
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 25 Feb 2020 13:12:13 +0000 (08:12 -0500)
committerStephen Hemminger <stephen@networkplumber.org>
Fri, 28 Feb 2020 21:42:59 +0000 (13:42 -0800)
Currently `ip -6 route show` gives us this output:

sharpd@eva ~/i/ip (master)> ip -6 route show
::1 dev lo proto kernel metric 256 pref medium
4:5::6:7 nhid 18 proto static metric 20
        nexthop via fe80::99 dev enp39s0 weight 1
        nexthop via fe80::44 dev enp39s0 weight 1 pref medium

Displaying `pref medium` as the last bit of output implies
that the RTA_PREF is a per nexthop value, when it is infact
a per route piece of data.

Change the output to display RTA_PREF and RTA_TTL_PROPAGATE
before the RTA_MULTIPATH data is shown:

sharpd@eva ~/i/ip (master)> ./ip -6 route show
::1 dev lo proto kernel metric 256 pref medium
4:5::6:7 nhid 18 proto static metric 20 pref medium
        nexthop via fe80::99 dev enp39s0 weight 1
        nexthop via fe80::44 dev enp39s0 weight 1

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Andrea Claudi <aclaudi@redhat.com>
Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
ip/iproute.c

index 93b805c9004d65c1917d94724b79448b4c3cd40b..07c4516943cc9ebe95933138e7af707965f9c6eb 100644 (file)
@@ -933,9 +933,6 @@ int print_route(struct nlmsghdr *n, void *arg)
        if (tb[RTA_IIF] && filter.iifmask != -1)
                print_rta_if(fp, tb[RTA_IIF], "iif");
 
-       if (tb[RTA_MULTIPATH])
-               print_rta_multipath(fp, r, tb[RTA_MULTIPATH]);
-
        if (tb[RTA_PREF])
                print_rt_pref(fp, rta_getattr_u8(tb[RTA_PREF]));
 
@@ -951,6 +948,14 @@ int print_route(struct nlmsghdr *n, void *arg)
                                     propagate ? "enabled" : "disabled");
        }
 
+       if (tb[RTA_MULTIPATH])
+               print_rta_multipath(fp, r, tb[RTA_MULTIPATH]);
+
+       /* If you are adding new route RTA_XXXX then place it above
+        * the RTA_MULTIPATH else it will appear that the last nexthop
+        * in the ECMP has new attributes
+        */
+
        print_string(PRINT_FP, NULL, "\n", NULL);
        close_json_object();
        fflush(fp);