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
F150086858: D36867.diff
Sun, Mar 29, 7:01 AM
Unknown Object (File)
Wed, Mar 25, 12:50 AM
Unknown Object (File)
Tue, Mar 24, 6:56 PM
Unknown Object (File)
Wed, Mar 4, 9:21 PM
Unknown Object (File)
Feb 7 2026, 11:18 PM
Unknown Object (File)
Feb 7 2026, 7:16 PM
Unknown Object (File)
Jan 31 2026, 2:44 PM
Unknown Object (File)
Jan 31 2026, 2:26 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 Passed
Unit
No Test Coverage
Build Status
Buildable 47683
Build 44570: arc lint + arc unit