On Thu, 14 Nov 2019 06:20:51 -0500 =?utf-
8?b?Q2zDqW1lbnQgJ3d4Y2Fmw6knIEhlcnRsaW5n?= <
[email protected]
> wrote:
> Package: iproute2
> Version: 5.3.0-1
> Severity: normal
> Tags: ipv6 upstream
> 
> `ip route get` is a great tool to lookup how the host will route to a
> specific destination.
> Unfortunately, while many other `ip route` subcommands can use `table
> foo` to work with a specific routing table, `ip route get` can't:
> 
> ```
> # ip route get 62.210.115.205
> 62.210.115.205 via 10.242.10.13 dev tun0 src 10.242.10.14 uid 1000 
>     cache 
> # ip route get 62.210.115.205 table local
> Error: inet prefix is expected rather than "table".
> ```
> 
> It'd be great to be able to use routing tables normally with ip route
> get as with other iproute2 tools
> 
> Thank you

Could you please test the following simple patch:

--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -71,6 +71,7 @@ static void usage(void)
                "                            [ mark NUMBER ] [ vrf NAME ]\n"
                "                            [ uid NUMBER ] [ ipproto PROTOCOL 
]\n"
                "                            [ sport NUMBER ] [ dport NUMBER 
]\n"
+               "                            [ table TABLE_ID ]\n"
                "       ip route { add | del | change | append | replace } 
ROUTE\n"
                "SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX 
]\n"
                "            [ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO 
]\n"
@@ -2044,6 +2045,18 @@ static int iproute_get(int argc, char **argv)
                                invarg("Invalid \"ipproto\" value\n",
                                       *argv);
                        addattr8(&req.n, sizeof(req), RTA_IP_PROTO, ipproto);
+               } else if (matches(*argv, "table") == 0) {
+                       __u32 tid;
+
+                       NEXT_ARG();
+                       if (rtnl_rttable_a2n(&tid, *argv))
+                               invarg("\"table\" value is invalid\n", *argv);
+                       if (tid < 256)
+                               req.r.rtm_table = tid;
+                       else {
+                               req.r.rtm_table = RT_TABLE_UNSPEC;
+                               addattr32(&req.n, sizeof(req), RTA_TABLE, tid);
+                       }
                } else {
                        inet_prefix addr;
 
-- 
Kind regards,
Luca Boccassi

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to