On 1/27/26 4:11 PM, Matteo Perin via dev wrote:
> Refactors netdev_linux_read_stringset_info() and
> netdev_linux_read_definitions() to accept a string set type
> parameter, instead of hardcoding ETH_SS_FEATURES.
>
> This allows these functions to query any ethtool string set type,
> such as ETH_SS_STATS (i.e. device statistics).
>
> Signed-off-by: Matteo Perin <[email protected]>
> ---
> lib/netdev-linux.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
> index 879f333cd..93a064cc2 100644
> --- a/lib/netdev-linux.c
> +++ b/lib/netdev-linux.c
> @@ -2428,7 +2428,8 @@ netdev_internal_get_stats(const struct netdev *netdev_,
> }
>
> static int
> -netdev_linux_read_stringset_info(struct netdev_linux *netdev, uint32_t *len)
> +netdev_linux_read_stringset_info(struct netdev_linux *netdev,
> + uint32_t string_set, uint32_t *len)
Indentation is off here. Move 1 space to the left.
Also should it be 'enum ethtool_stringset' instead of a plain uint32?
> {
> union {
> struct ethtool_cmd ecmd;
> @@ -2442,7 +2443,7 @@ netdev_linux_read_stringset_info(struct netdev_linux
> *netdev, uint32_t *len)
>
> sset_info.hdr.cmd = ETHTOOL_GSSET_INFO;
> sset_info.hdr.reserved = 0;
> - sset_info.hdr.sset_mask = 1ULL << ETH_SS_FEATURES;
> + sset_info.hdr.sset_mask = 1ULL << string_set;
>
> error = netdev_linux_do_ethtool(netdev_get_name(&netdev->up),
> (struct ethtool_cmd *) &sset_info,
> @@ -2450,11 +2451,11 @@ netdev_linux_read_stringset_info(struct netdev_linux
> *netdev, uint32_t *len)
> if (error) {
> return error;
> }
> - if (sset_info.hdr.sset_mask & (1ULL << ETH_SS_FEATURES)) {
> + if (sset_info.hdr.sset_mask & (1ULL << string_set)) {
> *len = sset_info.sset_len[0];
> return 0;
> } else {
> - /* ETH_SS_FEATURES is not supported. */
> + /* String set is not supported. */
> return -EOPNOTSUPP;
> }
> }
> @@ -2462,13 +2463,14 @@ netdev_linux_read_stringset_info(struct netdev_linux
> *netdev, uint32_t *len)
>
> static int
> netdev_linux_read_definitions(struct netdev_linux *netdev,
> + uint32_t string_set,
enum ethtool_stringset?
> struct ethtool_gstrings **pstrings)
> {
> struct ethtool_gstrings *strings = NULL;
> uint32_t len = 0;
> int error = 0;
>
> - error = netdev_linux_read_stringset_info(netdev, &len);
> + error = netdev_linux_read_stringset_info(netdev, string_set, &len);
> if (error) {
> return error;
> } else if (!len) {
> @@ -2478,7 +2480,7 @@ netdev_linux_read_definitions(struct netdev_linux
> *netdev,
> strings = xzalloc(sizeof *strings + len * ETH_GSTRING_LEN);
>
> strings->cmd = ETHTOOL_GSTRINGS;
> - strings->string_set = ETH_SS_FEATURES;
> + strings->string_set = string_set;
> strings->len = len;
> error = netdev_linux_do_ethtool(netdev_get_name(&netdev->up),
> (struct ethtool_cmd *) strings,
> @@ -2510,7 +2512,7 @@ netdev_linux_set_ol(struct netdev *netdev_)
>
> COVERAGE_INC(netdev_get_ethtool);
>
> - error = netdev_linux_read_definitions(netdev, &names);
> + error = netdev_linux_read_definitions(netdev, ETH_SS_FEATURES, &names);
> if (error) {
> return;
> }
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev