Commit 4b252f2d authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'selftests-net-packetdrill-import-multiple-tests'

Soham Chakradeo says:

====================
selftests/net: packetdrill: import multiple tests

Import tests for the following features (folder names in brackets):
ECN (ecn) : RFC 3168
Close (close) : RFC 9293
TCP_INFO (tcp_info) : RFC 9293
Fast recovery (fast_recovery) : RFC 5681
Timestamping (timestamping) : RFC 1323
Nagle (nagle) : RFC 896
Selective Acknowledgments (sack) : RFC 2018
Recent Timestamp (ts_recent) : RFC 1323
Send file (sendfile)
Syscall bad arg (syscall_bad_arg)
Validate (validate)
Blocking (blocking)
Splice (splice)
End of record (eor)
Limited transmit (limited_transmit)

Procedure to import and test the packetdrill tests into upstream linux
is explained in the first patch of this series

These tests have many authors. We only import them here from
github.com/google/packetdrill. Thanks to the following authors fo their
contributions over the years to these tests: Neal Cardwell, Shuo Chen,
Yuchung Cheng, Jerry Chu, Eric Dumazet, Luke Hsiao, Priyaranjan Jha,
Chonggang Li, Tanner Love, John Sperbeck, Wei Wang and Maciej
Żenczykowski. For more info see the original github commits, such as
https://github.com/google/packetdrill/commit/8229c94928ac.
====================

Link: https://patch.msgid.link/20241217185203.297935-1-sohamch.kernel@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents c1bad69f 5d4cadef
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Test for blocking accept.

`./defaults.sh`

// Establish a 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...0.200 accept(3, ..., ...) = 4

  +.1 < S 0:0(0) win 32792 <mss 1000,nop,wscale 7>
   +0 > S. 0:0(0) ack 1 <mss 1460,nop,wscale 8>
  +.1 < . 1:1(0) ack 1 win 257

  +.1 write(4, ..., 2000) = 2000
   +0 > P. 1:2001(2000) ack 1
+13 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Test for blocking connect.

`./defaults.sh`

// Establish a connection.
    0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3

  +.1...0.200 connect(3, ..., ...) = 0

   +0 > S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
  +.1 < S. 0:0(0) ack 1 win 5792 <mss 1460,nop,wscale 2,nop,nop,sackOK>
   +0 > . 1:1(0) ack 1
+29 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Test for blocking read.
--tolerance_usecs=10000

`./defaults.sh`

// Establish a 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

  +.1 < S 0:0(0) win 32792 <mss 1000,nop,wscale 7>
   +0 > S. 0:0(0) ack 1 <mss 1460,nop,wscale 8>
  +.1 < . 1:1(0) ack 1 win 257
   +0 accept(3, ..., ...) = 4

   +0...0.100 read(4, ..., 2000) = 2000
  +.1 < P. 1:2001(2000) ack 1 win 257
   +0 > . 1:1(0) ack 2001

  +.1...0.200 read(4, ..., 2000) = 2000
  +.1 < P. 2001:4001(2000) ack 1 win 257
   +0 > . 1:1(0) ack 4001

  +.1 < P. 4001:6001(2000) ack 1 win 257
   +0 > . 1:1(0) ack 6001
   +0...0.000 read(4, ..., 1000) = 1000
   +0...0.000 read(4, ..., 1000) = 1000
+35 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Test for blocking write.
--tolerance_usecs=10000

`./defaults.sh
./set_sysctls.py /proc/sys/net/ipv4/tcp_min_tso_segs=10
`

// Establish a 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

  +.1 < S 0:0(0) win 50000 <mss 1000,nop,wscale 0>
   +0 > S. 0:0(0) ack 1 <mss 1460,nop,wscale 8>
  +.1 < . 1:1(0) ack 1 win 50000
   +0 accept(3, ..., ...) = 4

// Kernel doubles our value -> sk->sk_sndbuf is set to 42000
   +0 setsockopt(4, SOL_SOCKET, SO_SNDBUF,  [21000], 4) = 0
   +0 getsockopt(4, SOL_SOCKET, SO_SNDBUF,  [42000], [4]) = 0

// A write of 60000 does not block.
   +0...0.300 write(4, ..., 61000) = 61000    // this write() blocks

  +.1 < . 1:1(0) ack 10001 win 50000

  +.1 < . 1:1(0) ack 30001 win 50000

// This ACK should wakeup the write(). An ACK of 35001 does not.
  +.1 < . 1:1(0) ack 36001 win 50000

// Reset to sysctls defaults.
`/tmp/sysctl_restore_${PPID}.sh`
+23 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Test basic connection teardown where local process closes first:
// the local process calls close() first, so we send a FIN, and receive an ACK.
// Then we receive a FIN and ACK it.

`./defaults.sh`

    0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
 +.01...0.011 connect(3, ..., ...) = 0
   +0 >  S 0:0(0) <...>
   +0 < S. 0:0(0) ack 1 win 32768 <mss 1000,nop,wscale 6,nop,nop,sackOK>
   +0 >  . 1:1(0) ack 1

   +0 write(3, ..., 1000) = 1000
   +0 >  P. 1:1001(1000) ack 1
   +0 < . 1:1(0) ack 1001 win 257

   +0 close(3) = 0
   +0 >  F. 1001:1001(0) ack 1
   +0 < . 1:1(0) ack 1002 win 257

   +0 < F. 1:1(0) ack 1002 win 257
   +0 >  . 1002:1002(0) ack 2
Loading