net: Move ipv4 set_lwt_redirect helper to lwtunnel
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> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
64da58528b
commit
9942895b5e
|
@ -127,6 +127,17 @@ 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 (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 +169,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)
|
||||
{
|
||||
|
|
|
@ -1645,19 +1645,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,
|
||||
|
@ -1748,7 +1735,7 @@ rt_cache:
|
|||
|
||||
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 @@ add:
|
|||
}
|
||||
|
||||
rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0, do_cache);
|
||||
set_lwt_redirect(rth);
|
||||
lwtunnel_set_redirect(&rth->dst);
|
||||
|
||||
return rth;
|
||||
}
|
||||
|
|
|
@ -2671,14 +2671,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);
|
||||
|
|
Loading…
Reference in New Issue