Hi Andrew,
Thank you for the review comments.
EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
On Tue, Sep 17, 2024 at 08:04:07AM +0530, Mohan Prasad J wrote:
Add selftest file to test basic features of a NIC driver. Tests for link modes, auto-negotiation are placed. Selftest makes use of ksft modules and ethtool. Add selftest file in the Makefile.
Signed-off-by: Mohan Prasad J mohan.prasad@microchip.com
.../testing/selftests/drivers/net/hw/Makefile | 1 + .../drivers/net/hw/nic_basic_tests.py | 145 ++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 tools/testing/selftests/drivers/net/hw/nic_basic_tests.py
diff --git a/tools/testing/selftests/drivers/net/hw/Makefile b/tools/testing/selftests/drivers/net/hw/Makefile index c9f2f48fc..9f105227c 100644 --- a/tools/testing/selftests/drivers/net/hw/Makefile +++ b/tools/testing/selftests/drivers/net/hw/Makefile @@ -10,6 +10,7 @@ TEST_PROGS = \ hw_stats_l3.sh \ hw_stats_l3_gre.sh \ loopback.sh \
nic_basic_tests.py \ pp_alloc_fail.py \ rss_ctx.py \ #
diff --git a/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py b/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py new file mode 100644 index 000000000..27f780032 --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/nic_basic_tests.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0
+#Introduction: +#This file has basic tests for generic NIC drivers. +#The test comprises of auto-negotiation, speed and duplex checks. +#Also has tests to check the throughput # +#Setup: +#Connect the DUT PC with NIC card to partner pc back via ethernet +medium of your choice(RJ45, T1) # +# DUT PC Partner PC +#┌───────────────────────┐
┌──────────────────────────┐
+#│ │ │ │ +#│ │ │ │ +#│ ┌───────────┐ │ │ +#│ │DUT NIC │ Eth │ │ +#│ │Interface ─┼─────────────────────────┼─ any eth
Interface │
+#│ └───────────┘ │ │ +#│ │ │ │ +#│ │ │ │ +#└───────────────────────┘
└──────────────────────────┘
+# +#Configurations: +# Change the below configuration based on your hw needs. +# """Default values""" +sleep_time = 5 #time taken to wait for transitions to happen, in seconds. +test_duration = 5 #performance test duration for the throughput check, in
seconds.
+throughput_threshold = 0.8 #percentage of throughput required to pass +the throughput
+import time +import os +import re +import configparser +import json +from lib.py import ksft_run, ksft_exit, ksft_pr, ksft_eq from lib.py +import KsftFailEx, KsftSkipEx from lib.py import NetDrvEpEnv from +lib.py import cmd from lib.py import ethtool
+"""Global variables""" +common_link_modes = []
Software engineers have a dislike for global variables. In this patch, it is not even used. Please consider replacing it by passing it as a parameter, or turn the code into a class and make it part of self.
I will change this in the next version.
+def test_link_modes(cfg) -> None:
- global common_link_modes
- link_modes = get_ethtool_content(cfg.ifname, "Supported link modes:")
- partner_link_modes = get_ethtool_content(cfg.ifname, "Link
+partner advertised link modes:")
- if link_modes and partner_link_modes:
for idx1 in range(len(link_modes)):
for idx2 in range(len(partner_link_modes)):
if link_modes[idx1] == partner_link_modes[idx2]:
common_link_modes.append(link_modes[idx1])
You can use the power of python here.
"supported-link-modes": [
"10baseT/Half","10baseT/Full","100baseT/Half","100baseT/Full","1000baseT/ Full" ], "link-partner-modes": [ "10baseT/Half","10baseT/Full","100baseT/Half","100baseT/Full","1000baseT/ Full" ],
convert the list into a set, and then use 'and'.
common_modes = set(josn['supported-link-modes']) and set(json['link-
partner-modes'])
I am figuring out the way to get the ethtool output in json format. Once successful, I will change this implementation as suggested in next version.