]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tools: ynl: add netdevsim wrapper library for YNL tests
authorJakub Kicinski <kuba@kernel.org>
Sat, 7 Mar 2026 03:36:26 +0000 (19:36 -0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Mar 2026 00:02:26 +0000 (17:02 -0700)
Some tests need netdevsim setup which is painful to do from C.

Add ynl_nsim_lib.sh, a shared library providing nsim_setup and
nsim_cleanup functions for tests that need a netdevsim device.

Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Tested-by: Donald Hunter <donald.hunter@gmail.com>
Link: https://patch.msgid.link/20260307033630.1396085-7-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/net/ynl/tests/Makefile
tools/net/ynl/tests/ynl_nsim_lib.sh [new file with mode: 0644]

index 524092a8de7ee277f720b62eb63cf1fe2b58b1fb..a329de031adda20b9c5f9463bd626b40197f9633 100644 (file)
@@ -32,6 +32,8 @@ BINS := \
        rt-route \
 # end of BINS
 
+TEST_FILES := ynl_nsim_lib.sh
+
 CFLAGS_netdev:=$(CFLAGS_netdev) $(CFLAGS_rt-link)
 CFLAGS_ovs:=$(CFLAGS_ovs_datapath)
 
@@ -68,6 +70,9 @@ install: $(TEST_GEN_PROGS) $(BINS)
                    $$test > $(INSTALL_PATH)/ynl/$$name; \
                chmod +x $(INSTALL_PATH)/ynl/$$name; \
        done
+       @for file in $(TEST_FILES); do \
+               cp $$file $(INSTALL_PATH)/ynl/$$file; \
+       done
        @for bin in $(TEST_GEN_PROGS) $(BINS); do \
                cp $$bin $(INSTALL_PATH)/ynl/$$bin; \
        done
diff --git a/tools/net/ynl/tests/ynl_nsim_lib.sh b/tools/net/ynl/tests/ynl_nsim_lib.sh
new file mode 100644 (file)
index 0000000..98cdce4
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Shared netdevsim setup/cleanup for YNL C test wrappers
+
+NSIM_ID="1337"
+NSIM_DEV=""
+KSFT_SKIP=4
+
+nsim_cleanup() {
+       echo "$NSIM_ID" > /sys/bus/netdevsim/del_device 2>/dev/null || true
+}
+
+nsim_setup() {
+       modprobe netdevsim 2>/dev/null
+       if ! [ -f /sys/bus/netdevsim/new_device ]; then
+               echo "netdevsim module not available, skipping" >&2
+               exit "$KSFT_SKIP"
+       fi
+
+       trap nsim_cleanup EXIT
+
+       echo "$NSIM_ID 1" > /sys/bus/netdevsim/new_device
+       udevadm settle
+
+       NSIM_DEV=$(ls /sys/bus/netdevsim/devices/netdevsim${NSIM_ID}/net 2>/dev/null | head -1)
+       if [ -z "$NSIM_DEV" ]; then
+               echo "failed to find netdevsim device" >&2
+               exit 1
+       fi
+
+       ip link set dev "$NSIM_DEV" name nsim0
+       ip link set dev nsim0 up
+       ip addr add 192.168.1.1/24 dev nsim0
+       ip addr add 2001:db8::1/64 dev nsim0 nodad
+}