pkt_cls: add new tc cls helper to check offload flag and chain index
authorJakub Kicinski <jakub.kicinski@netronome.com>
Thu, 25 Jan 2018 22:00:43 +0000 (14:00 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Jan 2018 02:23:07 +0000 (21:23 -0500)
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.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/pkt_cls.h

index fa2f6fb1409314484808ce880348f569094e1c96..87406252f0a36cdeefb20c81a972c602341dce26 100644 (file)
@@ -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;