Page MenuHomeFreeBSD
Authored By
nikhilkottoli2005_gmail.com
Thu, Sep 3, 6:42 PM
Size
3 KB
Referenced Files
None
Subscribers
None

rfc9937_packetdrill_test.pkt

// RFC 9937 PRR regression for FreeBSD RACK.
//
// Run this with RACK selected as the default TCP function block with PRR enabled.
//
// The test distinguishes RFC 6937 SSRB from RFC 9937 CRB.
//
// At the second ACK:
// - SND.UNA remains 20001, so it is NOT a SafeACK.
// - exactly one new SMSS is SACKed.
// - RFC 6937 SSRB permits two SMSS.
// - RFC 9937 CRB permits only one SMSS.
//
// Therefore:
// RFC 6937: 21001:22001 and 22001:23001
// RFC 9937: 21001:22001 only.
// Establish connection
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 bind(3, ..., ...) = 0
+0 listen(3, 1) = 0
+0 < S 0:0(0) win 32792 <mss 1000,nop,nop,sackOK,nop,wscale 7>
+0 > S. 0:0(0) ack 1 win 65535 <...>
+0 < . 1:1(0) ack 1 win 32792
+0 accept(3, ..., ...) = 4
// Inflate cwnd
+0 write(4, ..., 20000) = 20000
+0 > . 1:1001(1000) ack 1
+0 > . 1001:2001(1000) ack 1
+0 > . 2001:3001(1000) ack 1
+0 > . 3001:4001(1000) ack 1
+0 > . 4001:5001(1000) ack 1
+0 > . 5001:6001(1000) ack 1
+0 > . 6001:7001(1000) ack 1
+0 > . 7001:8001(1000) ack 1
+0 > . 8001:9001(1000) ack 1
+0 > . 9001:10001(1000) ack 1
+.010 < . 1:1(0) ack 2001 win 65535
+0 < . 1:1(0) ack 3001 win 65535
+0 < . 1:1(0) ack 4001 win 65535
+0 < . 1:1(0) ack 5001 win 65535
+0 < . 1:1(0) ack 6001 win 65535
+0 < . 1:1(0) ack 7001 win 65535
+0 < . 1:1(0) ack 8001 win 65535
+0 < . 1:1(0) ack 9001 win 65535
+0 < . 1:1(0) ack 10001 win 65535
+0 > . 10001:11001(1000) ack 1
+0 > . 11001:12001(1000) ack 1
+0 > . 12001:13001(1000) ack 1
+0 > . 13001:14001(1000) ack 1
+0 > . 14001:15001(1000) ack 1
+0 > . 15001:16001(1000) ack 1
+0 > . 16001:17001(1000) ack 1
+0 > . 17001:18001(1000) ack 1
+0 > . 18001:19001(1000) ack 1
+0 > P. 19001:20001(1000) ack 1
+.010 < . 1:1(0) ack 12001 win 65535
+0 < . 1:1(0) ack 13001 win 65535
+0 < . 1:1(0) ack 14001 win 65535
+0 < . 1:1(0) ack 15001 win 65535
+0 < . 1:1(0) ack 16001 win 65535
+0 < . 1:1(0) ack 17001 win 65535
+0 < . 1:1(0) ack 18001 win 65535
+0 < . 1:1(0) ack 19001 win 65535
+0 < . 1:1(0) ack 20001 win 65535
// Create 20-SMSS flight.
// 20001:32001 is lost.
// 32001:33001 is delivered.
// 33001:40001 is delivered but not yet SACKed.
// First burst
+0 write(4, ..., 10000) = 10000
+0 > . 20001:21001(1000) ack 1
+0 > . 21001:22001(1000) ack 1
+0 > . 22001:23001(1000) ack 1
+0 > . 23001:24001(1000) ack 1
+0 > . 24001:25001(1000) ack 1
+0 > . 25001:26001(1000) ack 1
+0 > . 26001:27001(1000) ack 1
+0 > . 27001:28001(1000) ack 1
+0 > . 28001:29001(1000) ack 1
+0 > P. 29001:30001(1000) ack 1
// Second burst
+0 write(4, ..., 10000) = 10000
+0 > . 30001:31001(1000) ack 1
+0 > . 31001:32001(1000) ack 1
+0 > . 32001:33001(1000) ack 1
+0 > . 33001:34001(1000) ack 1
+0 > . 34001:35001(1000) ack 1
+0 > . 35001:36001(1000) ack 1
+0 > . 36001:37001(1000) ack 1
+0 > . 37001:38001(1000) ack 1
+0 > . 38001:39001(1000) ack 1
+0 > P. 39001:40001(1000) ack 1
// RACK detects the missing data.
// SND.UNA remains 20001.
// 32001:33001 is SACKed.
+.010 < . 1:1(0) ack 20001 win 65535 <nop,nop,sack 32001:33001>
// RACK fast retransmission
+0 > . 20001:21001(1000) ack 1
// Extra unsent data so the socket buffer is NOT fully
// outstanding when recovery kicks in — otherwise
// rack_update_prr's app-limited check zeroes rc_prr_sndcnt
// and none of the CRB/SSRB retransmit logic under test runs.
+0 write(4, ..., 5000) = 5000
// This ACK does NOT advance SND.UNA.
// It newly SACKs exactly one additional SMSS: 34001:35001.
//
// Therefore it is NOT a SafeACK.
//
// RFC 6937 SSRB permits:
// 21001:22001
// 22001:23001
//
// RFC 9937 CRB permits:
// 21001:22001
//
// 22001:23001 is NOT SACKed.
+0 < . 1:1(0) ack 20001 win 65535 <nop,nop,sack 32001:33001 34001:35001>
// First retransmission: both implementations permit this.
+0 > . 21001:22001(1000) ack 1
// Second retransmission:
// RFC 6937: expected
// RFC 9937: must NOT be sent
+0 > . 22001:23001(1000) ack 1

File Metadata

Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38253979
Default Alt Text
rfc9937_packetdrill_test.pkt (3 KB)

Event Timeline