Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 618f9bc7 authored by Steffen Klassert's avatar Steffen Klassert Committed by David S. Miller
Browse files

net: Move mtu handling down to the protocol depended handlers



We move all mtu handling from dst_mtu() down to the protocol
layer. So each protocol can implement the mtu handling in
a different manner.

Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ebb762f2
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
@@ -205,12 +205,7 @@ dst_feature(const struct dst_entry *dst, u32 feature)


static inline u32 dst_mtu(const struct dst_entry *dst)
static inline u32 dst_mtu(const struct dst_entry *dst)
{
{
	u32 mtu = dst_metric_raw(dst, RTAX_MTU);
	return dst->ops->mtu(dst);

	if (!mtu)
		mtu = dst->ops->mtu(dst);

	return mtu;
}
}


/* RTT metrics are stored in milliseconds for user ABI, but used as jiffies */
/* RTT metrics are stored in milliseconds for user ABI, but used as jiffies */
+3 −1
Original line number Original line Diff line number Diff line
@@ -827,7 +827,9 @@ static unsigned int dn_dst_default_advmss(const struct dst_entry *dst)


static unsigned int dn_dst_mtu(const struct dst_entry *dst)
static unsigned int dn_dst_mtu(const struct dst_entry *dst)
{
{
	return dst->dev->mtu;
	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);

	return mtu ? : dst->dev->mtu;
}
}


static struct neighbour *dn_dst_neigh_lookup(const struct dst_entry *dst, const void *daddr)
static struct neighbour *dn_dst_neigh_lookup(const struct dst_entry *dst, const void *daddr)
+9 −2
Original line number Original line Diff line number Diff line
@@ -1816,7 +1816,12 @@ static unsigned int ipv4_default_advmss(const struct dst_entry *dst)


static unsigned int ipv4_mtu(const struct dst_entry *dst)
static unsigned int ipv4_mtu(const struct dst_entry *dst)
{
{
	unsigned int mtu = dst->dev->mtu;
	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);

	if (mtu)
		return mtu;

	mtu = dst->dev->mtu;


	if (unlikely(dst_metric_locked(dst, RTAX_MTU))) {
	if (unlikely(dst_metric_locked(dst, RTAX_MTU))) {
		const struct rtable *rt = (const struct rtable *) dst;
		const struct rtable *rt = (const struct rtable *) dst;
@@ -2757,7 +2762,9 @@ static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 coo


static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst)
static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst)
{
{
	return dst->dev->mtu;
	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);

	return mtu ? : dst->dev->mtu;
}
}


static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)
static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)
+9 −2
Original line number Original line Diff line number Diff line
@@ -157,7 +157,9 @@ static struct dst_ops ip6_dst_ops_template = {


static unsigned int ip6_blackhole_mtu(const struct dst_entry *dst)
static unsigned int ip6_blackhole_mtu(const struct dst_entry *dst)
{
{
	return dst->dev->mtu;
	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);

	return mtu ? : dst->dev->mtu;
}
}


static void ip6_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)
static void ip6_rt_blackhole_update_pmtu(struct dst_entry *dst, u32 mtu)
@@ -1043,8 +1045,13 @@ static unsigned int ip6_default_advmss(const struct dst_entry *dst)


static unsigned int ip6_mtu(const struct dst_entry *dst)
static unsigned int ip6_mtu(const struct dst_entry *dst)
{
{
	unsigned int mtu = IPV6_MIN_MTU;
	struct inet6_dev *idev;
	struct inet6_dev *idev;
	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);

	if (mtu)
		return mtu;

	mtu = IPV6_MIN_MTU;


	rcu_read_lock();
	rcu_read_lock();
	idev = __in6_dev_get(dst->dev);
	idev = __in6_dev_get(dst->dev);
+3 −1
Original line number Original line Diff line number Diff line
@@ -2384,7 +2384,9 @@ static unsigned int xfrm_default_advmss(const struct dst_entry *dst)


static unsigned int xfrm_mtu(const struct dst_entry *dst)
static unsigned int xfrm_mtu(const struct dst_entry *dst)
{
{
	return dst_mtu(dst->path);
	unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);

	return mtu ? : dst_mtu(dst->path);
}
}


static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst, const void *daddr)
static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst, const void *daddr)