mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
selftests: net-drv: exercise queue stats when the device is down
Verify that total device stats don't decrease after it has been turned down. Also make sure the device doesn't crash when we access per-queue stats when it's down (in case it tries to access some pointers that are NULL). KTAP version 1 1..5 ok 1 stats.check_pause ok 2 stats.check_fec ok 3 stats.pkt_byte_sum ok 4 stats.qstat_by_ifindex ok 5 stats.check_down # Totals: pass:5 fail:0 xfail:0 xpass:0 skip:0 error:0 v3: - use errno.EOPNOTSUPP (Petr) - move qstat[0] under try (Petr) v2: - KTAP output formatting (Jakub) - defer instead of try/finally (Jakub) - disappearing stats is an error (Jakub) - ksft_ge instead of open coding (Jakub) Signed-off-by: Stanislav Fomichev <sdf@fomichev.me> Link: https://patch.msgid.link/20240802000309.2368-1-sdf@fomichev.me Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
49675f5bdf
commit
ab1000976c
|
|
@ -1,10 +1,12 @@
|
|||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
import errno
|
||||
from lib.py import ksft_run, ksft_exit, ksft_pr
|
||||
from lib.py import ksft_ge, ksft_eq, ksft_in, ksft_true, ksft_raises, KsftSkipEx, KsftXfailEx
|
||||
from lib.py import EthtoolFamily, NetdevFamily, RtnlFamily, NlError
|
||||
from lib.py import NetDrvEnv
|
||||
from lib.py import ip, defer
|
||||
|
||||
ethnl = EthtoolFamily()
|
||||
netfam = NetdevFamily()
|
||||
|
|
@ -133,9 +135,30 @@ def qstat_by_ifindex(cfg) -> None:
|
|||
ksft_eq(cm.exception.nl_msg.extack['bad-attr'], '.ifindex')
|
||||
|
||||
|
||||
def check_down(cfg) -> None:
|
||||
try:
|
||||
qstat = netfam.qstats_get({"ifindex": cfg.ifindex}, dump=True)[0]
|
||||
except NlError as e:
|
||||
if e.error == errno.EOPNOTSUPP:
|
||||
raise KsftSkipEx("qstats not supported by the device")
|
||||
raise
|
||||
|
||||
ip(f"link set dev {cfg.dev['ifname']} down")
|
||||
defer(ip, f"link set dev {cfg.dev['ifname']} up")
|
||||
|
||||
qstat2 = netfam.qstats_get({"ifindex": cfg.ifindex}, dump=True)[0]
|
||||
for k, v in qstat.items():
|
||||
ksft_ge(qstat2[k], qstat[k], comment=f"{k} went backwards on device down")
|
||||
|
||||
# exercise per-queue API to make sure that "device down" state
|
||||
# is handled correctly and doesn't crash
|
||||
netfam.qstats_get({"ifindex": cfg.ifindex, "scope": "queue"}, dump=True)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
with NetDrvEnv(__file__) as cfg:
|
||||
ksft_run([check_pause, check_fec, pkt_byte_sum, qstat_by_ifindex],
|
||||
ksft_run([check_pause, check_fec, pkt_byte_sum, qstat_by_ifindex,
|
||||
check_down],
|
||||
args=(cfg, ))
|
||||
ksft_exit()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user