]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: net: lib: tc_rule_stats_get(): Don't hard-code array index
authorPetr Machata <petrm@nvidia.com>
Tue, 9 Dec 2025 15:29:01 +0000 (16:29 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 11 Dec 2025 08:53:15 +0000 (00:53 -0800)
Flower is commonly used to match on packets in many bash-based selftests.
A dump of a flower filter including statistics looks something like this:

 [
   {
     "protocol": "all",
     "pref": 49152,
     "kind": "flower",
     "chain": 0
   },
   {
     ...
     "options": {
       ...
       "actions": [
         {
   ...
           "stats": {
             "bytes": 0,
             "packets": 0,
             "drops": 0,
             "overlimits": 0,
             "requeues": 0,
             "backlog": 0,
             "qlen": 0
           }
         }
       ]
     }
   }
 ]

The JQ query in the helper function tc_rule_stats_get() assumes this form
and looks for the second element of the array.

However, a dump of a u32 filter looks like this:

 [
   {
     "protocol": "all",
     "pref": 49151,
     "kind": "u32",
     "chain": 0
   },
   {
     "protocol": "all",
     "pref": 49151,
     "kind": "u32",
     "chain": 0,
     "options": {
       "fh": "800:",
       "ht_divisor": 1
     }
   },
   {
     ...
     "options": {
       ...
       "actions": [
         {
   ...
           "stats": {
             "bytes": 0,
             "packets": 0,
             "drops": 0,
             "overlimits": 0,
             "requeues": 0,
             "backlog": 0,
             "qlen": 0
           }
         }
       ]
     }
   },
 ]

There's an extra element which the JQ query ends up choosing.

Instead of hard-coding a particular index, look for the entry on which a
selector .options.actions yields anything.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/12982a44471c834511a0ee6c1e8f57e3a5307105.1765289566.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/lib.sh

index f448bafb3f208ee8b947bfdafeabe06652ad51fa..0ec131b339bc42f0aa55fab7cd6e37be88b86185 100644 (file)
@@ -280,7 +280,8 @@ tc_rule_stats_get()
        local selector=${1:-.packets}; shift
 
        tc -j -s filter show dev $dev $dir pref $pref \
-           | jq ".[1].options.actions[].stats$selector"
+           | jq ".[] | select(.options.actions) |
+                 .options.actions[].stats$selector"
 }
 
 tc_rule_handle_stats_get()