mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
selftests: drv-net: so_txtime: only send test traffic to sch_etf
The ETF qdiscs drops traffic without a socket or txtime. Even with
parameter skip_sock_check regular traffic is affected by ETF.
This test ran fine when run manually in a pure software environment.
But with drv-net across two hosts tests fail as early as when calling
cfg.remote.deploy due to effectively losing connectivity.
Isolate the intended test traffic:
- mark that with SO_MARK 100
- install a regular permissive root prio qdisc for background traffic
- install the ETF qdisc as leaf
- install a filter that only directs SO_MARK 100 traffic to this leaf
Technically other high prio traffic will map onto this leaf based on
ToS band mapping too. But that is immaterial in practice.
Fixes: 5c6baef388 ("selftests: drv-net: convert so_txtime to drv-net")
Signed-off-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20260808160129.890119-1-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
341d8aff93
commit
ef3d6cca02
|
|
@ -8,6 +8,7 @@ CONFIG_NET_ACT_SKBEDIT=m
|
||||||
CONFIG_NET_CLS_ACT=y
|
CONFIG_NET_CLS_ACT=y
|
||||||
CONFIG_NET_CLS_BPF=y
|
CONFIG_NET_CLS_BPF=y
|
||||||
CONFIG_NET_CLS_FLOWER=m
|
CONFIG_NET_CLS_FLOWER=m
|
||||||
|
CONFIG_NET_CLS_FW=m
|
||||||
CONFIG_NET_CLS_MATCHALL=m
|
CONFIG_NET_CLS_MATCHALL=m
|
||||||
CONFIG_NETCONSOLE=m
|
CONFIG_NETCONSOLE=m
|
||||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||||
|
|
@ -17,6 +18,7 @@ CONFIG_NETKIT=y
|
||||||
CONFIG_NET_SCH_ETF=m
|
CONFIG_NET_SCH_ETF=m
|
||||||
CONFIG_NET_SCH_FQ=m
|
CONFIG_NET_SCH_FQ=m
|
||||||
CONFIG_NET_SCH_INGRESS=y
|
CONFIG_NET_SCH_INGRESS=y
|
||||||
|
CONFIG_NET_SCH_PRIO=m
|
||||||
CONFIG_PPP=y
|
CONFIG_PPP=y
|
||||||
CONFIG_PPPOE=y
|
CONFIG_PPPOE=y
|
||||||
CONFIG_VLAN_8021Q=m
|
CONFIG_VLAN_8021Q=m
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ def test_so_txtime(cfg, clockid, ipver, args_tx, args_rx, expect_success):
|
||||||
cmd_addr = f"-S {cfg.addr_v[ipver]} -D {cfg.remote_addr_v[ipver]}"
|
cmd_addr = f"-S {cfg.addr_v[ipver]} -D {cfg.remote_addr_v[ipver]}"
|
||||||
cmd_args = f"-{ipver} -c {clockid} -t {tstart} {cmd_addr}"
|
cmd_args = f"-{ipver} -c {clockid} -t {tstart} {cmd_addr}"
|
||||||
cmd_rx = f"{cfg.bin_remote} {cmd_args} {args_rx} -r"
|
cmd_rx = f"{cfg.bin_remote} {cmd_args} {args_rx} -r"
|
||||||
cmd_tx = f"{cfg.bin_local} {cmd_args} {args_tx}"
|
cmd_tx = f"{cfg.bin_local} -m 100 {cmd_args} {args_tx}"
|
||||||
|
|
||||||
expect_fail = not expect_success
|
expect_fail = not expect_success
|
||||||
if slow_machine:
|
if slow_machine:
|
||||||
|
|
@ -45,7 +45,7 @@ def _qdisc_setup(ifname, qdisc, optargs=""):
|
||||||
"""
|
"""
|
||||||
orig = tc(f"qdisc show dev {ifname} root", json=True)[0].get("kind", None)
|
orig = tc(f"qdisc show dev {ifname} root", json=True)[0].get("kind", None)
|
||||||
defer(tc, f"qdisc replace dev {ifname} root {orig}")
|
defer(tc, f"qdisc replace dev {ifname} root {orig}")
|
||||||
tc(f"qdisc replace dev {ifname} root {qdisc} {optargs}")
|
tc(f"qdisc replace dev {ifname} root handle 1: {qdisc} {optargs}")
|
||||||
|
|
||||||
|
|
||||||
def _test_variants_fq():
|
def _test_variants_fq():
|
||||||
|
|
@ -96,11 +96,21 @@ def _test_variants_etf():
|
||||||
def test_so_txtime_etf(cfg, ipver, args_tx, args_rx, expect_fail):
|
def test_so_txtime_etf(cfg, ipver, args_tx, args_rx, expect_fail):
|
||||||
"""Run all variants of etf tests."""
|
"""Run all variants of etf tests."""
|
||||||
cfg.require_ipver(ipver)
|
cfg.require_ipver(ipver)
|
||||||
|
|
||||||
|
# root qdisc for background traffic (e.g., bkg())
|
||||||
|
_qdisc_setup(cfg.ifname, "prio")
|
||||||
|
|
||||||
|
# leaf ETF qdisc only for intended packets
|
||||||
try:
|
try:
|
||||||
_qdisc_setup(cfg.ifname, "etf", "clockid CLOCK_TAI delta 400000")
|
etf_args = "clockid CLOCK_TAI delta 400000"
|
||||||
|
tc(f"qdisc add dev {cfg.ifname} parent 1:1 handle 10: etf {etf_args}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise KsftSkipEx("tc does not support qdisc etf. skipping") from e
|
raise KsftSkipEx("tc does not support qdisc etf. skipping") from e
|
||||||
|
|
||||||
|
# redirect mark 100 to leaf
|
||||||
|
filter_args = "protocol all handle 100 fw flowid 1:1"
|
||||||
|
tc(f"filter add dev {cfg.ifname} parent 1: {filter_args}")
|
||||||
|
|
||||||
test_so_txtime(cfg, "tai", ipver, args_tx, args_rx, expect_fail)
|
test_so_txtime(cfg, "tai", ipver, args_tx, args_rx, expect_fail)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user