lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250805213356.3348348-2-dechen@redhat.com>
Date: Tue,  5 Aug 2025 17:33:54 -0400
From: Dennis Chen <dechen@...hat.com>
To: netdev@...r.kernel.org
Cc: dechen@...hat.com,
	dchen27@...u.edu,
	kuba@...nel.org,
	davem@...emloft.net,
	edumazet@...gle.com,
	pabeni@...hat.com,
	andrew+netdev@...n.ch,
	petrm@...dia.com,
	Kamal Heib <kheib@...hat.com>
Subject: [PATCH net-next 1/3] netdevsim: Support ethtool stats

From: Kamal Heib <kheib@...hat.com>

Add support for reporting the netdevsim stats via ethtool.

Signed-off-by: Kamal Heib <kheib@...hat.com>
---
 drivers/net/netdevsim/ethtool.c | 58 +++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/drivers/net/netdevsim/ethtool.c b/drivers/net/netdevsim/ethtool.c
index f631d90c428a..33d39dfdd6d9 100644
--- a/drivers/net/netdevsim/ethtool.c
+++ b/drivers/net/netdevsim/ethtool.c
@@ -7,6 +7,26 @@
 
 #include "netdevsim.h"
 
+struct nsim_stat_desc {
+	char desc[ETH_GSTRING_LEN];
+	size_t offset;
+};
+
+#define NSIM_STAT_ENTRY(s) { \
+	.desc = #s,  \
+	.offset = offsetof(struct rtnl_link_stats64, s) }
+
+static const struct nsim_stat_desc nsim_stats_desc[] = {
+	NSIM_STAT_ENTRY(tx_packets),
+	NSIM_STAT_ENTRY(rx_packets),
+	NSIM_STAT_ENTRY(tx_bytes),
+	NSIM_STAT_ENTRY(rx_bytes),
+	NSIM_STAT_ENTRY(tx_dropped),
+	NSIM_STAT_ENTRY(rx_dropped),
+};
+
+#define NSIM_STATS_LEN	ARRAY_SIZE(nsim_stats_desc)
+
 static void
 nsim_get_pause_stats(struct net_device *dev,
 		     struct ethtool_pause_stats *pause_stats)
@@ -182,6 +202,41 @@ static int nsim_get_ts_info(struct net_device *dev,
 	return 0;
 }
 
+static int nsim_sset_count(struct net_device *dev, int sset)
+{
+	switch (sset) {
+	case ETH_SS_STATS:
+		return NSIM_STATS_LEN;
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static void nsim_get_strings(struct net_device *dev, u32 sset, u8 *data)
+{
+	int i;
+
+	switch (sset) {
+	case ETH_SS_STATS:
+		for (i = 0; i < NSIM_STATS_LEN; i++)
+			ethtool_puts(&data, nsim_stats_desc[i].desc);
+		break;
+	}
+}
+
+static void nsim_get_ethtool_stats(struct net_device *dev,
+				   struct ethtool_stats *stats,
+				   u64 *data)
+{
+	struct rtnl_link_stats64 rtstats = {};
+	int i;
+
+	dev_get_stats(dev, &rtstats);
+
+	for (i = 0; i < NSIM_STATS_LEN; i++)
+		data[i] = *(u64 *)((u8 *)&rtstats + nsim_stats_desc[i].offset);
+}
+
 static const struct ethtool_ops nsim_ethtool_ops = {
 	.supported_coalesce_params	= ETHTOOL_COALESCE_ALL_PARAMS,
 	.supported_ring_params		= ETHTOOL_RING_USE_TCP_DATA_SPLIT |
@@ -199,6 +254,9 @@ static const struct ethtool_ops nsim_ethtool_ops = {
 	.set_fecparam			= nsim_set_fecparam,
 	.get_fec_stats			= nsim_get_fec_stats,
 	.get_ts_info			= nsim_get_ts_info,
+	.get_sset_count			= nsim_sset_count,
+	.get_strings			= nsim_get_strings,
+	.get_ethtool_stats		= nsim_get_ethtool_stats,
 };
 
 static void nsim_ethtool_ring_init(struct netdevsim *ns)
-- 
2.50.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ