AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/08/31 10:14 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The patch modifies only userspace shell scripts in tools/testing/selftests/net/ and contains no functional changes to the Linux kernel.",
  "WorthFuzzing": false
}

1/1 2026/08/31 10:14 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 3b68c21a4965293e202bb320a7b86c1f0fcfc0b3\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Mon Aug 31 10:14:49 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/tools/testing/selftests/net/drop_monitor_tests.sh b/tools/testing/selftests/net/drop_monitor_tests.sh\nindex 507d0a82f5f07..7da85608561b5 100755\n--- a/tools/testing/selftests/net/drop_monitor_tests.sh\n+++ b/tools/testing/selftests/net/drop_monitor_tests.sh\n@@ -18,18 +18,7 @@ DEVLINK_DEV=netdevsim/${DEV}\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n setup()\ndiff --git a/tools/testing/selftests/net/fcnal-test.sh b/tools/testing/selftests/net/fcnal-test.sh\nindex 890c3f8e51bb8..a50609535fedc 100755\n--- a/tools/testing/selftests/net/fcnal-test.sh\n+++ b/tools/testing/selftests/net/fcnal-test.sh\n@@ -97,34 +97,7 @@ fi\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\tlocal ans\n-\n-\t[ \"${VERBOSE}\" = \"1\" ] \u0026\u0026 echo\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"TEST: %-70s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-70s  [FAIL]\\n\" \"${msg}\"\n-\t\techo \"    expected rc $expected; actual rc $rc\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread ans\n-\t\t\t[ \"$ans\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread ans\n-\t\t[ \"$ans\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n \n \tkill_procs\n }\ndiff --git a/tools/testing/selftests/net/fdb_flush.sh b/tools/testing/selftests/net/fdb_flush.sh\nindex 9931a1e36e3db..4965e52d5ef54 100755\n--- a/tools/testing/selftests/net/fdb_flush.sh\n+++ b/tools/testing/selftests/net/fdb_flush.sh\n@@ -67,40 +67,7 @@ run_cmd()\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\tlocal nsuccess\n-\tlocal nfail\n-\tlocal ret\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n-\t\t\techo \"    rc=$rc, expected $expected\"\n-\t\tfi\n-\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n MAC_POOL_1=\"\ndiff --git a/tools/testing/selftests/net/fib-onlink-tests.sh b/tools/testing/selftests/net/fib-onlink-tests.sh\nindex e0d45292a2983..a26075abf7d27 100755\n--- a/tools/testing/selftests/net/fib-onlink-tests.sh\n+++ b/tools/testing/selftests/net/fib-onlink-tests.sh\n@@ -85,23 +85,7 @@ PBR_TABLE=101\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"    TEST: %-50s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-50s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n log_section()\ndiff --git a/tools/testing/selftests/net/fib_nexthop_multiprefix.sh b/tools/testing/selftests/net/fib_nexthop_multiprefix.sh\nindex e85248609af48..bd0b8a053ea1c 100755\n--- a/tools/testing/selftests/net/fib_nexthop_multiprefix.sh\n+++ b/tools/testing/selftests/net/fib_nexthop_multiprefix.sh\n@@ -23,26 +23,7 @@ which ping6 \u003e /dev/null 2\u003e\u00261 \u0026\u0026 ping6=$(which ping6) || ping6=$(which ping)\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/fib_nexthop_nongw.sh b/tools/testing/selftests/net/fib_nexthop_nongw.sh\nindex 1ccf56f101713..4d483cb83593b 100755\n--- a/tools/testing/selftests/net/fib_nexthop_nongw.sh\n+++ b/tools/testing/selftests/net/fib_nexthop_nongw.sh\n@@ -18,26 +18,7 @@ ret=0\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh\nindex 3d347126730a9..4fd246ae81f06 100755\n--- a/tools/testing/selftests/net/fib_nexthops.sh\n+++ b/tools/testing/selftests/net/fib_nexthops.sh\n@@ -70,44 +70,7 @@ nsid=100\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tif [[ $rc -eq $ksft_skip ]]; then\n-\t\t\t[[ $ret -eq 0 ]] \u0026\u0026 ret=$ksft_skip\n-\t\t\tnskip=$((nskip+1))\n-\t\t\tprintf \"TEST: %-60s  [SKIP]\\n\" \"${msg}\"\n-\t\telse\n-\t\t\tret=1\n-\t\t\tnfail=$((nfail+1))\n-\t\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tfi\n-\n-\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n-\t\t\techo \"    rc=$rc, expected $expected\"\n-\t\tfi\n-\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\n@@ -1230,7 +1193,7 @@ ipv6_fcnal_runtime()\n \t\trun_cmd \"ip netns exec $me ping -c1 -w$PING_TIMEOUT 2001:db8:101::1\"\n \t\tlog_test $? 0 \"Ping - group blackhole replaced with gateways\"\n \telse\n-\t\tlog_test 2 0 \"Ping - multipath failed\"\n+\t\tlog_test $rc 0 \"Ping - multipath failed\"\n \tfi\n \n \t#\n@@ -1887,7 +1850,7 @@ ipv4_fcnal_runtime()\n \t\trun_cmd \"ip netns exec $me ping -c1 -w$PING_TIMEOUT 172.16.101.1\"\n \t\tlog_test $? 0 \"Ping - group blackhole replaced with gateways\"\n \telse\n-\t\tlog_test 2 0 \"Ping - multipath failed\"\n+\t\tlog_test $rc 0 \"Ping - multipath failed\"\n \tfi\n \n \t#\n@@ -2701,7 +2664,6 @@ done\n if [ \"$TESTS\" != \"none\" ]; then\n \tprintf \"\\nTests passed: %3d\\n\" ${nsuccess}\n \tprintf \"Tests failed: %3d\\n\"   ${nfail}\n-\tprintf \"Tests skipped: %2d\\n\"  ${nskip}\n fi\n \n exit $ret\ndiff --git a/tools/testing/selftests/net/fib_rule_tests.sh b/tools/testing/selftests/net/fib_rule_tests.sh\nindex 5fbdd2a0b5375..5d66b00e61b24 100755\n--- a/tools/testing/selftests/net/fib_rule_tests.sh\n+++ b/tools/testing/selftests/net/fib_rule_tests.sh\n@@ -31,24 +31,7 @@ SELFTEST_PATH=\"\"\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n setup()\ndiff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh\nindex b338bfb196a27..7df967a2d6697 100755\n--- a/tools/testing/selftests/net/fib_tests.sh\n+++ b/tools/testing/selftests/net/fib_tests.sh\n@@ -24,31 +24,7 @@ which ping6 \u003e /dev/null 2\u003e\u00261 \u0026\u0026 ping6=$(which ping6) || ping6=$(which ping)\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n setup()\ndiff --git a/tools/testing/selftests/net/gre_gso.sh b/tools/testing/selftests/net/gre_gso.sh\nindex 5100d90f92d21..4ebe1ed6e9c9e 100755\n--- a/tools/testing/selftests/net/gre_gso.sh\n+++ b/tools/testing/selftests/net/gre_gso.sh\n@@ -16,31 +16,7 @@ PID=\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n setup()\ndiff --git a/tools/testing/selftests/net/icmp_redirect.sh b/tools/testing/selftests/net/icmp_redirect.sh\nindex b13c89a99ecba..e50860e60cbea 100755\n--- a/tools/testing/selftests/net/icmp_redirect.sh\n+++ b/tools/testing/selftests/net/icmp_redirect.sh\n@@ -61,28 +61,7 @@ log_section()\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\tlocal xfail=$4\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telif [ ${rc} -eq ${xfail} ]; then\n-\t\tprintf \"TEST: %-60s  [XFAIL]\\n\" \"${msg}\"\n-\t\tnxfail=$((nxfail+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n log_debug()\n@@ -303,7 +282,7 @@ check_exception()\n \t\tip -netns $h1 ro get ${H1_VRF_ARG} ${H2_N2_IP} | \\\n \t\tgrep -E -v 'mtu|redirected' | grep -q \"cache\"\n \tfi\n-\tlog_test $? 0 \"IPv4: ${desc}\" 0\n+\tlog_test $? 0 \"IPv4: ${desc}\"\n \n \t# No PMTU info for test \"redirect\" and \"mtu exception plus redirect\"\n \tif [ \"$with_redirect\" = \"yes\" ] \u0026\u0026 [ \"$desc\" != \"redirect exception plus mtu\" ]; then\n@@ -319,7 +298,7 @@ check_exception()\n \t\tip -netns $h1 -6 ro get ${H1_VRF_ARG} ${H2_N2_IP6} | \\\n \t\tgrep -v \"mtu\" | grep -q \"${R1_LLADDR}\"\n \tfi\n-\tlog_test $? 0 \"IPv6: ${desc}\" 1\n+\tlog_test $? 0 \"IPv6: ${desc}\"\n }\n \n run_ping()\n@@ -530,6 +509,5 @@ fi\n \n printf \"\\nTests passed: %3d\\n\" ${nsuccess}\n printf \"Tests failed: %3d\\n\"   ${nfail}\n-printf \"Tests xfailed: %3d\\n\"  ${nxfail}\n \n exit $ret\ndiff --git a/tools/testing/selftests/net/l2tp.sh b/tools/testing/selftests/net/l2tp.sh\nindex 88de7166c8ae9..41e8b19d1bd34 100755\n--- a/tools/testing/selftests/net/l2tp.sh\n+++ b/tools/testing/selftests/net/l2tp.sh\n@@ -23,24 +23,7 @@ which ping6 \u003e /dev/null 2\u003e\u00261 \u0026\u0026 ping6=$(which ping6) || ping6=$(which ping)\n #\n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/lib.sh b/tools/testing/selftests/net/lib.sh\nindex d46d2cec89e45..3682a3b55d82c 100644\n--- a/tools/testing/selftests/net/lib.sh\n+++ b/tools/testing/selftests/net/lib.sh\n@@ -454,6 +454,37 @@ log_test_xfail()\n \tRET=$ksft_xfail retmsg= log_test \"$@\"\n }\n \n+# Log test result with expected return value\n+log_test_expected()\n+{\n+\tlocal rc=$1\n+\tlocal expected=$2\n+\tlocal msg=\"$3\"\n+\n+\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n+\t\tnsuccess=$((nsuccess+1))\n+\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n+\telse\n+\t\tret=$(ksft_exit_status_merge \"$ret\" \"$ksft_fail\")\n+\t\tnfail=$((nfail+1))\n+\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n+\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n+\t\t\techo \"    rc=$rc, expected $expected\"\n+\t\tfi\n+\n+\t\tpause_on_fail\n+\tfi\n+\n+\tif [ \"${PAUSE}\" = \"yes\" ]; then\n+\t\techo\n+\t\techo \"hit enter to continue, 'q' to quit\"\n+\t\tread -r a\n+\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n+\tfi\n+\n+\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+}\n+\n log_info()\n {\n \tlocal msg=$1\ndiff --git a/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh b/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh\nindex 5db69dad0cfc0..89072d30fc590 100755\n--- a/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh\n+++ b/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh\n@@ -30,31 +30,7 @@ tcpdump_stderr=\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n setup()\ndiff --git a/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh b/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh\nindex d6249303b7eaa..8241de6827de3 100755\n--- a/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh\n@@ -202,24 +202,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}\n \n log_test()\n {\n-\tlocal rc=\"$1\"\n-\tlocal expected=\"$2\"\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread -r a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh\nindex 50e37d3217eaa..900a2ae42335e 100755\n--- a/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh\n@@ -208,24 +208,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh\nindex a649dba3cb771..50c636e842555 100755\n--- a/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh\n@@ -177,24 +177,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh\nindex e408406d84898..1f785a7704be5 100755\n--- a/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh\n@@ -178,24 +178,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh b/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh\nindex e23210aa547fd..aeddbef536d64 100755\n--- a/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh\n@@ -111,8 +111,8 @@\n # +---------------------------------------------------+\n #\n \n-# Kselftest framework requirement - SKIP code is 4.\n-ksft_skip=4\n+# shellcheck source=lib.sh\n+source lib.sh\n \n readonly IPv6_RT_NETWORK=2001:11\n readonly IPv4_HS_NETWORK=10.0.0\n@@ -126,24 +126,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh b/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh\nindex 9e69a2ed5bc34..8fbeda1372e13 100755\n--- a/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh\n@@ -111,8 +111,8 @@\n # +---------------------------------------------------+\n #\n \n-# Kselftest framework requirement - SKIP code is 4.\n-ksft_skip=4\n+# shellcheck source=lib.sh\n+source lib.sh\n \n readonly IPv6_RT_NETWORK=2001:11\n readonly IPv6_HS_NETWORK=cafe\n@@ -126,24 +126,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_flavors_test.sh b/tools/testing/selftests/net/srv6_end_flavors_test.sh\nindex 318487eda671b..30a939392eea4 100755\n--- a/tools/testing/selftests/net/srv6_end_flavors_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_flavors_test.sh\n@@ -194,8 +194,8 @@\n # after the IPv6 header. At this point, the packet with IPv6 DA=cafe::1 is sent\n # to the destination, i.e. hs-1.\n \n-# Kselftest framework requirement - SKIP code is 4.\n-readonly ksft_skip=4\n+# shellcheck source=lib.sh\n+source lib.sh\n \n readonly RDMSUFF=\"$(mktemp -u XXXXXXXX)\"\n readonly DUMMY_DEVNAME=\"dum0\"\n@@ -224,24 +224,7 @@ nfail=0\n \n log_test()\n {\n-\tlocal rc=\"$1\"\n-\tlocal expected=\"$2\"\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh\nindex 4bc135e5c22cc..2e2ae21974ae9 100755\n--- a/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh\n@@ -323,24 +323,7 @@ nfail=0\n \n log_test()\n {\n-\tlocal rc=\"$1\"\n-\tlocal expected=\"$2\"\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh\nindex 34b781a2ae748..b492a7f0297fe 100755\n--- a/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh\n@@ -368,24 +368,7 @@ nfail=0\n \n log_test()\n {\n-\tlocal rc=\"$1\"\n-\tlocal expected=\"$2\"\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh b/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh\nindex cd7d061e21f88..64ea4e2308b67 100755\n--- a/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh\n@@ -197,24 +197,7 @@ HAS_TUNSRC=false\n \n log_test()\n {\n-\tlocal rc=\"$1\"\n-\tlocal expected=\"$2\"\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh b/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh\nindex 0979b5316fdf8..31e41cc4922ec 100755\n--- a/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh\n+++ b/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh\n@@ -146,24 +146,7 @@ nfail=0\n \n log_test()\n {\n-\tlocal rc=\"$1\"\n-\tlocal expected=\"$2\"\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\ndiff --git a/tools/testing/selftests/net/test_bridge_backup_port.sh b/tools/testing/selftests/net/test_bridge_backup_port.sh\nindex 2a7224fe74f20..8bc76be2b2d39 100755\n--- a/tools/testing/selftests/net/test_bridge_backup_port.sh\n+++ b/tools/testing/selftests/net/test_bridge_backup_port.sh\n@@ -56,37 +56,7 @@ PING_TIMEOUT=5\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n-\t\t\techo \"    rc=$rc, expected $expected\"\n-\t\tfi\n-\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/test_bridge_neigh_suppress.sh b/tools/testing/selftests/net/test_bridge_neigh_suppress.sh\nindex e9ed0d7509962..e421579079934 100755\n--- a/tools/testing/selftests/net/test_bridge_neigh_suppress.sh\n+++ b/tools/testing/selftests/net/test_bridge_neigh_suppress.sh\n@@ -72,38 +72,7 @@ PAUSE=no\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\t# shellcheck disable=SC2154\n-\t\tret=$(ksft_exit_status_merge \"$ret\" \"$ksft_fail\")\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n-\t\t\techo \"    rc=$rc, expected $expected\"\n-\t\tfi\n-\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n \treturn 0\n }\n \ndiff --git a/tools/testing/selftests/net/test_vxlan_mdb.sh b/tools/testing/selftests/net/test_vxlan_mdb.sh\nindex 58da5de99ac45..cffbd9343d565 100755\n--- a/tools/testing/selftests/net/test_vxlan_mdb.sh\n+++ b/tools/testing/selftests/net/test_vxlan_mdb.sh\n@@ -133,37 +133,7 @@ PAUSE=no\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n-\t\t\techo \"    rc=$rc, expected $expected\"\n-\t\tfi\n-\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh b/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh\nindex b8805983b728d..c51ca0b532dd7 100755\n--- a/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh\n+++ b/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh\n@@ -24,37 +24,7 @@ PAUSE=no\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"$VERBOSE\" = \"1\" ]; then\n-\t\t\techo \"    rc=$rc, expected $expected\"\n-\t\tfi\n-\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n-\n-\t[ \"$VERBOSE\" = \"1\" ] \u0026\u0026 echo\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/test_vxlan_vnifiltering.sh b/tools/testing/selftests/net/test_vxlan_vnifiltering.sh\nindex 8deacc565afa1..6fb5af013dacf 100755\n--- a/tools/testing/selftests/net/test_vxlan_vnifiltering.sh\n+++ b/tools/testing/selftests/net/test_vxlan_vnifiltering.sh\n@@ -98,31 +98,7 @@ which ping6 \u003e /dev/null 2\u003e\u00261 \u0026\u0026 ping6=$(which ping6) || ping6=$(which ping)\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n-\n-\tif [ \"${PAUSE}\" = \"yes\" ]; then\n-\t\techo\n-\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\tread a\n-\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/vrf-xfrm-tests.sh b/tools/testing/selftests/net/vrf-xfrm-tests.sh\nindex b64dd891699d3..a4617e5dace7f 100755\n--- a/tools/testing/selftests/net/vrf-xfrm-tests.sh\n+++ b/tools/testing/selftests/net/vrf-xfrm-tests.sh\n@@ -35,24 +35,7 @@ which ping6 \u003e /dev/null 2\u003e\u00261 \u0026\u0026 ping6=$(which ping6) || ping6=$(which ping)\n #\n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd_host1()\ndiff --git a/tools/testing/selftests/net/vrf_route_leaking.sh b/tools/testing/selftests/net/vrf_route_leaking.sh\nindex ce34cb2e6e0b4..abf106e0f0c05 100755\n--- a/tools/testing/selftests/net/vrf_route_leaking.sh\n+++ b/tools/testing/selftests/net/vrf_route_leaking.sh\n@@ -99,24 +99,7 @@ log_section()\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ \"${rc}\" -eq \"${expected}\" ]; then\n-\t\tprintf \"TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\t\tnsuccess=$((nsuccess+1))\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread -r a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/vrf_strict_mode_test.sh b/tools/testing/selftests/net/vrf_strict_mode_test.sh\nindex 01552b5425444..7de1873362ba9 100755\n--- a/tools/testing/selftests/net/vrf_strict_mode_test.sh\n+++ b/tools/testing/selftests/net/vrf_strict_mode_test.sh\n@@ -16,24 +16,7 @@ TESTS=\"init testns mix\"\n \n log_test()\n {\n-\tlocal rc=$1\n-\tlocal expected=$2\n-\tlocal msg=\"$3\"\n-\n-\tif [ ${rc} -eq ${expected} ]; then\n-\t\tnsuccess=$((nsuccess+1))\n-\t\tprintf \"\\n    TEST: %-60s  [ OK ]\\n\" \"${msg}\"\n-\telse\n-\t\tret=1\n-\t\tnfail=$((nfail+1))\n-\t\tprintf \"\\n    TEST: %-60s  [FAIL]\\n\" \"${msg}\"\n-\t\tif [ \"${PAUSE_ON_FAIL}\" = \"yes\" ]; then\n-\t\t\techo\n-\t\t\techo \"hit enter to continue, 'q' to quit\"\n-\t\t\tread a\n-\t\t\t[ \"$a\" = \"q\" ] \u0026\u0026 exit 1\n-\t\tfi\n-\tfi\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n print_log_test_results()\n"
}

2/1 2026/08/31 10:14 agent patch-evaluator
0m Model:
core

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies only userspace shell scripts in tools/testing/selftests/net/ and contains no functional changes to the Linux kernel.",
  "WorthFuzzing": false
}

Instruction:
You are an expert Linux kernel maintainer.
Your job is to review a provided patch series and determine
if it makes functional changes to the kernel that should be fuzzed.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively
use your code access tools to examine the actual source code and confirm any assumptions.

Return WorthFuzzing=false if the patch only contains:
- Modifications to Documentation/, Kconfig files, or code comments.
- Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints.
- Changes to numeric constants or macros that do not functionally alter execution flow.
- Code paths that are impossible to reach in virtualized environments like GCE or QEMU,
  even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim).
- Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed,
  ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU.
- Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove)
  that are executed only during PCI hot-unplug or sysfs driver unbind operations.

If it modifies reachable core kernel logic, drivers, or architectures, use your code search
tools to verify the code can be executed, then return WorthFuzzing=true.

When returning WorthFuzzing=true, you MUST ALSO:
1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols.
   Avoid listing generic hot-path functions to prevent skewed test distributions.
   Prefer non-static, non-inlined API entrypoint functions over internal static helper functions
   (which are inlined by the compiler and do not have distinct symbol addresses).
2. Identify any specific CONFIG_ options required to properly test this new/modified feature.
   Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions.
   Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs
   needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs
   output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.


Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.

Prompt:
For your convenience, here is the diff of the changes:
commit 3b68c21a4965293e202bb320a7b86c1f0fcfc0b3
Author: syz-cluster <triage@syzkaller.com>
Date:   Mon Aug 31 10:14:49 2026 +0000

    syz-cluster: applied patch under review

diff --git a/tools/testing/selftests/net/drop_monitor_tests.sh b/tools/testing/selftests/net/drop_monitor_tests.sh
index 507d0a82f5f07..7da85608561b5 100755
--- a/tools/testing/selftests/net/drop_monitor_tests.sh
+++ b/tools/testing/selftests/net/drop_monitor_tests.sh
@@ -18,18 +18,7 @@ DEVLINK_DEV=netdevsim/${DEV}
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "    TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "    TEST: %-60s  [FAIL]\n" "${msg}"
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 setup()
diff --git a/tools/testing/selftests/net/fcnal-test.sh b/tools/testing/selftests/net/fcnal-test.sh
index 890c3f8e51bb8..a50609535fedc 100755
--- a/tools/testing/selftests/net/fcnal-test.sh
+++ b/tools/testing/selftests/net/fcnal-test.sh
@@ -97,34 +97,7 @@ fi
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-	local ans
-
-	[ "${VERBOSE}" = "1" ] && echo
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "TEST: %-70s  [ OK ]\n" "${msg}"
-	else
-		nfail=$((nfail+1))
-		printf "TEST: %-70s  [FAIL]\n" "${msg}"
-		echo "    expected rc $expected; actual rc $rc"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read ans
-			[ "$ans" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read ans
-		[ "$ans" = "q" ] && exit 1
-	fi
+	log_test_expected "$1" "$2" "$3"
 
 	kill_procs
 }
diff --git a/tools/testing/selftests/net/fdb_flush.sh b/tools/testing/selftests/net/fdb_flush.sh
index 9931a1e36e3db..4965e52d5ef54 100755
--- a/tools/testing/selftests/net/fdb_flush.sh
+++ b/tools/testing/selftests/net/fdb_flush.sh
@@ -67,40 +67,7 @@ run_cmd()
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-	local nsuccess
-	local nfail
-	local ret
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "$VERBOSE" = "1" ]; then
-			echo "    rc=$rc, expected $expected"
-		fi
-
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 MAC_POOL_1="
diff --git a/tools/testing/selftests/net/fib-onlink-tests.sh b/tools/testing/selftests/net/fib-onlink-tests.sh
index e0d45292a2983..a26075abf7d27 100755
--- a/tools/testing/selftests/net/fib-onlink-tests.sh
+++ b/tools/testing/selftests/net/fib-onlink-tests.sh
@@ -85,23 +85,7 @@ PBR_TABLE=101
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "    TEST: %-50s  [ OK ]\n" "${msg}"
-	else
-		nfail=$((nfail+1))
-		printf "    TEST: %-50s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 log_section()
diff --git a/tools/testing/selftests/net/fib_nexthop_multiprefix.sh b/tools/testing/selftests/net/fib_nexthop_multiprefix.sh
index e85248609af48..bd0b8a053ea1c 100755
--- a/tools/testing/selftests/net/fib_nexthop_multiprefix.sh
+++ b/tools/testing/selftests/net/fib_nexthop_multiprefix.sh
@@ -23,26 +23,7 @@ which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/fib_nexthop_nongw.sh b/tools/testing/selftests/net/fib_nexthop_nongw.sh
index 1ccf56f101713..4d483cb83593b 100755
--- a/tools/testing/selftests/net/fib_nexthop_nongw.sh
+++ b/tools/testing/selftests/net/fib_nexthop_nongw.sh
@@ -18,26 +18,7 @@ ret=0
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh
index 3d347126730a9..4fd246ae81f06 100755
--- a/tools/testing/selftests/net/fib_nexthops.sh
+++ b/tools/testing/selftests/net/fib_nexthops.sh
@@ -70,44 +70,7 @@ nsid=100
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		if [[ $rc -eq $ksft_skip ]]; then
-			[[ $ret -eq 0 ]] && ret=$ksft_skip
-			nskip=$((nskip+1))
-			printf "TEST: %-60s  [SKIP]\n" "${msg}"
-		else
-			ret=1
-			nfail=$((nfail+1))
-			printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		fi
-
-		if [ "$VERBOSE" = "1" ]; then
-			echo "    rc=$rc, expected $expected"
-		fi
-
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
@@ -1230,7 +1193,7 @@ ipv6_fcnal_runtime()
 		run_cmd "ip netns exec $me ping -c1 -w$PING_TIMEOUT 2001:db8:101::1"
 		log_test $? 0 "Ping - group blackhole replaced with gateways"
 	else
-		log_test 2 0 "Ping - multipath failed"
+		log_test $rc 0 "Ping - multipath failed"
 	fi
 
 	#
@@ -1887,7 +1850,7 @@ ipv4_fcnal_runtime()
 		run_cmd "ip netns exec $me ping -c1 -w$PING_TIMEOUT 172.16.101.1"
 		log_test $? 0 "Ping - group blackhole replaced with gateways"
 	else
-		log_test 2 0 "Ping - multipath failed"
+		log_test $rc 0 "Ping - multipath failed"
 	fi
 
 	#
@@ -2701,7 +2664,6 @@ done
 if [ "$TESTS" != "none" ]; then
 	printf "\nTests passed: %3d\n" ${nsuccess}
 	printf "Tests failed: %3d\n"   ${nfail}
-	printf "Tests skipped: %2d\n"  ${nskip}
 fi
 
 exit $ret
diff --git a/tools/testing/selftests/net/fib_rule_tests.sh b/tools/testing/selftests/net/fib_rule_tests.sh
index 5fbdd2a0b5375..5d66b00e61b24 100755
--- a/tools/testing/selftests/net/fib_rule_tests.sh
+++ b/tools/testing/selftests/net/fib_rule_tests.sh
@@ -31,24 +31,7 @@ SELFTEST_PATH=""
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 setup()
diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh
index b338bfb196a27..7df967a2d6697 100755
--- a/tools/testing/selftests/net/fib_tests.sh
+++ b/tools/testing/selftests/net/fib_tests.sh
@@ -24,31 +24,7 @@ which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "    TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 setup()
diff --git a/tools/testing/selftests/net/gre_gso.sh b/tools/testing/selftests/net/gre_gso.sh
index 5100d90f92d21..4ebe1ed6e9c9e 100755
--- a/tools/testing/selftests/net/gre_gso.sh
+++ b/tools/testing/selftests/net/gre_gso.sh
@@ -16,31 +16,7 @@ PID=
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "    TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 setup()
diff --git a/tools/testing/selftests/net/icmp_redirect.sh b/tools/testing/selftests/net/icmp_redirect.sh
index b13c89a99ecba..e50860e60cbea 100755
--- a/tools/testing/selftests/net/icmp_redirect.sh
+++ b/tools/testing/selftests/net/icmp_redirect.sh
@@ -61,28 +61,7 @@ log_section()
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-	local xfail=$4
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	elif [ ${rc} -eq ${xfail} ]; then
-		printf "TEST: %-60s  [XFAIL]\n" "${msg}"
-		nxfail=$((nxfail+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 log_debug()
@@ -303,7 +282,7 @@ check_exception()
 		ip -netns $h1 ro get ${H1_VRF_ARG} ${H2_N2_IP} | \
 		grep -E -v 'mtu|redirected' | grep -q "cache"
 	fi
-	log_test $? 0 "IPv4: ${desc}" 0
+	log_test $? 0 "IPv4: ${desc}"
 
 	# No PMTU info for test "redirect" and "mtu exception plus redirect"
 	if [ "$with_redirect" = "yes" ] && [ "$desc" != "redirect exception plus mtu" ]; then
@@ -319,7 +298,7 @@ check_exception()
 		ip -netns $h1 -6 ro get ${H1_VRF_ARG} ${H2_N2_IP6} | \
 		grep -v "mtu" | grep -q "${R1_LLADDR}"
 	fi
-	log_test $? 0 "IPv6: ${desc}" 1
+	log_test $? 0 "IPv6: ${desc}"
 }
 
 run_ping()
@@ -530,6 +509,5 @@ fi
 
 printf "\nTests passed: %3d\n" ${nsuccess}
 printf "Tests failed: %3d\n"   ${nfail}
-printf "Tests xfailed: %3d\n"  ${nxfail}
 
 exit $ret
diff --git a/tools/testing/selftests/net/l2tp.sh b/tools/testing/selftests/net/l2tp.sh
index 88de7166c8ae9..41e8b19d1bd34 100755
--- a/tools/testing/selftests/net/l2tp.sh
+++ b/tools/testing/selftests/net/l2tp.sh
@@ -23,24 +23,7 @@ which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
 #
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/lib.sh b/tools/testing/selftests/net/lib.sh
index d46d2cec89e45..3682a3b55d82c 100644
--- a/tools/testing/selftests/net/lib.sh
+++ b/tools/testing/selftests/net/lib.sh
@@ -454,6 +454,37 @@ log_test_xfail()
 	RET=$ksft_xfail retmsg= log_test "$@"
 }
 
+# Log test result with expected return value
+log_test_expected()
+{
+	local rc=$1
+	local expected=$2
+	local msg="$3"
+
+	if [ "${rc}" -eq "${expected}" ]; then
+		nsuccess=$((nsuccess+1))
+		printf "TEST: %-60s  [ OK ]\n" "${msg}"
+	else
+		ret=$(ksft_exit_status_merge "$ret" "$ksft_fail")
+		nfail=$((nfail+1))
+		printf "TEST: %-60s  [FAIL]\n" "${msg}"
+		if [ "$VERBOSE" = "1" ]; then
+			echo "    rc=$rc, expected $expected"
+		fi
+
+		pause_on_fail
+	fi
+
+	if [ "${PAUSE}" = "yes" ]; then
+		echo
+		echo "hit enter to continue, 'q' to quit"
+		read -r a
+		[ "$a" = "q" ] && exit 1
+	fi
+
+	[ "$VERBOSE" = "1" ] && echo
+}
+
 log_info()
 {
 	local msg=$1
diff --git a/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh b/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh
index 5db69dad0cfc0..89072d30fc590 100755
--- a/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh
+++ b/tools/testing/selftests/net/ndisc_unsolicited_na_test.sh
@@ -30,31 +30,7 @@ tcpdump_stderr=
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "    TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 setup()
diff --git a/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh b/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh
index d6249303b7eaa..8241de6827de3 100755
--- a/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_encap_lookup_l3vpn_test.sh
@@ -202,24 +202,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
 
 log_test()
 {
-	local rc="$1"
-	local expected="$2"
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read -r a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh
index 50e37d3217eaa..900a2ae42335e 100755
--- a/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh
@@ -208,24 +208,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh
index a649dba3cb771..50c636e842555 100755
--- a/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_end_dt4_l3vpn_test.sh
@@ -177,24 +177,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh
index e408406d84898..1f785a7704be5 100755
--- a/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh
@@ -178,24 +178,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh b/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh
index e23210aa547fd..aeddbef536d64 100755
--- a/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh
+++ b/tools/testing/selftests/net/srv6_end_dx4_netfilter_test.sh
@@ -111,8 +111,8 @@
 # +---------------------------------------------------+
 #
 
-# Kselftest framework requirement - SKIP code is 4.
-ksft_skip=4
+# shellcheck source=lib.sh
+source lib.sh
 
 readonly IPv6_RT_NETWORK=2001:11
 readonly IPv4_HS_NETWORK=10.0.0
@@ -126,24 +126,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh b/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh
index 9e69a2ed5bc34..8fbeda1372e13 100755
--- a/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh
+++ b/tools/testing/selftests/net/srv6_end_dx6_netfilter_test.sh
@@ -111,8 +111,8 @@
 # +---------------------------------------------------+
 #
 
-# Kselftest framework requirement - SKIP code is 4.
-ksft_skip=4
+# shellcheck source=lib.sh
+source lib.sh
 
 readonly IPv6_RT_NETWORK=2001:11
 readonly IPv6_HS_NETWORK=cafe
@@ -126,24 +126,7 @@ PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_flavors_test.sh b/tools/testing/selftests/net/srv6_end_flavors_test.sh
index 318487eda671b..30a939392eea4 100755
--- a/tools/testing/selftests/net/srv6_end_flavors_test.sh
+++ b/tools/testing/selftests/net/srv6_end_flavors_test.sh
@@ -194,8 +194,8 @@
 # after the IPv6 header. At this point, the packet with IPv6 DA=cafe::1 is sent
 # to the destination, i.e. hs-1.
 
-# Kselftest framework requirement - SKIP code is 4.
-readonly ksft_skip=4
+# shellcheck source=lib.sh
+source lib.sh
 
 readonly RDMSUFF="$(mktemp -u XXXXXXXX)"
 readonly DUMMY_DEVNAME="dum0"
@@ -224,24 +224,7 @@ nfail=0
 
 log_test()
 {
-	local rc="$1"
-	local expected="$2"
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh
index 4bc135e5c22cc..2e2ae21974ae9 100755
--- a/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_end_next_csid_l3vpn_test.sh
@@ -323,24 +323,7 @@ nfail=0
 
 log_test()
 {
-	local rc="$1"
-	local expected="$2"
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh b/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh
index 34b781a2ae748..b492a7f0297fe 100755
--- a/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_end_x_next_csid_l3vpn_test.sh
@@ -368,24 +368,7 @@ nfail=0
 
 log_test()
 {
-	local rc="$1"
-	local expected="$2"
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh b/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh
index cd7d061e21f88..64ea4e2308b67 100755
--- a/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_hencap_red_l3vpn_test.sh
@@ -197,24 +197,7 @@ HAS_TUNSRC=false
 
 log_test()
 {
-	local rc="$1"
-	local expected="$2"
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh b/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh
index 0979b5316fdf8..31e41cc4922ec 100755
--- a/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh
+++ b/tools/testing/selftests/net/srv6_hl2encap_red_l2vpn_test.sh
@@ -146,24 +146,7 @@ nfail=0
 
 log_test()
 {
-	local rc="$1"
-	local expected="$2"
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()
diff --git a/tools/testing/selftests/net/test_bridge_backup_port.sh b/tools/testing/selftests/net/test_bridge_backup_port.sh
index 2a7224fe74f20..8bc76be2b2d39 100755
--- a/tools/testing/selftests/net/test_bridge_backup_port.sh
+++ b/tools/testing/selftests/net/test_bridge_backup_port.sh
@@ -56,37 +56,7 @@ PING_TIMEOUT=5
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "$VERBOSE" = "1" ]; then
-			echo "    rc=$rc, expected $expected"
-		fi
-
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/test_bridge_neigh_suppress.sh b/tools/testing/selftests/net/test_bridge_neigh_suppress.sh
index e9ed0d7509962..e421579079934 100755
--- a/tools/testing/selftests/net/test_bridge_neigh_suppress.sh
+++ b/tools/testing/selftests/net/test_bridge_neigh_suppress.sh
@@ -72,38 +72,7 @@ PAUSE=no
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		# shellcheck disable=SC2154
-		ret=$(ksft_exit_status_merge "$ret" "$ksft_fail")
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "$VERBOSE" = "1" ]; then
-			echo "    rc=$rc, expected $expected"
-		fi
-
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 	return 0
 }
 
diff --git a/tools/testing/selftests/net/test_vxlan_mdb.sh b/tools/testing/selftests/net/test_vxlan_mdb.sh
index 58da5de99ac45..cffbd9343d565 100755
--- a/tools/testing/selftests/net/test_vxlan_mdb.sh
+++ b/tools/testing/selftests/net/test_vxlan_mdb.sh
@@ -133,37 +133,7 @@ PAUSE=no
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "$VERBOSE" = "1" ]; then
-			echo "    rc=$rc, expected $expected"
-		fi
-
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh b/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh
index b8805983b728d..c51ca0b532dd7 100755
--- a/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh
+++ b/tools/testing/selftests/net/test_vxlan_nolocalbypass.sh
@@ -24,37 +24,7 @@ PAUSE=no
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "$VERBOSE" = "1" ]; then
-			echo "    rc=$rc, expected $expected"
-		fi
-
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
-
-	[ "$VERBOSE" = "1" ] && echo
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/test_vxlan_vnifiltering.sh b/tools/testing/selftests/net/test_vxlan_vnifiltering.sh
index 8deacc565afa1..6fb5af013dacf 100755
--- a/tools/testing/selftests/net/test_vxlan_vnifiltering.sh
+++ b/tools/testing/selftests/net/test_vxlan_vnifiltering.sh
@@ -98,31 +98,7 @@ which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "    TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-		echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-
-	if [ "${PAUSE}" = "yes" ]; then
-		echo
-		echo "hit enter to continue, 'q' to quit"
-		read a
-		[ "$a" = "q" ] && exit 1
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/vrf-xfrm-tests.sh b/tools/testing/selftests/net/vrf-xfrm-tests.sh
index b64dd891699d3..a4617e5dace7f 100755
--- a/tools/testing/selftests/net/vrf-xfrm-tests.sh
+++ b/tools/testing/selftests/net/vrf-xfrm-tests.sh
@@ -35,24 +35,7 @@ which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
 #
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd_host1()
diff --git a/tools/testing/selftests/net/vrf_route_leaking.sh b/tools/testing/selftests/net/vrf_route_leaking.sh
index ce34cb2e6e0b4..abf106e0f0c05 100755
--- a/tools/testing/selftests/net/vrf_route_leaking.sh
+++ b/tools/testing/selftests/net/vrf_route_leaking.sh
@@ -99,24 +99,7 @@ log_section()
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ "${rc}" -eq "${expected}" ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read -r a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/vrf_strict_mode_test.sh b/tools/testing/selftests/net/vrf_strict_mode_test.sh
index 01552b5425444..7de1873362ba9 100755
--- a/tools/testing/selftests/net/vrf_strict_mode_test.sh
+++ b/tools/testing/selftests/net/vrf_strict_mode_test.sh
@@ -16,24 +16,7 @@ TESTS="init testns mix"
 
 log_test()
 {
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		nsuccess=$((nsuccess+1))
-		printf "\n    TEST: %-60s  [ OK ]\n" "${msg}"
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "\n    TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 print_log_test_results()

3/2 2026/08/31 10:14 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 16662
							output: 60
							thoughts: 1057
						

Thoughts:
**Patch Analysis: WorthFuzzing Evaluation**

Alright, let's break down this patch. My initial scan immediately flags the scope: it's laser-focused on the `tools/testing/selftests/net/` directory. That's a huge clue right there. I see a comprehensive list of modified shell scripts. Specifically, I'm noting the changes target a broad range of networking features, including things like FDB flushing, FIB rules, SRv6, VRF, VXLAN, bridge configurations, and ICMP redirects, just to name a few.

The key point for me, from a fuzzing perspective, is that *this patch exclusively touches shell scripts*. No C code within the kernel itself, no driver modifications, no architectural changes that would directly impact kernel execution are apparent. It's confined to the userspace test infrastructure.

Now, I'm cross-referencing this assessment with my understanding of the fuzzing criteria. The instructions are clear: if the patch is limited to documentation, Kconfig files, code comments, or in this case test scripts which are not part of core kernel logic, then we *should not* consider it for fuzzing. It's essentially a userspace test suite update, not a change to the runtime kernel code that can be directly executed by the kernel, or drivers, or architectures.

To confirm, I'm mentally running through the decision tree. The patch modifies self-tests within the `tools` directory, and the criteria specifically state this type of modification doesn't qualify as a fuzzing candidate. There's no reachable core kernel logic affected here.

Therefore, my conclusion is that this patch doesn't warrant fuzzing. The changes are limited to the user-space test scripts, and while those tests are valuable for verifying functionality, they don't directly modify the kernel's runtime behavior.

Consequently, I'm ready to set the results. `WorthFuzzing` should be `false`. I'll set `FocusSymbols` to an empty list, and likewise `EnableConfigs` as it doesn't affect compilation options. I'll provide a concise reasoning explanation: "This patch modifies only kselftest shell scripts in `tools/testing/selftests/net/`, and does not change kernel functional logic."



4/2 2026/08/31 10:15 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch modifies only userspace shell scripts in tools/testing/selftests/net/ and contains no functional changes to the Linux kernel.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies only userspace shell scripts in tools/testing/selftests/net/ and contains no functional changes to the Linux kernel.",
  "WorthFuzzing": false
}

5/1 2026/08/31 10:15 action If
0m Args:
{
  "WorthFuzzing": false
}

Results:
null

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)