Commit 178f0763 authored by Daniel Zahka's avatar Daniel Zahka Committed by Jakub Kicinski
Browse files

netdevsim: implement psp device stats



For now only tx/rx packets/bytes are reported. This is not compliant
with the PSP Architecture Specification.

Signed-off-by: default avatarDaniel Zahka <daniel.zahka@gmail.com>
Link: https://patch.msgid.link/20251106002608.1578518-6-daniel.zahka@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b1346219
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -109,6 +109,11 @@ struct netdevsim {
	int rq_reset_mode;

	struct {
		u64 rx_packets;
		u64 rx_bytes;
		u64 tx_packets;
		u64 tx_bytes;
		struct u64_stats_sync syncp;
		struct psp_dev *dev;
		u32 spi;
		u32 assoc_cnt;
+27 −0
Original line number Diff line number Diff line
@@ -70,6 +70,13 @@ nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns,
		*psp_ext = skb->extensions;
		refcount_inc(&(*psp_ext)->refcnt);
		skb->decrypted = 1;

		u64_stats_update_begin(&ns->psp.syncp);
		ns->psp.tx_packets++;
		ns->psp.rx_packets++;
		ns->psp.tx_bytes += skb->len - skb_inner_transport_offset(skb);
		ns->psp.rx_bytes += skb->len - skb_inner_transport_offset(skb);
		u64_stats_update_end(&ns->psp.syncp);
	} else {
		struct ipv6hdr *ip6h __maybe_unused;
		struct iphdr *iph;
@@ -164,12 +171,32 @@ static void nsim_assoc_del(struct psp_dev *psd, struct psp_assoc *pas)
	ns->psp.assoc_cnt--;
}

static void nsim_get_stats(struct psp_dev *psd, struct psp_dev_stats *stats)
{
	struct netdevsim *ns = psd->drv_priv;
	unsigned int start;

	/* WARNING: do *not* blindly zero stats in real drivers!
	 * All required stats must be reported by the device!
	 */
	memset(stats, 0, sizeof(struct psp_dev_stats));

	do {
		start = u64_stats_fetch_begin(&ns->psp.syncp);
		stats->rx_bytes = ns->psp.rx_bytes;
		stats->rx_packets = ns->psp.rx_packets;
		stats->tx_bytes = ns->psp.tx_bytes;
		stats->tx_packets = ns->psp.tx_packets;
	} while (u64_stats_fetch_retry(&ns->psp.syncp, start));
}

static struct psp_dev_ops nsim_psp_ops = {
	.set_config	= nsim_psp_set_config,
	.rx_spi_alloc	= nsim_rx_spi_alloc,
	.tx_key_add	= nsim_assoc_add,
	.tx_key_del	= nsim_assoc_del,
	.key_rotate	= nsim_key_rotate,
	.get_stats	= nsim_get_stats,
};

static struct psp_dev_caps nsim_psp_caps = {