diff options
author | Steffen Klassert <steffen.klassert@secunet.com> | 2011-11-23 02:13:31 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-26 14:29:51 -0500 |
commit | 618f9bc74a039da76fa027ac2600c5b785b964c5 (patch) | |
tree | ff69bc14b711c9c9d4c691d2a8c262401d62c8c9 /net/ipv6/route.c | |
parent | ebb762f27fed083cb993a0816393aba4615f6544 (diff) | |
download | lwn-618f9bc74a039da76fa027ac2600c5b785b964c5.tar.gz lwn-618f9bc74a039da76fa027ac2600c5b785b964c5.zip |
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: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r-- | net/ipv6/route.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 76645d7077ff..3399dd326287 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -157,7 +157,9 @@ static struct dst_ops ip6_dst_ops_template = { 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) @@ -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) { - unsigned int mtu = IPV6_MIN_MTU; struct inet6_dev *idev; + unsigned int mtu = dst_metric_raw(dst, RTAX_MTU); + + if (mtu) + return mtu; + + mtu = IPV6_MIN_MTU; rcu_read_lock(); idev = __in6_dev_get(dst->dev); |