Module Name: src Committed By: martin Date: Fri Jul 24 07:36:05 UTC 2015
Modified Files: src/sys/netinet [netbsd-6-1]: tcp_input.c tcp_output.c Log Message: Pull up following revision(s) (requested by matt in ticket #1315): sys/netinet/tcp_output.c: revision 1.184 sys/netinet/tcp_input.c: revision 1.343 If we are sending a window probe and there's unacked data in the socket, make sure at least the persist timer is running. Make sure that snd_win doesn't go negative. To generate a diff of this commit: cvs rdiff -u -r1.321 -r1.321.8.1 src/sys/netinet/tcp_input.c cvs rdiff -u -r1.173.8.1 -r1.173.8.2 src/sys/netinet/tcp_output.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet/tcp_input.c diff -u src/sys/netinet/tcp_input.c:1.321 src/sys/netinet/tcp_input.c:1.321.8.1 --- src/sys/netinet/tcp_input.c:1.321 Wed Jan 11 14:39:08 2012 +++ src/sys/netinet/tcp_input.c Fri Jul 24 07:36:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_input.c,v 1.321 2012/01/11 14:39:08 drochner Exp $ */ +/* $NetBSD: tcp_input.c,v 1.321.8.1 2015/07/24 07:36:05 martin Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.321 2012/01/11 14:39:08 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.321.8.1 2015/07/24 07:36:05 martin Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -2719,7 +2719,10 @@ after_listen: tp->t_lastm = NULL; sbdrop(&so->so_snd, acked); tp->t_lastoff -= acked; - tp->snd_wnd -= acked; + if (tp->snd_wnd > acked) + tp->snd_wnd -= acked; + else + tp->snd_wnd = 0; ourfinisacked = 0; } sowwakeup(so); Index: src/sys/netinet/tcp_output.c diff -u src/sys/netinet/tcp_output.c:1.173.8.1 src/sys/netinet/tcp_output.c:1.173.8.2 --- src/sys/netinet/tcp_output.c:1.173.8.1 Mon Nov 3 23:05:59 2014 +++ src/sys/netinet/tcp_output.c Fri Jul 24 07:36:05 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_output.c,v 1.173.8.1 2014/11/03 23:05:59 msaitoh Exp $ */ +/* $NetBSD: tcp_output.c,v 1.173.8.2 2015/07/24 07:36:05 martin Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -135,7 +135,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.173.8.1 2014/11/03 23:05:59 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.173.8.2 2015/07/24 07:36:05 martin Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -1527,14 +1527,24 @@ send: * of retransmit time. */ timer: - if (TCP_TIMER_ISARMED(tp, TCPT_REXMT) == 0 && - ((sack_rxmit && tp->snd_nxt != tp->snd_max) || - tp->snd_nxt != tp->snd_una)) { - if (TCP_TIMER_ISARMED(tp, TCPT_PERSIST)) { - TCP_TIMER_DISARM(tp, TCPT_PERSIST); + if (TCP_TIMER_ISARMED(tp, TCPT_REXMT) == 0) { + if ((sack_rxmit && tp->snd_nxt != tp->snd_max) + || tp->snd_nxt != tp->snd_una) { + if (TCP_TIMER_ISARMED(tp, TCPT_PERSIST)) { + TCP_TIMER_DISARM(tp, TCPT_PERSIST); + tp->t_rxtshift = 0; + } + TCP_TIMER_ARM(tp, TCPT_REXMT, tp->t_rxtcur); + } else if (len == 0 && so->so_snd.sb_cc > 0 + && TCP_TIMER_ISARMED(tp, TCPT_PERSIST) == 0) { + /* + * If we are sending a window probe and there's + * unacked data in the socket, make sure at + * least the persist timer is running. + */ tp->t_rxtshift = 0; + tcp_setpersist(tp); } - TCP_TIMER_ARM(tp, TCPT_REXMT, tp->t_rxtcur); } } else if (SEQ_GT(tp->snd_nxt + len, tp->snd_max))