ipv6: Handle all fib6_nh in a nexthop in fib6_info_uses_dev
authorDavid Ahern <dsahern@gmail.com>
Sat, 8 Jun 2019 21:53:27 +0000 (14:53 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 10 Jun 2019 17:44:56 +0000 (10:44 -0700)
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>
net/ipv6/route.c

index d1139ef077cd3c374a1182d0ea2b117f73c9db96..d56e1ff49e4789532dee23d9766fc62992d68a11 100644 (file)
@@ -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;