|
@@ -489,7 +489,10 @@ struct ethtool_rx_flow_spec {
|
|
|
* on return.
|
|
|
*
|
|
|
* For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined
|
|
|
- * rules on return.
|
|
|
+ * rules on return. If @data is non-zero on return then it is the
|
|
|
+ * size of the rule table, plus the flag %RX_CLS_LOC_SPECIAL if the
|
|
|
+ * driver supports any special location values. If that flag is not
|
|
|
+ * set in @data then special location values should not be used.
|
|
|
*
|
|
|
* For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an
|
|
|
* existing rule on entry and @fs contains the rule on return.
|
|
@@ -501,10 +504,23 @@ struct ethtool_rx_flow_spec {
|
|
|
* must use the second parameter to get_rxnfc() instead of @rule_locs.
|
|
|
*
|
|
|
* For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update.
|
|
|
- * @fs.@location specifies the location to use and must not be ignored.
|
|
|
+ * @fs.@location either specifies the location to use or is a special
|
|
|
+ * location value with %RX_CLS_LOC_SPECIAL flag set. On return,
|
|
|
+ * @fs.@location is the actual rule location.
|
|
|
*
|
|
|
* For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an
|
|
|
* existing rule on entry.
|
|
|
+ *
|
|
|
+ * A driver supporting the special location values for
|
|
|
+ * %ETHTOOL_SRXCLSRLINS may add the rule at any suitable unused
|
|
|
+ * location, and may remove a rule at a later location (lower
|
|
|
+ * priority) that matches exactly the same set of flows. The special
|
|
|
+ * values are: %RX_CLS_LOC_ANY, selecting any location;
|
|
|
+ * %RX_CLS_LOC_FIRST, selecting the first suitable location (maximum
|
|
|
+ * priority); and %RX_CLS_LOC_LAST, selecting the last suitable
|
|
|
+ * location (minimum priority). Additional special values may be
|
|
|
+ * defined in future and drivers must return -%EINVAL for any
|
|
|
+ * unrecognised value.
|
|
|
*/
|
|
|
struct ethtool_rxnfc {
|
|
|
__u32 cmd;
|
|
@@ -1141,6 +1157,12 @@ struct ethtool_ops {
|
|
|
|
|
|
#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
|
|
|
|
|
|
+/* Special RX classification rule insert location values */
|
|
|
+#define RX_CLS_LOC_SPECIAL 0x80000000 /* flag */
|
|
|
+#define RX_CLS_LOC_ANY 0xffffffff
|
|
|
+#define RX_CLS_LOC_FIRST 0xfffffffe
|
|
|
+#define RX_CLS_LOC_LAST 0xfffffffd
|
|
|
+
|
|
|
/* Reset flags */
|
|
|
/* The reset() operation must clear the flags for the components which
|
|
|
* were actually reset. On successful return, the flags indicate the
|