brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · 30f2909 Raw
67 lines · python
1#!/usr/bin/env python32# SPDX-License-Identifier: GPL-2.03 4from lib.py import ksft_run, ksft_exit, ksft_eq, KsftSkipEx5from lib.py import EthtoolFamily, NetdevFamily6from lib.py import NetDrvEnv7from lib.py import cmd8import glob9 10 11def sys_get_queues(ifname) -> int:12    folders = glob.glob(f'/sys/class/net/{ifname}/queues/rx-*')13    return len(folders)14 15 16def nl_get_queues(cfg, nl):17    queues = nl.queue_get({'ifindex': cfg.ifindex}, dump=True)18    if queues:19        return len([q for q in queues if q['type'] == 'rx'])20    return None21 22 23def get_queues(cfg, nl) -> None:24    queues = nl_get_queues(cfg, nl)25    if not queues:26        raise KsftSkipEx('queue-get not supported by device')27 28    expected = sys_get_queues(cfg.dev['ifname'])29    ksft_eq(queues, expected)30 31 32def addremove_queues(cfg, nl) -> None:33    queues = nl_get_queues(cfg, nl)34    if not queues:35        raise KsftSkipEx('queue-get not supported by device')36 37    curr_queues = sys_get_queues(cfg.dev['ifname'])38    if curr_queues == 1:39        raise KsftSkipEx('cannot decrement queue: already at 1')40 41    netnl = EthtoolFamily()42    channels = netnl.channels_get({'header': {'dev-index': cfg.ifindex}})43    if channels['combined-count'] == 0:44        rx_type = 'rx'45    else:46        rx_type = 'combined'47 48    expected = curr_queues - 149    cmd(f"ethtool -L {cfg.dev['ifname']} {rx_type} {expected}", timeout=10)50    queues = nl_get_queues(cfg, nl)51    ksft_eq(queues, expected)52 53    expected = curr_queues54    cmd(f"ethtool -L {cfg.dev['ifname']} {rx_type} {expected}", timeout=10)55    queues = nl_get_queues(cfg, nl)56    ksft_eq(queues, expected)57 58 59def main() -> None:60    with NetDrvEnv(__file__, queue_count=3) as cfg:61        ksft_run([get_queues, addremove_queues], args=(cfg, NetdevFamily()))62    ksft_exit()63 64 65if __name__ == "__main__":66    main()67