diff options
| author | David Greenman <dg@FreeBSD.org> | 1998-02-26 05:25:39 +0000 | 
|---|---|---|
| committer | David Greenman <dg@FreeBSD.org> | 1998-02-26 05:25:39 +0000 | 
| commit | f498eeeeadb12243c0f968c044b3094ef3da2b5c (patch) | |
| tree | ab0504095b701b662f9a5e551e1770385b0607a6 | |
| parent | 589421d418c4b81cf58d9c38d9d2b78100a7d748 (diff) | |
Notes
| -rw-r--r-- | sys/netinet/tcp_input.c | 34 | ||||
| -rw-r--r-- | sys/netinet/tcp_reass.c | 34 | ||||
| -rw-r--r-- | sys/netinet/tcp_timer.c | 23 | ||||
| -rw-r--r-- | sys/netinet/tcp_var.h | 3 | 
4 files changed, 46 insertions, 48 deletions
| diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index a8c15cdcadaf..24740ef389c7 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -31,7 +31,7 @@   * SUCH DAMAGE.   *   *	@(#)tcp_input.c	8.12 (Berkeley) 5/24/95 - *	$Id: tcp_input.c,v 1.68 1998/01/21 02:05:59 fenner Exp $ + *	$Id: tcp_input.c,v 1.69 1998/01/27 09:15:08 davidg Exp $   */  #include "opt_tcpdebug.h" @@ -82,6 +82,10 @@ static int log_in_vain = 0;  SYSCTL_INT(_net_inet_tcp, OID_AUTO, log_in_vain, CTLFLAG_RW,   	&log_in_vain, 0, ""); +int tcp_delack_enabled = 1; +SYSCTL_INT(_net_inet_tcp, OID_AUTO, delack_enabled, CTLFLAG_RW,  +	&tcp_delack_enabled, 0, ""); +  u_long	tcp_now;  struct inpcbhead tcb;  struct inpcbinfo tcbinfo; @@ -109,7 +113,10 @@ static void	 tcp_xmit_timer __P((struct tcpcb *, int));  	if ((ti)->ti_seq == (tp)->rcv_nxt && \  	    (tp)->seg_next == (struct tcpiphdr *)(tp) && \  	    (tp)->t_state == TCPS_ESTABLISHED) { \ -		tp->t_flags |= TF_DELACK; \ +		if (tcp_delack_enabled) \ +			tp->t_flags |= TF_DELACK; \ +		else \ +			tp->t_flags |= TF_ACKNOW; \  		(tp)->rcv_nxt += (ti)->ti_len; \  		flags = (ti)->ti_flags & TH_FIN; \  		tcpstat.tcps_rcvpack++;\ @@ -558,21 +565,12 @@ findpcb:  			 */  			sbappend(&so->so_rcv, m);  			sorwakeup(so); -#ifdef TCP_ACK_HACK -			/* -			 * If this is a short packet, then ACK now - with Nagel -			 *	congestion avoidance sender won't send more until -			 *	he gets an ACK. -			 */ -			if (tiflags & TH_PUSH) { +			if (tcp_delack_enabled) { +				tp->t_flags |= TF_DELACK; +			} else {  				tp->t_flags |= TF_ACKNOW;  				tcp_output(tp); -			} else { -				tp->t_flags |= TF_DELACK;  			} -#else -			tp->t_flags |= TF_DELACK; -#endif  			return;  		}  	} @@ -697,8 +695,8 @@ findpcb:  			 * segment.  Otherwise must send ACK now in case  			 * the other side is slow starting.  			 */ -			if ((tiflags & TH_FIN) || (ti->ti_len != 0 && -			    in_localaddr(inp->inp_faddr))) +			if (tcp_delack_enabled && ((tiflags & TH_FIN) || (ti->ti_len != 0 && +			    in_localaddr(inp->inp_faddr))))  				tp->t_flags |= (TF_DELACK | TF_NEEDSYN);  			else  				tp->t_flags |= (TF_ACKNOW | TF_NEEDSYN); @@ -834,7 +832,7 @@ findpcb:  			 * If there's data, delay ACK; if there's also a FIN  			 * ACKNOW will be turned on later.  			 */ -			if (ti->ti_len != 0) +			if (tcp_delack_enabled && ti->ti_len != 0)  				tp->t_flags |= TF_DELACK;  			else  				tp->t_flags |= TF_ACKNOW; @@ -1576,7 +1574,7 @@ dodata:							/* XXX */  			 *  Otherwise, since we received a FIN then no  			 *  more input can be expected, send ACK now.  			 */ -			if (tp->t_flags & TF_NEEDSYN) +			if (tcp_delack_enabled && (tp->t_flags & TF_NEEDSYN))  				tp->t_flags |= TF_DELACK;  			else  				tp->t_flags |= TF_ACKNOW; diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index a8c15cdcadaf..24740ef389c7 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -31,7 +31,7 @@   * SUCH DAMAGE.   *   *	@(#)tcp_input.c	8.12 (Berkeley) 5/24/95 - *	$Id: tcp_input.c,v 1.68 1998/01/21 02:05:59 fenner Exp $ + *	$Id: tcp_input.c,v 1.69 1998/01/27 09:15:08 davidg Exp $   */  #include "opt_tcpdebug.h" @@ -82,6 +82,10 @@ static int log_in_vain = 0;  SYSCTL_INT(_net_inet_tcp, OID_AUTO, log_in_vain, CTLFLAG_RW,   	&log_in_vain, 0, ""); +int tcp_delack_enabled = 1; +SYSCTL_INT(_net_inet_tcp, OID_AUTO, delack_enabled, CTLFLAG_RW,  +	&tcp_delack_enabled, 0, ""); +  u_long	tcp_now;  struct inpcbhead tcb;  struct inpcbinfo tcbinfo; @@ -109,7 +113,10 @@ static void	 tcp_xmit_timer __P((struct tcpcb *, int));  	if ((ti)->ti_seq == (tp)->rcv_nxt && \  	    (tp)->seg_next == (struct tcpiphdr *)(tp) && \  	    (tp)->t_state == TCPS_ESTABLISHED) { \ -		tp->t_flags |= TF_DELACK; \ +		if (tcp_delack_enabled) \ +			tp->t_flags |= TF_DELACK; \ +		else \ +			tp->t_flags |= TF_ACKNOW; \  		(tp)->rcv_nxt += (ti)->ti_len; \  		flags = (ti)->ti_flags & TH_FIN; \  		tcpstat.tcps_rcvpack++;\ @@ -558,21 +565,12 @@ findpcb:  			 */  			sbappend(&so->so_rcv, m);  			sorwakeup(so); -#ifdef TCP_ACK_HACK -			/* -			 * If this is a short packet, then ACK now - with Nagel -			 *	congestion avoidance sender won't send more until -			 *	he gets an ACK. -			 */ -			if (tiflags & TH_PUSH) { +			if (tcp_delack_enabled) { +				tp->t_flags |= TF_DELACK; +			} else {  				tp->t_flags |= TF_ACKNOW;  				tcp_output(tp); -			} else { -				tp->t_flags |= TF_DELACK;  			} -#else -			tp->t_flags |= TF_DELACK; -#endif  			return;  		}  	} @@ -697,8 +695,8 @@ findpcb:  			 * segment.  Otherwise must send ACK now in case  			 * the other side is slow starting.  			 */ -			if ((tiflags & TH_FIN) || (ti->ti_len != 0 && -			    in_localaddr(inp->inp_faddr))) +			if (tcp_delack_enabled && ((tiflags & TH_FIN) || (ti->ti_len != 0 && +			    in_localaddr(inp->inp_faddr))))  				tp->t_flags |= (TF_DELACK | TF_NEEDSYN);  			else  				tp->t_flags |= (TF_ACKNOW | TF_NEEDSYN); @@ -834,7 +832,7 @@ findpcb:  			 * If there's data, delay ACK; if there's also a FIN  			 * ACKNOW will be turned on later.  			 */ -			if (ti->ti_len != 0) +			if (tcp_delack_enabled && ti->ti_len != 0)  				tp->t_flags |= TF_DELACK;  			else  				tp->t_flags |= TF_ACKNOW; @@ -1576,7 +1574,7 @@ dodata:							/* XXX */  			 *  Otherwise, since we received a FIN then no  			 *  more input can be expected, send ACK now.  			 */ -			if (tp->t_flags & TF_NEEDSYN) +			if (tcp_delack_enabled && (tp->t_flags & TF_NEEDSYN))  				tp->t_flags |= TF_DELACK;  			else  				tp->t_flags |= TF_ACKNOW; diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index f13f8a1e699a..ac1dedbe84ef 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -31,7 +31,7 @@   * SUCH DAMAGE.   *   *	@(#)tcp_timer.c	8.2 (Berkeley) 5/24/95 - *	$Id: tcp_timer.c,v 1.24 1997/09/16 18:36:06 joerg Exp $ + *	$Id: tcp_timer.c,v 1.25 1998/01/25 04:23:33 eivind Exp $   */  #include "opt_compat.h" @@ -100,18 +100,19 @@ tcp_fasttimo()  	register struct tcpcb *tp;  	int s; -	s = splnet(); - -	for (inp = tcb.lh_first; inp != NULL; inp = inp->inp_list.le_next) { -		if ((tp = (struct tcpcb *)inp->inp_ppcb) && -		    (tp->t_flags & TF_DELACK)) { -			tp->t_flags &= ~TF_DELACK; -			tp->t_flags |= TF_ACKNOW; -			tcpstat.tcps_delack++; -			(void) tcp_output(tp); +	if (tcp_delack_enabled) { +		s = splnet(); +		for (inp = tcb.lh_first; inp != NULL; inp = inp->inp_list.le_next) { +			if ((tp = (struct tcpcb *)inp->inp_ppcb) && +			    (tp->t_flags & TF_DELACK)) { +				tp->t_flags &= ~TF_DELACK; +				tp->t_flags |= TF_ACKNOW; +				tcpstat.tcps_delack++; +				(void) tcp_output(tp); +			}  		} +		splx(s);  	} -	splx(s);  }  /* diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h index e1bc97f1f4a4..71f580739d68 100644 --- a/sys/netinet/tcp_var.h +++ b/sys/netinet/tcp_var.h @@ -31,7 +31,7 @@   * SUCH DAMAGE.   *   *	@(#)tcp_var.h	8.4 (Berkeley) 5/24/95 - * 	$Id: tcp_var.h,v 1.39 1997/04/27 20:01:15 wollman Exp $ + * 	$Id: tcp_var.h,v 1.40 1998/01/27 09:15:12 davidg Exp $   */  #ifndef _NETINET_TCP_VAR_H_ @@ -324,6 +324,7 @@ extern	struct inpcbinfo tcbinfo;  extern	struct tcpstat tcpstat;	/* tcp statistics */  extern	int tcp_mssdflt;	/* XXX */  extern	u_long tcp_now;		/* for RFC 1323 timestamps */ +extern	int tcp_delack_enabled;  void	 tcp_canceltimers __P((struct tcpcb *));  struct tcpcb * | 
