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>
This commit is contained in:
parent
ebb762f27f
commit
618f9bc74a
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user