mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 15:03:53 +02:00
selftests: drv-net: wait for iperf client to stop sending
A few packets may still be sent out during the termination of iperf
processes. These late packets cause failures in rss_ctx.py when they
arrive on queues expected to be empty.
Example failure observed:
Check failed 2 != 0 traffic on inactive queues (context 1):
[0, 0, 1, 1, 386385, 397196, 0, 0, 0, 0, ...]
Check failed 4 != 0 traffic on inactive queues (context 2):
[0, 0, 0, 0, 2, 2, 247152, 253013, 0, 0, ...]
Check failed 2 != 0 traffic on inactive queues (context 3):
[0, 0, 0, 0, 0, 0, 1, 1, 282434, 283070, ...]
To avoid such failures, wait until all client sockets for the requested
port are either closed or in the TIME_WAIT state.
Fixes: 847aa551fa
("selftests: drv-net: rss_ctx: factor out send traffic and check")
Signed-off-by: Nimrod Oren <noren@nvidia.com>
Reviewed-by: Gal Pressman <gal@nvidia.com>
Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250722122655.3194442-1-noren@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
14822f7827
commit
8694138250
|
@ -1,5 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
import re
|
||||
import time
|
||||
|
||||
from lib.py import ksft_pr, cmd, ip, rand_port, wait_port_listen
|
||||
|
@ -10,12 +11,11 @@ class GenerateTraffic:
|
|||
|
||||
self.env = env
|
||||
|
||||
if port is None:
|
||||
port = rand_port()
|
||||
self._iperf_server = cmd(f"iperf3 -s -1 -p {port}", background=True)
|
||||
wait_port_listen(port)
|
||||
self.port = rand_port() if port is None else port
|
||||
self._iperf_server = cmd(f"iperf3 -s -1 -p {self.port}", background=True)
|
||||
wait_port_listen(self.port)
|
||||
time.sleep(0.1)
|
||||
self._iperf_client = cmd(f"iperf3 -c {env.addr} -P 16 -p {port} -t 86400",
|
||||
self._iperf_client = cmd(f"iperf3 -c {env.addr} -P 16 -p {self.port} -t 86400",
|
||||
background=True, host=env.remote)
|
||||
|
||||
# Wait for traffic to ramp up
|
||||
|
@ -56,3 +56,16 @@ class GenerateTraffic:
|
|||
ksft_pr(">> Server:")
|
||||
ksft_pr(self._iperf_server.stdout)
|
||||
ksft_pr(self._iperf_server.stderr)
|
||||
self._wait_client_stopped()
|
||||
|
||||
def _wait_client_stopped(self, sleep=0.005, timeout=5):
|
||||
end = time.monotonic() + timeout
|
||||
|
||||
live_port_pattern = re.compile(fr":{self.port:04X} 0[^6] ")
|
||||
|
||||
while time.monotonic() < end:
|
||||
data = cmd("cat /proc/net/tcp*", host=self.env.remote).stdout
|
||||
if not live_port_pattern.search(data):
|
||||
return
|
||||
time.sleep(sleep)
|
||||
raise Exception(f"Waiting for client to stop timed out after {timeout}s")
|
||||
|
|
Loading…
Reference in New Issue
Block a user