Skip to content

Commit 2437c0f

Browse files
committed
Merge branch 'net-selftests-unique-namespace-last-part'
Hangbin Liu says: ==================== Convert net selftests to run in unique namespace (last part) Here is the last part of converting net selftests to run in unique namespace. This part converts all left tests. After the conversion, we can run the net sleftests in parallel. e.g. # ./run_kselftest.sh -n -t net:reuseport_bpf TAP version 13 1..1 # selftests: net: reuseport_bpf ok 1 selftests: net: reuseport_bpf mod 10... # Socket 0: 0 # Socket 1: 1 ... # Socket 4: 19 # Testing filter add without bind... # SUCCESS # ./run_kselftest.sh -p -n -t net:cmsg_so_mark.sh -t net:cmsg_time.sh -t net:cmsg_ipv6.sh TAP version 13 1..3 # selftests: net: cmsg_so_mark.sh ok 1 selftests: net: cmsg_so_mark.sh # selftests: net: cmsg_time.sh ok 2 selftests: net: cmsg_time.sh # selftests: net: cmsg_ipv6.sh ok 3 selftests: net: cmsg_ipv6.sh # ./run_kselftest.sh -p -n -c net TAP version 13 1..95 # selftests: net: reuseport_bpf_numa ok 3 selftests: net: reuseport_bpf_numa # selftests: net: reuseport_bpf_cpu ok 2 selftests: net: reuseport_bpf_cpu # selftests: net: sk_bind_sendto_listen ok 9 selftests: net: sk_bind_sendto_listen # selftests: net: reuseaddr_conflict ok 5 selftests: net: reuseaddr_conflict ... Here is the part 1 link: https://lore.kernel.org/netdev/[email protected] part 2 link: https://lore.kernel.org/netdev/[email protected] part 3 link: https://lore.kernel.org/netdev/[email protected] ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 6530b29 + 9d0b4ad commit 2437c0f

File tree

12 files changed

+193
-157
lines changed

12 files changed

+193
-157
lines changed

tools/testing/selftests/kselftest/runner.sh

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export skip_rc=4
66
export timeout_rc=124
77
export logfile=/dev/stdout
88
export per_test_logging=
9+
export RUN_IN_NETNS=
910

1011
# Defaults for "settings" file fields:
1112
# "timeout" how many seconds to let each test run before running
@@ -47,7 +48,7 @@ run_one()
4748
{
4849
DIR="$1"
4950
TEST="$2"
50-
NUM="$3"
51+
local test_num="$3"
5152

5253
BASENAME_TEST=$(basename $TEST)
5354

@@ -141,6 +142,33 @@ run_one()
141142
fi
142143
}
143144

145+
in_netns()
146+
{
147+
local name=$1
148+
ip netns exec $name bash <<-EOF
149+
BASE_DIR=$BASE_DIR
150+
source $BASE_DIR/kselftest/runner.sh
151+
logfile=$logfile
152+
run_one $DIR $TEST $test_num
153+
EOF
154+
}
155+
156+
run_in_netns()
157+
{
158+
local netns=$(mktemp -u ${BASENAME_TEST}-XXXXXX)
159+
local tmplog="/tmp/$(mktemp -u ${BASENAME_TEST}-XXXXXX)"
160+
ip netns add $netns
161+
if [ $? -ne 0 ]; then
162+
echo "# Warning: Create namespace failed for $BASENAME_TEST"
163+
echo "not ok $test_num selftests: $DIR: $BASENAME_TEST # Create NS failed"
164+
fi
165+
ip -n $netns link set lo up
166+
in_netns $netns &> $tmplog
167+
ip netns del $netns &> /dev/null
168+
cat $tmplog
169+
rm -f $tmplog
170+
}
171+
144172
run_many()
145173
{
146174
echo "TAP version 13"
@@ -155,6 +183,12 @@ run_many()
155183
logfile="/tmp/$BASENAME_TEST"
156184
cat /dev/null > "$logfile"
157185
fi
158-
run_one "$DIR" "$TEST" "$test_num"
186+
if [ -n "$RUN_IN_NETNS" ]; then
187+
run_in_netns &
188+
else
189+
run_one "$DIR" "$TEST" "$test_num"
190+
fi
159191
done
192+
193+
wait
160194
}

tools/testing/selftests/net/gre_gso.sh

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22
# SPDX-License-Identifier: GPL-2.0
33

44
# This test is for checking GRE GSO.
5-
5+
source lib.sh
66
ret=0
7-
# Kselftest framework requirement - SKIP code is 4.
8-
ksft_skip=4
97

108
# all tests in this script. Can be overridden with -t option
119
TESTS="gre_gso"
1210

1311
VERBOSE=0
1412
PAUSE_ON_FAIL=no
1513
PAUSE=no
16-
IP="ip -netns ns1"
17-
NS_EXEC="ip netns exec ns1"
1814
TMPFILE=`mktemp`
1915
PID=
2016

@@ -50,13 +46,13 @@ log_test()
5046
setup()
5147
{
5248
set -e
53-
ip netns add ns1
54-
ip netns set ns1 auto
55-
$IP link set dev lo up
49+
setup_ns ns1
50+
IP="ip -netns $ns1"
51+
NS_EXEC="ip netns exec $ns1"
5652

5753
ip link add veth0 type veth peer name veth1
5854
ip link set veth0 up
59-
ip link set veth1 netns ns1
55+
ip link set veth1 netns $ns1
6056
$IP link set veth1 name veth0
6157
$IP link set veth0 up
6258

@@ -70,7 +66,7 @@ cleanup()
7066
[ -n "$PID" ] && kill $PID
7167
ip link del dev gre1 &> /dev/null
7268
ip link del dev veth0 &> /dev/null
73-
ip netns del ns1
69+
cleanup_ns $ns1
7470
}
7571

7672
get_linklocal()
@@ -145,7 +141,7 @@ gre6_gso_test()
145141
setup
146142

147143
a1=$(get_linklocal veth0)
148-
a2=$(get_linklocal veth0 ns1)
144+
a2=$(get_linklocal veth0 $ns1)
149145

150146
gre_create_tun $a1 $a2
151147

tools/testing/selftests/net/gro.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ run_test() {
2323
# on every try.
2424
for tries in {1..3}; do
2525
# Actual test starts here
26-
ip netns exec server_ns ./gro "${ARGS[@]}" "--rx" "--iface" "server" \
26+
ip netns exec $server_ns ./gro "${ARGS[@]}" "--rx" "--iface" "server" \
2727
1>>log.txt &
2828
server_pid=$!
2929
sleep 0.5 # to allow for socket init
30-
ip netns exec client_ns ./gro "${ARGS[@]}" "--iface" "client" \
30+
ip netns exec $client_ns ./gro "${ARGS[@]}" "--iface" "client" \
3131
1>>log.txt
3232
wait "${server_pid}"
3333
exit_code=$?

tools/testing/selftests/net/netns-name.sh

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
#!/bin/bash
22
# SPDX-License-Identifier: GPL-2.0
33

4+
source lib.sh
45
set -o pipefail
56

6-
NS=netns-name-test
77
DEV=dummy-dev0
88
DEV2=dummy-dev1
99
ALT_NAME=some-alt-name
1010

1111
RET_CODE=0
1212

1313
cleanup() {
14-
ip netns del $NS
14+
cleanup_ns $NS $test_ns
1515
}
1616

1717
trap cleanup EXIT
@@ -21,62 +21,62 @@ fail() {
2121
RET_CODE=1
2222
}
2323

24-
ip netns add $NS
24+
setup_ns NS test_ns
2525

2626
#
2727
# Test basic move without a rename
2828
#
2929
ip -netns $NS link add name $DEV type dummy || fail
30-
ip -netns $NS link set dev $DEV netns 1 ||
30+
ip -netns $NS link set dev $DEV netns $test_ns ||
3131
fail "Can't perform a netns move"
32-
ip link show dev $DEV >> /dev/null || fail "Device not found after move"
33-
ip link del $DEV || fail
32+
ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found after move"
33+
ip -netns $test_ns link del $DEV || fail
3434

3535
#
3636
# Test move with a conflict
3737
#
38-
ip link add name $DEV type dummy
38+
ip -netns $test_ns link add name $DEV type dummy
3939
ip -netns $NS link add name $DEV type dummy || fail
40-
ip -netns $NS link set dev $DEV netns 1 2> /dev/null &&
40+
ip -netns $NS link set dev $DEV netns $test_ns 2> /dev/null &&
4141
fail "Performed a netns move with a name conflict"
42-
ip link show dev $DEV >> /dev/null || fail "Device not found after move"
42+
ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found after move"
4343
ip -netns $NS link del $DEV || fail
44-
ip link del $DEV || fail
44+
ip -netns $test_ns link del $DEV || fail
4545

4646
#
4747
# Test move with a conflict and rename
4848
#
49-
ip link add name $DEV type dummy
49+
ip -netns $test_ns link add name $DEV type dummy
5050
ip -netns $NS link add name $DEV type dummy || fail
51-
ip -netns $NS link set dev $DEV netns 1 name $DEV2 ||
51+
ip -netns $NS link set dev $DEV netns $test_ns name $DEV2 ||
5252
fail "Can't perform a netns move with rename"
53-
ip link del $DEV2 || fail
54-
ip link del $DEV || fail
53+
ip -netns $test_ns link del $DEV2 || fail
54+
ip -netns $test_ns link del $DEV || fail
5555

5656
#
5757
# Test dup alt-name with netns move
5858
#
59-
ip link add name $DEV type dummy || fail
60-
ip link property add dev $DEV altname $ALT_NAME || fail
59+
ip -netns $test_ns link add name $DEV type dummy || fail
60+
ip -netns $test_ns link property add dev $DEV altname $ALT_NAME || fail
6161
ip -netns $NS link add name $DEV2 type dummy || fail
6262
ip -netns $NS link property add dev $DEV2 altname $ALT_NAME || fail
6363

64-
ip -netns $NS link set dev $DEV2 netns 1 2> /dev/null &&
64+
ip -netns $NS link set dev $DEV2 netns $test_ns 2> /dev/null &&
6565
fail "Moved with alt-name dup"
6666

67-
ip link del $DEV || fail
67+
ip -netns $test_ns link del $DEV || fail
6868
ip -netns $NS link del $DEV2 || fail
6969

7070
#
7171
# Test creating alt-name in one net-ns and using in another
7272
#
7373
ip -netns $NS link add name $DEV type dummy || fail
7474
ip -netns $NS link property add dev $DEV altname $ALT_NAME || fail
75-
ip -netns $NS link set dev $DEV netns 1 || fail
76-
ip link show dev $ALT_NAME >> /dev/null || fail "Can't find alt-name after move"
77-
ip -netns $NS link show dev $ALT_NAME 2> /dev/null &&
75+
ip -netns $NS link set dev $DEV netns $test_ns || fail
76+
ip -netns $test_ns link show dev $ALT_NAME >> /dev/null || fail "Can't find alt-name after move"
77+
ip -netns $NS link show dev $ALT_NAME 2> /dev/null &&
7878
fail "Can still find alt-name after move"
79-
ip link del $DEV || fail
79+
ip -netns $test_ns link del $DEV || fail
8080

8181
echo -ne "$(basename $0) \t\t\t\t"
8282
if [ $RET_CODE -eq 0 ]; then

tools/testing/selftests/net/pmtu.sh

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,7 @@
198198
# - pmtu_ipv6_route_change
199199
# Same as above but with IPv6
200200

201-
# Kselftest framework requirement - SKIP code is 4.
202-
ksft_skip=4
201+
source ./lib.sh
203202

204203
PAUSE_ON_FAIL=no
205204
VERBOSE=0
@@ -268,16 +267,6 @@ tests="
268267
pmtu_ipv4_route_change ipv4: PMTU exception w/route replace 1
269268
pmtu_ipv6_route_change ipv6: PMTU exception w/route replace 1"
270269

271-
NS_A="ns-A"
272-
NS_B="ns-B"
273-
NS_C="ns-C"
274-
NS_R1="ns-R1"
275-
NS_R2="ns-R2"
276-
ns_a="ip netns exec ${NS_A}"
277-
ns_b="ip netns exec ${NS_B}"
278-
ns_c="ip netns exec ${NS_C}"
279-
ns_r1="ip netns exec ${NS_R1}"
280-
ns_r2="ip netns exec ${NS_R2}"
281270
# Addressing and routing for tests with routers: four network segments, with
282271
# index SEGMENT between 1 and 4, a common prefix (PREFIX4 or PREFIX6) and an
283272
# identifier ID, which is 1 for hosts (A and B), 2 for routers (R1 and R2).
@@ -543,13 +532,17 @@ setup_ip6ip6() {
543532
}
544533

545534
setup_namespaces() {
535+
setup_ns NS_A NS_B NS_C NS_R1 NS_R2
546536
for n in ${NS_A} ${NS_B} ${NS_C} ${NS_R1} ${NS_R2}; do
547-
ip netns add ${n} || return 1
548-
549537
# Disable DAD, so that we don't have to wait to use the
550538
# configured IPv6 addresses
551539
ip netns exec ${n} sysctl -q net/ipv6/conf/default/accept_dad=0
552540
done
541+
ns_a="ip netns exec ${NS_A}"
542+
ns_b="ip netns exec ${NS_B}"
543+
ns_c="ip netns exec ${NS_C}"
544+
ns_r1="ip netns exec ${NS_R1}"
545+
ns_r2="ip netns exec ${NS_R2}"
553546
}
554547

555548
setup_veth() {
@@ -839,7 +832,7 @@ setup_bridge() {
839832
run_cmd ${ns_a} ip link set br0 up
840833

841834
run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C
842-
run_cmd ${ns_c} ip link set veth_A-C netns ns-A
835+
run_cmd ${ns_c} ip link set veth_A-C netns ${NS_A}
843836

844837
run_cmd ${ns_a} ip link set veth_A-C up
845838
run_cmd ${ns_c} ip link set veth_C-A up
@@ -944,9 +937,7 @@ cleanup() {
944937
done
945938
socat_pids=
946939

947-
for n in ${NS_A} ${NS_B} ${NS_C} ${NS_R1} ${NS_R2}; do
948-
ip netns del ${n} 2> /dev/null
949-
done
940+
cleanup_all_ns
950941

951942
ip link del veth_A-C 2>/dev/null
952943
ip link del veth_A-R1 2>/dev/null

0 commit comments

Comments
 (0)