Page MenuHomeFreeBSD

tcp: no CC reaction on ECE when SYN is still set in RFC3168 mode.
ClosedPublic

Authored by rscheff on Oct 3 2022, 8:33 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Feb 7, 11:18 PM
Unknown Object (File)
Sat, Feb 7, 7:16 PM
Unknown Object (File)
Sat, Jan 31, 2:44 PM
Unknown Object (File)
Sat, Jan 31, 2:26 PM
Unknown Object (File)
Jan 5 2026, 3:13 PM
Unknown Object (File)
Jan 5 2026, 1:59 PM
Unknown Object (File)
Dec 31 2025, 5:28 AM
Unknown Object (File)
Dec 26 2025, 1:16 PM
Subscribers

Details

Summary

During a simultaneous SYN in RFC3168 mode, while in SYN-SENT and
receiving an ECN SYN (SYN,CWR,ECE), the ECE flag will trigger an
ECN-based congestion control (CC) response - which is premature.
Make sure, that an RFC3168 ECN reaction only occurs on non-SYN
segments.

Test Plan

'''

0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4

+.002 ... 0.07 connect(4, ..., ...) = 0

+.002 > [noecn] SEW 0:0(0) <mss 1460,nop,wscale 6,sackOK,eol,eol>

+0.02 < [noecn] SEW 0:0(0) win 32767 <mss 1050,sackOK,nop,nop,nop,wscale 8>
+.002 > [noecn] SE. 0:0(0) ack 1 <mss 1460,nop,wscale 6,sackOK,eol,eol>

+0.05 < [noecn] SE. 0:0(0) ack 1 win 32767 <mss 1050,sackOK,nop,nop,nop,wscale 8>
+.002 > [noecn] . 1:1(0) ack 1

+.02 < [noecn] . 1:1(0) ack 1 win 256

+1 write(4, ..., 1000) = 1000
// correct - cwnd at initial window, no CWR (congestion window reduced) flag
+.002 > [ect0] P. 1:1001(1000) ack 1

incorrect - ECE from the simultaneous SYN triggers a CC reaction, and this
in turn is signaled using the CWR flag
//+.002 > [ect0] PW. 1:1001(1000) ack 1

'''

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable