提交 4c9bcd11 编写于 作者: D David Ahern 提交者: David S. Miller

net: Fix nexthop lookups

Andreas reported breakage adding routes with local nexthops:
$ ip route show table main
...
172.28.0.0/24 dev vnf-xe1p0  proto kernel  scope link  src 172.28.0.16

$ ip route add 10.0.0.0/8 via 172.28.0.32 table 100 dev vnf-xe1p0
RTNETLINK answers: Resource temporarily unavailable

3bfd8472 changed the lookup to use the passed in table but for cases like
this the nexthop is in the local table rather than the passed in table.

Fixes: 3bfd8472 ("net: Use passed in table for nexthop lookups")
Reported-by: NAndreas Schultz <aschultz@tpip.net>
Signed-off-by: NDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 eb4cb851
...@@ -712,9 +712,16 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi, ...@@ -712,9 +712,16 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
err = fib_table_lookup(tbl, &fl4, &res, err = fib_table_lookup(tbl, &fl4, &res,
FIB_LOOKUP_IGNORE_LINKSTATE | FIB_LOOKUP_IGNORE_LINKSTATE |
FIB_LOOKUP_NOREF); FIB_LOOKUP_NOREF);
else
/* on error or if no table given do full lookup. This
* is needed for example when nexthops are in the local
* table rather than the given table
*/
if (!tbl || err) {
err = fib_lookup(net, &fl4, &res, err = fib_lookup(net, &fl4, &res,
FIB_LOOKUP_IGNORE_LINKSTATE); FIB_LOOKUP_IGNORE_LINKSTATE);
}
if (err) { if (err) {
rcu_read_unlock(); rcu_read_unlock();
return err; return err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册