aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet/dn_route.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/decnet/dn_route.c')
-rw-r--r--net/decnet/dn_route.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index b8a5c0515be8..5e636365d33c 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -111,6 +111,7 @@ static unsigned long dn_rt_deadline;
111static int dn_dst_gc(struct dst_ops *ops); 111static int dn_dst_gc(struct dst_ops *ops);
112static struct dst_entry *dn_dst_check(struct dst_entry *, __u32); 112static struct dst_entry *dn_dst_check(struct dst_entry *, __u32);
113static unsigned int dn_dst_default_advmss(const struct dst_entry *dst); 113static unsigned int dn_dst_default_advmss(const struct dst_entry *dst);
114static unsigned int dn_dst_default_mtu(const struct dst_entry *dst);
114static struct dst_entry *dn_dst_negative_advice(struct dst_entry *); 115static struct dst_entry *dn_dst_negative_advice(struct dst_entry *);
115static void dn_dst_link_failure(struct sk_buff *); 116static void dn_dst_link_failure(struct sk_buff *);
116static void dn_dst_update_pmtu(struct dst_entry *dst, u32 mtu); 117static void dn_dst_update_pmtu(struct dst_entry *dst, u32 mtu);
@@ -131,6 +132,7 @@ static struct dst_ops dn_dst_ops = {
131 .gc = dn_dst_gc, 132 .gc = dn_dst_gc,
132 .check = dn_dst_check, 133 .check = dn_dst_check,
133 .default_advmss = dn_dst_default_advmss, 134 .default_advmss = dn_dst_default_advmss,
135 .default_mtu = dn_dst_default_mtu,
134 .negative_advice = dn_dst_negative_advice, 136 .negative_advice = dn_dst_negative_advice,
135 .link_failure = dn_dst_link_failure, 137 .link_failure = dn_dst_link_failure,
136 .update_pmtu = dn_dst_update_pmtu, 138 .update_pmtu = dn_dst_update_pmtu,
@@ -803,6 +805,11 @@ static unsigned int dn_dst_default_advmss(const struct dst_entry *dst)
803 return dn_mss_from_pmtu(dst->dev, dst_mtu(dst)); 805 return dn_mss_from_pmtu(dst->dev, dst_mtu(dst));
804} 806}
805 807
808static unsigned int dn_dst_default_mtu(const struct dst_entry *dst)
809{
810 return dst->dev->mtu;
811}
812
806static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res) 813static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res)
807{ 814{
808 struct dn_fib_info *fi = res->fi; 815 struct dn_fib_info *fi = res->fi;
@@ -825,8 +832,7 @@ static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res)
825 rt->dst.neighbour = n; 832 rt->dst.neighbour = n;
826 } 833 }
827 834
828 if (dst_metric(&rt->dst, RTAX_MTU) == 0 || 835 if (dst_metric(&rt->dst, RTAX_MTU) > rt->dst.dev->mtu)
829 dst_metric(&rt->dst, RTAX_MTU) > rt->dst.dev->mtu)
830 dst_metric_set(&rt->dst, RTAX_MTU, rt->dst.dev->mtu); 836 dst_metric_set(&rt->dst, RTAX_MTU, rt->dst.dev->mtu);
831 metric = dst_metric_raw(&rt->dst, RTAX_ADVMSS); 837 metric = dst_metric_raw(&rt->dst, RTAX_ADVMSS);
832 if (metric) { 838 if (metric) {