summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_reass.c
diff options
context:
space:
mode:
authorhsu <hsu@FreeBSD.org>2003-03-12 20:27:28 +0000
committerhsu <hsu@FreeBSD.org>2003-03-12 20:27:28 +0000
commite89bff45972f418ac11fe0897158e917ac237bd0 (patch)
tree956077f4fc837b16d5a347f5bb4ae1cc28d09b21 /sys/netinet/tcp_reass.c
parentb2697c9471c911a71c2cbeb1bfed485ea97acb9a (diff)
downloadFreeBSD-src-e89bff45972f418ac11fe0897158e917ac237bd0.zip
FreeBSD-src-e89bff45972f418ac11fe0897158e917ac237bd0.tar.gz
Implement the Limited Transmit algorithm (RFC 3042).
Diffstat (limited to 'sys/netinet/tcp_reass.c')
-rw-r--r--sys/netinet/tcp_reass.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c
index 7717e06..91c90d8 100644
--- a/sys/netinet/tcp_reass.c
+++ b/sys/netinet/tcp_reass.c
@@ -125,6 +125,10 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, drop_synfin, CTLFLAG_RW,
&drop_synfin, 0, "Drop TCP packets with SYN+FIN set");
#endif
+static int tcp_do_rfc3042 = 0;
+SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3042, CTLFLAG_RW,
+ &tcp_do_rfc3042, 0, "Enable RFC 3042 (Limited Transmit)");
+
struct inpcbhead tcb;
#define tcb6 tcb /* for KAME src sync over BSD*'s */
struct inpcbinfo tcbinfo;
@@ -1760,6 +1764,16 @@ trimthenstep6:
if (SEQ_GT(onxt, tp->snd_nxt))
tp->snd_nxt = onxt;
goto drop;
+ } else if (tcp_do_rfc3042) {
+ u_long oldcwnd = tp->snd_cwnd;
+ KASSERT(tp->t_dupacks == 1 ||
+ tp->t_dupacks == 2,
+ ("dupacks not 1 or 2"));
+ tp->snd_cwnd += tp->t_dupacks *
+ tp->t_maxseg;
+ (void) tcp_output(tp);
+ tp->snd_cwnd = oldcwnd;
+ goto drop;
}
} else
tp->t_dupacks = 0;
OpenPOWER on IntegriCloud