[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231124092736.3673263-2-liuhangbin@gmail.com>
Date: Fri, 24 Nov 2023 17:26:59 +0800
From: Hangbin Liu <liuhangbin@...il.com>
To: netdev@...r.kernel.org
Cc: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
Eric Dumazet <edumazet@...gle.com>,
Paolo Abeni <pabeni@...hat.com>,
Shuah Khan <shuah@...nel.org>,
David Ahern <dsahern@...nel.org>,
linux-kselftest@...r.kernel.org,
Po-Hsu Lin <po-hsu.lin@...onical.com>,
Guillaume Nault <gnault@...hat.com>,
Björn Töpel <bjorn@...osinc.com>,
Ryan Roberts <ryan.roberts@....com>,
Andrew Morton <akpm@...ux-foundation.org>,
Mark Brown <broonie@...nel.org>,
Luis Chamberlain <mcgrof@...nel.org>,
Hangbin Liu <liuhangbin@...il.com>
Subject: [PATCH net-next 01/38] selftests/net: add lib.sh
Add a lib.sh for net selftests. This file can be used to define commonly
used variables and functions.
Add function setup_ns() for user to create unique namespaces with given
prefix name.
Signed-off-by: Hangbin Liu <liuhangbin@...il.com>
---
tools/testing/selftests/net/Makefile | 2 +-
tools/testing/selftests/net/lib.sh | 98 ++++++++++++++++++++++++++++
2 files changed, 99 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/net/lib.sh
diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
index 9274edfb76ff..14bd68da7466 100644
--- a/tools/testing/selftests/net/Makefile
+++ b/tools/testing/selftests/net/Makefile
@@ -54,7 +54,7 @@ TEST_PROGS += ip_local_port_range.sh
TEST_PROGS += rps_default_mask.sh
TEST_PROGS += big_tcp.sh
TEST_PROGS_EXTENDED := in_netns.sh setup_loopback.sh setup_veth.sh
-TEST_PROGS_EXTENDED += toeplitz_client.sh toeplitz.sh
+TEST_PROGS_EXTENDED += toeplitz_client.sh toeplitz.sh lib.sh
TEST_GEN_FILES = socket nettest
TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any
TEST_GEN_FILES += tcp_mmap tcp_inq psock_snd txring_overwrite
diff --git a/tools/testing/selftests/net/lib.sh b/tools/testing/selftests/net/lib.sh
new file mode 100644
index 000000000000..239ab2beb438
--- /dev/null
+++ b/tools/testing/selftests/net/lib.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+##############################################################################
+# Defines
+
+# Kselftest framework requirement - SKIP code is 4.
+ksft_skip=4
+# namespace list created by setup_ns
+NS_LIST=""
+
+##############################################################################
+# Helpers
+busywait()
+{
+ local timeout=$1; shift
+
+ local start_time="$(date -u +%s%3N)"
+ while true
+ do
+ local out
+ out=$($@)
+ local ret=$?
+ if ((!ret)); then
+ echo -n "$out"
+ return 0
+ fi
+
+ local current_time="$(date -u +%s%3N)"
+ if ((current_time - start_time > timeout)); then
+ echo -n "$out"
+ return 1
+ fi
+ done
+}
+
+cleanup_ns()
+{
+ local ns=""
+ local errexit=0
+
+ # disable errexit temporary
+ if [[ $- =~ "e" ]]; then
+ errexit=1
+ set +e
+ fi
+
+ for ns in "$@"; do
+ ip netns delete "${ns}" &> /dev/null
+ busywait 2 "ip netns list | grep -vq $1" &> /dev/null
+ if ip netns list | grep -q $1; then
+ echo "Failed to remove namespace $1"
+ return $ksft_skip
+ fi
+ done
+
+ [ $errexit -eq 1 ] && set -e
+ return 0
+}
+
+# By default, remove all netns before EXIT.
+cleanup_all_ns()
+{
+ cleanup_ns $NS_LIST
+}
+trap cleanup_all_ns EXIT
+
+# setup netns with given names as prefix. e.g
+# setup_ns local remote
+setup_ns()
+{
+ local ns=""
+ # the ns list we created in this call
+ local ns_list=""
+ while [ -n "$1" ]; do
+ # Some test may setup/remove same netns multi times
+ if unset $1 2> /dev/null; then
+ ns="${1,,}-$(mktemp -u XXXXXX)"
+ eval readonly $1=$ns
+ else
+ eval ns='$'$1
+ cleanup_ns $ns
+
+ fi
+
+ ip netns add $ns
+ if ! ip netns list | grep -q $ns; then
+ echo "Failed to create namespace $1"
+ cleanup_ns $ns_list
+ return $ksft_skip
+ fi
+ ip -n $ns link set lo up
+ ns_list="$ns_list $ns"
+
+ shift
+ done
+ NS_LIST="$NS_LIST $ns_list"
+}
--
2.41.0
Powered by blists - more mailing lists