Very few (mlxsw) upstream drivers seem to allow offload of chains
other than 0.  Save driver developers typing and add a helper for
checking both if ethtool's TC offload flag is on and if chain is 0.
This helper will set the extack appropriately in both error cases.

Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com>
Reviewed-by: Simon Horman <simon.hor...@netronome.com>
---
 include/net/pkt_cls.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
index fa2f6fb14093..87406252f0a3 100644
--- a/include/net/pkt_cls.h
+++ b/include/net/pkt_cls.h
@@ -656,6 +656,20 @@ static inline bool tc_can_offload_extack(const struct 
net_device *dev,
        return can;
 }
 
+static inline bool
+tc_cls_can_offload_and_chain0(const struct net_device *dev,
+                             struct tc_cls_common_offload *common)
+{
+       if (!tc_can_offload_extack(dev, common->extack))
+               return false;
+       if (common->chain_index) {
+               NL_SET_ERR_MSG(common->extack,
+                              "Driver supports only offload of chain 0");
+               return false;
+       }
+       return true;
+}
+
 static inline bool tc_skip_hw(u32 flags)
 {
        return (flags & TCA_CLS_FLAGS_SKIP_HW) ? true : false;
-- 
2.15.1

Reply via email to