selftests: drv-net: print device info at the start

When a reviewer asks a developer to run an upstream test during code
review, it's often ambiguous whether the test was actually run against
a real device, or just against netdevsim. Print the driver name and
ifname at the start of the test, e.g.:

  # Interface: enp0s13f0u1u4, driver: r8152
  TAP version 13
  1..1
  ok 1 ...

Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260803211944.2166211-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski
2026-08-03 14:19:44 -07:00
parent 089ca284af
commit 9cb1d062b0

View File

@@ -7,7 +7,7 @@ import time
import json
from pathlib import Path
from lib.py import KsftSkipEx, KsftXfailEx
from lib.py import ksft_setup, wait_file
from lib.py import ksft_pr, ksft_setup, wait_file
from lib.py import cmd, ethtool, ip, CmdExitFailure
from lib.py import NetNS, NetdevSimDev, UserNetNS
from .remote import Remote
@@ -31,6 +31,7 @@ class NetDrvEnvBase:
# Following attrs must be set be inheriting classes
self.dev = None
self.ifname = None
def _load_env_file(self):
env = os.environ.copy()
@@ -58,6 +59,22 @@ class NetDrvEnvBase:
def __del__(self):
pass
def _print_dev_info(self):
"""
Show whether the test ran on real hardware or netdevsim.
Useful to confirm when results are shared on the mailing list.
"""
driver = "unknown"
try:
info = ethtool(f"-i {self.ifname}").stdout
for line in info.splitlines():
if line.startswith("driver:"):
driver = line.split(':', 1)[1].strip() or driver
break
except (CmdExitFailure, FileNotFoundError):
pass
ksft_pr(f"Interface: {self.ifname}, driver: {driver}")
def __enter__(self):
ip(f"link set dev {self.dev['ifname']} up")
wait_file(f"/sys/class/net/{self.dev['ifname']}/carrier",
@@ -94,6 +111,7 @@ class NetDrvEnv(NetDrvEnvBase):
self.dev = self._ns.nsims[0].dev
self.ifname = self.dev['ifname']
self.ifindex = self.dev['ifindex']
self._print_dev_info()
def __del__(self):
if self._ns:
@@ -164,6 +182,7 @@ class NetDrvEpEnv(NetDrvEnvBase):
self.ifname = self.dev['ifname']
self.ifindex = self.dev['ifindex']
self._print_dev_info()
# resolve remote interface name
self.remote_ifname = self.resolve_remote_ifc()