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
signature.asc
Description: This is a digitally signed message part

