From: David Ahern <dsah...@gmail.com> Change fib_check_nh to take net, table and scope as input arguments over struct fib_config and export for use by nexthop code.
Signed-off-by: David Ahern <dsah...@gmail.com> --- include/net/ip_fib.h | 2 ++ net/ipv4/fib_semantics.c | 18 +++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index a4a129344098..19012f3ed501 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h @@ -400,6 +400,8 @@ int fib_sync_up(struct net_device *dev, unsigned int nh_flags); int fib_multipath_hash(const struct net *net, const struct flowi4 *fl4, const struct sk_buff *skb, struct flow_keys *flkeys); #endif +int fib_check_nh(struct net *net, struct fib_nh *nh, u32 table, u8 scope, + struct netlink_ext_ack *extack); bool fib_good_nh(const struct fib_nh *nh); void fib_select_multipath(struct fib_result *res, int hash); void fib_select_path(struct net *net, struct fib_result *res, diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index c034d0adf590..9f8126debba5 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c @@ -777,21 +777,19 @@ bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi) * | * |-> {local prefix} (terminal node) */ -static int fib_check_nh(struct fib_config *cfg, struct fib_nh *nh, - struct netlink_ext_ack *extack) +int fib_check_nh(struct net *net, struct fib_nh *nh, u32 table, u8 scope, + struct netlink_ext_ack *extack) { int err = 0; - struct net *net; struct net_device *dev; - net = cfg->fc_nlinfo.nl_net; if (nh->nh_gw) { struct fib_result res; if (nh->nh_flags & RTNH_F_ONLINK) { unsigned int addr_type; - if (cfg->fc_scope >= RT_SCOPE_LINK) { + if (scope >= RT_SCOPE_LINK) { NL_SET_ERR_MSG(extack, "Nexthop has invalid scope"); return -EINVAL; @@ -822,7 +820,7 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_nh *nh, struct fib_table *tbl = NULL; struct flowi4 fl4 = { .daddr = nh->nh_gw, - .flowi4_scope = cfg->fc_scope + 1, + .flowi4_scope = scope + 1, .flowi4_oif = nh->nh_oif, .flowi4_iif = LOOPBACK_IFINDEX, }; @@ -831,8 +829,8 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_nh *nh, if (fl4.flowi4_scope < RT_SCOPE_LINK) fl4.flowi4_scope = RT_SCOPE_LINK; - if (cfg->fc_table) - tbl = fib_get_table(net, cfg->fc_table); + if (table) + tbl = fib_get_table(net, table); if (tbl) err = fib_table_lookup(tbl, &fl4, &res, @@ -1221,7 +1219,9 @@ struct fib_info *fib_create_info(struct fib_config *cfg, int linkdown = 0; change_nexthops(fi) { - err = fib_check_nh(cfg, nexthop_nh, extack); + err = fib_check_nh(cfg->fc_nlinfo.nl_net, nexthop_nh, + cfg->fc_table, cfg->fc_scope, + extack); if (err != 0) goto failure; if (nexthop_nh->nh_flags & RTNH_F_LINKDOWN) -- 2.11.0