diff options
author | dg <dg@FreeBSD.org> | 1998-02-26 05:25:39 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1998-02-26 05:25:39 +0000 |
commit | abb797303f8a1c9c501930df5cee82ba24bbc3a0 (patch) | |
tree | 2bf0c4efd8152c6a21a48ea92b5cf87806d4eb6c /sys/netinet | |
parent | 0712ea24bf42cbaa2e009b77c3560d846ac133ea (diff) | |
download | FreeBSD-src-abb797303f8a1c9c501930df5cee82ba24bbc3a0.zip FreeBSD-src-abb797303f8a1c9c501930df5cee82ba24bbc3a0.tar.gz |
Changes to support the addition of a new sysctl variable:
net.inet.tcp.delack_enabled
Which defaults to 1 and can be set to 0 to disable TCP delayed-ack
processing (i.e. all acks are immediate).
Diffstat (limited to 'sys/netinet')
-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 a8c15cd..24740ef 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 a8c15cd..24740ef 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 f13f8a1..ac1dedb 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 e1bc97f..71f58073 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 * |