diff mbox series

[net-next] net: Move ipv4 set_lwt_redirect helper to lwtunnel

Message ID 20180213164550.1865-1-dsahern@gmail.com
State Changes Requested, archived
Delegated to: David Miller
Headers show
Series [net-next] net: Move ipv4 set_lwt_redirect helper to lwtunnel | expand

Commit Message

David Ahern Feb. 13, 2018, 4:45 p.m. UTC
IPv4 uses set_lwt_redirect to set the lwtunnel redirect functions as
needed. Move it to lwtunnel.h as lwtunnel_set_redirect and change
IPv6 to also use it.

Signed-off-by: David Ahern <dsahern@gmail.com>
---
 include/net/lwtunnel.h | 17 +++++++++++++++++
 net/ipv4/route.c       | 17 ++---------------
 net/ipv6/route.c       |  9 +--------
 3 files changed, 20 insertions(+), 23 deletions(-)

Comments

David Miller Feb. 13, 2018, 7:49 p.m. UTC | #1
From: David Ahern <dsahern@gmail.com>
Date: Tue, 13 Feb 2018 08:45:50 -0800

> @@ -127,6 +127,19 @@ int lwtunnel_output(struct net *net, struct sock *sk, struct sk_buff *skb);
>  int lwtunnel_input(struct sk_buff *skb);
>  int lwtunnel_xmit(struct sk_buff *skb);
>  
> +static inline void lwtunnel_set_redirect(struct dst_entry *dst)
> +{
> +	if (dst->lwtstate) {

This test is new, and doesn't exist in the ipv4 nor the ipv6 code you are
deriving this from.

If it is needed, explain why.

Thank you.
David Ahern Feb. 13, 2018, 7:52 p.m. UTC | #2
On 2/13/18 12:49 PM, David Miller wrote:
> From: David Ahern <dsahern@gmail.com>
> Date: Tue, 13 Feb 2018 08:45:50 -0800
> 
>> @@ -127,6 +127,19 @@ int lwtunnel_output(struct net *net, struct sock *sk, struct sk_buff *skb);
>>  int lwtunnel_input(struct sk_buff *skb);
>>  int lwtunnel_xmit(struct sk_buff *skb);
>>  
>> +static inline void lwtunnel_set_redirect(struct dst_entry *dst)
>> +{
>> +	if (dst->lwtstate) {
> 
> This test is new, and doesn't exist in the ipv4 nor the ipv6 code you are
> deriving this from.
> 
> If it is needed, explain why.

leftover from a previous attempt to further consolidate lwt checks. Will
remove and send a v2.
diff mbox series

Patch

diff --git a/include/net/lwtunnel.h b/include/net/lwtunnel.h
index d747ef975cd8..a27fa15a2f04 100644
--- a/include/net/lwtunnel.h
+++ b/include/net/lwtunnel.h
@@ -127,6 +127,19 @@  int lwtunnel_output(struct net *net, struct sock *sk, struct sk_buff *skb);
 int lwtunnel_input(struct sk_buff *skb);
 int lwtunnel_xmit(struct sk_buff *skb);
 
+static inline void lwtunnel_set_redirect(struct dst_entry *dst)
+{
+	if (dst->lwtstate) {
+		if (lwtunnel_output_redirect(dst->lwtstate)) {
+			dst->lwtstate->orig_output = dst->output;
+			dst->output = lwtunnel_output;
+		}
+		if (lwtunnel_input_redirect(dst->lwtstate)) {
+			dst->lwtstate->orig_input = dst->input;
+			dst->input = lwtunnel_input;
+		}
+	}
+}
 #else
 
 static inline void lwtstate_free(struct lwtunnel_state *lws)
@@ -158,6 +171,10 @@  static inline bool lwtunnel_xmit_redirect(struct lwtunnel_state *lwtstate)
 	return false;
 }
 
+static inline void lwtunnel_set_redirect(struct dst_entry *dst)
+{
+}
+
 static inline unsigned int lwtunnel_headroom(struct lwtunnel_state *lwtstate,
 					     unsigned int mtu)
 {
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 49cc1c1df1ba..b0cfe7085da7 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1644,19 +1644,6 @@  static void ip_del_fnhe(struct fib_nh *nh, __be32 daddr)
 	spin_unlock_bh(&fnhe_lock);
 }
 
-static void set_lwt_redirect(struct rtable *rth)
-{
-	if (lwtunnel_output_redirect(rth->dst.lwtstate)) {
-		rth->dst.lwtstate->orig_output = rth->dst.output;
-		rth->dst.output = lwtunnel_output;
-	}
-
-	if (lwtunnel_input_redirect(rth->dst.lwtstate)) {
-		rth->dst.lwtstate->orig_input = rth->dst.input;
-		rth->dst.input = lwtunnel_input;
-	}
-}
-
 /* called in rcu_read_lock() section */
 static int __mkroute_input(struct sk_buff *skb,
 			   const struct fib_result *res,
@@ -1747,7 +1734,7 @@  static int __mkroute_input(struct sk_buff *skb,
 
 	rt_set_nexthop(rth, daddr, res, fnhe, res->fi, res->type, itag,
 		       do_cache);
-	set_lwt_redirect(rth);
+	lwtunnel_set_redirect(&rth->dst);
 	skb_dst_set(skb, &rth->dst);
 out:
 	err = 0;
@@ -2267,7 +2254,7 @@  static struct rtable *__mkroute_output(const struct fib_result *res,
 	}
 
 	rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0, do_cache);
-	set_lwt_redirect(rth);
+	lwtunnel_set_redirect(&rth->dst);
 
 	return rth;
 }
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index fb2d251c0500..767cccc4bf16 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2669,14 +2669,7 @@  static struct rt6_info *ip6_route_info_create(struct fib6_config *cfg,
 		if (err)
 			goto out;
 		rt->dst.lwtstate = lwtstate_get(lwtstate);
-		if (lwtunnel_output_redirect(rt->dst.lwtstate)) {
-			rt->dst.lwtstate->orig_output = rt->dst.output;
-			rt->dst.output = lwtunnel_output;
-		}
-		if (lwtunnel_input_redirect(rt->dst.lwtstate)) {
-			rt->dst.lwtstate->orig_input = rt->dst.input;
-			rt->dst.input = lwtunnel_input;
-		}
+		lwtunnel_set_redirect(&rt->dst);
 	}
 
 	ipv6_addr_prefix(&rt->rt6i_dst.addr, &cfg->fc_dst, cfg->fc_dst_len);