AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/09/24 01:24 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The patch modifies only selftest shell scripts under tools/testing/selftests/net/ to consolidate log_test implementations into lib.sh, and does not alter any kernel source code, headers, or compiled kernel binaries.",
  "WorthFuzzing": false
}

1/1 2026/09/24 01:24 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 9877f5b7d0d41884ff72728fb64240c466b6188a\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Thu Sep 24 01:24:07 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_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 35357d02e823b..e724f895ae2c8 100755\n--- a/tools/testing/selftests/net/icmp_redirect.sh\n+++ b/tools/testing/selftests/net/icmp_redirect.sh\n@@ -61,24 +61,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 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()\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..f6f8b100a70c7 100644\n--- a/tools/testing/selftests/net/lib.sh\n+++ b/tools/testing/selftests/net/lib.sh\n@@ -454,6 +454,39 @@ 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_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+\treturn 0\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 037e5fe1da2a6..260170dc84434 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 9a29e0d6c9125..6d4d6a23ecc47 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..9d2dc0faf741d 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,39 +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-\treturn 0\n+\tlog_test_expected \"$1\" \"$2\" \"$3\"\n }\n \n run_cmd()\ndiff --git a/tools/testing/selftests/net/test_vxlan_mdb.sh b/tools/testing/selftests/net/test_vxlan_mdb.sh\nindex f9600aabd4a29..2ebb4d8a3026c 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/09/24 01:24 agent patch-evaluator
0m Model:
core

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies only selftest shell scripts under tools/testing/selftests/net/ to consolidate log_test implementations into lib.sh, and does not alter any kernel source code, headers, or compiled kernel binaries.",
  "WorthFuzzing": false
}

Instruction:
You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.

================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.

- REACHABILITY IS THE PRIMARY GATE:
  Fuzzing can only discover bugs in code that can actually execute in standard virtualized
  environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
  If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
  regardless of whether it adds assertions or complex logic.

- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
  Patch authors routinely label changes as "cleanups", "refactorings", or state
  "No functional change intended". Do NOT take these claims at face value.
  Code refactorings that rearrange logic, introduce helper functions, or alter state management
  in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
  If reachable executable code is modified or refactored, it MUST be fuzzed.

- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
  When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
  BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
  Even if the author believes the invariant always holds, fuzzing is essential to verify whether
  an unusual sequence of operations can violate it.

================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:

- Non-kernel and non-executable changes:
  * Modifications to Documentation/, comments, or spelling fixes.
  * User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
    that do not affect the compiled kernel image (vmlinux) or kernel modules.
  * Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
    that do not alter control flow or data structures.
  * Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
  * Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
    ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
  * Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
    physical PCI hot-unplug or manual sysfs driver unbinding.
  * Code paths exclusive to architectures other than the target architecture.

================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
  * Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
    BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
  * Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
  * Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
  * Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).

================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:

- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
  Do NOT list generic, ubiquitous functions called by almost every program in the corpus
  (including, but not limited to: general memory allocators and deallocators, page fault
  and trap handlers, or core synchronization primitives; this is not an exhaustive list).
  Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
  which severely dilutes fuzzing effort away from the actual changes.

- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
  List functions that specifically implement the logic being added or altered, or direct API entrypoints
  for the subsystem feature under review.

- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
  Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
  distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
  If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
  functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).

================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any '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:
Target architecture: amd64

For your convenience, here is the diff of the changes:
commit 9877f5b7d0d41884ff72728fb64240c466b6188a
Author: syz-cluster <triage@syzkaller.com>
Date:   Thu Sep 24 01:24:07 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_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 35357d02e823b..e724f895ae2c8 100755
--- a/tools/testing/selftests/net/icmp_redirect.sh
+++ b/tools/testing/selftests/net/icmp_redirect.sh
@@ -61,24 +61,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 a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
+	log_test_expected "$1" "$2" "$3"
 }
 
 log_debug()
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..f6f8b100a70c7 100644
--- a/tools/testing/selftests/net/lib.sh
+++ b/tools/testing/selftests/net/lib.sh
@@ -454,6 +454,39 @@ 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_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
+
+	return 0
+}
+
 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 037e5fe1da2a6..260170dc84434 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 9a29e0d6c9125..6d4d6a23ecc47 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..9d2dc0faf741d 100755
--- a/tools/testing/selftests/net/test_bridge_neigh_suppress.sh
+++ b/tools/testing/selftests/net/test_bridge_neigh_suppress.sh
@@ -72,39 +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
-	return 0
+	log_test_expected "$1" "$2" "$3"
 }
 
 run_cmd()
diff --git a/tools/testing/selftests/net/test_vxlan_mdb.sh b/tools/testing/selftests/net/test_vxlan_mdb.sh
index f9600aabd4a29..2ebb4d8a3026c 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/09/24 01:24 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 16128
							output: 77
							thoughts: 1039
						

Thoughts:
**WorthFuzzing Assessment: Negative**

Okay, let's break this down. My initial scan immediately flags the patch's scope: it's strictly confined to `tools/testing/selftests/net/`. That's a huge clue. Given my expertise, I already know that means we're dealing with a suite of self-tests. Specifically, I see a list of numerous `.sh` scripts within that directory.

Now, I'll apply the established rules for determining `WorthFuzzing`. The criteria are clear: a "negative" return – meaning we *don't* need to fuzz – is triggered when the changes fall squarely into defined categories. My mind immediately checks the negative criteria. Are we touching kernel code? No. Are we modifying the vmlinux image or kernel modules? Absolutely not. Are these changes isolated to user-space tools, self-tests, or scripts? Bingo. The fact that the changes only hit files inside of `tools/testing/selftests/net/` is the decisive factor. This is a clear-cut case of refactoring test logging helpers that does not touch compiled code.

I can confidently conclude that `WorthFuzzing` should be set to `false`. I can even justify this by saying "The patch modifies only user-space shell scripts in tools/testing/selftests/net/ (refactoring test logging helpers) and does not affect the compiled kernel image or modules." There are no code symbols of interest that require further testing. No configs need to be enabled.



4/2 2026/09/24 01:24 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch modifies only selftest shell scripts under tools/testing/selftests/net/ to consolidate log_test implementations into lib.sh, and does not alter any kernel source code, headers, or compiled kernel binaries.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch modifies only selftest shell scripts under tools/testing/selftests/net/ to consolidate log_test implementations into lib.sh, and does not alter any kernel source code, headers, or compiled kernel binaries.",
  "WorthFuzzing": false
}

5/1 2026/09/24 01:24 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)