1// SPDX-License-Identifier: GPL-2.0 2// Test PRR-slowstart implementation. 3// In this variant we test a simple case where in-flight == ssthresh 4// all the way through recovery, so during fast recovery we send one segment 5// for each segment SACKed/ACKed. 6 7// Set up config. 8`./defaults.sh` 9 10// Establish a connection. 11 0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 12 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 13 +0 bind(3, ..., ...) = 0 14 +0 listen(3, 1) = 0 15 16 +.1 < S 0:0(0) win 32792 <mss 1000,sackOK,nop,nop,nop,wscale 7> 17 +0 > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8> 18// RTT 100ms 19 +.1 < . 1:1(0) ack 1 win 320 20 +0 accept(3, ..., ...) = 4 21 22// Send 10 data segments. 23 +0 write(4, ..., 10000) = 10000 24 +0 > P. 1:10001(10000) ack 1 25 26// Lost packet 1:1001. 27 +.11 < . 1:1(0) ack 1 win 320 <sack 1001:2001,nop,nop> 28 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:3001,nop,nop> 29 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:4001,nop,nop> 30// Enter fast recovery. 31 +0 > . 1:1001(1000) ack 1 32 +.01 %{ 33assert tcpi_ca_state == TCP_CA_Recovery, tcpi_ca_state 34assert tcpi_snd_cwnd == 7, tcpi_snd_cwnd 35assert tcpi_snd_ssthresh == 7, tcpi_snd_ssthresh 36}% 37 38// Write some more, which we will send 1 MSS at a time, 39// as in-flight segments are SACKed or ACKed. 40 +.01 write(4, ..., 7000) = 7000 41 42 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:5001,nop,nop> 43 +0 > . 10001:11001(1000) ack 1 44 45 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:6001,nop,nop> 46 +0 > . 11001:12001(1000) ack 1 47 48 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:7001,nop,nop> 49 +0 > . 12001:13001(1000) ack 1 50 51 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:8001,nop,nop> 52 +0 > . 13001:14001(1000) ack 1 53 54 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:9001,nop,nop> 55 +0 > . 14001:15001(1000) ack 1 56 57 +.01 < . 1:1(0) ack 1 win 320 <sack 1001:10001,nop,nop> 58 +0 > . 15001:16001(1000) ack 1 59 60 +.02 < . 1:1(0) ack 10001 win 320 61 +0 > P. 16001:17001(1000) ack 1 62// Leave fast recovery. 63 +.01 %{ 64assert tcpi_ca_state == TCP_CA_Open, tcpi_ca_state 65assert tcpi_snd_cwnd == 7, tcpi_snd_cwnd 66assert tcpi_snd_ssthresh == 7, tcpi_snd_ssthresh 67}% 68 69 +.03 < . 1:1(0) ack 12001 win 320 70 +.02 < . 1:1(0) ack 14001 win 320 71 +.02 < . 1:1(0) ack 16001 win 320 72 +.02 < . 1:1(0) ack 17001 win 320 73