Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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/20231202020110.362433-1-liuhangbin@gmail.com
part 2 link:
https://lore.kernel.org/netdev/20231206070801.1691247-1-liuhangbin@gmail.com
part 3 link:
https://lore.kernel.org/netdev/20231213060856.4030084-1-liuhangbin@gmail.com
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+192 -156
+36 -2
tools/testing/selftests/kselftest/runner.sh
··· 6 6 export timeout_rc=124 7 7 export logfile=/dev/stdout 8 8 export per_test_logging= 9 + export RUN_IN_NETNS= 9 10 10 11 # Defaults for "settings" file fields: 11 12 # "timeout" how many seconds to let each test run before running ··· 48 47 { 49 48 DIR="$1" 50 49 TEST="$2" 51 - NUM="$3" 50 + local test_num="$3" 52 51 53 52 BASENAME_TEST=$(basename $TEST) 54 53 ··· 142 141 fi 143 142 } 144 143 144 + in_netns() 145 + { 146 + local name=$1 147 + ip netns exec $name bash <<-EOF 148 + BASE_DIR=$BASE_DIR 149 + source $BASE_DIR/kselftest/runner.sh 150 + logfile=$logfile 151 + run_one $DIR $TEST $test_num 152 + EOF 153 + } 154 + 155 + run_in_netns() 156 + { 157 + local netns=$(mktemp -u ${BASENAME_TEST}-XXXXXX) 158 + local tmplog="/tmp/$(mktemp -u ${BASENAME_TEST}-XXXXXX)" 159 + ip netns add $netns 160 + if [ $? -ne 0 ]; then 161 + echo "# Warning: Create namespace failed for $BASENAME_TEST" 162 + echo "not ok $test_num selftests: $DIR: $BASENAME_TEST # Create NS failed" 163 + fi 164 + ip -n $netns link set lo up 165 + in_netns $netns &> $tmplog 166 + ip netns del $netns &> /dev/null 167 + cat $tmplog 168 + rm -f $tmplog 169 + } 170 + 145 171 run_many() 146 172 { 147 173 echo "TAP version 13" ··· 183 155 logfile="/tmp/$BASENAME_TEST" 184 156 cat /dev/null > "$logfile" 185 157 fi 186 - run_one "$DIR" "$TEST" "$test_num" 158 + if [ -n "$RUN_IN_NETNS" ]; then 159 + run_in_netns & 160 + else 161 + run_one "$DIR" "$TEST" "$test_num" 162 + fi 187 163 done 164 + 165 + wait 188 166 }
+7 -11
tools/testing/selftests/net/gre_gso.sh
··· 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 4 # This test is for checking GRE GSO. 5 - 5 + source lib.sh 6 6 ret=0 7 - # Kselftest framework requirement - SKIP code is 4. 8 - ksft_skip=4 9 7 10 8 # all tests in this script. Can be overridden with -t option 11 9 TESTS="gre_gso" ··· 11 13 VERBOSE=0 12 14 PAUSE_ON_FAIL=no 13 15 PAUSE=no 14 - IP="ip -netns ns1" 15 - NS_EXEC="ip netns exec ns1" 16 16 TMPFILE=`mktemp` 17 17 PID= 18 18 ··· 46 50 setup() 47 51 { 48 52 set -e 49 - ip netns add ns1 50 - ip netns set ns1 auto 51 - $IP link set dev lo up 53 + setup_ns ns1 54 + IP="ip -netns $ns1" 55 + NS_EXEC="ip netns exec $ns1" 52 56 53 57 ip link add veth0 type veth peer name veth1 54 58 ip link set veth0 up 55 - ip link set veth1 netns ns1 59 + ip link set veth1 netns $ns1 56 60 $IP link set veth1 name veth0 57 61 $IP link set veth0 up 58 62 ··· 66 70 [ -n "$PID" ] && kill $PID 67 71 ip link del dev gre1 &> /dev/null 68 72 ip link del dev veth0 &> /dev/null 69 - ip netns del ns1 73 + cleanup_ns $ns1 70 74 } 71 75 72 76 get_linklocal() ··· 141 145 setup 142 146 143 147 a1=$(get_linklocal veth0) 144 - a2=$(get_linklocal veth0 ns1) 148 + a2=$(get_linklocal veth0 $ns1) 145 149 146 150 gre_create_tun $a1 $a2 147 151
+2 -2
tools/testing/selftests/net/gro.sh
··· 23 23 # on every try. 24 24 for tries in {1..3}; do 25 25 # 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" \ 27 27 1>>log.txt & 28 28 server_pid=$! 29 29 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" \ 31 31 1>>log.txt 32 32 wait "${server_pid}" 33 33 exit_code=$?
+22 -22
tools/testing/selftests/net/netns-name.sh
··· 1 1 #!/bin/bash 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 + source lib.sh 4 5 set -o pipefail 5 6 6 - NS=netns-name-test 7 7 DEV=dummy-dev0 8 8 DEV2=dummy-dev1 9 9 ALT_NAME=some-alt-name ··· 11 11 RET_CODE=0 12 12 13 13 cleanup() { 14 - ip netns del $NS 14 + cleanup_ns $NS $test_ns 15 15 } 16 16 17 17 trap cleanup EXIT ··· 21 21 RET_CODE=1 22 22 } 23 23 24 - ip netns add $NS 24 + setup_ns NS test_ns 25 25 26 26 # 27 27 # Test basic move without a rename 28 28 # 29 29 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 || 31 31 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 34 34 35 35 # 36 36 # Test move with a conflict 37 37 # 38 - ip link add name $DEV type dummy 38 + ip -netns $test_ns link add name $DEV type dummy 39 39 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 && 41 41 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" 43 43 ip -netns $NS link del $DEV || fail 44 - ip link del $DEV || fail 44 + ip -netns $test_ns link del $DEV || fail 45 45 46 46 # 47 47 # Test move with a conflict and rename 48 48 # 49 - ip link add name $DEV type dummy 49 + ip -netns $test_ns link add name $DEV type dummy 50 50 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 || 52 52 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 55 55 56 56 # 57 57 # Test dup alt-name with netns move 58 58 # 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 61 61 ip -netns $NS link add name $DEV2 type dummy || fail 62 62 ip -netns $NS link property add dev $DEV2 altname $ALT_NAME || fail 63 63 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 && 65 65 fail "Moved with alt-name dup" 66 66 67 - ip link del $DEV || fail 67 + ip -netns $test_ns link del $DEV || fail 68 68 ip -netns $NS link del $DEV2 || fail 69 69 70 70 # ··· 72 72 # 73 73 ip -netns $NS link add name $DEV type dummy || fail 74 74 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 && 78 78 fail "Can still find alt-name after move" 79 - ip link del $DEV || fail 79 + ip -netns $test_ns link del $DEV || fail 80 80 81 81 echo -ne "$(basename $0) \t\t\t\t" 82 82 if [ $RET_CODE -eq 0 ]; then
+9 -18
tools/testing/selftests/net/pmtu.sh
··· 198 198 # - pmtu_ipv6_route_change 199 199 # Same as above but with IPv6 200 200 201 - # Kselftest framework requirement - SKIP code is 4. 202 - ksft_skip=4 201 + source ./lib.sh 203 202 204 203 PAUSE_ON_FAIL=no 205 204 VERBOSE=0 ··· 267 268 pmtu_ipv4_route_change ipv4: PMTU exception w/route replace 1 268 269 pmtu_ipv6_route_change ipv6: PMTU exception w/route replace 1" 269 270 270 - NS_A="ns-A" 271 - NS_B="ns-B" 272 - NS_C="ns-C" 273 - NS_R1="ns-R1" 274 - NS_R2="ns-R2" 275 - ns_a="ip netns exec ${NS_A}" 276 - ns_b="ip netns exec ${NS_B}" 277 - ns_c="ip netns exec ${NS_C}" 278 - ns_r1="ip netns exec ${NS_R1}" 279 - ns_r2="ip netns exec ${NS_R2}" 280 271 # Addressing and routing for tests with routers: four network segments, with 281 272 # index SEGMENT between 1 and 4, a common prefix (PREFIX4 or PREFIX6) and an 282 273 # identifier ID, which is 1 for hosts (A and B), 2 for routers (R1 and R2). ··· 532 543 } 533 544 534 545 setup_namespaces() { 546 + setup_ns NS_A NS_B NS_C NS_R1 NS_R2 535 547 for n in ${NS_A} ${NS_B} ${NS_C} ${NS_R1} ${NS_R2}; do 536 - ip netns add ${n} || return 1 537 - 538 548 # Disable DAD, so that we don't have to wait to use the 539 549 # configured IPv6 addresses 540 550 ip netns exec ${n} sysctl -q net/ipv6/conf/default/accept_dad=0 541 551 done 552 + ns_a="ip netns exec ${NS_A}" 553 + ns_b="ip netns exec ${NS_B}" 554 + ns_c="ip netns exec ${NS_C}" 555 + ns_r1="ip netns exec ${NS_R1}" 556 + ns_r2="ip netns exec ${NS_R2}" 542 557 } 543 558 544 559 setup_veth() { ··· 832 839 run_cmd ${ns_a} ip link set br0 up 833 840 834 841 run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C 835 - run_cmd ${ns_c} ip link set veth_A-C netns ns-A 842 + run_cmd ${ns_c} ip link set veth_A-C netns ${NS_A} 836 843 837 844 run_cmd ${ns_a} ip link set veth_A-C up 838 845 run_cmd ${ns_c} ip link set veth_C-A up ··· 937 944 done 938 945 socat_pids= 939 946 940 - for n in ${NS_A} ${NS_B} ${NS_C} ${NS_R1} ${NS_R2}; do 941 - ip netns del ${n} 2> /dev/null 942 - done 947 + cleanup_all_ns 943 948 944 949 ip link del veth_A-C 2>/dev/null 945 950 ip link del veth_A-R1 2>/dev/null
+18 -16
tools/testing/selftests/net/rtnetlink.sh
··· 35 35 PAUSE=no 36 36 PAUSE_ON_FAIL=no 37 37 38 - # Kselftest framework requirement - SKIP code is 4. 39 - ksft_skip=4 38 + source lib.sh 40 39 41 40 # set global exit status, but never reset nonzero one. 42 41 check_err() ··· 516 517 # test various encap methods, use netns to avoid unwanted interference 517 518 kci_test_encap() 518 519 { 519 - testns="testns" 520 520 local ret=0 521 - run_cmd ip netns add "$testns" 521 + setup_ns testns 522 522 if [ $? -ne 0 ]; then 523 523 end_test "SKIP encap tests: cannot add net namespace $testns" 524 524 return $ksft_skip ··· 570 572 if [ $? -ne 0 ]; then 571 573 end_test "SKIP: macsec: iproute2 too old" 572 574 return $ksft_skip 575 + fi 576 + 577 + if ! mount | grep -q debugfs; then 578 + mount -t debugfs none /sys/kernel/debug/ &> /dev/null 573 579 fi 574 580 575 581 # setup netdevsim since dummydev doesn't have offload support ··· 740 738 sysfsnet=/sys/bus/netdevsim/devices/netdevsim0/net/ 741 739 probed=false 742 740 741 + if ! mount | grep -q debugfs; then 742 + mount -t debugfs none /sys/kernel/debug/ &> /dev/null 743 + fi 744 + 743 745 # setup netdevsim since dummydev doesn't have offload support 744 746 if [ ! -w /sys/bus/netdevsim/new_device ] ; then 745 747 run_cmd modprobe -q netdevsim ··· 842 836 843 837 kci_test_gretap() 844 838 { 845 - testns="testns" 846 839 DEV_NS=gretap00 847 840 local ret=0 848 841 849 - run_cmd ip netns add "$testns" 842 + setup_ns testns 850 843 if [ $? -ne 0 ]; then 851 844 end_test "SKIP gretap tests: cannot add net namespace $testns" 852 845 return $ksft_skip ··· 883 878 884 879 kci_test_ip6gretap() 885 880 { 886 - testns="testns" 887 881 DEV_NS=ip6gretap00 888 882 local ret=0 889 883 890 - run_cmd ip netns add "$testns" 884 + setup_ns testns 891 885 if [ $? -ne 0 ]; then 892 886 end_test "SKIP ip6gretap tests: cannot add net namespace $testns" 893 887 return $ksft_skip ··· 924 920 925 921 kci_test_erspan() 926 922 { 927 - testns="testns" 928 923 DEV_NS=erspan00 929 924 local ret=0 930 925 run_cmd_grep "^Usage:" ip link help erspan ··· 931 928 end_test "SKIP: erspan: iproute2 too old" 932 929 return $ksft_skip 933 930 fi 934 - run_cmd ip netns add "$testns" 931 + setup_ns testns 935 932 if [ $? -ne 0 ]; then 936 933 end_test "SKIP erspan tests: cannot add net namespace $testns" 937 934 return $ksft_skip ··· 973 970 974 971 kci_test_ip6erspan() 975 972 { 976 - testns="testns" 977 973 DEV_NS=ip6erspan00 978 974 local ret=0 979 975 run_cmd_grep "^Usage:" ip link help ip6erspan ··· 980 978 end_test "SKIP: ip6erspan: iproute2 too old" 981 979 return $ksft_skip 982 980 fi 983 - run_cmd ip netns add "$testns" 981 + setup_ns testns 984 982 if [ $? -ne 0 ]; then 985 983 end_test "SKIP ip6erspan tests: cannot add net namespace $testns" 986 984 return $ksft_skip ··· 1024 1022 1025 1023 kci_test_fdb_get() 1026 1024 { 1027 - IP="ip -netns testns" 1028 - BRIDGE="bridge -netns testns" 1029 1025 brdev="test-br0" 1030 1026 vxlandev="vxlan10" 1031 1027 test_mac=de:ad:be:ef:13:37 ··· 1037 1037 return $ksft_skip 1038 1038 fi 1039 1039 1040 - run_cmd ip netns add testns 1040 + setup_ns testns 1041 1041 if [ $? -ne 0 ]; then 1042 1042 end_test "SKIP fdb get tests: cannot add net namespace $testns" 1043 1043 return $ksft_skip 1044 1044 fi 1045 + IP="ip -netns $testns" 1046 + BRIDGE="bridge -netns $testns" 1045 1047 run_cmd $IP link add "$vxlandev" type vxlan id 10 local $localip \ 1046 1048 dstport 4789 1047 1049 run_cmd $IP link add name "$brdev" type bridge ··· 1054 1052 run_cmd_grep "dev $vxlandev master $brdev" $BRIDGE fdb get $test_mac br "$brdev" 1055 1053 run_cmd_grep "dev $vxlandev dst $dstip" $BRIDGE fdb get $test_mac dev "$vxlandev" self 1056 1054 1057 - ip netns del testns &>/dev/null 1055 + ip netns del $testns &>/dev/null 1058 1056 1059 1057 if [ $ret -ne 0 ]; then 1060 1058 end_test "FAIL: bridge fdb get"
+5 -3
tools/testing/selftests/net/setup_loopback.sh
··· 5 5 readonly IRQ_PATH="/sys/class/net/${dev}/napi_defer_hard_irqs" 6 6 readonly FLUSH_TIMEOUT="$(< ${FLUSH_PATH})" 7 7 readonly HARD_IRQS="$(< ${IRQ_PATH})" 8 + readonly server_ns=$(mktemp -u server-XXXXXXXX) 9 + readonly client_ns=$(mktemp -u client-XXXXXXXX) 8 10 9 11 netdev_check_for_carrier() { 10 12 local -r dev="$1" ··· 99 97 100 98 setup_ns() { 101 99 # Set up server_ns namespace and client_ns namespace 102 - setup_macvlan_ns "${dev}" server_ns server "${SERVER_MAC}" 103 - setup_macvlan_ns "${dev}" client_ns client "${CLIENT_MAC}" 100 + setup_macvlan_ns "${dev}" ${server_ns} server "${SERVER_MAC}" 101 + setup_macvlan_ns "${dev}" ${client_ns} client "${CLIENT_MAC}" 104 102 } 105 103 106 104 cleanup_ns() { 107 - cleanup_macvlan_ns server_ns server client_ns client 105 + cleanup_macvlan_ns ${server_ns} server ${client_ns} client 108 106 } 109 107 110 108 setup() {
+6 -3
tools/testing/selftests/net/setup_veth.sh
··· 1 1 #!/bin/bash 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 + readonly server_ns=$(mktemp -u server-XXXXXXXX) 5 + readonly client_ns=$(mktemp -u client-XXXXXXXX) 6 + 4 7 setup_veth_ns() { 5 8 local -r link_dev="$1" 6 9 local -r ns_name="$2" ··· 22 19 # Set up server_ns namespace and client_ns namespace 23 20 ip link add name server type veth peer name client 24 21 25 - setup_veth_ns "${dev}" server_ns server "${SERVER_MAC}" 26 - setup_veth_ns "${dev}" client_ns client "${CLIENT_MAC}" 22 + setup_veth_ns "${dev}" ${server_ns} server "${SERVER_MAC}" 23 + setup_veth_ns "${dev}" ${client_ns} client "${CLIENT_MAC}" 27 24 } 28 25 29 26 cleanup_ns() { 30 27 local ns_name 31 28 32 - for ns_name in client_ns server_ns; do 29 + for ns_name in ${client_ns} ${server_ns}; do 33 30 [[ -e /var/run/netns/"${ns_name}" ]] && ip netns del "${ns_name}" 34 31 done 35 32 }
+3 -3
tools/testing/selftests/net/stress_reuseport_listen.sh
··· 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 # Copyright (c) 2022 Meta Platforms, Inc. and affiliates. 4 4 5 - NS='stress_reuseport_listen_ns' 5 + source lib.sh 6 6 NR_FILES=24100 7 7 SAVED_NR_FILES=$(ulimit -n) 8 8 9 9 setup() { 10 - ip netns add $NS 10 + setup_ns NS 11 11 ip netns exec $NS sysctl -q -w net.ipv6.ip_nonlocal_bind=1 12 12 ulimit -n $NR_FILES 13 13 } 14 14 15 15 cleanup() { 16 - ip netns del $NS 16 + cleanup_ns $NS 17 17 ulimit -n $SAVED_NR_FILES 18 18 } 19 19
+7 -7
tools/testing/selftests/net/toeplitz.sh
··· 147 147 setup_loopback_environment "${DEV}" 148 148 149 149 # Set up server_ns namespace and client_ns namespace 150 - setup_macvlan_ns "${DEV}" server_ns server \ 150 + setup_macvlan_ns "${DEV}" $server_ns server \ 151 151 "${SERVER_MAC}" "${SERVER_IP}" 152 - setup_macvlan_ns "${DEV}" client_ns client \ 152 + setup_macvlan_ns "${DEV}" $client_ns client \ 153 153 "${CLIENT_MAC}" "${CLIENT_IP}" 154 154 } 155 155 156 156 cleanup() { 157 - cleanup_macvlan_ns server_ns server client_ns client 157 + cleanup_macvlan_ns $server_ns server $client_ns client 158 158 cleanup_loopback "${DEV}" 159 159 } 160 160 ··· 170 170 # RPS/RFS must be disabled because they move packets between cpus, 171 171 # which breaks the PACKET_FANOUT_CPU identification of RSS decisions. 172 172 eval "$(get_disable_rfs_cmd) $(get_disable_rps_cmd)" \ 173 - ip netns exec server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \ 173 + ip netns exec $server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \ 174 174 -d "${PORT}" -i "${DEV}" -k "${KEY}" -T 1000 \ 175 175 -C "$(get_rx_irq_cpus)" -s -v & 176 176 elif [[ ! -z "${RPS_MAP}" ]]; then 177 177 eval "$(get_disable_rfs_cmd) $(get_set_rps_bitmaps_cmd ${RPS_MAP})" \ 178 - ip netns exec server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \ 178 + ip netns exec $server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \ 179 179 -d "${PORT}" -i "${DEV}" -k "${KEY}" -T 1000 \ 180 180 -r "0x${RPS_MAP}" -s -v & 181 181 else 182 - ip netns exec server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \ 182 + ip netns exec $server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \ 183 183 -d "${PORT}" -i "${DEV}" -k "${KEY}" -T 1000 -s -v & 184 184 fi 185 185 186 186 server_pid=$! 187 187 188 - ip netns exec client_ns ./toeplitz_client.sh "${PROTO_FLAG}" \ 188 + ip netns exec $client_ns ./toeplitz_client.sh "${PROTO_FLAG}" \ 189 189 "${IP_FLAG}" "${SERVER_IP%%/*}" "${PORT}" & 190 190 191 191 client_pid=$!
+68 -68
tools/testing/selftests/net/xfrm_policy.sh
··· 18 18 # ns1: ping 10.0.2.254: does NOT pass via ipsec tunnel (exception) 19 19 # ns2: ping 10.0.1.254: does NOT pass via ipsec tunnel (exception) 20 20 21 - # Kselftest framework requirement - SKIP code is 4. 22 - ksft_skip=4 21 + source lib.sh 23 22 ret=0 24 23 policy_checks_ok=1 25 24 ··· 203 204 ip=$2 204 205 local lret=0 205 206 206 - ip netns exec ns1 ping -q -c 1 10.0.2.$ip > /dev/null 207 + ip netns exec ${ns[1]} ping -q -c 1 10.0.2.$ip > /dev/null 207 208 208 - check_ipt_policy_count ns3 209 + check_ipt_policy_count ${ns[3]} 209 210 if [ $? -ne $rval ] ; then 210 211 lret=1 211 212 fi 212 - check_ipt_policy_count ns4 213 + check_ipt_policy_count ${ns[4]} 213 214 if [ $? -ne $rval ] ; then 214 215 lret=1 215 216 fi 216 217 217 - ip netns exec ns2 ping -q -c 1 10.0.1.$ip > /dev/null 218 + ip netns exec ${ns[2]} ping -q -c 1 10.0.1.$ip > /dev/null 218 219 219 - check_ipt_policy_count ns3 220 + check_ipt_policy_count ${ns[3]} 220 221 if [ $? -ne $rval ] ; then 221 222 lret=1 222 223 fi 223 - check_ipt_policy_count ns4 224 + check_ipt_policy_count ${ns[4]} 224 225 if [ $? -ne $rval ] ; then 225 226 lret=1 226 227 fi ··· 269 270 i=0 270 271 271 272 for i in $(seq 1 10);do 272 - ip -net ns1 xfrm policy update src e000:0001::0000 dst ff01::0014:0000:0001 dir in tmpl src :: dst :: proto esp mode tunnel priority 100 action allow || break 273 - ip -net ns1 xfrm policy set hthresh6 0 28 || break 273 + ip -net ${ns[1]} xfrm policy update src e000:0001::0000 dst ff01::0014:0000:0001 dir in tmpl src :: dst :: proto esp mode tunnel priority 100 action allow || break 274 + ip -net ${ns[1]} xfrm policy set hthresh6 0 28 || break 274 275 275 - ip -net ns1 xfrm policy update src e000:0001::0000 dst ff01::01 dir in tmpl src :: dst :: proto esp mode tunnel priority 100 action allow || break 276 - ip -net ns1 xfrm policy set hthresh6 0 28 || break 276 + ip -net ${ns[1]} xfrm policy update src e000:0001::0000 dst ff01::01 dir in tmpl src :: dst :: proto esp mode tunnel priority 100 action allow || break 277 + ip -net ${ns[1]} xfrm policy set hthresh6 0 28 || break 277 278 done 278 279 279 280 if [ $i -ne 10 ] ;then ··· 346 347 exit $ksft_skip 347 348 fi 348 349 349 - for i in 1 2 3 4; do 350 - ip netns add ns$i 351 - ip -net ns$i link set lo up 352 - done 350 + setup_ns ns1 ns2 ns3 ns4 351 + ns[1]=$ns1 352 + ns[2]=$ns2 353 + ns[3]=$ns3 354 + ns[4]=$ns4 353 355 354 356 DEV=veth0 355 - ip link add $DEV netns ns1 type veth peer name eth1 netns ns3 356 - ip link add $DEV netns ns2 type veth peer name eth1 netns ns4 357 + ip link add $DEV netns ${ns[1]} type veth peer name eth1 netns ${ns[3]} 358 + ip link add $DEV netns ${ns[2]} type veth peer name eth1 netns ${ns[4]} 357 359 358 - ip link add $DEV netns ns3 type veth peer name veth0 netns ns4 360 + ip link add $DEV netns ${ns[3]} type veth peer name veth0 netns ${ns[4]} 359 361 360 362 DEV=veth0 361 363 for i in 1 2; do 362 - ip -net ns$i link set $DEV up 363 - ip -net ns$i addr add 10.0.$i.2/24 dev $DEV 364 - ip -net ns$i addr add dead:$i::2/64 dev $DEV 364 + ip -net ${ns[$i]} link set $DEV up 365 + ip -net ${ns[$i]} addr add 10.0.$i.2/24 dev $DEV 366 + ip -net ${ns[$i]} addr add dead:$i::2/64 dev $DEV 365 367 366 - ip -net ns$i addr add 10.0.$i.253 dev $DEV 367 - ip -net ns$i addr add 10.0.$i.254 dev $DEV 368 - ip -net ns$i addr add dead:$i::fd dev $DEV 369 - ip -net ns$i addr add dead:$i::fe dev $DEV 368 + ip -net ${ns[$i]} addr add 10.0.$i.253 dev $DEV 369 + ip -net ${ns[$i]} addr add 10.0.$i.254 dev $DEV 370 + ip -net ${ns[$i]} addr add dead:$i::fd dev $DEV 371 + ip -net ${ns[$i]} addr add dead:$i::fe dev $DEV 370 372 done 371 373 372 374 for i in 3 4; do 373 - ip -net ns$i link set eth1 up 374 - ip -net ns$i link set veth0 up 375 + ip -net ${ns[$i]} link set eth1 up 376 + ip -net ${ns[$i]} link set veth0 up 375 377 done 376 378 377 - ip -net ns1 route add default via 10.0.1.1 378 - ip -net ns2 route add default via 10.0.2.1 379 + ip -net ${ns[1]} route add default via 10.0.1.1 380 + ip -net ${ns[2]} route add default via 10.0.2.1 379 381 380 - ip -net ns3 addr add 10.0.1.1/24 dev eth1 381 - ip -net ns3 addr add 10.0.3.1/24 dev veth0 382 - ip -net ns3 addr add 2001:1::1/64 dev eth1 383 - ip -net ns3 addr add 2001:3::1/64 dev veth0 382 + ip -net ${ns[3]} addr add 10.0.1.1/24 dev eth1 383 + ip -net ${ns[3]} addr add 10.0.3.1/24 dev veth0 384 + ip -net ${ns[3]} addr add 2001:1::1/64 dev eth1 385 + ip -net ${ns[3]} addr add 2001:3::1/64 dev veth0 384 386 385 - ip -net ns3 route add default via 10.0.3.10 387 + ip -net ${ns[3]} route add default via 10.0.3.10 386 388 387 - ip -net ns4 addr add 10.0.2.1/24 dev eth1 388 - ip -net ns4 addr add 10.0.3.10/24 dev veth0 389 - ip -net ns4 addr add 2001:2::1/64 dev eth1 390 - ip -net ns4 addr add 2001:3::10/64 dev veth0 391 - ip -net ns4 route add default via 10.0.3.1 389 + ip -net ${ns[4]} addr add 10.0.2.1/24 dev eth1 390 + ip -net ${ns[4]} addr add 10.0.3.10/24 dev veth0 391 + ip -net ${ns[4]} addr add 2001:2::1/64 dev eth1 392 + ip -net ${ns[4]} addr add 2001:3::10/64 dev veth0 393 + ip -net ${ns[4]} route add default via 10.0.3.1 392 394 393 395 for j in 4 6; do 394 396 for i in 3 4;do 395 - ip netns exec ns$i sysctl net.ipv$j.conf.eth1.forwarding=1 > /dev/null 396 - ip netns exec ns$i sysctl net.ipv$j.conf.veth0.forwarding=1 > /dev/null 397 + ip netns exec ${ns[$i]} sysctl net.ipv$j.conf.eth1.forwarding=1 > /dev/null 398 + ip netns exec ${ns[$i]} sysctl net.ipv$j.conf.veth0.forwarding=1 > /dev/null 397 399 done 398 400 done 399 401 400 402 # abuse iptables rule counter to check if ping matches a policy 401 - ip netns exec ns3 iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec 402 - ip netns exec ns4 iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec 403 + ip netns exec ${ns[3]} iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec 404 + ip netns exec ${ns[4]} iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec 403 405 if [ $? -ne 0 ];then 404 406 echo "SKIP: Could not insert iptables rule" 405 - for i in 1 2 3 4;do ip netns del ns$i;done 407 + cleanup_ns $ns1 $ns2 $ns3 $ns4 406 408 exit $ksft_skip 407 409 fi 408 410 409 411 # localip remoteip localnet remotenet 410 - do_esp ns3 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24 $SPI1 $SPI2 411 - do_esp ns3 dead:3::1 dead:3::10 dead:1::/64 dead:2::/64 $SPI1 $SPI2 412 - do_esp ns4 10.0.3.10 10.0.3.1 10.0.2.0/24 10.0.1.0/24 $SPI2 $SPI1 413 - do_esp ns4 dead:3::10 dead:3::1 dead:2::/64 dead:1::/64 $SPI2 $SPI1 412 + do_esp ${ns[3]} 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24 $SPI1 $SPI2 413 + do_esp ${ns[3]} dead:3::1 dead:3::10 dead:1::/64 dead:2::/64 $SPI1 $SPI2 414 + do_esp ${ns[4]} 10.0.3.10 10.0.3.1 10.0.2.0/24 10.0.1.0/24 $SPI2 $SPI1 415 + do_esp ${ns[4]} dead:3::10 dead:3::1 dead:2::/64 dead:1::/64 $SPI2 $SPI1 414 416 415 - do_dummies4 ns3 416 - do_dummies6 ns4 417 + do_dummies4 ${ns[3]} 418 + do_dummies6 ${ns[4]} 417 419 418 - do_esp_policy_get_check ns3 10.0.1.0/24 10.0.2.0/24 419 - do_esp_policy_get_check ns4 10.0.2.0/24 10.0.1.0/24 420 - do_esp_policy_get_check ns3 dead:1::/64 dead:2::/64 421 - do_esp_policy_get_check ns4 dead:2::/64 dead:1::/64 420 + do_esp_policy_get_check ${ns[3]} 10.0.1.0/24 10.0.2.0/24 421 + do_esp_policy_get_check ${ns[4]} 10.0.2.0/24 10.0.1.0/24 422 + do_esp_policy_get_check ${ns[3]} dead:1::/64 dead:2::/64 423 + do_esp_policy_get_check ${ns[4]} dead:2::/64 dead:1::/64 422 424 423 425 # ping to .254 should use ipsec, exception is not installed. 424 426 check_xfrm 1 254 ··· 432 432 433 433 # installs exceptions 434 434 # localip remoteip encryptdst plaindst 435 - do_exception ns3 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28 436 - do_exception ns4 10.0.3.10 10.0.3.1 10.0.1.253 10.0.1.240/28 435 + do_exception ${ns[3]} 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28 436 + do_exception ${ns[4]} 10.0.3.10 10.0.3.1 10.0.1.253 10.0.1.240/28 437 437 438 - do_exception ns3 dead:3::1 dead:3::10 dead:2::fd dead:2:f0::/96 439 - do_exception ns4 dead:3::10 dead:3::1 dead:1::fd dead:1:f0::/96 438 + do_exception ${ns[3]} dead:3::1 dead:3::10 dead:2::fd dead:2:f0::/96 439 + do_exception ${ns[4]} dead:3::10 dead:3::1 dead:1::fd dead:1:f0::/96 440 440 441 441 check_exceptions "exceptions" 442 442 if [ $? -ne 0 ]; then ··· 444 444 fi 445 445 446 446 # insert block policies with adjacent/overlapping netmasks 447 - do_overlap ns3 447 + do_overlap ${ns[3]} 448 448 449 449 check_exceptions "exceptions and block policies" 450 450 if [ $? -ne 0 ]; then 451 451 ret=1 452 452 fi 453 453 454 - for n in ns3 ns4;do 454 + for n in ${ns[3]} ${ns[4]};do 455 455 ip -net $n xfrm policy set hthresh4 28 24 hthresh6 126 125 456 456 sleep $((RANDOM%5)) 457 457 done ··· 459 459 check_exceptions "exceptions and block policies after hresh changes" 460 460 461 461 # full flush of policy db, check everything gets freed incl. internal meta data 462 - ip -net ns3 xfrm policy flush 462 + ip -net ${ns[3]} xfrm policy flush 463 463 464 - do_esp_policy ns3 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24 465 - do_exception ns3 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28 464 + do_esp_policy ${ns[3]} 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24 465 + do_exception ${ns[3]} 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28 466 466 467 467 # move inexact policies to hash table 468 - ip -net ns3 xfrm policy set hthresh4 16 16 468 + ip -net ${ns[3]} xfrm policy set hthresh4 16 16 469 469 470 470 sleep $((RANDOM%5)) 471 471 check_exceptions "exceptions and block policies after hthresh change in ns3" 472 472 473 473 # restore original hthresh settings -- move policies back to tables 474 - for n in ns3 ns4;do 474 + for n in ${ns[3]} ${ns[4]};do 475 475 ip -net $n xfrm policy set hthresh4 32 32 hthresh6 128 128 476 476 sleep $((RANDOM%5)) 477 477 done ··· 479 479 480 480 check_hthresh_repeat "policies with repeated htresh change" 481 481 482 - check_random_order ns3 "policies inserted in random order" 482 + check_random_order ${ns[3]} "policies inserted in random order" 483 483 484 - for i in 1 2 3 4;do ip netns del ns$i;done 484 + cleanup_ns $ns1 $ns2 $ns3 $ns4 485 485 486 486 exit $ret
+9 -1
tools/testing/selftests/run_kselftest.sh
··· 20 20 { 21 21 cat <<EOF 22 22 Usage: $0 [OPTIONS] 23 - -s | --summary Print summary with detailed log in output.log 23 + -s | --summary Print summary with detailed log in output.log (conflict with -p) 24 + -p | --per_test_log Print test log in /tmp with each test name (conflict with -s) 24 25 -t | --test COLLECTION:TEST Run TEST from COLLECTION 25 26 -c | --collection COLLECTION Run all tests from COLLECTION 26 27 -l | --list List the available collection:test entries 27 28 -d | --dry-run Don't actually run any tests 29 + -n | --netns Run each test in namespace 28 30 -h | --help Show this usage info 29 31 -o | --override-timeout Number of seconds after which we timeout 30 32 EOF ··· 43 41 logfile="$BASE_DIR"/output.log 44 42 cat /dev/null > $logfile 45 43 shift ;; 44 + -p | --per-test-log) 45 + per_test_logging=1 46 + shift ;; 46 47 -t | --test) 47 48 TESTS="$TESTS $2" 48 49 shift 2 ;; ··· 57 52 exit 0 ;; 58 53 -d | --dry-run) 59 54 dryrun="echo" 55 + shift ;; 56 + -n | --netns) 57 + RUN_IN_NETNS=1 60 58 shift ;; 61 59 -o | --override-timeout) 62 60 kselftest_override_timeout="$2"