Commit 94fecaa6 authored by Jakub Kicinski's avatar Jakub Kicinski

selftests: drv-net: add ability to wait for at least N packets to load gen

Teach the load generator how to wait for at least given number
of packets to be received. This will be useful for filtering
where we'll want to send a non-trivial number of packets and
make sure they landed in right queues.
Reviewed-by: default avatarBreno Leitao <leitao@debian.org>
Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20240626012456.2326192-4-kuba@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent af8e5164
...@@ -18,15 +18,31 @@ class GenerateTraffic: ...@@ -18,15 +18,31 @@ class GenerateTraffic:
background=True, host=env.remote) background=True, host=env.remote)
# Wait for traffic to ramp up # Wait for traffic to ramp up
pkt = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] if not self._wait_pkts(pps=1000):
self.stop(verbose=True)
raise Exception("iperf3 traffic did not ramp up")
def _wait_pkts(self, pkt_cnt=None, pps=None):
"""
Wait until we've seen pkt_cnt or until traffic ramps up to pps.
Only one of pkt_cnt or pss can be specified.
"""
pkt_start = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"]
for _ in range(50): for _ in range(50):
time.sleep(0.1) time.sleep(0.1)
now = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] pkt_now = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"]
if now - pkt > 1000: if pps:
return if pkt_now - pkt_start > pps / 10:
pkt = now return True
self.stop(verbose=True) pkt_start = pkt_now
raise Exception("iperf3 traffic did not ramp up") elif pkt_cnt:
if pkt_now - pkt_start > pkt_cnt:
return True
return False
def wait_pkts_and_stop(self, pkt_cnt):
failed = not self._wait_pkts(pkt_cnt=pkt_cnt)
self.stop(verbose=failed)
def stop(self, verbose=None): def stop(self, verbose=None):
self._iperf_client.process(terminate=True) self._iperf_client.process(terminate=True)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment