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

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: Breno Leitao <leitao@debian.org>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20240626012456.2326192-4-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+23 -7
+23 -7
tools/testing/selftests/drivers/net/lib/py/load.py
··· 18 18 background=True, host=env.remote) 19 19 20 20 # Wait for traffic to ramp up 21 - pkt = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] 21 + if not self._wait_pkts(pps=1000): 22 + self.stop(verbose=True) 23 + raise Exception("iperf3 traffic did not ramp up") 24 + 25 + def _wait_pkts(self, pkt_cnt=None, pps=None): 26 + """ 27 + Wait until we've seen pkt_cnt or until traffic ramps up to pps. 28 + Only one of pkt_cnt or pss can be specified. 29 + """ 30 + pkt_start = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"] 22 31 for _ in range(50): 23 32 time.sleep(0.1) 24 - now = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] 25 - if now - pkt > 1000: 26 - return 27 - pkt = now 28 - self.stop(verbose=True) 29 - raise Exception("iperf3 traffic did not ramp up") 33 + pkt_now = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"] 34 + if pps: 35 + if pkt_now - pkt_start > pps / 10: 36 + return True 37 + pkt_start = pkt_now 38 + elif pkt_cnt: 39 + if pkt_now - pkt_start > pkt_cnt: 40 + return True 41 + return False 42 + 43 + def wait_pkts_and_stop(self, pkt_cnt): 44 + failed = not self._wait_pkts(pkt_cnt=pkt_cnt) 45 + self.stop(verbose=failed) 30 46 31 47 def stop(self, verbose=None): 32 48 self._iperf_client.process(terminate=True)