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

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
...@@ -205,12 +205,7 @@ dst_feature(const struct dst_entry *dst, u32 feature) ...@@ -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 */
......
...@@ -827,7 +827,9 @@ static unsigned int dn_dst_default_advmss(const struct dst_entry *dst) ...@@ -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)
......
...@@ -1816,7 +1816,12 @@ static unsigned int ipv4_default_advmss(const struct dst_entry *dst) ...@@ -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 ...@@ -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)
......
...@@ -157,7 +157,9 @@ static struct dst_ops ip6_dst_ops_template = { ...@@ -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) ...@@ -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);
......
...@@ -2384,7 +2384,9 @@ static unsigned int xfrm_default_advmss(const struct dst_entry *dst) ...@@ -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)
......
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