|
@@ -691,6 +691,7 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
|
|
|
}
|
|
|
rcu_read_lock();
|
|
|
{
|
|
|
+ struct fib_table *tbl = NULL;
|
|
|
struct flowi4 fl4 = {
|
|
|
.daddr = nh->nh_gw,
|
|
|
.flowi4_scope = cfg->fc_scope + 1,
|
|
@@ -701,8 +702,16 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
|
|
|
/* It is not necessary, but requires a bit of thinking */
|
|
|
if (fl4.flowi4_scope < RT_SCOPE_LINK)
|
|
|
fl4.flowi4_scope = RT_SCOPE_LINK;
|
|
|
- err = fib_lookup(net, &fl4, &res,
|
|
|
- FIB_LOOKUP_IGNORE_LINKSTATE);
|
|
|
+
|
|
|
+ if (cfg->fc_table)
|
|
|
+ tbl = fib_get_table(net, cfg->fc_table);
|
|
|
+
|
|
|
+ if (tbl)
|
|
|
+ err = fib_table_lookup(tbl, &fl4, &res,
|
|
|
+ FIB_LOOKUP_IGNORE_LINKSTATE);
|
|
|
+ else
|
|
|
+ err = fib_lookup(net, &fl4, &res,
|
|
|
+ FIB_LOOKUP_IGNORE_LINKSTATE);
|
|
|
if (err) {
|
|
|
rcu_read_unlock();
|
|
|
return err;
|