Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/xsk: add option that lists all tests

Add a command line option (-l) that lists all the tests. The number
before the test will be used in the next commit for specifying a
single test to run. Here is an example of the output:

Tests:
0: SEND_RECEIVE
1: SEND_RECEIVE_2K_FRAME
2: SEND_RECEIVE_SINGLE_PKT
3: POLL_RX
4: POLL_TX
5: POLL_RXQ_FULL
6: POLL_TXQ_FULL
7: SEND_RECEIVE_UNALIGNED
:
:

Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/r/20230914084900.492-7-magnus.karlsson@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Magnus Karlsson and committed by
Alexei Starovoitov
c53dab7d f20fbcd0

+42 -7
+14 -1
tools/testing/selftests/bpf/test_xsk.sh
··· 76 76 # 77 77 # Run test suite in a specific mode only [skb,drv,zc] 78 78 # sudo ./test_xsk.sh -m MODE 79 + # 80 + # List available tests 81 + # ./test_xsk.sh -l 79 82 80 83 . xsk_prereqs.sh 81 84 82 85 ETH="" 83 86 84 - while getopts "vi:dm:" flag 87 + while getopts "vi:dm:l" flag 85 88 do 86 89 case "${flag}" in 87 90 v) verbose=1;; 88 91 d) debug=1;; 89 92 i) ETH=${OPTARG};; 90 93 m) MODE=${OPTARG};; 94 + l) list=1;; 91 95 esac 92 96 done 93 97 ··· 139 135 ip link set ${VETH0} up 140 136 } 141 137 138 + if [[ $list -eq 1 ]]; then 139 + ./${XSKOBJ} -l 140 + exit 141 + fi 142 + 142 143 if [ ! -z $ETH ]; then 143 144 VETH0=${ETH} 144 145 VETH1=${ETH} ··· 190 181 cleanup_exit ${VETH0} ${VETH1} 191 182 else 192 183 cleanup_iface ${ETH} ${MTU} 184 + fi 185 + 186 + if [[ $list -eq 1 ]]; then 187 + exit 193 188 fi 194 189 195 190 TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"
+6 -4
tools/testing/selftests/bpf/xsk_prereqs.sh
··· 83 83 fi 84 84 85 85 ./${XSKOBJ} -i ${VETH0} -i ${VETH1} ${ARGS} 86 - 87 86 retval=$? 88 - test_status $retval "${TEST_NAME}" 89 - statusList+=($retval) 90 - nameList+=(${TEST_NAME}) 87 + 88 + if [[ $list -ne 1 ]]; then 89 + test_status $retval "${TEST_NAME}" 90 + statusList+=($retval) 91 + nameList+=(${TEST_NAME}) 92 + fi 91 93 }
+22 -2
tools/testing/selftests/bpf/xskxceiver.c
··· 108 108 static const char *MAC2 = "\x00\x0A\x56\x9E\xEE\x61"; 109 109 110 110 static bool opt_verbose; 111 + static bool opt_print_tests; 111 112 static enum test_mode opt_mode = TEST_MODE_ALL; 112 113 113 114 static void __exit_with_error(int error, const char *file, const char *func, int line) ··· 315 314 {"busy-poll", no_argument, 0, 'b'}, 316 315 {"verbose", no_argument, 0, 'v'}, 317 316 {"mode", required_argument, 0, 'm'}, 317 + {"list", no_argument, 0, 'l'}, 318 318 {0, 0, 0, 0} 319 319 }; 320 320 ··· 327 325 " -i, --interface Use interface\n" 328 326 " -v, --verbose Verbose output\n" 329 327 " -b, --busy-poll Enable busy poll\n" 330 - " -m, --mode Run only mode skb, drv, or zc\n"; 328 + " -m, --mode Run only mode skb, drv, or zc\n" 329 + " -l, --list List all available tests\n"; 331 330 332 331 ksft_print_msg(str, prog); 333 332 } ··· 350 347 opterr = 0; 351 348 352 349 for (;;) { 353 - c = getopt_long(argc, argv, "i:vbm:", long_options, &option_index); 350 + c = getopt_long(argc, argv, "i:vbm:l", long_options, &option_index); 354 351 if (c == -1) 355 352 break; 356 353 ··· 390 387 usage(basename(argv[0])); 391 388 ksft_exit_xfail(); 392 389 } 390 + break; 391 + case 'l': 392 + opt_print_tests = true; 393 393 break; 394 394 default: 395 395 usage(basename(argv[0])); ··· 2313 2307 {.name = "TOO_MANY_FRAGS", .test_func = testapp_too_many_frags}, 2314 2308 }; 2315 2309 2310 + static void print_tests(void) 2311 + { 2312 + u32 i; 2313 + 2314 + printf("Tests:\n"); 2315 + for (i = 0; i < ARRAY_SIZE(tests); i++) 2316 + printf("%u: %s\n", i, tests[i].name); 2317 + } 2318 + 2316 2319 int main(int argc, char **argv) 2317 2320 { 2318 2321 struct pkt_stream *rx_pkt_stream_default; ··· 2345 2330 setlocale(LC_ALL, ""); 2346 2331 2347 2332 parse_command_line(ifobj_tx, ifobj_rx, argc, argv); 2333 + 2334 + if (opt_print_tests) { 2335 + print_tests(); 2336 + ksft_exit_xpass(); 2337 + } 2348 2338 2349 2339 shared_netdev = (ifobj_tx->ifindex == ifobj_rx->ifindex); 2350 2340 ifobj_tx->shared_umem = shared_netdev;