diff options
-rw-r--r-- | sys/netinet6/icmp6.c | 9 | ||||
-rw-r--r-- | sys/netinet6/ip6_output.c | 9 |
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) |