xref: /linux/tools/testing/selftests/net/packetdrill/tcp_tcp_info_tcp-info-sndbuf-limited.pkt (revision 0ad9617c78acbc71373fb341a6f75d4012b01d69)
1*88395c07SSoham Chakradeo// SPDX-License-Identifier: GPL-2.0
2*88395c07SSoham Chakradeo// Test send-buffer-limited time in tcp_info for client side.
3*88395c07SSoham Chakradeo`./defaults.sh`
4*88395c07SSoham Chakradeo
5*88395c07SSoham Chakradeo// Create a socket and set it to non-blocking.
6*88395c07SSoham Chakradeo    0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
7*88395c07SSoham Chakradeo   +0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
8*88395c07SSoham Chakradeo   +0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
9*88395c07SSoham Chakradeo
10*88395c07SSoham Chakradeo   +0 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
11*88395c07SSoham Chakradeo   +0 > S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
12*88395c07SSoham Chakradeo +.01 < S. 0:0(0) ack 1 win 10000 <mss 1000,sackOK,nop,nop,nop,wscale 8>
13*88395c07SSoham Chakradeo   +0 > . 1:1(0) ack 1
14*88395c07SSoham Chakradeo   +0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
15*88395c07SSoham Chakradeo   +0 fcntl(3, F_SETFL, O_RDWR) = 0   // set back to blocking
16*88395c07SSoham Chakradeo   +0 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [10000], 4) = 0
17*88395c07SSoham Chakradeo   +0 getsockopt(3, SOL_SOCKET, SO_SNDBUF, [20000], [4]) = 0
18*88395c07SSoham Chakradeo
19*88395c07SSoham Chakradeo +.09...0.14 write(3, ..., 150000) = 150000
20*88395c07SSoham Chakradeo
21*88395c07SSoham Chakradeo +.01 < . 1:1(0) ack 10001 win 10000
22*88395c07SSoham Chakradeo
23*88395c07SSoham Chakradeo +.01 < . 1:1(0) ack 30001 win 10000
24*88395c07SSoham Chakradeo
25*88395c07SSoham Chakradeo// cwnd goes from 40(60KB) to 80(120KB), and that we hit the tiny sndbuf limit 10KB
26*88395c07SSoham Chakradeo +.01 < . 1:1(0) ack 70001 win 10000
27*88395c07SSoham Chakradeo
28*88395c07SSoham Chakradeo +.02 < . 1:1(0) ack 95001 win 10000
29*88395c07SSoham Chakradeo   +0 %{ assert 19000 <= tcpi_sndbuf_limited <= 21000, tcpi_sndbuf_limited; \
30*88395c07SSoham Chakradeo	 assert 49000 <= tcpi_busy_time <= 52000, tcpi_busy_time; \
31*88395c07SSoham Chakradeo	 assert 0 == tcpi_rwnd_limited, tcpi_rwnd_limited }%
32*88395c07SSoham Chakradeo
33*88395c07SSoham Chakradeo// This ack frees up enough buffer so we are no longer
34*88395c07SSoham Chakradeo// buffer limited (socket flag SOCK_NOSPACE is cleared)
35*88395c07SSoham Chakradeo +.02 < . 1:1(0) ack 150001 win 10000
36*88395c07SSoham Chakradeo   +0 %{ assert 19000 <= tcpi_sndbuf_limited <= 21000, tcpi_sndbuf_limited;\
37*88395c07SSoham Chakradeo	 assert 69000 <= tcpi_busy_time <= 73000, tcpi_busy_time;\
38*88395c07SSoham Chakradeo	 assert 0 == tcpi_rwnd_limited, tcpi_rwnd_limited }%
39