aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ahern <dsahern@gmail.com>2019-06-08 14:53:27 -0700
committerDavid S. Miller <davem@davemloft.net>2019-06-10 10:44:56 -0700
commit2c170e075375f7421a8007d3993f55f3eb89760b (patch)
treef1b9007a86200e92feaf4dcfd29aa921f3ddc15c
parentipv6: Handle all fib6_nh in a nexthop in rt6_nlmsg_size (diff)
downloadlinux-dev-2c170e075375f7421a8007d3993f55f3eb89760b.tar.xz
linux-dev-2c170e075375f7421a8007d3993f55f3eb89760b.zip
ipv6: Handle all fib6_nh in a nexthop in fib6_info_uses_dev
Add a hook in fib6_info_uses_dev to handle nexthop struct in a fib6_info. Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv6/route.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index d1139ef077cd..d56e1ff49e47 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -5190,9 +5190,27 @@ nla_put_failure:
return -EMSGSIZE;
}
+static int fib6_info_nh_uses_dev(struct fib6_nh *nh, void *arg)
+{
+ const struct net_device *dev = arg;
+
+ if (nh->fib_nh_dev == dev)
+ return 1;
+
+ return 0;
+}
+
static bool fib6_info_uses_dev(const struct fib6_info *f6i,
const struct net_device *dev)
{
+ if (f6i->nh) {
+ struct net_device *_dev = (struct net_device *)dev;
+
+ return !!nexthop_for_each_fib6_nh(f6i->nh,
+ fib6_info_nh_uses_dev,
+ _dev);
+ }
+
if (f6i->fib6_nh->fib_nh_dev == dev)
return true;