Subject: Re: [PATCH v9 03/25] net/ethtool: add ULP_DDP_{GET,SET} operations for caps and stats

From: Jakub Kicinski <[email-masked]>
Date: Thu, 19 Jan 2023 18:41:47 -0800

On Tue, 17 Jan 2023 17:35:13 +0200 Aurelien Aptel wrote:
> This commit adds:
> 
> - 2 new netlink messages:
>   * ULP_DDP_GET: returns a bitset of supported and active capabilities
>   * ULP_DDP_SET: tries to activate requested bitset and returns results
> 
> - 2 new netdev ethtool_ops operations:
>   * ethtool_ops->get_ulp_ddp_stats(): retrieve device statistics
>   * ethtool_ops->set_ulp_ddp_capabilities(): try to apply
>     capability changes
> 
> ULP DDP capabilities handling is similar to netdev features
> handling.
> 
> If a ULP_DDP_GET message has requested statistics via the
> ETHTOOL_FLAG_STATS header flag, then per-device statistics are

s/per-device// ?

> returned to userspace.
> 
> Similar to netdev features, ULP_DDP_GET capabilities and statistics
> can be returned in a verbose (default) or compact form (if
> ETHTOOL_FLAG_COMPACT_BITSET is set in header flags).
> 
> Verbose statistics are nested as follows:
> 
>     STATS (nest)
>         COUNT (u32)
>         MAP (nest)
>             ITEM (nest)
>                 NAME (strz)
>                 VAL  (u64)
>             ...
> Compact statistics are nested as follows:
> 
>     STATS (nest)
>         COUNT (u32)
>         COMPACT_VALUES (array of u64)

That's not how other per-cmd stats work, why are you inventing 
new ways..

> +	int	(*get_ulp_ddp_stats)(struct net_device *dev, struct ethtool_ulp_ddp_stats *stats);
> +	int	(*set_ulp_ddp_capabilities)(struct net_device *dev, unsigned long *bits);

Why are these two callbacks not in struct ulp_ddp_dev_ops?

Why does the ethtool API not expose limits?