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

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'selftests-mptcp-counter-cache-stats-before-timeout'

Matthieu Baerts says:

====================
selftests: mptcp: counter cache & stats before timeout

Here are a bunch of small improvements to the MPTCP selftests:

- Patch 1: move code to mptcp_lib.sh to prepare the new features.

- Patch 2: simplify mptcp_lib_pr_err_stats helper use.

- Patch 3: remove unused last column from nstat output.

- Patch 4: improve stats dump in mptcp_join.sh.

- Patch 5: get counters from nstat history and simplify mptcp_connect.sh.

- Patch 6: avoid taking the same packet trace twice.

- Patch 7: wait for an event instead of a fix time.

- Patch 8: instead of using 'timeout' and print the stats after, another
internal timeout is used: if it fires, it will print stats, then stop
everything. This avoids confusions around stats in case of timeout.
====================

Link: https://patch.msgid.link/20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+203 -150
+66 -74
tools/testing/selftests/net/mptcp/mptcp_connect.sh
··· 375 375 local capfile="${rndh}-${connector_ns:0:3}-${listener_ns:0:3}-${cl_proto}-${srv_proto}-${connect_addr}-${port}" 376 376 local capopt="-i any -s 65535 -B 32768 ${capuser}" 377 377 378 - ip netns exec ${listener_ns} tcpdump ${capopt} -w "${capfile}-listener.pcap" >> "${capout}" 2>&1 & 378 + ip netns exec ${listener_ns} tcpdump ${capopt} \ 379 + -w "${capfile}-listener.pcap" >> "${capout}" 2>&1 & 379 380 local cappid_listener=$! 380 381 381 - ip netns exec ${connector_ns} tcpdump ${capopt} -w "${capfile}-connector.pcap" >> "${capout}" 2>&1 & 382 - local cappid_connector=$! 382 + if [ ${listener_ns} != ${connector_ns} ]; then 383 + ip netns exec ${connector_ns} tcpdump ${capopt} \ 384 + -w "${capfile}-connector.pcap" >> "${capout}" 2>&1 & 385 + local cappid_connector=$! 386 + fi 383 387 384 388 sleep 1 385 389 fi 386 390 387 - NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ 388 - nstat -n 391 + mptcp_lib_nstat_init "${listener_ns}" 389 392 if [ ${listener_ns} != ${connector_ns} ]; then 390 - NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ 391 - nstat -n 393 + mptcp_lib_nstat_init "${connector_ns}" 392 394 fi 393 395 394 - local stat_synrx_last_l 395 - local stat_ackrx_last_l 396 - local stat_cookietx_last 397 - local stat_cookierx_last 398 - local stat_csum_err_s 399 - local stat_csum_err_c 400 - local stat_tcpfb_last_l 401 - stat_synrx_last_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX") 402 - stat_ackrx_last_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableACKRX") 403 - stat_cookietx_last=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesSent") 404 - stat_cookierx_last=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesRecv") 405 - stat_csum_err_s=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtDataCsumErr") 406 - stat_csum_err_c=$(mptcp_lib_get_counter "${connector_ns}" "MPTcpExtDataCsumErr") 407 - stat_tcpfb_last_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableFallbackACK") 408 - 409 - timeout ${timeout_test} \ 410 - ip netns exec ${listener_ns} \ 411 - ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \ 412 - $extra_args $local_addr < "$sin" > "$sout" & 396 + ip netns exec ${listener_ns} \ 397 + ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \ 398 + $extra_args $local_addr < "$sin" > "$sout" & 413 399 local spid=$! 414 400 415 401 mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" 416 402 417 403 local start 418 404 start=$(date +%s%3N) 419 - timeout ${timeout_test} \ 420 - ip netns exec ${connector_ns} \ 421 - ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 422 - $extra_args $connect_addr < "$cin" > "$cout" & 405 + ip netns exec ${connector_ns} \ 406 + ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 407 + $extra_args $connect_addr < "$cin" > "$cout" & 423 408 local cpid=$! 409 + 410 + mptcp_lib_wait_timeout "${timeout_test}" "${listener_ns}" \ 411 + "${connector_ns}" "${port}" "${cpid}" "${spid}" & 412 + local timeout_pid=$! 424 413 425 414 wait $cpid 426 415 local retc=$? 427 416 wait $spid 428 417 local rets=$? 418 + 419 + if kill -0 $timeout_pid; then 420 + # Finished before the timeout: kill the background job 421 + mptcp_lib_kill_group_wait $timeout_pid 422 + timeout_pid=0 423 + fi 429 424 430 425 local stop 431 426 stop=$(date +%s%3N) ··· 428 433 if $capture; then 429 434 sleep 1 430 435 kill ${cappid_listener} 431 - kill ${cappid_connector} 436 + if [ ${listener_ns} != ${connector_ns} ]; then 437 + kill ${cappid_connector} 438 + fi 432 439 fi 433 440 434 - NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ 435 - nstat | grep Tcp > /tmp/${listener_ns}.out 441 + mptcp_lib_nstat_get "${listener_ns}" 436 442 if [ ${listener_ns} != ${connector_ns} ]; then 437 - NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ 438 - nstat | grep Tcp > /tmp/${connector_ns}.out 443 + mptcp_lib_nstat_get "${connector_ns}" 439 444 fi 440 445 441 446 local duration 442 447 duration=$((stop-start)) 443 448 printf "(duration %05sms) " "${duration}" 444 - if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then 449 + if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ] || [ ${timeout_pid} -ne 0 ]; then 445 450 mptcp_lib_pr_fail "client exit code $retc, server $rets" 446 - mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" \ 447 - "/tmp/${listener_ns}.out" "/tmp/${connector_ns}.out" 451 + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" 448 452 449 453 echo 450 454 cat "$capout" ··· 457 463 rets=$? 458 464 459 465 local extra="" 460 - local stat_synrx_now_l 461 - local stat_ackrx_now_l 462 - local stat_cookietx_now 463 - local stat_cookierx_now 464 - local stat_ooo_now 465 - local stat_tcpfb_now_l 466 - stat_synrx_now_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX") 467 - stat_ackrx_now_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableACKRX") 468 - stat_cookietx_now=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesSent") 469 - stat_cookierx_now=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesRecv") 470 - stat_ooo_now=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtTCPOFOQueue") 471 - stat_tcpfb_now_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableFallbackACK") 466 + local stat_synrx 467 + local stat_ackrx 468 + local stat_cookietx 469 + local stat_cookierx 470 + local stat_ooo 471 + local stat_tcpfb 472 + stat_synrx=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX") 473 + stat_ackrx=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableACKRX") 474 + stat_cookietx=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesSent") 475 + stat_cookierx=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesRecv") 476 + stat_ooo=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtTCPOFOQueue") 477 + stat_tcpfb=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableFallbackACK") 472 478 473 - expect_synrx=$((stat_synrx_last_l)) 474 - expect_ackrx=$((stat_ackrx_last_l)) 479 + expect_synrx=0 480 + expect_ackrx=0 475 481 476 482 cookies=$(ip netns exec ${listener_ns} sysctl net.ipv4.tcp_syncookies) 477 483 cookies=${cookies##*=} 478 484 479 485 if [ ${cl_proto} = "MPTCP" ] && [ ${srv_proto} = "MPTCP" ]; then 480 - expect_synrx=$((stat_synrx_last_l+connect_per_transfer)) 481 - expect_ackrx=$((stat_ackrx_last_l+connect_per_transfer)) 486 + expect_synrx=${connect_per_transfer} 487 + expect_ackrx=${connect_per_transfer} 482 488 fi 483 489 484 - if [ ${stat_synrx_now_l} -lt ${expect_synrx} ]; then 485 - mptcp_lib_pr_fail "lower MPC SYN rx (${stat_synrx_now_l})" \ 490 + if [ ${stat_synrx} -lt ${expect_synrx} ]; then 491 + mptcp_lib_pr_fail "lower MPC SYN rx (${stat_synrx})" \ 486 492 "than expected (${expect_synrx})" 487 493 retc=1 488 494 fi 489 - if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ]; then 490 - if [ ${stat_ooo_now} -eq 0 ]; then 491 - mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx_now_l})" \ 495 + if [ ${stat_ackrx} -lt ${expect_ackrx} ]; then 496 + if [ ${stat_ooo} -eq 0 ]; then 497 + mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx})" \ 492 498 "than expected (${expect_ackrx})" 493 499 rets=1 494 500 else ··· 502 508 csum_err_s=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtDataCsumErr") 503 509 csum_err_c=$(mptcp_lib_get_counter "${connector_ns}" "MPTcpExtDataCsumErr") 504 510 505 - local csum_err_s_nr=$((csum_err_s - stat_csum_err_s)) 506 - if [ $csum_err_s_nr -gt 0 ]; then 507 - mptcp_lib_pr_fail "server got ${csum_err_s_nr} data checksum error[s]" 511 + if [ $csum_err_s -gt 0 ]; then 512 + mptcp_lib_pr_fail "server got ${csum_err_s} data checksum error[s]" 508 513 rets=1 509 514 fi 510 515 511 - local csum_err_c_nr=$((csum_err_c - stat_csum_err_c)) 512 - if [ $csum_err_c_nr -gt 0 ]; then 513 - mptcp_lib_pr_fail "client got ${csum_err_c_nr} data checksum error[s]" 516 + if [ $csum_err_c -gt 0 ]; then 517 + mptcp_lib_pr_fail "client got ${csum_err_c} data checksum error[s]" 514 518 retc=1 515 519 fi 516 520 fi 517 521 518 - if [ ${stat_ooo_now} -eq 0 ] && [ ${stat_tcpfb_last_l} -ne ${stat_tcpfb_now_l} ]; then 522 + if [ ${stat_ooo} -eq 0 ] && [ ${stat_tcpfb} -gt 0 ]; then 519 523 mptcp_lib_pr_fail "unexpected fallback to TCP" 520 524 rets=1 521 525 fi 522 526 523 527 if [ $cookies -eq 2 ];then 524 - if [ $stat_cookietx_last -ge $stat_cookietx_now ] ;then 528 + if [ $stat_cookietx -eq 0 ] ;then 525 529 extra+=" WARN: CookieSent: did not advance" 526 530 fi 527 - if [ $stat_cookierx_last -ge $stat_cookierx_now ] ;then 531 + if [ $stat_cookierx -eq 0 ] ;then 528 532 extra+=" WARN: CookieRecv: did not advance" 529 533 fi 530 534 else 531 - if [ $stat_cookietx_last -ne $stat_cookietx_now ] ;then 535 + if [ $stat_cookietx -gt 0 ] ;then 532 536 extra+=" WARN: CookieSent: changed" 533 537 fi 534 - if [ $stat_cookierx_last -ne $stat_cookierx_now ] ;then 538 + if [ $stat_cookierx -gt 0 ] ;then 535 539 extra+=" WARN: CookieRecv: changed" 536 540 fi 537 541 fi 538 542 539 - if [ ${stat_synrx_now_l} -gt ${expect_synrx} ]; then 543 + if [ ${stat_synrx} -gt ${expect_synrx} ]; then 540 544 extra+=" WARN: SYNRX: expect ${expect_synrx}," 541 - extra+=" got ${stat_synrx_now_l} (probably retransmissions)" 545 + extra+=" got ${stat_synrx} (probably retransmissions)" 542 546 fi 543 - if [ ${stat_ackrx_now_l} -gt ${expect_ackrx} ]; then 547 + if [ ${stat_ackrx} -gt ${expect_ackrx} ]; then 544 548 extra+=" WARN: ACKRX: expect ${expect_ackrx}," 545 - extra+=" got ${stat_ackrx_now_l} (probably retransmissions)" 549 + extra+=" got ${stat_ackrx} (probably retransmissions)" 546 550 fi 547 551 548 552 if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then
+37 -28
tools/testing/selftests/net/mptcp/mptcp_join.sh
··· 983 983 984 984 cond_start_capture ${listener_ns} 985 985 986 - NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ 987 - nstat -n 988 - NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ 989 - nstat -n 986 + mptcp_lib_nstat_init "${listener_ns}" 987 + mptcp_lib_nstat_init "${connector_ns}" 990 988 991 989 local extra_args 992 990 if [ $speed = "fast" ]; then ··· 1024 1026 if [ "$test_linkfail" -gt 1 ];then 1025 1027 listener_in="${sinfail}" 1026 1028 fi 1027 - timeout ${timeout_test} \ 1028 - ip netns exec ${listener_ns} \ 1029 - ./mptcp_connect -t ${timeout_poll} -l -p ${port} -s ${srv_proto} \ 1030 - ${extra_srv_args} "${bind_addr}" < "${listener_in}" > "${sout}" & 1029 + ip netns exec ${listener_ns} \ 1030 + ./mptcp_connect -t ${timeout_poll} -l -p ${port} -s ${srv_proto} \ 1031 + ${extra_srv_args} "${bind_addr}" < "${listener_in}" > "${sout}" & 1031 1032 local spid=$! 1032 1033 1033 1034 mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" 1034 1035 1035 1036 extra_cl_args="$extra_args $extra_cl_args" 1036 1037 if [ "$test_linkfail" -eq 0 ];then 1037 - timeout ${timeout_test} \ 1038 - ip netns exec ${connector_ns} \ 1039 - ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 1040 - $extra_cl_args $connect_addr < "$cin" > "$cout" & 1038 + ip netns exec ${connector_ns} \ 1039 + ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 1040 + $extra_cl_args $connect_addr < "$cin" > "$cout" & 1041 1041 elif [ "$test_linkfail" -eq 1 ] || [ "$test_linkfail" -eq 2 ];then 1042 1042 connector_in="${cinsent}" 1043 1043 ( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" ) | \ 1044 1044 tee "$cinsent" | \ 1045 - timeout ${timeout_test} \ 1046 1045 ip netns exec ${connector_ns} \ 1047 1046 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 1048 1047 $extra_cl_args $connect_addr > "$cout" & 1049 1048 else 1050 1049 connector_in="${cinsent}" 1051 1050 tee "$cinsent" < "$cinfail" | \ 1052 - timeout ${timeout_test} \ 1053 - ip netns exec ${connector_ns} \ 1054 - ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 1055 - $extra_cl_args $connect_addr > "$cout" & 1051 + ip netns exec ${connector_ns} \ 1052 + ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ 1053 + $extra_cl_args $connect_addr > "$cout" & 1056 1054 fi 1057 1055 local cpid=$! 1056 + 1057 + mptcp_lib_wait_timeout "${timeout_test}" "${listener_ns}" \ 1058 + "${connector_ns}" "${port}" "${cpid}" "${spid}" & 1059 + local timeout_pid=$! 1058 1060 1059 1061 pm_nl_set_endpoint $listener_ns $connector_ns $connect_addr 1060 1062 check_cestab $listener_ns $connector_ns ··· 1064 1066 wait $spid 1065 1067 local rets=$? 1066 1068 1069 + if kill -0 $timeout_pid; then 1070 + # Finished before the timeout: kill the background job 1071 + mptcp_lib_kill_group_wait $timeout_pid 1072 + timeout_pid=0 1073 + fi 1074 + 1067 1075 cond_stop_capture 1068 1076 1069 - NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ 1070 - nstat | grep Tcp > /tmp/${listener_ns}.out 1071 - NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ 1072 - nstat | grep Tcp > /tmp/${connector_ns}.out 1077 + mptcp_lib_nstat_get "${listener_ns}" 1078 + mptcp_lib_nstat_get "${connector_ns}" 1073 1079 1074 - if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then 1080 + if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ] || [ ${timeout_pid} -ne 0 ]; then 1075 1081 fail_test "client exit code $retc, server $rets" 1076 - mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" \ 1077 - "/tmp/${listener_ns}.out" "/tmp/${connector_ns}.out" 1082 + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" 1078 1083 return 1 1079 1084 fi 1080 1085 ··· 1152 1151 do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP ${connect_addr} 1153 1152 } 1154 1153 1154 + _dump_stats() 1155 + { 1156 + local ns="${1}" 1157 + local side="${2}" 1158 + 1159 + mptcp_lib_print_err "${side} ns stats (${ns2})" 1160 + mptcp_lib_pr_nstat "${ns}" 1161 + echo 1162 + } 1163 + 1155 1164 dump_stats() 1156 1165 { 1157 - echo Server ns stats 1158 - ip netns exec $ns1 nstat -as | grep Tcp 1159 - echo Client ns stats 1160 - ip netns exec $ns2 nstat -as | grep Tcp 1166 + _dump_stats "${ns1}" "Server" 1167 + _dump_stats "${ns2}" "Client" 1161 1168 } 1162 1169 1163 1170 chk_csum_nr()
+51 -7
tools/testing/selftests/net/mptcp/mptcp_lib.sh
··· 106 106 mptcp_lib_print_info "INFO: ${*}" 107 107 } 108 108 109 - # $1-2: listener/connector ns ; $3 port ; $4-5 listener/connector stat file 109 + mptcp_lib_pr_nstat() { 110 + local ns="${1}" 111 + local hist="/tmp/${ns}.out" 112 + 113 + if [ -f "${hist}" ]; then 114 + awk '$2 != 0 { print " "$0 }' "${hist}" 115 + else 116 + ip netns exec "${ns}" nstat -as | grep Tcp 117 + fi 118 + } 119 + 120 + # $1-2: listener/connector ns ; $3 port 110 121 mptcp_lib_pr_err_stats() { 111 122 local lns="${1}" 112 123 local cns="${2}" 113 124 local port="${3}" 114 - local lstat="${4}" 115 - local cstat="${5}" 116 125 117 126 echo -en "${MPTCP_LIB_COLOR_RED}" 118 127 { 119 128 printf "\nnetns %s (listener) socket stat for %d:\n" "${lns}" "${port}" 120 129 ip netns exec "${lns}" ss -Menitam -o "sport = :${port}" 121 - cat "${lstat}" 130 + mptcp_lib_pr_nstat "${lns}" 122 131 123 132 printf "\nnetns %s (connector) socket stat for %d:\n" "${cns}" "${port}" 124 133 ip netns exec "${cns}" ss -Menitam -o "dport = :${port}" 125 - [ "${lstat}" != "${cstat}" ] && cat "${cstat}" 134 + [ "${lns}" != "${cns}" ] && mptcp_lib_pr_nstat "${cns}" 126 135 } 1>&2 127 136 echo -en "${MPTCP_LIB_COLOR_RESET}" 128 137 } ··· 350 341 mptcp_lib_get_info_value "${1}" "^type:${3:-1}," 351 342 } 352 343 344 + mptcp_lib_wait_timeout() { 345 + local timeout_test="${1}" 346 + local listener_ns="${2}" 347 + local connector_ns="${3}" 348 + local port="${4}" 349 + shift 4 # rest are PIDs 350 + 351 + sleep "${timeout_test}" 352 + mptcp_lib_print_err "timeout" 353 + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" 354 + kill "${@}" 2>/dev/null 355 + } 356 + 353 357 # $1: PID 354 358 mptcp_lib_kill_wait() { 355 359 [ "${1}" -eq 0 ] && return 0 ··· 398 376 [ -z "${1##*:*}" ] 399 377 } 400 378 379 + mptcp_lib_nstat_init() { 380 + local ns="${1}" 381 + 382 + rm -f "/tmp/${ns}."{nstat,out} 383 + NSTAT_HISTORY="/tmp/${ns}.nstat" ip netns exec "${ns}" nstat -n 384 + } 385 + 386 + mptcp_lib_nstat_get() { 387 + local ns="${1}" 388 + 389 + # filter out non-*TCP stats, and the rate (last column) 390 + NSTAT_HISTORY="/tmp/${ns}.nstat" ip netns exec "${ns}" nstat -sz | 391 + grep -o ".*Tcp\S\+\s\+[0-9]\+" > "/tmp/${ns}.out" 392 + } 393 + 401 394 # $1: ns, $2: MIB counter 395 + # Get the counter from the history (mptcp_lib_nstat_{init,get}()) if available. 396 + # If not, get the counter from nstat ignoring any history. 402 397 mptcp_lib_get_counter() { 403 398 local ns="${1}" 404 399 local counter="${2}" 400 + local hist="/tmp/${ns}.out" 405 401 local count 406 402 407 - count=$(ip netns exec "${ns}" nstat -asz "${counter}" | 408 - awk 'NR==1 {next} {print $2}') 403 + if [[ -s "${hist}" && "${counter}" == *"Tcp"* ]]; then 404 + count=$(awk "/^${counter} / {print \$2; exit}" "${hist}") 405 + else 406 + count=$(ip netns exec "${ns}" nstat -asz "${counter}" | 407 + awk 'NR==1 {next} {print $2}') 408 + fi 409 409 if [ -z "${count}" ]; then 410 410 mptcp_lib_fail_if_expected_feature "${counter} counter" 411 411 return 1
+23 -20
tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
··· 169 169 cmsg+=",TCPINQ" 170 170 fi 171 171 172 - NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ 173 - nstat -n 174 - NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ 175 - nstat -n 172 + mptcp_lib_nstat_init "${listener_ns}" 173 + mptcp_lib_nstat_init "${connector_ns}" 176 174 177 - timeout ${timeout_test} \ 178 - ip netns exec ${listener_ns} \ 179 - $mptcp_connect -t ${timeout_poll} -l -M 1 -p $port -s ${srv_proto} -c "${cmsg}" \ 180 - ${local_addr} < "$sin" > "$sout" & 175 + ip netns exec ${listener_ns} \ 176 + $mptcp_connect -t ${timeout_poll} -l -M 1 -p $port -s ${srv_proto} -c "${cmsg}" \ 177 + ${local_addr} < "$sin" > "$sout" & 181 178 local spid=$! 182 179 183 - sleep 1 180 + mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" 184 181 185 - timeout ${timeout_test} \ 186 - ip netns exec ${connector_ns} \ 187 - $mptcp_connect -t ${timeout_poll} -M 2 -p $port -s ${cl_proto} -c "${cmsg}" \ 188 - $connect_addr < "$cin" > "$cout" & 182 + ip netns exec ${connector_ns} \ 183 + $mptcp_connect -t ${timeout_poll} -M 2 -p $port -s ${cl_proto} -c "${cmsg}" \ 184 + $connect_addr < "$cin" > "$cout" & 189 185 190 186 local cpid=$! 187 + 188 + mptcp_lib_wait_timeout "${timeout_test}" "${listener_ns}" \ 189 + "${connector_ns}" "${port}" "${cpid}" "${spid}" & 190 + local timeout_pid=$! 191 191 192 192 wait $cpid 193 193 local retc=$? 194 194 wait $spid 195 195 local rets=$? 196 196 197 - NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ 198 - nstat | grep Tcp > /tmp/${listener_ns}.out 199 - NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ 200 - nstat | grep Tcp > /tmp/${connector_ns}.out 197 + if kill -0 $timeout_pid; then 198 + # Finished before the timeout: kill the background job 199 + mptcp_lib_kill_group_wait $timeout_pid 200 + timeout_pid=0 201 + fi 202 + 203 + mptcp_lib_nstat_get "${listener_ns}" 204 + mptcp_lib_nstat_get "${connector_ns}" 201 205 202 206 print_title "Transfer ${ip:2}" 203 - if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then 207 + if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ] || [ ${timeout_pid} -ne 0 ]; then 204 208 mptcp_lib_pr_fail "client exit code $retc, server $rets" 205 - mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" \ 206 - "/tmp/${listener_ns}.out" "/tmp/${connector_ns}.out" 209 + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" 207 210 208 211 mptcp_lib_result_fail "transfer ${ip}" 209 212
+24 -20
tools/testing/selftests/net/mptcp/simult_flows.sh
··· 155 155 sleep 1 156 156 fi 157 157 158 - NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \ 159 - nstat -n 160 - NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \ 161 - nstat -n 158 + mptcp_lib_nstat_init "${ns3}" 159 + mptcp_lib_nstat_init "${ns1}" 162 160 163 - timeout ${timeout_test} \ 164 - ip netns exec ${ns3} \ 165 - ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \ 166 - 0.0.0.0 < "$sin" > "$sout" & 161 + ip netns exec ${ns3} \ 162 + ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \ 163 + 0.0.0.0 < "$sin" > "$sout" & 167 164 local spid=$! 168 165 169 166 mptcp_lib_wait_local_port_listen "${ns3}" "${port}" 170 167 171 - timeout ${timeout_test} \ 172 - ip netns exec ${ns1} \ 173 - ./mptcp_connect -jt ${timeout_poll} -p $port -T $max_time \ 174 - 10.0.3.3 < "$cin" > "$cout" & 168 + ip netns exec ${ns1} \ 169 + ./mptcp_connect -jt ${timeout_poll} -p $port -T $max_time \ 170 + 10.0.3.3 < "$cin" > "$cout" & 175 171 local cpid=$! 172 + 173 + mptcp_lib_wait_timeout "${timeout_test}" "${ns3}" "${ns1}" "${port}" \ 174 + "${cpid}" "${spid}" & 175 + local timeout_pid=$! 176 176 177 177 wait $cpid 178 178 local retc=$? 179 179 wait $spid 180 180 local rets=$? 181 + 182 + if kill -0 $timeout_pid; then 183 + # Finished before the timeout: kill the background job 184 + mptcp_lib_kill_group_wait $timeout_pid 185 + timeout_pid=0 186 + fi 181 187 182 188 if $capture; then 183 189 sleep 1 ··· 191 185 kill ${cappid_connector} 192 186 fi 193 187 194 - NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \ 195 - nstat | grep Tcp > /tmp/${ns3}.out 196 - NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \ 197 - nstat | grep Tcp > /tmp/${ns1}.out 188 + mptcp_lib_nstat_get "${ns3}" 189 + mptcp_lib_nstat_get "${ns1}" 198 190 199 191 cmp $sin $cout > /dev/null 2>&1 200 192 local cmps=$? 201 193 cmp $cin $sout > /dev/null 2>&1 202 194 local cmpc=$? 203 195 204 - if [ $retc -eq 0 ] && [ $rets -eq 0 ] && \ 205 - [ $cmpc -eq 0 ] && [ $cmps -eq 0 ]; then 196 + if [ $retc -eq 0 ] && [ $rets -eq 0 ] && 197 + [ $cmpc -eq 0 ] && [ $cmps -eq 0 ] && 198 + [ $timeout_pid -eq 0 ]; then 206 199 printf "%-16s" " max $max_time " 207 200 mptcp_lib_pr_ok 208 201 cat "$capout" ··· 209 204 fi 210 205 211 206 mptcp_lib_pr_fail "client exit code $retc, server $rets" 212 - mptcp_lib_pr_err_stats "${ns3}" "${ns1}" "${port}" \ 213 - "/tmp/${ns3}.out" "/tmp/${ns1}.out" 207 + mptcp_lib_pr_err_stats "${ns3}" "${ns1}" "${port}" 214 208 ls -l $sin $cout 215 209 ls -l $cin $sout 216 210
+2 -1
tools/testing/selftests/net/mptcp/userspace_pm.sh
··· 211 211 ip netns exec "$ns1" \ 212 212 ./mptcp_connect -s MPTCP -w 300 -p $app_port -l $listen_addr > /dev/null 2>&1 & 213 213 local server_pid=$! 214 - sleep 0.5 214 + 215 + mptcp_lib_wait_local_port_listen "${ns1}" "${port}" 215 216 216 217 # Run the client, transfer $file and stay connected to the server 217 218 # to conduct tests