Page MenuHomeFreeBSD

tcp: update repeat <SYN,ACK> with latest IP ECN info
ClosedPublic

Authored by rscheff on Oct 4 2022, 3:13 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Dec 12, 5:10 PM
Unknown Object (File)
Mon, Dec 9, 10:35 PM
Unknown Object (File)
Mon, Nov 18, 8:20 AM
Unknown Object (File)
Sun, Nov 17, 9:47 PM
Unknown Object (File)
Sun, Nov 17, 7:22 PM
Unknown Object (File)
Sun, Nov 17, 1:20 PM
Unknown Object (File)
Nov 8 2024, 3:53 AM
Unknown Object (File)
Oct 30 2024, 12:22 PM
Subscribers

Details

Summary

When multiple <SYN> segments are received, update the <SYN,ACK>
sent in response to the latest IP ECN and TCP ECN information.

On retransmitting the <SYN,ACK>, once ECN maxtries are done, not
only disable RFC3168 ECN, but AccECN also.

Test Plan

'''

// Create a listening TCP socket.
0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0.005 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0.005 bind(3, ..., ...) = 0
+0.005 listen(3, 1) = 0

// Establish a TCP connection.
+0.05 <[noecn] SEW 0:0(0) win 65535 <mss 1460, sackOK, eol, eol>
+0.00 >[noecn] SE. 0:0(0) ack 1 win 65535 <...>

+0.95 <[noecn] SEWA 0:0(0) win 65535 <mss 1460, sackOK, eol, eol>
+0.00 >[noecn] SW. 0:0(0) ack 1 win 65535 <...>

+0.95 <[ect0] SEWA 0:0(0) win 65535 <mss 1460, sackOK, eol, eol>
+0.00 >[noecn] SA. 0:0(0) ack 1 win 65535 <...>

+0.95 <[ect1] SEWA 0:0(0) win 65535 <mss 1460, sackOK, eol, eol>
+0.00 >[noecn] SEW. 0:0(0) ack 1 win 65535 <...>

+0.95 <[ce] SEWA 0:0(0) win 65535 <mss 1460, sackOK, eol, eol>
+0.00 >[noecn] SWA. 0:0(0) ack 1 win 65535 <...>

RTO 1 (AccECN)
+.2~+1.5 >[noecn] SWA. 0:0(0) ack 1 win 65535 <...>
RTO 2 (no ECN)
+.4~+3.0 >[noecn] S. 0:0(0) ack 1 win 65535 <...>

+0.95 <[noecn] SEW 0:0(0) win 65535 <mss 1460, sackOK, eol, eol>
// once fallen back to non-ECN, keep ECN disabled
+0.00 >[noecn] S. 0:0(0) ack 1 win 65535 <...>

RTO 1
+0.2~+1.5 >[noecn] S. 0:0(0) ack 1 win 65535 <...>
RTO 2
+0.4~+3.0 >[noecn] S. 0:0(0) ack 1 win 65535 <...>

'''

Diff Detail

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