mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
selftests: drv-net: Enable ntuple-filters if supported
Certain devices which support ntuple-filters do not enable the feature by default. The existing tests will skip (if they check for the feature), or fail if they blindly attempt to install rules. Therefore, attempt to turn on ntuple-filters if the device supports them. Signed-off-by: Dimitri Daskalakis <daskald@meta.com> Reviewed-by: Joe Damato <joe@dama.to> Link: https://patch.msgid.link/20260430165217.3700469-1-dimitri.daskalakis1@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
8d59a7a188
commit
c301658dfe
|
|
@ -132,11 +132,21 @@ def _get_queue_stats(cfg, queue_id):
|
|||
return {}
|
||||
|
||||
|
||||
def _require_ntuple(cfg):
|
||||
features = ethtool(f"-k {cfg.ifname}", json=True)[0]
|
||||
if not features["ntuple-filters"]["active"]:
|
||||
if features["ntuple-filters"]["fixed"]:
|
||||
raise KsftXfailEx("Device does not support ntuple-filters")
|
||||
ethtool(f"-K {cfg.ifname} ntuple-filters on")
|
||||
defer(ethtool, f"-K {cfg.ifname} ntuple-filters off")
|
||||
|
||||
|
||||
def _setup_isolated_queue(cfg):
|
||||
"""Set up an isolated queue for testing using ntuple filter.
|
||||
|
||||
Remove queue 1 from the default RSS context and steer test traffic to it.
|
||||
"""
|
||||
_require_ntuple(cfg)
|
||||
test_queue = 1
|
||||
|
||||
qcnt = len(glob.glob(f"/sys/class/net/{cfg.ifname}/queues/rx-*"))
|
||||
|
|
|
|||
|
|
@ -51,11 +51,21 @@ def _resolve_dmac(cfg, ipver):
|
|||
return getattr(cfg, attr)
|
||||
|
||||
|
||||
def _require_ntuple(cfg):
|
||||
features = ethtool(f"-k {cfg.ifname}", json=True)[0]
|
||||
if not features["ntuple-filters"]["active"]:
|
||||
if features["ntuple-filters"]["fixed"]:
|
||||
raise KsftSkipEx("Device does not support ntuple-filters")
|
||||
ethtool(f"-K {cfg.ifname} ntuple-filters on")
|
||||
defer(ethtool, f"-K {cfg.ifname} ntuple-filters off")
|
||||
|
||||
|
||||
def _setup_isolated_queue(cfg):
|
||||
"""Set up an isolated queue for testing using ntuple filter.
|
||||
|
||||
Remove queue 1 from the default RSS context and steer test traffic to it.
|
||||
"""
|
||||
_require_ntuple(cfg)
|
||||
test_queue = 1
|
||||
|
||||
qcnt = len(glob.glob(f"/sys/class/net/{cfg.ifname}/queues/rx-*"))
|
||||
|
|
|
|||
|
|
@ -100,12 +100,22 @@ def rss(cfg):
|
|||
defer(ethtool, f"-N {cfg.ifname} delete {flow_rule_id}")
|
||||
|
||||
|
||||
def _require_ntuple(cfg):
|
||||
features = ethtool(f"-k {cfg.ifname}", json=True)[0]
|
||||
if not features["ntuple-filters"]["active"]:
|
||||
if features["ntuple-filters"]["fixed"]:
|
||||
raise KsftSkipEx("Device does not support ntuple-filters")
|
||||
ethtool(f"-K {cfg.ifname} ntuple-filters on")
|
||||
defer(ethtool, f"-K {cfg.ifname} ntuple-filters off")
|
||||
|
||||
|
||||
@ksft_variants([
|
||||
KsftNamedVariant("single", single),
|
||||
KsftNamedVariant("rss", rss),
|
||||
])
|
||||
def test_zcrx(cfg, setup) -> None:
|
||||
cfg.require_ipver('6')
|
||||
_require_ntuple(cfg)
|
||||
|
||||
setup(cfg)
|
||||
rx_cmd = f"{cfg.bin_local} -s -p {cfg.port} -i {cfg.ifname} -q {cfg.target}"
|
||||
|
|
@ -121,6 +131,7 @@ def test_zcrx(cfg, setup) -> None:
|
|||
])
|
||||
def test_zcrx_oneshot(cfg, setup) -> None:
|
||||
cfg.require_ipver('6')
|
||||
_require_ntuple(cfg)
|
||||
|
||||
setup(cfg)
|
||||
rx_cmd = f"{cfg.bin_local} -s -p {cfg.port} -i {cfg.ifname} -q {cfg.target} -o 4"
|
||||
|
|
@ -134,6 +145,7 @@ def test_zcrx_large_chunks(cfg) -> None:
|
|||
"""Test zcrx with large buffer chunks."""
|
||||
|
||||
cfg.require_ipver('6')
|
||||
_require_ntuple(cfg)
|
||||
|
||||
hp_file = "/proc/sys/vm/nr_hugepages"
|
||||
with open(hp_file, 'r+', encoding='utf-8') as f:
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ class NtupleField(Enum):
|
|||
def _require_ntuple(cfg):
|
||||
features = ethtool(f"-k {cfg.ifname}", json=True)[0]
|
||||
if not features["ntuple-filters"]["active"]:
|
||||
raise KsftSkipEx("Ntuple filters not enabled on the device: " + str(features["ntuple-filters"]))
|
||||
if features["ntuple-filters"]["fixed"]:
|
||||
raise KsftSkipEx("Device does not support ntuple-filters")
|
||||
ethtool(f"-K {cfg.ifname} ntuple-filters on")
|
||||
defer(ethtool, f"-K {cfg.ifname} ntuple-filters off")
|
||||
|
||||
|
||||
def _get_rx_cnts(cfg, prev=None):
|
||||
|
|
|
|||
|
|
@ -57,9 +57,10 @@ def ethtool_create(cfg, act, opts):
|
|||
def require_ntuple(cfg):
|
||||
features = ethtool(f"-k {cfg.ifname}", json=True)[0]
|
||||
if not features["ntuple-filters"]["active"]:
|
||||
# ntuple is more of a capability than a config knob, don't bother
|
||||
# trying to enable it (until some driver actually needs it).
|
||||
raise KsftSkipEx("Ntuple filters not enabled on the device: " + str(features["ntuple-filters"]))
|
||||
if features["ntuple-filters"]["fixed"]:
|
||||
raise KsftSkipEx("Device does not support ntuple-filters")
|
||||
ethtool(f"-K {cfg.ifname} ntuple-filters on")
|
||||
defer(ethtool, f"-K {cfg.ifname} ntuple-filters off")
|
||||
|
||||
|
||||
def require_context_cnt(cfg, need_cnt):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user