summaryrefslogtreecommitdiff
path: root/sys/netinet/tcp_output.c
diff options
context:
space:
mode:
authorNiels Provos <provos@cvs.openbsd.org>2001-06-23 03:10:22 +0000
committerNiels Provos <provos@cvs.openbsd.org>2001-06-23 03:10:22 +0000
commitf13e0c71f1aae8d4d488fcfdd478d86e9ce198f1 (patch)
treea8ae9862a393a032c28597319705cd3172bcdf84 /sys/netinet/tcp_output.c
parentea586daa1510e3d7de6d07245280f201186df118 (diff)
fix up mtu for routes and ongoing tcp connection when if mtu changes
from FreeBSD; fixes pr/1878
Diffstat (limited to 'sys/netinet/tcp_output.c')
-rw-r--r--sys/netinet/tcp_output.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index a694cc0886d..37c2419b1ca 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcp_output.c,v 1.37 2001/06/08 03:53:46 angelos Exp $ */
+/* $OpenBSD: tcp_output.c,v 1.38 2001/06/23 03:10:21 provos Exp $ */
/* $NetBSD: tcp_output.c,v 1.16 1997/06/03 16:17:09 kml Exp $ */
/*
@@ -1102,6 +1102,16 @@ out:
tcp_quench(tp->t_inpcb, 0);
return (0);
}
+ if (error == EMSGSIZE) {
+ /*
+ * ip_output() will have already fixed the route
+ * for us. tcp_mtudisc() will, as its last action,
+ * initiate retransmission, so it is important to
+ * not do so here.
+ */
+ tcp_mtudisc(tp->t_inpcb, 0);
+ return (0);
+ }
if ((error == EHOSTUNREACH || error == ENETDOWN)
&& TCPS_HAVERCVDSYN(tp->t_state)) {
tp->t_softerror = error;