From: Numan Siddique <[email protected]>

Kernel reserves the highest nibble of TCA_CHAIN for extended action
types.  This means we can't offload the recirculations with values
greater than 2^28.  Instead of kernel tc returning the error,
netdev_tc_flow_put() does the check and returns the error.

Reported-at: 
https://mail.openvswitch.org/pipermail/ovs-dev/2025-November/427485.html
Suggested-by: Ilya Maximets <[email protected]>
Acked-by: Eelco Chaudron <[email protected]>
Signed-off-by: Numan Siddique <[email protected]>
---

v3 -> v4
------
  - Rebased (there were no conflicts)
  - Added Eelco's Ack.

v2 -> v3
-------
 - Changed the log to debug and rephrased the log as per Eelco's
   suggestion.


 lib/dpif-offload-tc-netdev.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/dpif-offload-tc-netdev.c b/lib/dpif-offload-tc-netdev.c
index dd63f7cfd..f40cf7342 100644
--- a/lib/dpif-offload-tc-netdev.c
+++ b/lib/dpif-offload-tc-netdev.c
@@ -2341,6 +2341,12 @@ netdev_offload_tc_flow_put(struct dpif *dpif, struct 
netdev *netdev,
         return -ifindex;
     }
 
+    if (key->recirc_id > TC_ACT_EXT_VAL_MASK) {
+        VLOG_DBG_RL(&rl, "flow recirc_id %u exceeds the chain id upper limit",
+                    key->recirc_id);
+        return EOPNOTSUPP;
+    }
+
     memset(&flower, 0, sizeof flower);
 
     exact_match_on_dl_type = mask->dl_type == htons(0xffff);
-- 
2.52.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to