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

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
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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);
}

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;
	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);
		if (mtu)
			goto out;
+1 −1
Original line number Diff line number Diff line
@@ -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)
		mtu = IPV6_MIN_MTU;

+1 −19
Original line number Diff line number Diff line
@@ -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)
{
	struct inet6_dev *idev;
	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);
	return ip6_dst_mtu_maybe_forward(dst, false);
}
EXPORT_INDIRECT_CALLABLE(ip6_mtu);

+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ static int flow_offload_fill_route(struct flow_offload *flow,
		flow_tuple->mtu = ip_dst_mtu_maybe_forward(dst, true);
		break;
	case NFPROTO_IPV6:
		flow_tuple->mtu = ip6_dst_mtu_forward(dst);
		flow_tuple->mtu = ip6_dst_mtu_maybe_forward(dst, true);
		break;
	}