Commit f1bcd486 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'selftests-net-packetdrill-netns-and-two-imports'

Willem de Bruijn says:

====================
selftests/net: packetdrill: netns and two imports

From: Willem de Bruijn <willemb@google.com>

1/3: run in nets, as discussed, and add missing CONFIGs
2/3: import tcp/zerocopy
3/3: import tcp/slow_start
====================

Link: https://patch.msgid.link/20240912005317.1253001-1-willemdebruijn.kernel@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents eda5891f e874be27
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

TEST_INCLUDES := ksft_runner.sh \
		 defaults.sh \
		 set_sysctls.py \
		 ../../kselftest/ktap_helpers.sh

TEST_PROGS := $(wildcard *.pkt)
+6 −0
Original line number Diff line number Diff line
CONFIG_IPV6=y
CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_NET_NS=y
CONFIG_NET_SCH_FIFO=y
CONFIG_NET_SCH_FQ=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYN_COOKIES=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_MD5SIG=y
CONFIG_TUN=y
+2 −2
Original line number Diff line number Diff line
@@ -33,9 +33,9 @@ fi
ktap_print_header
ktap_set_plan 2

packetdrill ${ipv4_args[@]} $(basename $script) > /dev/null \
unshare -n packetdrill ${ipv4_args[@]} $(basename $script) > /dev/null \
	&& ktap_test_pass "ipv4" || ktap_test_fail "ipv4"
packetdrill ${ipv6_args[@]} $(basename $script) > /dev/null \
unshare -n packetdrill ${ipv6_args[@]} $(basename $script) > /dev/null \
	&& ktap_test_pass "ipv6" || ktap_test_fail "ipv6"

ktap_finished
+38 −0
Original line number Diff line number Diff line
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0

"""Sets sysctl values and writes a file that restores them.

The arguments are of the form "<proc-file>=<val>" separated by spaces.
The program first reads the current value of the proc-file and creates
a shell script named "/tmp/sysctl_restore_${PACKETDRILL_PID}.sh" which
restores the values when executed. It then sets the new values.

PACKETDRILL_PID is set by packetdrill to the pid of itself, so a .pkt
file could restore sysctls by running `/tmp/sysctl_restore_${PPID}.sh`
at the end.
"""

import os
import subprocess
import sys

filename = '/tmp/sysctl_restore_%s.sh' % os.environ['PACKETDRILL_PID']

# Open file for restoring sysctl values
restore_file = open(filename, 'w')
print('#!/bin/bash', file=restore_file)

for a in sys.argv[1:]:
  sysctl = a.split('=')
  # sysctl[0] contains the proc-file name, sysctl[1] the new value

  # read current value and add restore command to file
  cur_val = subprocess.check_output(['cat', sysctl[0]], universal_newlines=True)
  print('echo "%s" > %s' % (cur_val.strip(), sysctl[0]), file=restore_file)

  # set new value
  cmd = 'echo "%s" > %s' % (sysctl[1], sysctl[0])
  os.system(cmd)

os.system('chmod u+x %s' % filename)
+56 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Test of slow start when not application-limited, so that
// the cwnd continues to grow.
// In this variant, the receiver ACKs every packet.

// Set up config. To keep things simple, disable the
// mechanism that defers sending in order to send bigger TSO packets.
`./defaults.sh
sysctl -q net.ipv4.tcp_tso_win_divisor=100`

    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,sackOK,nop,nop,nop,wscale 7>
   +0 > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
  +.1 < . 1:1(0) ack 1 win 257
   +0 accept(3, ..., ...) = 4
   +0 setsockopt(4, SOL_SOCKET, SO_SNDBUF, [200000], 4) = 0

   +0 write(4, ..., 30000) = 30000
   +0 > P. 1:10001(10000) ack 1
   +0 %{ assert tcpi_snd_cwnd == 10, tcpi_snd_cwnd }%

+.105 < . 1:1(0) ack 1001 win 257
   +0 > P. 10001:12001(2000) ack 1

   +0 < . 1:1(0) ack 2001 win 257
   +0 > P. 12001:14001(2000) ack 1

+.005 < . 1:1(0) ack 3001 win 257
   +0 > P. 14001:16001(2000) ack 1

   +0 < . 1:1(0) ack 4001 win 257
   +0 > P. 16001:18001(2000) ack 1

+.005 < . 1:1(0) ack 5001 win 257
   +0 > P. 18001:20001(2000) ack 1

   +0 < . 1:1(0) ack 6001 win 257
   +0 > P. 20001:22001(2000) ack 1

+.005 < . 1:1(0) ack 7001 win 257
   +0 > P. 22001:24001(2000) ack 1

   +0 < . 1:1(0) ack 8001 win 257
   +0 > P. 24001:26001(2000) ack 1

+.005 < . 1:1(0) ack 9001 win 257
   +0 > P. 26001:28001(2000) ack 1

   +0 < . 1:1(0) ack 10001 win 257
   +0 > P. 28001:30001(2000) ack 1

   +0 %{ assert tcpi_snd_cwnd == 20, tcpi_snd_cwnd }%
Loading