Skip to content

Commit de94e86

Browse files
committed
selftests: drv-net: store addresses in dict indexed by ipver
Looks like more and more tests want to iterate over IP version, run the same test over ipv4 and ipv6. The current naming of members in the env class makes it a bit awkward, we have separate members for ipv4 and ipv6 parameters. Store the parameters inside dicts, so that tests can easily index them with ip version. Reviewed-by: Willem de Bruijn <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 2aefca8 commit de94e86

File tree

4 files changed

+50
-63
lines changed

4 files changed

+50
-63
lines changed

tools/testing/selftests/drivers/net/hw/csum.py

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,12 @@
99
from lib.py import EthtoolFamily, NetDrvEpEnv
1010
from lib.py import bkg, cmd, wait_port_listen
1111

12-
def test_receive(cfg, ipv4=False, extra_args=None):
12+
def test_receive(cfg, ipver="6", extra_args=None):
1313
"""Test local nic checksum receive. Remote host sends crafted packets."""
1414
if not cfg.have_rx_csum:
1515
raise KsftSkipEx(f"Test requires rx checksum offload on {cfg.ifname}")
1616

17-
if ipv4:
18-
ip_args = f"-4 -S {cfg.remote_v4} -D {cfg.v4}"
19-
else:
20-
ip_args = f"-6 -S {cfg.remote_v6} -D {cfg.v6}"
17+
ip_args = f"-{ipver} -S {cfg.remote_addr_v[ipver]} -D {cfg.addr_v[ipver]}"
2118

2219
rx_cmd = f"{cfg.bin_local} -i {cfg.ifname} -n 100 {ip_args} -r 1 -R {extra_args}"
2320
tx_cmd = f"{cfg.bin_remote} -i {cfg.ifname} -n 100 {ip_args} -r 1 -T {extra_args}"
@@ -27,17 +24,14 @@ def test_receive(cfg, ipv4=False, extra_args=None):
2724
cmd(tx_cmd, host=cfg.remote)
2825

2926

30-
def test_transmit(cfg, ipv4=False, extra_args=None):
27+
def test_transmit(cfg, ipver="6", extra_args=None):
3128
"""Test local nic checksum transmit. Remote host verifies packets."""
3229
if (not cfg.have_tx_csum_generic and
33-
not (cfg.have_tx_csum_ipv4 and ipv4) and
34-
not (cfg.have_tx_csum_ipv6 and not ipv4)):
30+
not (cfg.have_tx_csum_ipv4 and ipver == "4") and
31+
not (cfg.have_tx_csum_ipv6 and ipver == "6")):
3532
raise KsftSkipEx(f"Test requires tx checksum offload on {cfg.ifname}")
3633

37-
if ipv4:
38-
ip_args = f"-4 -S {cfg.v4} -D {cfg.remote_v4}"
39-
else:
40-
ip_args = f"-6 -S {cfg.v6} -D {cfg.remote_v6}"
34+
ip_args = f"-{ipver} -S {cfg.addr_v[ipver]} -D {cfg.remote_addr_v[ipver]}"
4135

4236
# Cannot randomize input when calculating zero checksum
4337
if extra_args != "-U -Z":
@@ -51,26 +45,20 @@ def test_transmit(cfg, ipv4=False, extra_args=None):
5145
cmd(tx_cmd)
5246

5347

54-
def test_builder(name, cfg, ipv4=False, tx=False, extra_args=""):
48+
def test_builder(name, cfg, ipver="6", tx=False, extra_args=""):
5549
"""Construct specific tests from the common template.
5650
5751
Most tests follow the same basic pattern, differing only in
5852
Direction of the test and optional flags passed to csum."""
5953
def f(cfg):
60-
if ipv4:
61-
cfg.require_v4()
62-
else:
63-
cfg.require_v6()
54+
cfg.require_ipver(ipver)
6455

6556
if tx:
66-
test_transmit(cfg, ipv4, extra_args)
57+
test_transmit(cfg, ipver, extra_args)
6758
else:
68-
test_receive(cfg, ipv4, extra_args)
59+
test_receive(cfg, ipver, extra_args)
6960

70-
if ipv4:
71-
f.__name__ = "ipv4_" + name
72-
else:
73-
f.__name__ = "ipv6_" + name
61+
f.__name__ = f"ipv{ipver}_" + name
7462
return f
7563

7664

@@ -104,15 +92,15 @@ def main() -> None:
10492
cfg.bin_remote = cfg.remote.deploy(cfg.bin_local)
10593

10694
cases = []
107-
for ipv4 in [True, False]:
108-
cases.append(test_builder("rx_tcp", cfg, ipv4, False, "-t"))
109-
cases.append(test_builder("rx_tcp_invalid", cfg, ipv4, False, "-t -E"))
95+
for ipver in ["4", "6"]:
96+
cases.append(test_builder("rx_tcp", cfg, ipver, False, "-t"))
97+
cases.append(test_builder("rx_tcp_invalid", cfg, ipver, False, "-t -E"))
11098

111-
cases.append(test_builder("rx_udp", cfg, ipv4, False, ""))
112-
cases.append(test_builder("rx_udp_invalid", cfg, ipv4, False, "-E"))
99+
cases.append(test_builder("rx_udp", cfg, ipver, False, ""))
100+
cases.append(test_builder("rx_udp_invalid", cfg, ipver, False, "-E"))
113101

114-
cases.append(test_builder("tx_udp_csum_offload", cfg, ipv4, True, "-U"))
115-
cases.append(test_builder("tx_udp_zero_checksum", cfg, ipv4, True, "-U -Z"))
102+
cases.append(test_builder("tx_udp_csum_offload", cfg, ipver, True, "-U"))
103+
cases.append(test_builder("tx_udp_zero_checksum", cfg, ipver, True, "-U -Z"))
116104

117105
ksft_run(cases=cases, args=(cfg, ))
118106
ksft_exit()

tools/testing/selftests/drivers/net/hw/devmem.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ def require_devmem(cfg):
2121

2222
@ksft_disruptive
2323
def check_rx(cfg) -> None:
24-
cfg.require_v6()
24+
cfg.require_ipver("6")
2525
require_devmem(cfg)
2626

2727
port = rand_port()
28-
listen_cmd = f"./ncdevmem -l -f {cfg.ifname} -s {cfg.v6} -p {port}"
28+
listen_cmd = f"./ncdevmem -l -f {cfg.ifname} -s {cfg.addr_v['6']} -p {port}"
2929

3030
with bkg(listen_cmd) as socat:
3131
wait_port_listen(port)
32-
cmd(f"echo -e \"hello\\nworld\"| socat -u - TCP6:[{cfg.v6}]:{port}", host=cfg.remote, shell=True)
32+
cmd(f"echo -e \"hello\\nworld\"| socat -u - TCP6:[{cfg.addr_v['6']}]:{port}", host=cfg.remote, shell=True)
3333

3434
ksft_eq(socat.stdout.strip(), "hello\nworld")
3535

tools/testing/selftests/drivers/net/lib/py/env.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,17 +113,20 @@ def __init__(self, src_path, nsim_test=None):
113113
self._ns = None
114114
self._ns_peer = None
115115

116+
self.addr_v = { "4": None, "6": None }
117+
self.remote_addr_v = { "4": None, "6": None }
118+
116119
if "NETIF" in self.env:
117120
if nsim_test is True:
118121
raise KsftXfailEx("Test only works on netdevsim")
119122
self._check_env()
120123

121124
self.dev = ip("-d link show dev " + self.env['NETIF'], json=True)[0]
122125

123-
self.v4 = self.env.get("LOCAL_V4")
124-
self.v6 = self.env.get("LOCAL_V6")
125-
self.remote_v4 = self.env.get("REMOTE_V4")
126-
self.remote_v6 = self.env.get("REMOTE_V6")
126+
self.addr_v["4"] = self.env.get("LOCAL_V4")
127+
self.addr_v["6"] = self.env.get("LOCAL_V6")
128+
self.remote_addr_v["4"] = self.env.get("REMOTE_V4")
129+
self.remote_addr_v["6"] = self.env.get("REMOTE_V6")
127130
kind = self.env["REMOTE_TYPE"]
128131
args = self.env["REMOTE_ARGS"]
129132
else:
@@ -134,22 +137,22 @@ def __init__(self, src_path, nsim_test=None):
134137

135138
self.dev = self._ns.nsims[0].dev
136139

137-
self.v4 = self.nsim_v4_pfx + "1"
138-
self.v6 = self.nsim_v6_pfx + "1"
139-
self.remote_v4 = self.nsim_v4_pfx + "2"
140-
self.remote_v6 = self.nsim_v6_pfx + "2"
140+
self.addr_v["4"] = self.nsim_v4_pfx + "1"
141+
self.addr_v["6"] = self.nsim_v6_pfx + "1"
142+
self.remote_addr_v["4"] = self.nsim_v4_pfx + "2"
143+
self.remote_addr_v["6"] = self.nsim_v6_pfx + "2"
141144
kind = "netns"
142145
args = self._netns.name
143146

144147
self.remote = Remote(kind, args, src_path)
145148

146-
self.addr = self.v6 if self.v6 else self.v4
147-
self.remote_addr = self.remote_v6 if self.remote_v6 else self.remote_v4
149+
self.addr_ipver = "6" if self.addr_v["6"] else "4"
150+
self.addr = self.addr_v[self.addr_ipver]
151+
self.remote_addr = self.remote_addr_v[self.addr_ipver]
148152

149-
self.addr_ipver = "6" if self.v6 else "4"
150153
# Bracketed addresses, some commands need IPv6 to be inside []
151-
self.baddr = f"[{self.v6}]" if self.v6 else self.v4
152-
self.remote_baddr = f"[{self.remote_v6}]" if self.remote_v6 else self.remote_v4
154+
self.baddr = f"[{self.addr_v['6']}]" if self.addr_v["6"] else self.addr_v["4"]
155+
self.remote_baddr = f"[{self.remote_addr_v['6']}]" if self.remote_addr_v["6"] else self.remote_addr_v["4"]
153156

154157
self.ifname = self.dev['ifname']
155158
self.ifindex = self.dev['ifindex']
@@ -205,10 +208,10 @@ def _check_env(self):
205208

206209
def resolve_remote_ifc(self):
207210
v4 = v6 = None
208-
if self.remote_v4:
209-
v4 = ip("addr show to " + self.remote_v4, json=True, host=self.remote)
210-
if self.remote_v6:
211-
v6 = ip("addr show to " + self.remote_v6, json=True, host=self.remote)
211+
if self.remote_addr_v["4"]:
212+
v4 = ip("addr show to " + self.remote_addr_v["4"], json=True, host=self.remote)
213+
if self.remote_addr_v["6"]:
214+
v6 = ip("addr show to " + self.remote_addr_v["6"], json=True, host=self.remote)
212215
if v4 and v6 and v4[0]["ifname"] != v6[0]["ifname"]:
213216
raise Exception("Can't resolve remote interface name, v4 and v6 don't match")
214217
if (v4 and len(v4) > 1) or (v6 and len(v6) > 1):
@@ -238,13 +241,9 @@ def __del__(self):
238241
del self.remote
239242
self.remote = None
240243

241-
def require_v4(self):
242-
if not self.v4 or not self.remote_v4:
243-
raise KsftSkipEx("Test requires IPv4 connectivity")
244-
245-
def require_v6(self):
246-
if not self.v6 or not self.remote_v6:
247-
raise KsftSkipEx("Test requires IPv6 connectivity")
244+
def require_ipver(self, ipver):
245+
if not self.addr_v[ipver] or not self.remote_addr_v[ipver]:
246+
raise KsftSkipEx(f"Test requires IPv{ipver} connectivity")
248247

249248
def _require_cmd(self, comm, key, host=None):
250249
cached = self._required_cmd.get(comm, {})

tools/testing/selftests/drivers/net/ping.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88

99

1010
def test_v4(cfg) -> None:
11-
cfg.require_v4()
11+
cfg.require_ipver("4")
1212

13-
cmd(f"ping -c 1 -W0.5 {cfg.remote_v4}")
14-
cmd(f"ping -c 1 -W0.5 {cfg.v4}", host=cfg.remote)
13+
cmd("ping -c 1 -W0.5 " + cfg.remote_addr_v["4"])
14+
cmd("ping -c 1 -W0.5 " + cfg.addr_v["4"], host=cfg.remote)
1515

1616

1717
def test_v6(cfg) -> None:
18-
cfg.require_v6()
18+
cfg.require_ipver("6")
1919

20-
cmd(f"ping -c 1 -W0.5 {cfg.remote_v6}")
21-
cmd(f"ping -c 1 -W0.5 {cfg.v6}", host=cfg.remote)
20+
cmd("ping -c 1 -W0.5 " + cfg.remote_addr_v["6"])
21+
cmd("ping -c 1 -W0.5 " + cfg.addr_v["6"], host=cfg.remote)
2222

2323

2424
def test_tcp(cfg) -> None:

0 commit comments

Comments
 (0)