summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Oppermann <andre@FreeBSD.org>2007-05-06 15:23:51 +0000
committerAndre Oppermann <andre@FreeBSD.org>2007-05-06 15:23:51 +0000
commitc5ad39b910a95572b315a4ac1aba06a6529a3dff (patch)
treef7ed2677ffd2a79e7c38d6ee212f3bf8e8968aa4
parent679d9708b63b333167b71ef333f55e6a906aa950 (diff)
Notes
-rw-r--r--sys/netinet/tcp_input.c10
-rw-r--r--sys/netinet/tcp_reass.c10
2 files changed, 12 insertions, 8 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index b390ade6bf68..6f7f86d3a66d 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -1113,16 +1113,18 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
* (the reassembly queue is empty), add the data to
* the socket buffer and note that we need a delayed ack.
* Make sure that the hidden state-flags are also off.
- * Since we check for TCPS_ESTABLISHED above, it can only
+ * Since we check for TCPS_ESTABLISHED first, it can only
* be TH_NEEDSYN.
*/
if (tp->t_state == TCPS_ESTABLISHED &&
+ th->th_seq == tp->rcv_nxt &&
(thflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) == TH_ACK &&
+ tp->snd_nxt == tp->snd_max &&
+ tiwin && tiwin == tp->snd_wnd &&
((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) &&
+ LIST_EMPTY(&tp->t_segq) &&
((to.to_flags & TOF_TS) == 0 ||
- TSTMP_GEQ(to.to_tsval, tp->ts_recent)) &&
- th->th_seq == tp->rcv_nxt && tiwin && tiwin == tp->snd_wnd &&
- tp->snd_nxt == tp->snd_max) {
+ TSTMP_GEQ(to.to_tsval, tp->ts_recent)) ) {
/*
* If last ACK falls within this segment's sequence numbers,
diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c
index b390ade6bf68..6f7f86d3a66d 100644
--- a/sys/netinet/tcp_reass.c
+++ b/sys/netinet/tcp_reass.c
@@ -1113,16 +1113,18 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
* (the reassembly queue is empty), add the data to
* the socket buffer and note that we need a delayed ack.
* Make sure that the hidden state-flags are also off.
- * Since we check for TCPS_ESTABLISHED above, it can only
+ * Since we check for TCPS_ESTABLISHED first, it can only
* be TH_NEEDSYN.
*/
if (tp->t_state == TCPS_ESTABLISHED &&
+ th->th_seq == tp->rcv_nxt &&
(thflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) == TH_ACK &&
+ tp->snd_nxt == tp->snd_max &&
+ tiwin && tiwin == tp->snd_wnd &&
((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) &&
+ LIST_EMPTY(&tp->t_segq) &&
((to.to_flags & TOF_TS) == 0 ||
- TSTMP_GEQ(to.to_tsval, tp->ts_recent)) &&
- th->th_seq == tp->rcv_nxt && tiwin && tiwin == tp->snd_wnd &&
- tp->snd_nxt == tp->snd_max) {
+ TSTMP_GEQ(to.to_tsval, tp->ts_recent)) ) {
/*
* If last ACK falls within this segment's sequence numbers,