SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3517bis, CTLFLAG_RW,
&tcp_do_rfc3517bis, 0, "Enable RFC3517 update");
+int tcp_rfc3517bis_rxt = 0;
+SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3517bis_rxt, CTLFLAG_RW,
+ &tcp_rfc3517bis_rxt, 0, "Enable RFC3517 retransmit update");
+
SYSCTL_NODE(_net_inet_tcp, OID_AUTO, reass, CTLFLAG_RW, 0,
"TCP Segment Reassembly Queue");
tp->snd_cwnd += tp->t_maxseg *
(tp->t_dupacks - tp->snd_limited);
} else if (tcp_do_rfc3517bis && TCP_DO_SACK(tp)) {
- if (tcp_sack_islost(&tp->scb, tp->snd_una))
+ if (tcp_rfc3517bis_rxt &&
+ tcp_sack_islost(&tp->scb, tp->snd_una))
goto fastretransmit;
if (tcp_do_limitedtransmit) {
/* outstanding data */
int bytes_sacked = 0;
int rxtthresh_bytes;
- if (tcp_do_rfc3517bis)
+ /*
+ * XXX
+ * The RFC3517bis recommends to reduce the byte threshold.
+ * However, it will cause extra spurious retransmit if
+ * segments are reordered. Before certain DupThresh adaptive
+ * algorithm is implemented, we don't reduce the byte
+ * threshold (tcp_rfc3517bis_rxt is off by default).
+ */
+ if (tcp_do_rfc3517bis && tcp_rfc3517bis_rxt)
rxtthresh_bytes = (rxtthresh - 1) * maxseg;
else
rxtthresh_bytes = rxtthresh * maxseg;
extern int tcp_do_rescuesack;
extern int tcp_aggressive_rescuesack;
extern int tcp_do_rfc3517bis;
+extern int tcp_rfc3517bis_rxt;
extern int tcp_aggregate_acks;
extern int tcp_eifel_rtoinc;