From: David Ahern <dsahern@kernel.org>
To: davem@davemloft.net, netdev@vger.kernel.org
Cc: idosch@mellanox.com, jiri@mellanox.com, saeedm@mellanox.com,
David Ahern <dsahern@gmail.com>
Subject: [PATCH v2 net-next 12/13] net: Add fib_nh_common and update fib_nh and fib6_nh
Date: Wed, 27 Mar 2019 11:23:28 -0700 [thread overview]
Message-ID: <20190327182329.18149-13-dsahern@kernel.org> (raw)
In-Reply-To: <20190327182329.18149-1-dsahern@kernel.org>
From: David Ahern <dsahern@gmail.com>
Add fib_nh_common struct with common nexthop attributes. Convert
fib_nh and fib6_nh to use it. Use macros to move existing
fib_nh_* references to the new nh_common.nhc_*.
Signed-off-by: David Ahern <dsahern@gmail.com>
---
include/net/ip6_fib.h | 10 ++--------
include/net/ip_fib.h | 41 +++++++++++++++++++++++++++++++----------
net/ipv4/fib_semantics.c | 7 ++++++-
net/ipv6/route.c | 3 +++
4 files changed, 42 insertions(+), 19 deletions(-)
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index aff8570725c8..58dbb4e82908 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -19,6 +19,7 @@
#include <linux/notifier.h>
#include <net/dst.h>
#include <net/flow.h>
+#include <net/ip_fib.h>
#include <net/netlink.h>
#include <net/inetpeer.h>
#include <net/fib_notifier.h>
@@ -125,14 +126,7 @@ struct rt6_exception {
#define FIB6_MAX_DEPTH 5
struct fib6_nh {
- struct in6_addr fib_nh_gw6;
- bool fib_nh_has_gw;
- struct net_device *fib_nh_dev;
- struct lwtunnel_state *fib_nh_lws;
-
- unsigned int fib_nh_flags;
- atomic_t fib_nh_upper_bound;
- int fib_nh_weight;
+ struct fib_nh_common nh_common;
};
struct fib6_info {
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 029acd333d29..70548b1a6322 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -76,27 +76,48 @@ struct fnhe_hash_bucket {
#define FNHE_HASH_SIZE (1 << FNHE_HASH_SHIFT)
#define FNHE_RECLAIM_DEPTH 5
+struct fib_nh_common {
+ struct net_device *nhc_dev;
+ int nhc_oif;
+ unsigned int nhc_flags;
+ struct lwtunnel_state *nhc_lwtstate;
+ unsigned char nhc_scope;
+ u8 nhc_family;
+ u8 nhc_has_gw:1,
+ unused:7;
+ union {
+ __be32 ipv4;
+ struct in6_addr ipv6;
+ } nhc_gw;
+
+ int nhc_weight;
+ atomic_t nhc_upper_bound;
+};
+
struct fib_nh {
- struct net_device *fib_nh_dev;
+ struct fib_nh_common nh_common;
struct hlist_node nh_hash;
struct fib_info *nh_parent;
- unsigned int fib_nh_flags;
- unsigned char fib_nh_scope;
-#ifdef CONFIG_IP_ROUTE_MULTIPATH
- int fib_nh_weight;
- atomic_t fib_nh_upper_bound;
-#endif
#ifdef CONFIG_IP_ROUTE_CLASSID
__u32 nh_tclassid;
#endif
- int fib_nh_oif;
- __be32 fib_nh_gw4;
__be32 nh_saddr;
int nh_saddr_genid;
struct rtable __rcu * __percpu *nh_pcpu_rth_output;
struct rtable __rcu *nh_rth_input;
struct fnhe_hash_bucket __rcu *nh_exceptions;
- struct lwtunnel_state *fib_nh_lws;
+#define fib_nh_family nh_common.nhc_family
+#define fib_nh_dev nh_common.nhc_dev
+#define fib_nh_oif nh_common.nhc_oif
+#define fib_nh_flags nh_common.nhc_flags
+#define fib_nh_lws nh_common.nhc_lwtstate
+#define fib_nh_scope nh_common.nhc_scope
+#define fib_nh_family nh_common.nhc_family
+#define fib_nh_has_gw nh_common.nhc_has_gw
+#define fib_nh_gw4 nh_common.nhc_gw.ipv4
+#define fib_nh_gw6 nh_common.nhc_gw.ipv6
+#define fib_nh_weight nh_common.nhc_weight
+#define fib_nh_upper_bound nh_common.nhc_upper_bound
};
/*
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index c1e16b52338b..e9992407863e 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -468,6 +468,8 @@ int fib_nh_init(struct net *net, struct fib_nh *nh,
{
int err = -ENOMEM;
+ nh->fib_nh_family = AF_INET;
+
nh->nh_pcpu_rth_output = alloc_percpu(struct rtable __rcu *);
if (!nh->nh_pcpu_rth_output)
goto err_out;
@@ -490,7 +492,10 @@ int fib_nh_init(struct net *net, struct fib_nh *nh,
}
nh->fib_nh_oif = cfg->fc_oif;
- nh->fib_nh_gw4 = cfg->fc_gw;
+ if (cfg->fc_gw) {
+ nh->fib_nh_gw4 = cfg->fc_gw;
+ nh->fib_nh_has_gw = 1;
+ }
nh->fib_nh_flags = cfg->fc_flags;
#ifdef CONFIG_IP_ROUTE_CLASSID
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 592a07dd8016..b5efcb5eff6c 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2893,6 +2893,8 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
int addr_type;
int err;
+ fib6_nh->fib_nh_family = AF_INET6;
+
err = -ENODEV;
if (cfg->fc_ifindex) {
dev = dev_get_by_index(net, cfg->fc_ifindex);
@@ -2990,6 +2992,7 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
set_dev:
fib6_nh->fib_nh_dev = dev;
+ fib6_nh->fib_nh_oif = dev->ifindex;
err = 0;
out:
if (idev)
--
2.11.0
next prev parent reply other threads:[~2019-03-27 18:38 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-27 18:23 [PATCH v2 net-next 00/13] net: Move fib_nh and fib6_nh to a common struct David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 01/13] ipv4: Define fib_get_nhs when CONFIG_IP_ROUTE_MULTIPATH is disabled David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 02/13] ipv4: Move IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN to helper David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 03/13] ipv4: Create init helper for fib_nh David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 04/13] ipv4: Create cleanup " David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 05/13] ipv6: Create init helper for fib6_nh David Ahern
2019-03-27 22:52 ` Alexei Starovoitov
2019-03-28 0:47 ` David Ahern
2019-03-28 1:30 ` Alexei Starovoitov
2019-03-28 2:05 ` David Ahern
2019-03-28 2:29 ` Alexei Starovoitov
2019-03-28 2:50 ` David Ahern
2019-03-28 3:04 ` Alexei Starovoitov
2019-03-28 2:11 ` David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 06/13] ipv6: Create cleanup " David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 07/13] ipv6: Move gateway checks to a fib6_nh setting David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 08/13] ipv6: Refactor fib6_ignore_linkdown David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 09/13] ipv6: Change rt6_add_nexthop and rt6_nexthop_info to take fib6_nh David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 10/13] ipv4: Rename fib_nh entries David Ahern
2019-03-27 18:23 ` [PATCH v2 net-next 11/13] ipv6: Rename fib6_nh entries David Ahern
2019-03-27 18:23 ` David Ahern [this message]
2019-03-27 18:23 ` [PATCH v2 net-next 13/13] net: Use common nexthop init and release helpers 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=20190327182329.18149-13-dsahern@kernel.org \
--to=dsahern@kernel.org \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=idosch@mellanox.com \
--cc=jiri@mellanox.com \
--cc=netdev@vger.kernel.org \
--cc=saeedm@mellanox.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).