Refactor nexthop_for_each_fib6_nh moving standalone and group processing
into helpers. Prepatory patch for adding active-backup group.

Signed-off-by: David Ahern <dsah...@kernel.org>
---
 net/ipv4/nexthop.c | 48 +++++++++++++++++++++++++++++++---------------
 1 file changed, 33 insertions(+), 15 deletions(-)

diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
index 7d0a170821f3..940f46a7d533 100644
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -588,34 +588,52 @@ struct nexthop *nexthop_select_path(struct nexthop *nh, 
int hash)
 }
 EXPORT_SYMBOL_GPL(nexthop_select_path);
 
+static int nexthop_fib6_nh_cb(struct nexthop *nh,
+                             int (*cb)(struct fib6_nh *nh, void *arg),
+                             void *arg)
+{
+       struct nh_info *nhi;
+
+       nhi = rcu_dereference_rtnl(nh->nh_info);
+
+       return cb(&nhi->fib6_nh, arg);
+}
+
+static int nexthop_fib6_nhg_cb(struct nh_group *nhg,
+                              int (*cb)(struct fib6_nh *nh, void *arg),
+                              void *arg)
+{
+       int err;
+       int i;
+
+       for (i = 0; i < nhg->num_nh; i++) {
+               struct nh_grp_entry *nhge = &nhg->nh_entries[i];
+               struct nexthop *nh = nhge->nh;
+
+               err = nexthop_fib6_nh_cb(nh, cb, arg);
+               if (err)
+                       return err;
+       }
+
+       return 0;
+}
+
 int nexthop_for_each_fib6_nh(struct nexthop *nh,
                             int (*cb)(struct fib6_nh *nh, void *arg),
                             void *arg)
 {
-       struct nh_info *nhi;
        int err;
 
        if (nh->is_group) {
                struct nh_group *nhg;
-               int i;
 
                nhg = rcu_dereference_rtnl(nh->nh_grp);
-               for (i = 0; i < nhg->num_nh; i++) {
-                       struct nh_grp_entry *nhge = &nhg->nh_entries[i];
-
-                       nhi = rcu_dereference_rtnl(nhge->nh->nh_info);
-                       err = cb(&nhi->fib6_nh, arg);
-                       if (err)
-                               return err;
-               }
+               err = nexthop_fib6_nhg_cb(nhg, cb, arg);
        } else {
-               nhi = rcu_dereference_rtnl(nh->nh_info);
-               err = cb(&nhi->fib6_nh, arg);
-               if (err)
-                       return err;
+               err = nexthop_fib6_nh_cb(nh, cb, arg);
        }
 
-       return 0;
+       return err;
 }
 EXPORT_SYMBOL_GPL(nexthop_for_each_fib6_nh);
 
-- 
2.21.1 (Apple Git-122.3)

Reply via email to