On Mon, Jan 12, 2026 at 07:11:14PM -0800, Bobby Eshleman wrote:
>From: Bobby Eshleman <bobbyeshleman@meta.com>
>
>Add functions for initializing namespaces with the different vsock NS
>modes. Callers can use add_namespaces() and del_namespaces() to create
>namespaces global0, global1, local0, and local1.
>
>The add_namespaces() function initializes global0, local0, etc... with
>their respective vsock NS mode by toggling child_ns_mode before creating
>the namespace.
>
>Remove namespaces upon exiting the program in cleanup(). This is
>unlikely to be needed for a healthy run, but it is useful for tests that
>are manually killed mid-test.
>
>This patch is in preparation for later namespace tests.
>
>Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com>
>---
>Changes in v13:
>- intialize namespaces to use the child_ns_mode mechanism
>- remove setting modes from init_namespaces() function (this function
> only sets up the lo device now)
>- remove ns_set_mode(ns) because ns_mode is no longer mutable
>---
> tools/testing/selftests/vsock/vmtest.sh | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
>
>diff --git a/tools/testing/selftests/vsock/vmtest.sh b/tools/testing/selftests/vsock/vmtest.sh
>index c7b270dd77a9..c2bdc293b94c 100755
>--- a/tools/testing/selftests/vsock/vmtest.sh
>+++ b/tools/testing/selftests/vsock/vmtest.sh
>@@ -49,6 +49,7 @@ readonly TEST_DESCS=(
> )
>
> readonly USE_SHARED_VM=(vm_server_host_client vm_client_host_server vm_loopback)
>+readonly NS_MODES=("local" "global")
>
> VERBOSE=0
>
>@@ -103,6 +104,36 @@ check_result() {
> fi
> }
>
>+add_namespaces() {
>+ local orig_mode
>+ orig_mode=$(cat /proc/sys/net/vsock/child_ns_mode)
>+
>+ for mode in "${NS_MODES[@]}"; do
>+ echo "${mode}" > /proc/sys/net/vsock/child_ns_mode
>+ ip netns add "${mode}0" 2>/dev/null
>+ ip netns add "${mode}1" 2>/dev/null
>+ done
>+
>+ echo "${orig_mode}" > /proc/sys/net/vsock/child_ns_mode
>+}
>+
>+init_namespaces() {
>+ for mode in "${NS_MODES[@]}"; do
>+ # we need lo for qemu port forwarding
>+ ip netns exec "${mode}0" ip link set dev lo up
>+ ip netns exec "${mode}1" ip link set dev lo up
>+ done
>+}
>+
>+del_namespaces() {
>+ for mode in "${NS_MODES[@]}"; do
>+ ip netns del "${mode}0" &>/dev/null
>+ ip netns del "${mode}1" &>/dev/null
>+ log_host "removed ns ${mode}0"
>+ log_host "removed ns ${mode}1"
>+ done
>+}
>+
> vm_ssh() {
> ssh -q -o UserKnownHostsFile=/dev/null -p ${SSH_HOST_PORT} localhost "$@"
> return $?
>@@ -110,6 +141,7 @@ vm_ssh() {
>
> cleanup() {
> terminate_pidfiles "${!PIDFILES[@]}"
>+ del_namespaces
> }
>
> check_args() {
>
>--
>2.47.3
>