Commit 427faee1 authored by Vadim Fedorenko's avatar Vadim Fedorenko Committed by David S. Miller

net: ipv6: introduce ip6_dst_mtu_maybe_forward

Replace ip6_dst_mtu_forward with ip6_dst_mtu_maybe_forward and
reuse this code in ip6_mtu. Actually these two functions were
almost duplicates, this change will simplify the maintaince of
mtu calculation code.
Signed-off-by: default avatarVadim Fedorenko <vfedorenko@novek.ru>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7c804e91
...@@ -316,12 +316,13 @@ static inline bool rt6_duplicate_nexthop(struct fib6_info *a, struct fib6_info * ...@@ -316,12 +316,13 @@ static inline bool rt6_duplicate_nexthop(struct fib6_info *a, struct fib6_info *
!lwtunnel_cmp_encap(nha->fib_nh_lws, nhb->fib_nh_lws); !lwtunnel_cmp_encap(nha->fib_nh_lws, nhb->fib_nh_lws);
} }
static inline unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst) static inline unsigned int ip6_dst_mtu_maybe_forward(const struct dst_entry *dst,
bool forwarding)
{ {
struct inet6_dev *idev; struct inet6_dev *idev;
unsigned int mtu; unsigned int mtu;
if (dst_metric_locked(dst, RTAX_MTU)) { if (!forwarding || dst_metric_locked(dst, RTAX_MTU)) {
mtu = dst_metric_raw(dst, RTAX_MTU); mtu = dst_metric_raw(dst, RTAX_MTU);
if (mtu) if (mtu)
goto out; goto out;
......
...@@ -607,7 +607,7 @@ int ip6_forward(struct sk_buff *skb) ...@@ -607,7 +607,7 @@ int ip6_forward(struct sk_buff *skb)
} }
} }
mtu = ip6_dst_mtu_forward(dst); mtu = ip6_dst_mtu_maybe_forward(dst, true);
if (mtu < IPV6_MIN_MTU) if (mtu < IPV6_MIN_MTU)
mtu = IPV6_MIN_MTU; mtu = IPV6_MIN_MTU;
......
...@@ -3201,25 +3201,7 @@ static unsigned int ip6_default_advmss(const struct dst_entry *dst) ...@@ -3201,25 +3201,7 @@ static unsigned int ip6_default_advmss(const struct dst_entry *dst)
INDIRECT_CALLABLE_SCOPE unsigned int ip6_mtu(const struct dst_entry *dst) INDIRECT_CALLABLE_SCOPE unsigned int ip6_mtu(const struct dst_entry *dst)
{ {
struct inet6_dev *idev; return ip6_dst_mtu_maybe_forward(dst, false);
unsigned int mtu;
mtu = dst_metric_raw(dst, RTAX_MTU);
if (mtu)
goto out;
mtu = IPV6_MIN_MTU;
rcu_read_lock();
idev = __in6_dev_get(dst->dev);
if (idev)
mtu = idev->cnf.mtu6;
rcu_read_unlock();
out:
mtu = min_t(unsigned int, mtu, IP6_MAX_MTU);
return mtu - lwtunnel_headroom(dst->lwtstate, mtu);
} }
EXPORT_INDIRECT_CALLABLE(ip6_mtu); EXPORT_INDIRECT_CALLABLE(ip6_mtu);
......
...@@ -99,7 +99,7 @@ static int flow_offload_fill_route(struct flow_offload *flow, ...@@ -99,7 +99,7 @@ static int flow_offload_fill_route(struct flow_offload *flow,
flow_tuple->mtu = ip_dst_mtu_maybe_forward(dst, true); flow_tuple->mtu = ip_dst_mtu_maybe_forward(dst, true);
break; break;
case NFPROTO_IPV6: case NFPROTO_IPV6:
flow_tuple->mtu = ip6_dst_mtu_forward(dst); flow_tuple->mtu = ip6_dst_mtu_maybe_forward(dst, true);
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment