mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
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>
This commit is contained in:
commit
2437c0f514
|
|
@ -6,6 +6,7 @@ export skip_rc=4
|
|||
export timeout_rc=124
|
||||
export logfile=/dev/stdout
|
||||
export per_test_logging=
|
||||
export RUN_IN_NETNS=
|
||||
|
||||
# Defaults for "settings" file fields:
|
||||
# "timeout" how many seconds to let each test run before running
|
||||
|
|
@ -47,7 +48,7 @@ run_one()
|
|||
{
|
||||
DIR="$1"
|
||||
TEST="$2"
|
||||
NUM="$3"
|
||||
local test_num="$3"
|
||||
|
||||
BASENAME_TEST=$(basename $TEST)
|
||||
|
||||
|
|
@ -141,6 +142,33 @@ run_one()
|
|||
fi
|
||||
}
|
||||
|
||||
in_netns()
|
||||
{
|
||||
local name=$1
|
||||
ip netns exec $name bash <<-EOF
|
||||
BASE_DIR=$BASE_DIR
|
||||
source $BASE_DIR/kselftest/runner.sh
|
||||
logfile=$logfile
|
||||
run_one $DIR $TEST $test_num
|
||||
EOF
|
||||
}
|
||||
|
||||
run_in_netns()
|
||||
{
|
||||
local netns=$(mktemp -u ${BASENAME_TEST}-XXXXXX)
|
||||
local tmplog="/tmp/$(mktemp -u ${BASENAME_TEST}-XXXXXX)"
|
||||
ip netns add $netns
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "# Warning: Create namespace failed for $BASENAME_TEST"
|
||||
echo "not ok $test_num selftests: $DIR: $BASENAME_TEST # Create NS failed"
|
||||
fi
|
||||
ip -n $netns link set lo up
|
||||
in_netns $netns &> $tmplog
|
||||
ip netns del $netns &> /dev/null
|
||||
cat $tmplog
|
||||
rm -f $tmplog
|
||||
}
|
||||
|
||||
run_many()
|
||||
{
|
||||
echo "TAP version 13"
|
||||
|
|
@ -155,6 +183,12 @@ run_many()
|
|||
logfile="/tmp/$BASENAME_TEST"
|
||||
cat /dev/null > "$logfile"
|
||||
fi
|
||||
run_one "$DIR" "$TEST" "$test_num"
|
||||
if [ -n "$RUN_IN_NETNS" ]; then
|
||||
run_in_netns &
|
||||
else
|
||||
run_one "$DIR" "$TEST" "$test_num"
|
||||
fi
|
||||
done
|
||||
|
||||
wait
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,10 +2,8 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# This test is for checking GRE GSO.
|
||||
|
||||
source lib.sh
|
||||
ret=0
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
|
||||
# all tests in this script. Can be overridden with -t option
|
||||
TESTS="gre_gso"
|
||||
|
|
@ -13,8 +11,6 @@ TESTS="gre_gso"
|
|||
VERBOSE=0
|
||||
PAUSE_ON_FAIL=no
|
||||
PAUSE=no
|
||||
IP="ip -netns ns1"
|
||||
NS_EXEC="ip netns exec ns1"
|
||||
TMPFILE=`mktemp`
|
||||
PID=
|
||||
|
||||
|
|
@ -50,13 +46,13 @@ log_test()
|
|||
setup()
|
||||
{
|
||||
set -e
|
||||
ip netns add ns1
|
||||
ip netns set ns1 auto
|
||||
$IP link set dev lo up
|
||||
setup_ns ns1
|
||||
IP="ip -netns $ns1"
|
||||
NS_EXEC="ip netns exec $ns1"
|
||||
|
||||
ip link add veth0 type veth peer name veth1
|
||||
ip link set veth0 up
|
||||
ip link set veth1 netns ns1
|
||||
ip link set veth1 netns $ns1
|
||||
$IP link set veth1 name veth0
|
||||
$IP link set veth0 up
|
||||
|
||||
|
|
@ -70,7 +66,7 @@ cleanup()
|
|||
[ -n "$PID" ] && kill $PID
|
||||
ip link del dev gre1 &> /dev/null
|
||||
ip link del dev veth0 &> /dev/null
|
||||
ip netns del ns1
|
||||
cleanup_ns $ns1
|
||||
}
|
||||
|
||||
get_linklocal()
|
||||
|
|
@ -145,7 +141,7 @@ gre6_gso_test()
|
|||
setup
|
||||
|
||||
a1=$(get_linklocal veth0)
|
||||
a2=$(get_linklocal veth0 ns1)
|
||||
a2=$(get_linklocal veth0 $ns1)
|
||||
|
||||
gre_create_tun $a1 $a2
|
||||
|
||||
|
|
|
|||
|
|
@ -23,11 +23,11 @@ run_test() {
|
|||
# on every try.
|
||||
for tries in {1..3}; do
|
||||
# Actual test starts here
|
||||
ip netns exec server_ns ./gro "${ARGS[@]}" "--rx" "--iface" "server" \
|
||||
ip netns exec $server_ns ./gro "${ARGS[@]}" "--rx" "--iface" "server" \
|
||||
1>>log.txt &
|
||||
server_pid=$!
|
||||
sleep 0.5 # to allow for socket init
|
||||
ip netns exec client_ns ./gro "${ARGS[@]}" "--iface" "client" \
|
||||
ip netns exec $client_ns ./gro "${ARGS[@]}" "--iface" "client" \
|
||||
1>>log.txt
|
||||
wait "${server_pid}"
|
||||
exit_code=$?
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
source lib.sh
|
||||
set -o pipefail
|
||||
|
||||
NS=netns-name-test
|
||||
DEV=dummy-dev0
|
||||
DEV2=dummy-dev1
|
||||
ALT_NAME=some-alt-name
|
||||
|
|
@ -11,7 +11,7 @@ ALT_NAME=some-alt-name
|
|||
RET_CODE=0
|
||||
|
||||
cleanup() {
|
||||
ip netns del $NS
|
||||
cleanup_ns $NS $test_ns
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
|
@ -21,50 +21,50 @@ fail() {
|
|||
RET_CODE=1
|
||||
}
|
||||
|
||||
ip netns add $NS
|
||||
setup_ns NS test_ns
|
||||
|
||||
#
|
||||
# Test basic move without a rename
|
||||
#
|
||||
ip -netns $NS link add name $DEV type dummy || fail
|
||||
ip -netns $NS link set dev $DEV netns 1 ||
|
||||
ip -netns $NS link set dev $DEV netns $test_ns ||
|
||||
fail "Can't perform a netns move"
|
||||
ip link show dev $DEV >> /dev/null || fail "Device not found after move"
|
||||
ip link del $DEV || fail
|
||||
ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found after move"
|
||||
ip -netns $test_ns link del $DEV || fail
|
||||
|
||||
#
|
||||
# Test move with a conflict
|
||||
#
|
||||
ip link add name $DEV type dummy
|
||||
ip -netns $test_ns link add name $DEV type dummy
|
||||
ip -netns $NS link add name $DEV type dummy || fail
|
||||
ip -netns $NS link set dev $DEV netns 1 2> /dev/null &&
|
||||
ip -netns $NS link set dev $DEV netns $test_ns 2> /dev/null &&
|
||||
fail "Performed a netns move with a name conflict"
|
||||
ip link show dev $DEV >> /dev/null || fail "Device not found after move"
|
||||
ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found after move"
|
||||
ip -netns $NS link del $DEV || fail
|
||||
ip link del $DEV || fail
|
||||
ip -netns $test_ns link del $DEV || fail
|
||||
|
||||
#
|
||||
# Test move with a conflict and rename
|
||||
#
|
||||
ip link add name $DEV type dummy
|
||||
ip -netns $test_ns link add name $DEV type dummy
|
||||
ip -netns $NS link add name $DEV type dummy || fail
|
||||
ip -netns $NS link set dev $DEV netns 1 name $DEV2 ||
|
||||
ip -netns $NS link set dev $DEV netns $test_ns name $DEV2 ||
|
||||
fail "Can't perform a netns move with rename"
|
||||
ip link del $DEV2 || fail
|
||||
ip link del $DEV || fail
|
||||
ip -netns $test_ns link del $DEV2 || fail
|
||||
ip -netns $test_ns link del $DEV || fail
|
||||
|
||||
#
|
||||
# Test dup alt-name with netns move
|
||||
#
|
||||
ip link add name $DEV type dummy || fail
|
||||
ip link property add dev $DEV altname $ALT_NAME || fail
|
||||
ip -netns $test_ns link add name $DEV type dummy || fail
|
||||
ip -netns $test_ns link property add dev $DEV altname $ALT_NAME || fail
|
||||
ip -netns $NS link add name $DEV2 type dummy || fail
|
||||
ip -netns $NS link property add dev $DEV2 altname $ALT_NAME || fail
|
||||
|
||||
ip -netns $NS link set dev $DEV2 netns 1 2> /dev/null &&
|
||||
ip -netns $NS link set dev $DEV2 netns $test_ns 2> /dev/null &&
|
||||
fail "Moved with alt-name dup"
|
||||
|
||||
ip link del $DEV || fail
|
||||
ip -netns $test_ns link del $DEV || fail
|
||||
ip -netns $NS link del $DEV2 || fail
|
||||
|
||||
#
|
||||
|
|
@ -72,11 +72,11 @@ ip -netns $NS link del $DEV2 || fail
|
|||
#
|
||||
ip -netns $NS link add name $DEV type dummy || fail
|
||||
ip -netns $NS link property add dev $DEV altname $ALT_NAME || fail
|
||||
ip -netns $NS link set dev $DEV netns 1 || fail
|
||||
ip link show dev $ALT_NAME >> /dev/null || fail "Can't find alt-name after move"
|
||||
ip -netns $NS link show dev $ALT_NAME 2> /dev/null &&
|
||||
ip -netns $NS link set dev $DEV netns $test_ns || fail
|
||||
ip -netns $test_ns link show dev $ALT_NAME >> /dev/null || fail "Can't find alt-name after move"
|
||||
ip -netns $NS link show dev $ALT_NAME 2> /dev/null &&
|
||||
fail "Can still find alt-name after move"
|
||||
ip link del $DEV || fail
|
||||
ip -netns $test_ns link del $DEV || fail
|
||||
|
||||
echo -ne "$(basename $0) \t\t\t\t"
|
||||
if [ $RET_CODE -eq 0 ]; then
|
||||
|
|
|
|||
|
|
@ -198,8 +198,7 @@
|
|||
# - pmtu_ipv6_route_change
|
||||
# Same as above but with IPv6
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
source ./lib.sh
|
||||
|
||||
PAUSE_ON_FAIL=no
|
||||
VERBOSE=0
|
||||
|
|
@ -268,16 +267,6 @@ tests="
|
|||
pmtu_ipv4_route_change ipv4: PMTU exception w/route replace 1
|
||||
pmtu_ipv6_route_change ipv6: PMTU exception w/route replace 1"
|
||||
|
||||
NS_A="ns-A"
|
||||
NS_B="ns-B"
|
||||
NS_C="ns-C"
|
||||
NS_R1="ns-R1"
|
||||
NS_R2="ns-R2"
|
||||
ns_a="ip netns exec ${NS_A}"
|
||||
ns_b="ip netns exec ${NS_B}"
|
||||
ns_c="ip netns exec ${NS_C}"
|
||||
ns_r1="ip netns exec ${NS_R1}"
|
||||
ns_r2="ip netns exec ${NS_R2}"
|
||||
# Addressing and routing for tests with routers: four network segments, with
|
||||
# index SEGMENT between 1 and 4, a common prefix (PREFIX4 or PREFIX6) and an
|
||||
# identifier ID, which is 1 for hosts (A and B), 2 for routers (R1 and R2).
|
||||
|
|
@ -543,13 +532,17 @@ setup_ip6ip6() {
|
|||
}
|
||||
|
||||
setup_namespaces() {
|
||||
setup_ns NS_A NS_B NS_C NS_R1 NS_R2
|
||||
for n in ${NS_A} ${NS_B} ${NS_C} ${NS_R1} ${NS_R2}; do
|
||||
ip netns add ${n} || return 1
|
||||
|
||||
# Disable DAD, so that we don't have to wait to use the
|
||||
# configured IPv6 addresses
|
||||
ip netns exec ${n} sysctl -q net/ipv6/conf/default/accept_dad=0
|
||||
done
|
||||
ns_a="ip netns exec ${NS_A}"
|
||||
ns_b="ip netns exec ${NS_B}"
|
||||
ns_c="ip netns exec ${NS_C}"
|
||||
ns_r1="ip netns exec ${NS_R1}"
|
||||
ns_r2="ip netns exec ${NS_R2}"
|
||||
}
|
||||
|
||||
setup_veth() {
|
||||
|
|
@ -839,7 +832,7 @@ setup_bridge() {
|
|||
run_cmd ${ns_a} ip link set br0 up
|
||||
|
||||
run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C
|
||||
run_cmd ${ns_c} ip link set veth_A-C netns ns-A
|
||||
run_cmd ${ns_c} ip link set veth_A-C netns ${NS_A}
|
||||
|
||||
run_cmd ${ns_a} ip link set veth_A-C up
|
||||
run_cmd ${ns_c} ip link set veth_C-A up
|
||||
|
|
@ -944,9 +937,7 @@ cleanup() {
|
|||
done
|
||||
socat_pids=
|
||||
|
||||
for n in ${NS_A} ${NS_B} ${NS_C} ${NS_R1} ${NS_R2}; do
|
||||
ip netns del ${n} 2> /dev/null
|
||||
done
|
||||
cleanup_all_ns
|
||||
|
||||
ip link del veth_A-C 2>/dev/null
|
||||
ip link del veth_A-R1 2>/dev/null
|
||||
|
|
|
|||
|
|
@ -35,8 +35,7 @@ VERBOSE=0
|
|||
PAUSE=no
|
||||
PAUSE_ON_FAIL=no
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
source lib.sh
|
||||
|
||||
# set global exit status, but never reset nonzero one.
|
||||
check_err()
|
||||
|
|
@ -517,9 +516,8 @@ kci_test_encap_fou()
|
|||
# test various encap methods, use netns to avoid unwanted interference
|
||||
kci_test_encap()
|
||||
{
|
||||
testns="testns"
|
||||
local ret=0
|
||||
run_cmd ip netns add "$testns"
|
||||
setup_ns testns
|
||||
if [ $? -ne 0 ]; then
|
||||
end_test "SKIP encap tests: cannot add net namespace $testns"
|
||||
return $ksft_skip
|
||||
|
|
@ -574,6 +572,10 @@ kci_test_macsec_offload()
|
|||
return $ksft_skip
|
||||
fi
|
||||
|
||||
if ! mount | grep -q debugfs; then
|
||||
mount -t debugfs none /sys/kernel/debug/ &> /dev/null
|
||||
fi
|
||||
|
||||
# setup netdevsim since dummydev doesn't have offload support
|
||||
if [ ! -w /sys/bus/netdevsim/new_device ] ; then
|
||||
run_cmd modprobe -q netdevsim
|
||||
|
|
@ -738,6 +740,10 @@ kci_test_ipsec_offload()
|
|||
sysfsnet=/sys/bus/netdevsim/devices/netdevsim0/net/
|
||||
probed=false
|
||||
|
||||
if ! mount | grep -q debugfs; then
|
||||
mount -t debugfs none /sys/kernel/debug/ &> /dev/null
|
||||
fi
|
||||
|
||||
# setup netdevsim since dummydev doesn't have offload support
|
||||
if [ ! -w /sys/bus/netdevsim/new_device ] ; then
|
||||
run_cmd modprobe -q netdevsim
|
||||
|
|
@ -836,11 +842,10 @@ EOF
|
|||
|
||||
kci_test_gretap()
|
||||
{
|
||||
testns="testns"
|
||||
DEV_NS=gretap00
|
||||
local ret=0
|
||||
|
||||
run_cmd ip netns add "$testns"
|
||||
setup_ns testns
|
||||
if [ $? -ne 0 ]; then
|
||||
end_test "SKIP gretap tests: cannot add net namespace $testns"
|
||||
return $ksft_skip
|
||||
|
|
@ -878,11 +883,10 @@ kci_test_gretap()
|
|||
|
||||
kci_test_ip6gretap()
|
||||
{
|
||||
testns="testns"
|
||||
DEV_NS=ip6gretap00
|
||||
local ret=0
|
||||
|
||||
run_cmd ip netns add "$testns"
|
||||
setup_ns testns
|
||||
if [ $? -ne 0 ]; then
|
||||
end_test "SKIP ip6gretap tests: cannot add net namespace $testns"
|
||||
return $ksft_skip
|
||||
|
|
@ -920,7 +924,6 @@ kci_test_ip6gretap()
|
|||
|
||||
kci_test_erspan()
|
||||
{
|
||||
testns="testns"
|
||||
DEV_NS=erspan00
|
||||
local ret=0
|
||||
run_cmd_grep "^Usage:" ip link help erspan
|
||||
|
|
@ -928,7 +931,7 @@ kci_test_erspan()
|
|||
end_test "SKIP: erspan: iproute2 too old"
|
||||
return $ksft_skip
|
||||
fi
|
||||
run_cmd ip netns add "$testns"
|
||||
setup_ns testns
|
||||
if [ $? -ne 0 ]; then
|
||||
end_test "SKIP erspan tests: cannot add net namespace $testns"
|
||||
return $ksft_skip
|
||||
|
|
@ -970,7 +973,6 @@ kci_test_erspan()
|
|||
|
||||
kci_test_ip6erspan()
|
||||
{
|
||||
testns="testns"
|
||||
DEV_NS=ip6erspan00
|
||||
local ret=0
|
||||
run_cmd_grep "^Usage:" ip link help ip6erspan
|
||||
|
|
@ -978,7 +980,7 @@ kci_test_ip6erspan()
|
|||
end_test "SKIP: ip6erspan: iproute2 too old"
|
||||
return $ksft_skip
|
||||
fi
|
||||
run_cmd ip netns add "$testns"
|
||||
setup_ns testns
|
||||
if [ $? -ne 0 ]; then
|
||||
end_test "SKIP ip6erspan tests: cannot add net namespace $testns"
|
||||
return $ksft_skip
|
||||
|
|
@ -1022,8 +1024,6 @@ kci_test_ip6erspan()
|
|||
|
||||
kci_test_fdb_get()
|
||||
{
|
||||
IP="ip -netns testns"
|
||||
BRIDGE="bridge -netns testns"
|
||||
brdev="test-br0"
|
||||
vxlandev="vxlan10"
|
||||
test_mac=de:ad:be:ef:13:37
|
||||
|
|
@ -1037,11 +1037,13 @@ kci_test_fdb_get()
|
|||
return $ksft_skip
|
||||
fi
|
||||
|
||||
run_cmd ip netns add testns
|
||||
setup_ns testns
|
||||
if [ $? -ne 0 ]; then
|
||||
end_test "SKIP fdb get tests: cannot add net namespace $testns"
|
||||
return $ksft_skip
|
||||
fi
|
||||
IP="ip -netns $testns"
|
||||
BRIDGE="bridge -netns $testns"
|
||||
run_cmd $IP link add "$vxlandev" type vxlan id 10 local $localip \
|
||||
dstport 4789
|
||||
run_cmd $IP link add name "$brdev" type bridge
|
||||
|
|
@ -1052,7 +1054,7 @@ kci_test_fdb_get()
|
|||
run_cmd_grep "dev $vxlandev master $brdev" $BRIDGE fdb get $test_mac br "$brdev"
|
||||
run_cmd_grep "dev $vxlandev dst $dstip" $BRIDGE fdb get $test_mac dev "$vxlandev" self
|
||||
|
||||
ip netns del testns &>/dev/null
|
||||
ip netns del $testns &>/dev/null
|
||||
|
||||
if [ $ret -ne 0 ]; then
|
||||
end_test "FAIL: bridge fdb get"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ readonly FLUSH_PATH="/sys/class/net/${dev}/gro_flush_timeout"
|
|||
readonly IRQ_PATH="/sys/class/net/${dev}/napi_defer_hard_irqs"
|
||||
readonly FLUSH_TIMEOUT="$(< ${FLUSH_PATH})"
|
||||
readonly HARD_IRQS="$(< ${IRQ_PATH})"
|
||||
readonly server_ns=$(mktemp -u server-XXXXXXXX)
|
||||
readonly client_ns=$(mktemp -u client-XXXXXXXX)
|
||||
|
||||
netdev_check_for_carrier() {
|
||||
local -r dev="$1"
|
||||
|
|
@ -97,12 +99,12 @@ setup_interrupt() {
|
|||
|
||||
setup_ns() {
|
||||
# Set up server_ns namespace and client_ns namespace
|
||||
setup_macvlan_ns "${dev}" server_ns server "${SERVER_MAC}"
|
||||
setup_macvlan_ns "${dev}" client_ns client "${CLIENT_MAC}"
|
||||
setup_macvlan_ns "${dev}" ${server_ns} server "${SERVER_MAC}"
|
||||
setup_macvlan_ns "${dev}" ${client_ns} client "${CLIENT_MAC}"
|
||||
}
|
||||
|
||||
cleanup_ns() {
|
||||
cleanup_macvlan_ns server_ns server client_ns client
|
||||
cleanup_macvlan_ns ${server_ns} server ${client_ns} client
|
||||
}
|
||||
|
||||
setup() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
readonly server_ns=$(mktemp -u server-XXXXXXXX)
|
||||
readonly client_ns=$(mktemp -u client-XXXXXXXX)
|
||||
|
||||
setup_veth_ns() {
|
||||
local -r link_dev="$1"
|
||||
local -r ns_name="$2"
|
||||
|
|
@ -19,14 +22,14 @@ setup_ns() {
|
|||
# Set up server_ns namespace and client_ns namespace
|
||||
ip link add name server type veth peer name client
|
||||
|
||||
setup_veth_ns "${dev}" server_ns server "${SERVER_MAC}"
|
||||
setup_veth_ns "${dev}" client_ns client "${CLIENT_MAC}"
|
||||
setup_veth_ns "${dev}" ${server_ns} server "${SERVER_MAC}"
|
||||
setup_veth_ns "${dev}" ${client_ns} client "${CLIENT_MAC}"
|
||||
}
|
||||
|
||||
cleanup_ns() {
|
||||
local ns_name
|
||||
|
||||
for ns_name in client_ns server_ns; do
|
||||
for ns_name in ${client_ns} ${server_ns}; do
|
||||
[[ -e /var/run/netns/"${ns_name}" ]] && ip netns del "${ns_name}"
|
||||
done
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (c) 2022 Meta Platforms, Inc. and affiliates.
|
||||
|
||||
NS='stress_reuseport_listen_ns'
|
||||
source lib.sh
|
||||
NR_FILES=24100
|
||||
SAVED_NR_FILES=$(ulimit -n)
|
||||
|
||||
setup() {
|
||||
ip netns add $NS
|
||||
setup_ns NS
|
||||
ip netns exec $NS sysctl -q -w net.ipv6.ip_nonlocal_bind=1
|
||||
ulimit -n $NR_FILES
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
ip netns del $NS
|
||||
cleanup_ns $NS
|
||||
ulimit -n $SAVED_NR_FILES
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,14 +147,14 @@ setup() {
|
|||
setup_loopback_environment "${DEV}"
|
||||
|
||||
# Set up server_ns namespace and client_ns namespace
|
||||
setup_macvlan_ns "${DEV}" server_ns server \
|
||||
setup_macvlan_ns "${DEV}" $server_ns server \
|
||||
"${SERVER_MAC}" "${SERVER_IP}"
|
||||
setup_macvlan_ns "${DEV}" client_ns client \
|
||||
setup_macvlan_ns "${DEV}" $client_ns client \
|
||||
"${CLIENT_MAC}" "${CLIENT_IP}"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
cleanup_macvlan_ns server_ns server client_ns client
|
||||
cleanup_macvlan_ns $server_ns server $client_ns client
|
||||
cleanup_loopback "${DEV}"
|
||||
}
|
||||
|
||||
|
|
@ -170,22 +170,22 @@ if [[ "${TEST_RSS}" = true ]]; then
|
|||
# RPS/RFS must be disabled because they move packets between cpus,
|
||||
# which breaks the PACKET_FANOUT_CPU identification of RSS decisions.
|
||||
eval "$(get_disable_rfs_cmd) $(get_disable_rps_cmd)" \
|
||||
ip netns exec server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \
|
||||
ip netns exec $server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \
|
||||
-d "${PORT}" -i "${DEV}" -k "${KEY}" -T 1000 \
|
||||
-C "$(get_rx_irq_cpus)" -s -v &
|
||||
elif [[ ! -z "${RPS_MAP}" ]]; then
|
||||
eval "$(get_disable_rfs_cmd) $(get_set_rps_bitmaps_cmd ${RPS_MAP})" \
|
||||
ip netns exec server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \
|
||||
ip netns exec $server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \
|
||||
-d "${PORT}" -i "${DEV}" -k "${KEY}" -T 1000 \
|
||||
-r "0x${RPS_MAP}" -s -v &
|
||||
else
|
||||
ip netns exec server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \
|
||||
ip netns exec $server_ns ./toeplitz "${IP_FLAG}" "${PROTO_FLAG}" \
|
||||
-d "${PORT}" -i "${DEV}" -k "${KEY}" -T 1000 -s -v &
|
||||
fi
|
||||
|
||||
server_pid=$!
|
||||
|
||||
ip netns exec client_ns ./toeplitz_client.sh "${PROTO_FLAG}" \
|
||||
ip netns exec $client_ns ./toeplitz_client.sh "${PROTO_FLAG}" \
|
||||
"${IP_FLAG}" "${SERVER_IP%%/*}" "${PORT}" &
|
||||
|
||||
client_pid=$!
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# ns1: ping 10.0.2.254: does NOT pass via ipsec tunnel (exception)
|
||||
# ns2: ping 10.0.1.254: does NOT pass via ipsec tunnel (exception)
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
source lib.sh
|
||||
ret=0
|
||||
policy_checks_ok=1
|
||||
|
||||
|
|
@ -204,24 +203,24 @@ check_xfrm() {
|
|||
ip=$2
|
||||
local lret=0
|
||||
|
||||
ip netns exec ns1 ping -q -c 1 10.0.2.$ip > /dev/null
|
||||
ip netns exec ${ns[1]} ping -q -c 1 10.0.2.$ip > /dev/null
|
||||
|
||||
check_ipt_policy_count ns3
|
||||
check_ipt_policy_count ${ns[3]}
|
||||
if [ $? -ne $rval ] ; then
|
||||
lret=1
|
||||
fi
|
||||
check_ipt_policy_count ns4
|
||||
check_ipt_policy_count ${ns[4]}
|
||||
if [ $? -ne $rval ] ; then
|
||||
lret=1
|
||||
fi
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 10.0.1.$ip > /dev/null
|
||||
ip netns exec ${ns[2]} ping -q -c 1 10.0.1.$ip > /dev/null
|
||||
|
||||
check_ipt_policy_count ns3
|
||||
check_ipt_policy_count ${ns[3]}
|
||||
if [ $? -ne $rval ] ; then
|
||||
lret=1
|
||||
fi
|
||||
check_ipt_policy_count ns4
|
||||
check_ipt_policy_count ${ns[4]}
|
||||
if [ $? -ne $rval ] ; then
|
||||
lret=1
|
||||
fi
|
||||
|
|
@ -270,11 +269,11 @@ check_hthresh_repeat()
|
|||
i=0
|
||||
|
||||
for i in $(seq 1 10);do
|
||||
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
|
||||
ip -net ns1 xfrm policy set hthresh6 0 28 || break
|
||||
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
|
||||
ip -net ${ns[1]} xfrm policy set hthresh6 0 28 || break
|
||||
|
||||
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
|
||||
ip -net ns1 xfrm policy set hthresh6 0 28 || break
|
||||
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
|
||||
ip -net ${ns[1]} xfrm policy set hthresh6 0 28 || break
|
||||
done
|
||||
|
||||
if [ $i -ne 10 ] ;then
|
||||
|
|
@ -347,79 +346,80 @@ if [ $? -ne 0 ];then
|
|||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
for i in 1 2 3 4; do
|
||||
ip netns add ns$i
|
||||
ip -net ns$i link set lo up
|
||||
done
|
||||
setup_ns ns1 ns2 ns3 ns4
|
||||
ns[1]=$ns1
|
||||
ns[2]=$ns2
|
||||
ns[3]=$ns3
|
||||
ns[4]=$ns4
|
||||
|
||||
DEV=veth0
|
||||
ip link add $DEV netns ns1 type veth peer name eth1 netns ns3
|
||||
ip link add $DEV netns ns2 type veth peer name eth1 netns ns4
|
||||
ip link add $DEV netns ${ns[1]} type veth peer name eth1 netns ${ns[3]}
|
||||
ip link add $DEV netns ${ns[2]} type veth peer name eth1 netns ${ns[4]}
|
||||
|
||||
ip link add $DEV netns ns3 type veth peer name veth0 netns ns4
|
||||
ip link add $DEV netns ${ns[3]} type veth peer name veth0 netns ${ns[4]}
|
||||
|
||||
DEV=veth0
|
||||
for i in 1 2; do
|
||||
ip -net ns$i link set $DEV up
|
||||
ip -net ns$i addr add 10.0.$i.2/24 dev $DEV
|
||||
ip -net ns$i addr add dead:$i::2/64 dev $DEV
|
||||
ip -net ${ns[$i]} link set $DEV up
|
||||
ip -net ${ns[$i]} addr add 10.0.$i.2/24 dev $DEV
|
||||
ip -net ${ns[$i]} addr add dead:$i::2/64 dev $DEV
|
||||
|
||||
ip -net ns$i addr add 10.0.$i.253 dev $DEV
|
||||
ip -net ns$i addr add 10.0.$i.254 dev $DEV
|
||||
ip -net ns$i addr add dead:$i::fd dev $DEV
|
||||
ip -net ns$i addr add dead:$i::fe dev $DEV
|
||||
ip -net ${ns[$i]} addr add 10.0.$i.253 dev $DEV
|
||||
ip -net ${ns[$i]} addr add 10.0.$i.254 dev $DEV
|
||||
ip -net ${ns[$i]} addr add dead:$i::fd dev $DEV
|
||||
ip -net ${ns[$i]} addr add dead:$i::fe dev $DEV
|
||||
done
|
||||
|
||||
for i in 3 4; do
|
||||
ip -net ns$i link set eth1 up
|
||||
ip -net ns$i link set veth0 up
|
||||
ip -net ${ns[$i]} link set eth1 up
|
||||
ip -net ${ns[$i]} link set veth0 up
|
||||
done
|
||||
|
||||
ip -net ns1 route add default via 10.0.1.1
|
||||
ip -net ns2 route add default via 10.0.2.1
|
||||
ip -net ${ns[1]} route add default via 10.0.1.1
|
||||
ip -net ${ns[2]} route add default via 10.0.2.1
|
||||
|
||||
ip -net ns3 addr add 10.0.1.1/24 dev eth1
|
||||
ip -net ns3 addr add 10.0.3.1/24 dev veth0
|
||||
ip -net ns3 addr add 2001:1::1/64 dev eth1
|
||||
ip -net ns3 addr add 2001:3::1/64 dev veth0
|
||||
ip -net ${ns[3]} addr add 10.0.1.1/24 dev eth1
|
||||
ip -net ${ns[3]} addr add 10.0.3.1/24 dev veth0
|
||||
ip -net ${ns[3]} addr add 2001:1::1/64 dev eth1
|
||||
ip -net ${ns[3]} addr add 2001:3::1/64 dev veth0
|
||||
|
||||
ip -net ns3 route add default via 10.0.3.10
|
||||
ip -net ${ns[3]} route add default via 10.0.3.10
|
||||
|
||||
ip -net ns4 addr add 10.0.2.1/24 dev eth1
|
||||
ip -net ns4 addr add 10.0.3.10/24 dev veth0
|
||||
ip -net ns4 addr add 2001:2::1/64 dev eth1
|
||||
ip -net ns4 addr add 2001:3::10/64 dev veth0
|
||||
ip -net ns4 route add default via 10.0.3.1
|
||||
ip -net ${ns[4]} addr add 10.0.2.1/24 dev eth1
|
||||
ip -net ${ns[4]} addr add 10.0.3.10/24 dev veth0
|
||||
ip -net ${ns[4]} addr add 2001:2::1/64 dev eth1
|
||||
ip -net ${ns[4]} addr add 2001:3::10/64 dev veth0
|
||||
ip -net ${ns[4]} route add default via 10.0.3.1
|
||||
|
||||
for j in 4 6; do
|
||||
for i in 3 4;do
|
||||
ip netns exec ns$i sysctl net.ipv$j.conf.eth1.forwarding=1 > /dev/null
|
||||
ip netns exec ns$i sysctl net.ipv$j.conf.veth0.forwarding=1 > /dev/null
|
||||
ip netns exec ${ns[$i]} sysctl net.ipv$j.conf.eth1.forwarding=1 > /dev/null
|
||||
ip netns exec ${ns[$i]} sysctl net.ipv$j.conf.veth0.forwarding=1 > /dev/null
|
||||
done
|
||||
done
|
||||
|
||||
# abuse iptables rule counter to check if ping matches a policy
|
||||
ip netns exec ns3 iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec
|
||||
ip netns exec ns4 iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec
|
||||
ip netns exec ${ns[3]} iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec
|
||||
ip netns exec ${ns[4]} iptables -p icmp -A FORWARD -m policy --dir out --pol ipsec
|
||||
if [ $? -ne 0 ];then
|
||||
echo "SKIP: Could not insert iptables rule"
|
||||
for i in 1 2 3 4;do ip netns del ns$i;done
|
||||
cleanup_ns $ns1 $ns2 $ns3 $ns4
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
# localip remoteip localnet remotenet
|
||||
do_esp ns3 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24 $SPI1 $SPI2
|
||||
do_esp ns3 dead:3::1 dead:3::10 dead:1::/64 dead:2::/64 $SPI1 $SPI2
|
||||
do_esp ns4 10.0.3.10 10.0.3.1 10.0.2.0/24 10.0.1.0/24 $SPI2 $SPI1
|
||||
do_esp ns4 dead:3::10 dead:3::1 dead:2::/64 dead:1::/64 $SPI2 $SPI1
|
||||
do_esp ${ns[3]} 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24 $SPI1 $SPI2
|
||||
do_esp ${ns[3]} dead:3::1 dead:3::10 dead:1::/64 dead:2::/64 $SPI1 $SPI2
|
||||
do_esp ${ns[4]} 10.0.3.10 10.0.3.1 10.0.2.0/24 10.0.1.0/24 $SPI2 $SPI1
|
||||
do_esp ${ns[4]} dead:3::10 dead:3::1 dead:2::/64 dead:1::/64 $SPI2 $SPI1
|
||||
|
||||
do_dummies4 ns3
|
||||
do_dummies6 ns4
|
||||
do_dummies4 ${ns[3]}
|
||||
do_dummies6 ${ns[4]}
|
||||
|
||||
do_esp_policy_get_check ns3 10.0.1.0/24 10.0.2.0/24
|
||||
do_esp_policy_get_check ns4 10.0.2.0/24 10.0.1.0/24
|
||||
do_esp_policy_get_check ns3 dead:1::/64 dead:2::/64
|
||||
do_esp_policy_get_check ns4 dead:2::/64 dead:1::/64
|
||||
do_esp_policy_get_check ${ns[3]} 10.0.1.0/24 10.0.2.0/24
|
||||
do_esp_policy_get_check ${ns[4]} 10.0.2.0/24 10.0.1.0/24
|
||||
do_esp_policy_get_check ${ns[3]} dead:1::/64 dead:2::/64
|
||||
do_esp_policy_get_check ${ns[4]} dead:2::/64 dead:1::/64
|
||||
|
||||
# ping to .254 should use ipsec, exception is not installed.
|
||||
check_xfrm 1 254
|
||||
|
|
@ -432,11 +432,11 @@ fi
|
|||
|
||||
# installs exceptions
|
||||
# localip remoteip encryptdst plaindst
|
||||
do_exception ns3 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28
|
||||
do_exception ns4 10.0.3.10 10.0.3.1 10.0.1.253 10.0.1.240/28
|
||||
do_exception ${ns[3]} 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28
|
||||
do_exception ${ns[4]} 10.0.3.10 10.0.3.1 10.0.1.253 10.0.1.240/28
|
||||
|
||||
do_exception ns3 dead:3::1 dead:3::10 dead:2::fd dead:2:f0::/96
|
||||
do_exception ns4 dead:3::10 dead:3::1 dead:1::fd dead:1:f0::/96
|
||||
do_exception ${ns[3]} dead:3::1 dead:3::10 dead:2::fd dead:2:f0::/96
|
||||
do_exception ${ns[4]} dead:3::10 dead:3::1 dead:1::fd dead:1:f0::/96
|
||||
|
||||
check_exceptions "exceptions"
|
||||
if [ $? -ne 0 ]; then
|
||||
|
|
@ -444,14 +444,14 @@ if [ $? -ne 0 ]; then
|
|||
fi
|
||||
|
||||
# insert block policies with adjacent/overlapping netmasks
|
||||
do_overlap ns3
|
||||
do_overlap ${ns[3]}
|
||||
|
||||
check_exceptions "exceptions and block policies"
|
||||
if [ $? -ne 0 ]; then
|
||||
ret=1
|
||||
fi
|
||||
|
||||
for n in ns3 ns4;do
|
||||
for n in ${ns[3]} ${ns[4]};do
|
||||
ip -net $n xfrm policy set hthresh4 28 24 hthresh6 126 125
|
||||
sleep $((RANDOM%5))
|
||||
done
|
||||
|
|
@ -459,19 +459,19 @@ done
|
|||
check_exceptions "exceptions and block policies after hresh changes"
|
||||
|
||||
# full flush of policy db, check everything gets freed incl. internal meta data
|
||||
ip -net ns3 xfrm policy flush
|
||||
ip -net ${ns[3]} xfrm policy flush
|
||||
|
||||
do_esp_policy ns3 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24
|
||||
do_exception ns3 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28
|
||||
do_esp_policy ${ns[3]} 10.0.3.1 10.0.3.10 10.0.1.0/24 10.0.2.0/24
|
||||
do_exception ${ns[3]} 10.0.3.1 10.0.3.10 10.0.2.253 10.0.2.240/28
|
||||
|
||||
# move inexact policies to hash table
|
||||
ip -net ns3 xfrm policy set hthresh4 16 16
|
||||
ip -net ${ns[3]} xfrm policy set hthresh4 16 16
|
||||
|
||||
sleep $((RANDOM%5))
|
||||
check_exceptions "exceptions and block policies after hthresh change in ns3"
|
||||
|
||||
# restore original hthresh settings -- move policies back to tables
|
||||
for n in ns3 ns4;do
|
||||
for n in ${ns[3]} ${ns[4]};do
|
||||
ip -net $n xfrm policy set hthresh4 32 32 hthresh6 128 128
|
||||
sleep $((RANDOM%5))
|
||||
done
|
||||
|
|
@ -479,8 +479,8 @@ check_exceptions "exceptions and block policies after htresh change to normal"
|
|||
|
||||
check_hthresh_repeat "policies with repeated htresh change"
|
||||
|
||||
check_random_order ns3 "policies inserted in random order"
|
||||
check_random_order ${ns[3]} "policies inserted in random order"
|
||||
|
||||
for i in 1 2 3 4;do ip netns del ns$i;done
|
||||
cleanup_ns $ns1 $ns2 $ns3 $ns4
|
||||
|
||||
exit $ret
|
||||
|
|
|
|||
|
|
@ -20,11 +20,13 @@ usage()
|
|||
{
|
||||
cat <<EOF
|
||||
Usage: $0 [OPTIONS]
|
||||
-s | --summary Print summary with detailed log in output.log
|
||||
-s | --summary Print summary with detailed log in output.log (conflict with -p)
|
||||
-p | --per_test_log Print test log in /tmp with each test name (conflict with -s)
|
||||
-t | --test COLLECTION:TEST Run TEST from COLLECTION
|
||||
-c | --collection COLLECTION Run all tests from COLLECTION
|
||||
-l | --list List the available collection:test entries
|
||||
-d | --dry-run Don't actually run any tests
|
||||
-n | --netns Run each test in namespace
|
||||
-h | --help Show this usage info
|
||||
-o | --override-timeout Number of seconds after which we timeout
|
||||
EOF
|
||||
|
|
@ -41,6 +43,9 @@ while true; do
|
|||
logfile="$BASE_DIR"/output.log
|
||||
cat /dev/null > $logfile
|
||||
shift ;;
|
||||
-p | --per-test-log)
|
||||
per_test_logging=1
|
||||
shift ;;
|
||||
-t | --test)
|
||||
TESTS="$TESTS $2"
|
||||
shift 2 ;;
|
||||
|
|
@ -53,6 +58,9 @@ while true; do
|
|||
-d | --dry-run)
|
||||
dryrun="echo"
|
||||
shift ;;
|
||||
-n | --netns)
|
||||
RUN_IN_NETNS=1
|
||||
shift ;;
|
||||
-o | --override-timeout)
|
||||
kselftest_override_timeout="$2"
|
||||
shift 2 ;;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user