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

Reply via email to