All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-wired-lan] [PATCH 1/2] igc: Reject NFC rules with multiple matches
@ 2020-05-12 17:35 Andre Guedes
  2020-05-12 17:35 ` [Intel-wired-lan] [PATCH 2/2] igc: Fix IGC_MAX_RXNFC_RULES Andre Guedes
  0 siblings, 1 reply; 3+ messages in thread
From: Andre Guedes @ 2020-05-12 17:35 UTC (permalink / raw)
  To: intel-wired-lan

The way rx queue assignment based on mac address, ethetype and vlan
priority filtering operates in I225 doesn't allow us to properly support
NFC rules with multiple matches.

Consider the following example which assigns to queue 2 frames matching
the address MACADDR *and* ethertype ETYPE.

$ ethtool -N eth0 flow-type ether dst <MACADDR> proto <ETYPE> queue 2

When such rule is applied, we have 2 unwanted behaviors:

    1) Any frame matching MACADDR will be assigned to queue 2. It
       doesn't matter the ETYPE value.

    2) Any accepted frame that has ethertype equals to ETYPE, no matter
       the mac address, will be assigned to queue 2 as well.

In current code, multiple-match filters are accepted by the driver, even
though it doesn't support them properly. This patch adds a check for
multiple-match rules in igc_ethtool_is_nfc_rule_valid() so they are
rejected.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 247d0f5c4eb8..2214a5d3a259 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -1222,8 +1222,8 @@ static void igc_ethtool_init_nfc_rule(struct igc_nfc_rule *rule,
  * @adapter: Pointer to adapter.
  * @rule: Rule under evaluation.
  *
- * Rules with both destination and source MAC addresses are considered invalid
- * since the driver doesn't support them.
+ * The driver doesn't support rules with multiple matches so if more than
+ * one bit in filter flags is set, @rule is considered invalid.
  *
  * Also, if there is already another rule with the same filter in a different
  * location, @rule is considered invalid.
@@ -1244,9 +1244,8 @@ static int igc_ethtool_check_nfc_rule(struct igc_adapter *adapter,
 		return -EINVAL;
 	}
 
-	if (flags & IGC_FILTER_FLAG_DST_MAC_ADDR &&
-	    flags & IGC_FILTER_FLAG_SRC_MAC_ADDR) {
-		netdev_dbg(dev, "Filters with both dst and src are not supported");
+	if (flags & (flags - 1)) {
+		netdev_dbg(dev, "Rule with multiple matches not supported");
 		return -EOPNOTSUPP;
 	}
 
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Intel-wired-lan] [PATCH 2/2] igc: Fix IGC_MAX_RXNFC_RULES
  2020-05-12 17:35 [Intel-wired-lan] [PATCH 1/2] igc: Reject NFC rules with multiple matches Andre Guedes
@ 2020-05-12 17:35 ` Andre Guedes
  2020-05-13  6:59   ` Neftin, Sasha
  0 siblings, 1 reply; 3+ messages in thread
From: Andre Guedes @ 2020-05-12 17:35 UTC (permalink / raw)
  To: intel-wired-lan

IGC supports a total of 32 rules. 16 MAC address based, 8 VLAN priority
based, and 8 ethertype based. This patch fixes IGC_MAX_RXNFC_RULES
accordingly.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
---
 drivers/net/ethernet/intel/igc/igc.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h
index 14f9edaaaf83..5dbc5a156626 100644
--- a/drivers/net/ethernet/intel/igc/igc.h
+++ b/drivers/net/ethernet/intel/igc/igc.h
@@ -457,7 +457,10 @@ struct igc_nfc_rule {
 	u16 action;
 };
 
-#define IGC_MAX_RXNFC_RULES		16
+/* IGC supports a total of 32 NFC rules: 16 MAC address based,, 8 VLAN priority
+ * based, and 8 ethertype based.
+ */
+#define IGC_MAX_RXNFC_RULES		32
 
 /* igc_desc_unused - calculate if we have unused descriptors */
 static inline u16 igc_desc_unused(const struct igc_ring *ring)
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Intel-wired-lan] [PATCH 2/2] igc: Fix IGC_MAX_RXNFC_RULES
  2020-05-12 17:35 ` [Intel-wired-lan] [PATCH 2/2] igc: Fix IGC_MAX_RXNFC_RULES Andre Guedes
@ 2020-05-13  6:59   ` Neftin, Sasha
  0 siblings, 0 replies; 3+ messages in thread
From: Neftin, Sasha @ 2020-05-13  6:59 UTC (permalink / raw)
  To: intel-wired-lan

On 5/12/2020 20:35, Andre Guedes wrote:
> IGC supports a total of 32 rules. 16 MAC address based, 8 VLAN priority
> based, and 8 ethertype based. This patch fixes IGC_MAX_RXNFC_RULES
> accordingly.
> 
> Signed-off-by: Andre Guedes <andre.guedes@intel.com>
> ---
>   drivers/net/ethernet/intel/igc/igc.h | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h
> index 14f9edaaaf83..5dbc5a156626 100644
> --- a/drivers/net/ethernet/intel/igc/igc.h
> +++ b/drivers/net/ethernet/intel/igc/igc.h
> @@ -457,7 +457,10 @@ struct igc_nfc_rule {
>   	u16 action;
>   };
>   
> -#define IGC_MAX_RXNFC_RULES		16
> +/* IGC supports a total of 32 NFC rules: 16 MAC address based,, 8 VLAN priority
> + * based, and 8 ethertype based.
> + */
> +#define IGC_MAX_RXNFC_RULES		32
>   
>   /* igc_desc_unused - calculate if we have unused descriptors */
>   static inline u16 igc_desc_unused(const struct igc_ring *ring)
> 
Acked-by: Sasha Neftin <sasha.neftin@intel.com>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-05-13  6:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-12 17:35 [Intel-wired-lan] [PATCH 1/2] igc: Reject NFC rules with multiple matches Andre Guedes
2020-05-12 17:35 ` [Intel-wired-lan] [PATCH 2/2] igc: Fix IGC_MAX_RXNFC_RULES Andre Guedes
2020-05-13  6:59   ` Neftin, Sasha

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.