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) { 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, 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; } -- 2.43.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
