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
F96390538: D36867.diff
Tue, Sep 24, 7:20 PM
F96361130: D36867.id.diff
Tue, Sep 24, 5:03 PM
F96330420: D36867.diff
Tue, Sep 24, 3:19 PM
F96321729: D36867.id111375.diff
Tue, Sep 24, 2:23 PM
Unknown Object (File)
Mon, Sep 23, 4:54 PM
Unknown Object (File)
Mon, Sep 23, 9:19 AM
Unknown Object (File)
Sun, Sep 22, 1:49 AM
Unknown Object (File)
Sat, Sep 21, 1:52 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