From: Mohan Prasad J <mohan.prasad@microchip.com>
To: <netdev@vger.kernel.org>, <davem@davemloft.net>,
<kuba@kernel.org>, <andrew@lunn.ch>
Cc: <edumazet@google.com>, <pabeni@redhat.com>, <shuah@kernel.org>,
<mohan.prasad@microchip.com>, <linux-kernel@vger.kernel.org>,
<linux-kselftest@vger.kernel.org>, <horms@kernel.org>,
<brett.creeley@amd.com>, <rosenp@gmail.com>,
<UNGLinuxDriver@microchip.com>, <willemb@google.com>
Subject: [PATCH net-next v2 2/3] selftests: nic_basic_tests: Add selftest case for speed and duplex state checks
Date: Tue, 17 Sep 2024 08:04:08 +0530 [thread overview]
Message-ID: <20240917023525.2571082-3-mohan.prasad@microchip.com> (raw)
In-Reply-To: <20240917023525.2571082-1-mohan.prasad@microchip.com>
Add selftest case for testing the speed and duplex state of
local NIC driver and the partner based on the supported
link modes obtained from the ethtool. Speed and duplex states
are varied and verified using ethtool.
Signed-off-by: Mohan Prasad J <mohan.prasad@microchip.com>
---
.../drivers/net/hw/nic_basic_tests.py | 46 +++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py b/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py
index 27f780032..ff46f2406 100644
--- a/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py
+++ b/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py
@@ -42,6 +42,14 @@ from lib.py import ethtool
"""Global variables"""
common_link_modes = []
+def check_autonegotiation(ifname: str) -> None:
+ autoneg = get_ethtool_content(ifname, "Supports auto-negotiation:")
+ partner_autoneg = get_ethtool_content(ifname, "Link partner advertised auto-negotiation:")
+
+ """Check if auto-neg supported by local and partner NIC"""
+ if autoneg[0] != "Yes" or partner_autoneg[0] != "Yes":
+ raise KsftSkipEx(f"Interface {ifname} or partner does not support auto-negotiation")
+
def get_ethtool_content(ifname: str, field: str):
capture = False
content = []
@@ -112,6 +120,25 @@ def verify_autonegotiation(ifname: str, expected_state: str) -> None:
ksft_eq(actual_state, expected_state)
+def set_speed_and_duplex(ifname: str, speed: str, duplex: str) -> None:
+ """Set the speed and duplex state for the interface"""
+ process = ethtool(f"--change {ifname} speed {speed} duplex {duplex} autoneg on")
+
+ if process.ret != 0:
+ raise KsftFailEx(f"Not able to set speed and duplex parameters for {ifname}")
+ ksft_pr(f"Speed: {speed} Mbps, Duplex: {duplex} set for Interface: {ifname}")
+
+def verify_speed_and_duplex(ifname: str, expected_speed: str, expected_duplex: str) -> None:
+ verify_link_up(ifname)
+ """Verifying the speed and duplex state for the interface"""
+ with open(f"/sys/class/net/{ifname}/speed", "r") as fp:
+ actual_speed = fp.read().strip()
+ with open(f"/sys/class/net/{ifname}/duplex", "r") as fp:
+ actual_duplex = fp.read().strip()
+
+ ksft_eq(actual_speed, expected_speed)
+ ksft_eq(actual_duplex, expected_duplex)
+
def test_link_modes(cfg) -> None:
global common_link_modes
link_modes = get_ethtool_content(cfg.ifname, "Supported link modes:")
@@ -136,6 +163,25 @@ def test_autonegotiation(cfg) -> None:
else:
raise KsftSkipEx(f"Auto-Negotiation is not supported for interface {cfg.ifname}")
+def test_network_speed(cfg) -> None:
+ check_autonegotiation(cfg.ifname)
+ if not common_link_modes:
+ KsftSkipEx("No common link modes exist")
+ speeds, duplex_modes = get_speed_duplex(common_link_modes)
+
+ if speeds and duplex_modes and len(speeds) == len(duplex_modes):
+ for idx in range(len(speeds)):
+ speed = speeds[idx]
+ duplex = duplex_modes[idx]
+ set_speed_and_duplex(cfg.ifname, speed, duplex)
+ time.sleep(sleep_time)
+ verify_speed_and_duplex(cfg.ifname, speed, duplex)
+ else:
+ if not speeds or not duplex_modes:
+ KsftSkipEx(f"No supported speeds or duplex modes found for interface {cfg.ifname}")
+ else:
+ KsftSkipEx("Mismatch in the number of speeds and duplex modes")
+
def main() -> None:
with NetDrvEpEnv(__file__) as cfg:
ksft_run(globs=globals(), case_pfx={"test_"}, args=(cfg,))
--
2.43.0
next prev parent reply other threads:[~2024-09-17 9:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-17 2:34 [PATCH net-next v2 0/3] nic_basic_tests: Add selftest for doing basic tests of NIC driver Mohan Prasad J
2024-09-17 2:34 ` [PATCH net-next v2 1/3] selftests: nic_basic_tests: Add selftest file for basic tests of NIC Mohan Prasad J
2024-09-17 15:35 ` Andrew Lunn
2024-09-18 10:30 ` Mohan.Prasad
2024-09-18 12:05 ` Andrew Lunn
2024-09-19 10:44 ` Mohan.Prasad
2024-09-19 14:51 ` Andrew Lunn
2024-09-17 15:48 ` Andrew Lunn
2024-09-18 10:32 ` Mohan.Prasad
2024-09-18 12:11 ` Andrew Lunn
2024-09-17 15:56 ` Andrew Lunn
2024-09-18 10:35 ` Mohan.Prasad
2024-09-17 2:34 ` Mohan Prasad J [this message]
2024-09-18 12:38 ` [PATCH net-next v2 2/3] selftests: nic_basic_tests: Add selftest case for speed and duplex state checks Willem de Bruijn
2024-09-20 4:56 ` Mohan.Prasad
2024-09-17 2:34 ` [PATCH net-next v2 3/3] selftests: nic_basic_tests: Add selftest case for throughput check Mohan Prasad J
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240917023525.2571082-3-mohan.prasad@microchip.com \
--to=mohan.prasad@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew@lunn.ch \
--cc=brett.creeley@amd.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rosenp@gmail.com \
--cc=shuah@kernel.org \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox