summaryrefslogtreecommitdiff
path: root/sys/netinet/tcp_timewait.c
diff options
context:
space:
mode:
authorMike Silbersack <silby@FreeBSD.org>2003-11-01 07:30:08 +0000
committerMike Silbersack <silby@FreeBSD.org>2003-11-01 07:30:08 +0000
commit96af9ea52b486a72f98e00eb97ce9fbdf15afe74 (patch)
tree243678db3e842414f07bf976a824feb772294945 /sys/netinet/tcp_timewait.c
parentac8711d28e3377b5e06a31d2c02efa4d563adacd (diff)
Notes
Diffstat (limited to 'sys/netinet/tcp_timewait.c')
-rw-r--r--sys/netinet/tcp_timewait.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index d2a28c841db6..d77ab59b2394 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -1637,6 +1637,7 @@ tcp_twstart(tp)
tw->snd_nxt = tp->snd_nxt;
tw->rcv_nxt = tp->rcv_nxt;
+ tw->iss = tp->iss;
tw->cc_recv = tp->cc_recv;
tw->cc_send = tp->cc_send;
tw->t_starttime = tp->t_starttime;
@@ -1671,6 +1672,24 @@ tcp_twstart(tp)
INP_UNLOCK(inp);
}
+/*
+ * Determine if the ISN we will generate has advanced beyond the last
+ * sequence number used by the previous connection. If so, indicate
+ * that it is safe to recycle this tw socket by returning 1.
+ */
+int
+tcp_twrecycleable(struct tcptw *tw)
+{
+ tcp_seq new_isn = tw->iss;
+
+ new_isn += (ticks - tw->t_starttime) * (ISN_BYTES_PER_SECOND / hz);
+
+ if (SEQ_GT(new_isn, tw->snd_nxt))
+ return 1;
+ else
+ return 0;
+}
+
struct tcptw *
tcp_twclose(struct tcptw *tw, int reuse)
{