From: David Ahern <dsahern@kernel.org>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org, assogba.emery@gmail.com,
dsahern@gmail.com, David Ahern <dsahern@kernel.org>
Subject: [PATCH RFC net-next 4/8] nexthop: Move nexthop_get_nhc_lookup to nexthop.c
Date: Tue, 9 Jun 2020 21:49:49 -0600 [thread overview]
Message-ID: <20200610034953.28861-5-dsahern@kernel.org> (raw)
In-Reply-To: <20200610034953.28861-1-dsahern@kernel.org>
nexthop_get_nhc_lookup is long enough for an inline and the
a-b checks are going to make it worse. Move to nexthop.c and
in the process refactor so that mpath code reuses single nh
lookup. Prepatory patch for adding active-backup group.
Signed-off-by: David Ahern <dsahern@kernel.org>
---
include/net/nexthop.h | 29 +------------------------
net/ipv4/nexthop.c | 50 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+), 28 deletions(-)
diff --git a/include/net/nexthop.h b/include/net/nexthop.h
index e5122ba78efe..e95800798aa5 100644
--- a/include/net/nexthop.h
+++ b/include/net/nexthop.h
@@ -261,37 +261,10 @@ struct fib_nh_common *nexthop_fib_nhc(struct nexthop *nh, int nhsel)
}
/* called from fib_table_lookup with rcu_lock */
-static inline
struct fib_nh_common *nexthop_get_nhc_lookup(const struct nexthop *nh,
int fib_flags,
const struct flowi4 *flp,
- int *nhsel)
-{
- 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 (fib_lookup_good_nhc(&nhi->fib_nhc, fib_flags, flp)) {
- *nhsel = i;
- return &nhi->fib_nhc;
- }
- }
- } else {
- nhi = rcu_dereference(nh->nh_info);
- if (fib_lookup_good_nhc(&nhi->fib_nhc, fib_flags, flp)) {
- *nhsel = 0;
- return &nhi->fib_nhc;
- }
- }
-
- return NULL;
-}
+ int *nhsel);
static inline bool nexthop_uses_dev(const struct nexthop *nh,
const struct net_device *dev)
diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
index 940f46a7d533..c58ecc86b7a1 100644
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -588,6 +588,56 @@ struct nexthop *nexthop_select_path(struct nexthop *nh, int hash)
}
EXPORT_SYMBOL_GPL(nexthop_select_path);
+static struct fib_nh_common *nhc_lookup_single(const struct nexthop *nh,
+ int fib_flags,
+ const struct flowi4 *flp,
+ int *nhsel)
+{
+ struct nh_info *nhi;
+
+ nhi = rcu_dereference(nh->nh_info);
+ if (fib_lookup_good_nhc(&nhi->fib_nhc, fib_flags, flp)) {
+ *nhsel = 0;
+ return &nhi->fib_nhc;
+ }
+ return NULL;
+}
+
+static struct fib_nh_common *nhc_lookup_mpath(const struct nh_group *nhg,
+ int fib_flags,
+ const struct flowi4 *flp,
+ int *nhsel)
+{
+ struct fib_nh_common *nhc;
+ int i;
+
+ for (i = 0; i < nhg->num_nh; i++) {
+ struct nexthop *nhe = nhg->nh_entries[i].nh;
+
+ nhc = nhc_lookup_single(nhe, fib_flags, flp, nhsel);
+ if (nhc) {
+ *nhsel = i;
+ return nhc;
+ }
+ }
+
+ return NULL;
+}
+
+struct fib_nh_common *nexthop_get_nhc_lookup(const struct nexthop *nh,
+ int fib_flags,
+ const struct flowi4 *flp,
+ int *nhsel)
+{
+ if (nh->is_group) {
+ const struct nh_group *nhg = rcu_dereference(nh->nh_grp);
+
+ return nhc_lookup_mpath(nhg, fib_flags, flp, nhsel);
+ }
+
+ return nhc_lookup_single(nh, fib_flags, flp, nhsel);
+}
+
static int nexthop_fib6_nh_cb(struct nexthop *nh,
int (*cb)(struct fib6_nh *nh, void *arg),
void *arg)
--
2.21.1 (Apple Git-122.3)
next prev parent reply other threads:[~2020-06-10 3:50 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-10 3:49 [PATCH RFC net-next 0/8] nexthop: Add support for active-backup nexthop type David Ahern
2020-06-10 3:49 ` [PATCH RFC net-next 1/8] nexthop: Rename nexthop_free_mpath David Ahern
2020-06-10 3:49 ` [PATCH RFC net-next 2/8] nexthop: Refactor nexthop_select_path David Ahern
2020-06-10 3:49 ` [PATCH RFC net-next 3/8] nexthop: Refactor nexthop_for_each_fib6_nh David Ahern
2020-06-10 3:49 ` David Ahern [this message]
2020-06-10 3:49 ` [PATCH RFC net-next 5/8] nexthop: Move nexthop_uses_dev to nexthop.c David Ahern
2020-06-10 3:49 ` [PATCH RFC net-next 6/8] nexthop: Add primary_only argument to nexthop_for_each_fib6_nh David Ahern
2020-06-10 3:49 ` [PATCH RFC net-next 7/8] nexthop: Add support for active-backup nexthop type David Ahern
2020-06-10 3:49 ` [PATCH RFC net-next 8/8] selftests: Add active-backup nexthop tests David Ahern
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200610034953.28861-5-dsahern@kernel.org \
--to=dsahern@kernel.org \
--cc=assogba.emery@gmail.com \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.