Commit b344a48c authored by Mohsin Bashir's avatar Mohsin Bashir Committed by Jakub Kicinski
Browse files

selftests: drv: net: fix test failure on ipv6 sys



The `get_interface_info` call has ip version hard-coded which leads to
failures on an IPV6 system. The NetDrvEnv class already gathers
information about remote interface, so instead of fixing the local
implementation switch to using cfg.remote_ifname.

Before:
./drivers/net/ping.py
Traceback (most recent call last):
  File "/new_tests/./drivers/net/ping.py", line 217, in <module>
    main()
  File "/new_tests/./drivers/net/ping.py", line 204, in main
    get_interface_info(cfg)
  File "/new_tests/./drivers/net/ping.py", line 128, in get_interface_info
    raise KsftFailEx('Can not get remote interface')
net.lib.py.ksft.KsftFailEx: Can not get remote interface

After:
./drivers/net/ping.py
TAP version 13
1..6
ok 1 ping.test_default # SKIP Test requires IPv4 connectivity
ok 2 ping.test_xdp_generic_sb # SKIP Test requires IPv4 connectivity
ok 3 ping.test_xdp_generic_mb # SKIP Test requires IPv4 connectivity
ok 4 ping.test_xdp_native_sb # SKIP Test requires IPv4 connectivity
ok 5 ping.test_xdp_native_mb # SKIP Test requires IPv4 connectivity
ok 6 ping.test_xdp_offload # SKIP device does not support offloaded XDP
Totals: pass:0 fail:0 xfail:0 xpass:0 skip:6 error:0

Fixes: 75cc19c8 ("selftests: drv-net: add xdp cases for ping.py")
Signed-off-by: default avatarMohsin Bashir <mohsin.bashr@gmail.com>
Reviewed-by: default avatarDavid Wei <dw@davidwei.uk>
Link: https://patch.msgid.link/20250503013518.1722913-2-mohsin.bashr@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent ccb52a9c
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ from lib.py import EthtoolFamily, NetDrvEpEnv
from lib.py import bkg, cmd, wait_port_listen, rand_port
from lib.py import defer, ethtool, ip

remote_ifname=""
no_sleep=False

def _test_v4(cfg) -> None:
@@ -57,7 +56,7 @@ def _set_offload_checksum(cfg, netnl, on) -> None:

def _set_xdp_generic_sb_on(cfg) -> None:
    prog = cfg.net_lib_dir / "xdp_dummy.bpf.o"
    cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote)
    cmd(f"ip link set dev {cfg.remote_ifname} mtu 1500", shell=True, host=cfg.remote)
    cmd(f"ip link set dev {cfg.ifname} mtu 1500 xdpgeneric obj {prog} sec xdp", shell=True)
    defer(cmd, f"ip link set dev {cfg.ifname} xdpgeneric off")

@@ -66,8 +65,8 @@ def _set_xdp_generic_sb_on(cfg) -> None:

def _set_xdp_generic_mb_on(cfg) -> None:
    prog = cfg.net_lib_dir / "xdp_dummy.bpf.o"
    cmd(f"ip link set dev {remote_ifname} mtu 9000", shell=True, host=cfg.remote)
    defer(ip, f"link set dev {remote_ifname} mtu 1500", host=cfg.remote)
    cmd(f"ip link set dev {cfg.remote_ifname} mtu 9000", shell=True, host=cfg.remote)
    defer(ip, f"link set dev {cfg.remote_ifname} mtu 1500", host=cfg.remote)
    ip("link set dev %s mtu 9000 xdpgeneric obj %s sec xdp.frags" % (cfg.ifname, prog))
    defer(ip, f"link set dev {cfg.ifname} mtu 1500 xdpgeneric off")

@@ -76,7 +75,7 @@ def _set_xdp_generic_mb_on(cfg) -> None:

def _set_xdp_native_sb_on(cfg) -> None:
    prog = cfg.net_lib_dir / "xdp_dummy.bpf.o"
    cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote)
    cmd(f"ip link set dev {cfg.remote_ifname} mtu 1500", shell=True, host=cfg.remote)
    cmd(f"ip -j link set dev {cfg.ifname} mtu 1500 xdp obj {prog} sec xdp", shell=True)
    defer(ip, f"link set dev {cfg.ifname} mtu 1500 xdp off")
    xdp_info = ip("-d link show %s" % (cfg.ifname), json=True)[0]
@@ -93,8 +92,8 @@ def _set_xdp_native_sb_on(cfg) -> None:

def _set_xdp_native_mb_on(cfg) -> None:
    prog = cfg.net_lib_dir / "xdp_dummy.bpf.o"
    cmd(f"ip link set dev {remote_ifname} mtu 9000", shell=True, host=cfg.remote)
    defer(ip, f"link set dev {remote_ifname} mtu 1500", host=cfg.remote)
    cmd(f"ip link set dev {cfg.remote_ifname} mtu 9000", shell=True, host=cfg.remote)
    defer(ip, f"link set dev {cfg.remote_ifname} mtu 1500", host=cfg.remote)
    try:
        cmd(f"ip link set dev {cfg.ifname} mtu 9000 xdp obj {prog} sec xdp.frags", shell=True)
        defer(ip, f"link set dev {cfg.ifname} mtu 1500 xdp off")
@@ -112,18 +111,15 @@ def _set_xdp_offload_on(cfg) -> None:
    except Exception as e:
        raise KsftSkipEx('device does not support offloaded XDP')
    defer(ip, f"link set dev {cfg.ifname} xdpoffload off")
    cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote)
    cmd(f"ip link set dev {cfg.remote_ifname} mtu 1500", shell=True, host=cfg.remote)

    if no_sleep != True:
        time.sleep(10)

def get_interface_info(cfg) -> None:
    global remote_ifname
    global no_sleep

    remote_info = cmd(f"ip -4 -o addr show to {cfg.remote_addr_v['4']} | awk '{{print $2}}'", shell=True, host=cfg.remote).stdout
    remote_ifname = remote_info.rstrip('\n')
    if remote_ifname == "":
    if cfg.remote_ifname == "":
        raise KsftFailEx('Can not get remote interface')
    local_info = ip("-d link show %s" % (cfg.ifname), json=True)[0]
    if 'parentbus' in local_info and local_info['parentbus'] == "netdevsim":
@@ -136,7 +132,7 @@ def set_interface_init(cfg) -> None:
    cmd(f"ip link set dev {cfg.ifname} xdp off ", shell=True)
    cmd(f"ip link set dev {cfg.ifname} xdpgeneric off ", shell=True)
    cmd(f"ip link set dev {cfg.ifname} xdpoffload off", shell=True)
    cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote)
    cmd(f"ip link set dev {cfg.remote_ifname} mtu 1500", shell=True, host=cfg.remote)

def test_default(cfg, netnl) -> None:
    _set_offload_checksum(cfg, netnl, "off")