ipv4: nexthop version of fib_info_nh_uses_dev
Similar to the last path, need to fix fib_info_nh_uses_dev for
external nexthops to avoid referencing multiple nh_grp structs.
Move the device check in fib_info_nh_uses_dev to a helper and
create a nexthop version that is called if the fib_info uses an
external nexthop.
Fixes: 430a049190
("nexthop: Add support for nexthop groups")
Signed-off-by: David Ahern <dsahern@gmail.com>
Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
af7888ad9e
commit
1fd1c768f3
@@ -266,6 +266,31 @@ struct fib_nh_common *nexthop_get_nhc_lookup(const struct nexthop *nh,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline bool nexthop_uses_dev(const struct nexthop *nh,
|
||||
const struct net_device *dev)
|
||||
{
|
||||
struct nh_info *nhi;
|
||||
|
||||
if (nh->is_group) {
|
||||
struct nh_group *nhg = rcu_dereference(nh->nh_grp);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nhg->num_nh; i++) {
|
||||
struct nexthop *nhe = nhg->nh_entries[i].nh;
|
||||
|
||||
nhi = rcu_dereference(nhe->nh_info);
|
||||
if (nhc_l3mdev_matches_dev(&nhi->fib_nhc, dev))
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
nhi = rcu_dereference(nh->nh_info);
|
||||
if (nhc_l3mdev_matches_dev(&nhi->fib_nhc, dev))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline unsigned int fib_info_num_path(const struct fib_info *fi)
|
||||
{
|
||||
if (unlikely(fi->nh))
|
||||
|
Reference in New Issue
Block a user