summaryrefslogtreecommitdiff
path: root/sys/netinet6
diff options
context:
space:
mode:
authorJun-ichiro itojun Hagino <itojun@cvs.openbsd.org>2001-03-21 15:01:10 +0000
committerJun-ichiro itojun Hagino <itojun@cvs.openbsd.org>2001-03-21 15:01:10 +0000
commitcb9f7086a2d5fd28bb1f28c39c6d1e71dbdb1f19 (patch)
treee6ca9aa73bb4dd5999a15d19af1a99369b0b816b /sys/netinet6
parent0b50f261d7c4a16817d280e046ccaca125317707 (diff)
set rmx_mtu to L2 interface mtu, instead of 0, on mtudisc timeout.
ip6_output() change is for safety. sync with kame
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/icmp6.c9
-rw-r--r--sys/netinet6/ip6_output.c9
2 files changed, 10 insertions, 8 deletions
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c
index 5ecee10780c..460eb8ef438 100644
--- a/sys/netinet6/icmp6.c
+++ b/sys/netinet6/icmp6.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: icmp6.c,v 1.35 2001/03/20 03:17:44 itojun Exp $ */
-/* $KAME: icmp6.c,v 1.204 2001/03/20 02:44:39 itojun Exp $ */
+/* $OpenBSD: icmp6.c,v 1.36 2001/03/21 15:01:08 itojun Exp $ */
+/* $KAME: icmp6.c,v 1.205 2001/03/21 07:48:57 itojun Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -2912,9 +2912,8 @@ icmp6_mtudisc_timeout(rt, r)
rtrequest((int) RTM_DELETE, (struct sockaddr *)rt_key(rt),
rt->rt_gateway, rt_mask(rt), rt->rt_flags, 0);
} else {
- if ((rt->rt_rmx.rmx_locks & RTV_MTU) == 0) {
- rt->rt_rmx.rmx_mtu = 0;
- }
+ if ((rt->rt_rmx.rmx_locks & RTV_MTU) == 0)
+ rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu;
}
}
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c
index 84617be1f87..02aa5c8e617 100644
--- a/sys/netinet6/ip6_output.c
+++ b/sys/netinet6/ip6_output.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: ip6_output.c,v 1.26 2001/03/13 03:35:15 itojun Exp $ */
-/* $KAME: ip6_output.c,v 1.169 2001/03/13 03:10:12 itojun Exp $ */
+/* $OpenBSD: ip6_output.c,v 1.27 2001/03/21 15:01:09 itojun Exp $ */
+/* $KAME: ip6_output.c,v 1.171 2001/03/21 07:30:48 itojun Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -809,7 +809,7 @@ skip_ipsec2:;
u_int32_t ifmtu = nd_ifinfo[ifp->if_index].linkmtu;
mtu = ro_pmtu->ro_rt->rt_rmx.rmx_mtu;
- if (mtu > ifmtu) {
+ if (mtu > ifmtu || mtu == 0) {
/*
* The MTU on the route is larger than the MTU on
* the interface! This shouldn't happen, unless the
@@ -817,6 +817,9 @@ skip_ipsec2:;
* interface was brought up. Change the MTU in the
* route to match the interface MTU (as long as the
* field isn't locked).
+ *
+ * if MTU on the route is 0, we need to fix the MTU.
+ * this case happens with path MTU discovery timeouts.
*/
mtu = ifmtu;
if ((ro_pmtu->ro_rt->rt_rmx.rmx_locks & RTV_MTU) == 0)