Page MenuHomeFreeBSD

D25000.id72404.diff
No OneTemporary

D25000.id72404.diff

Index: tcp_input.c
===================================================================
--- tcp_input.c
+++ tcp_input.c
@@ -2989,7 +2989,7 @@
*/
tfo_syn = ((tp->t_state == TCPS_SYN_RECEIVED) &&
IS_FASTOPEN(tp->t_flags));
- if ((tlen || (thflags & TH_FIN) || tfo_syn) &&
+ if ((tlen || (thflags & TH_FIN) || (tfo_syn && tlen > 0)) &&
TCPS_HAVERCVDFIN(tp->t_state) == 0) {
tcp_seq save_start = th->th_seq;
tcp_seq save_rnxt = tp->rcv_nxt;
Index: tcp_stacks/bbr.c
===================================================================
--- tcp_stacks/bbr.c
+++ tcp_stacks/bbr.c
@@ -6028,7 +6028,7 @@
* or FIN if seq_out is adding more on and a FIN is present
* (and we are not resending).
*/
- if (th_flags & TH_SYN)
+ if ((th_flags & TH_SYN) && (tp->iss == seq_out))
len++;
if (th_flags & TH_FIN)
len++;
@@ -8369,7 +8369,7 @@
*/
tfo_syn = ((tp->t_state == TCPS_SYN_RECEIVED) &&
IS_FASTOPEN(tp->t_flags));
- if ((tlen || (thflags & TH_FIN) || tfo_syn) &&
+ if ((tlen || (thflags & TH_FIN) || (tfo_syn && tlen > 0)) &&
TCPS_HAVERCVDFIN(tp->t_state) == 0) {
tcp_seq save_start = th->th_seq;
tcp_seq save_rnxt = tp->rcv_nxt;
Index: tcp_stacks/rack.c
===================================================================
--- tcp_stacks/rack.c
+++ tcp_stacks/rack.c
@@ -6237,7 +6237,7 @@
* or FIN if seq_out is adding more on and a FIN is present
* (and we are not resending).
*/
- if (th_flags & TH_SYN)
+ if ((th_flags & TH_SYN) && (seq_out == tp->iss))
len++;
if (th_flags & TH_FIN)
len++;
@@ -6280,6 +6280,7 @@
rsm->usec_orig_send = us_cts;
if (th_flags & TH_SYN) {
/* The data space is one beyond snd_una */
+ rsm->r_flags |= RACK_HAS_SIN;
rsm->r_start = seq_out + 1;
rsm->r_end = rsm->r_start + (len - 1);
} else {
@@ -8724,7 +8725,7 @@
*/
tfo_syn = ((tp->t_state == TCPS_SYN_RECEIVED) &&
IS_FASTOPEN(tp->t_flags));
- if ((tlen || (thflags & TH_FIN) || tfo_syn) &&
+ if ((tlen || (thflags & TH_FIN) || (tfo_syn && tlen > 0)) &&
TCPS_HAVERCVDFIN(tp->t_state) == 0) {
tcp_seq save_start = th->th_seq;
tcp_seq save_rnxt = tp->rcv_nxt;
@@ -12563,8 +12564,10 @@
len = 0;
}
/* Without fast-open there should never be data sent on a SYN */
- if ((flags & TH_SYN) && (!IS_FASTOPEN(tp->t_flags)))
+ if ((flags & TH_SYN) && (!IS_FASTOPEN(tp->t_flags))) {
+ tp->snd_nxt = tp->iss;
len = 0;
+ }
orig_len = len;
if (len <= 0) {
/*
Index: tcp_stacks/tcp_rack.h
===================================================================
--- tcp_stacks/tcp_rack.h
+++ tcp_stacks/tcp_rack.h
@@ -39,6 +39,7 @@
#define RACK_RWND_COLLAPSED 0x0100/* The peer collapsed the rwnd on the segment */
#define RACK_APP_LIMITED 0x0200/* We went app limited after this send */
#define RACK_WAS_ACKED 0x0400/* a RTO undid the ack, but it already had a rtt calc done */
+#define RACK_HAS_SIN 0x0800/* SIN is on this guy */
#define RACK_NUM_OF_RETRANS 3
#define RACK_INITIAL_RTO 1000 /* 1 second in milli seconds */

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 19, 11:55 AM (9 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23924008
Default Alt Text
D25000.id72404.diff (2 KB)

Event Timeline