* [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue
@ 2025-06-19 15:37 Song Yoong Siang
2025-06-19 15:49 ` Brett Creeley
2025-06-20 7:45 ` Kurt Kanzenbach
0 siblings, 2 replies; 5+ messages in thread
From: Song Yoong Siang @ 2025-06-19 15:37 UTC (permalink / raw)
To: Tony Nguyen, David S . Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Richard Cochran, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Vinicius Costa Gomes,
Jonathan Corbet, Przemek Kitszel, Shinas Rasheed, Kevin Tian,
Brett Creeley, Blanco Alcaine Hector, Joshua Hay, Sasha Neftin,
Andrew Lunn, Jacob Keller, Kurt Kanzenbach, Wojciech Drewek,
Marcin Szycik
Cc: intel-wired-lan, netdev, linux-kernel
Introduce support for a lowest priority wildcard (catch-all) rule in
ethtool's Network Flow Classification (NFC) for the igc driver. The
wildcard rule directs all unmatched network traffic, including traffic not
captured by Receive Side Scaling (RSS), to a specified queue. This
functionality utilizes the Default Queue feature available in I225/I226
hardware.
The implementation has been validated on Intel ADL-S systems with two
back-to-back connected I226 network interfaces.
Testing Procedure:
1. On the Device Under Test (DUT), verify the initial statistic:
$ ethtool -S enp1s0 | grep rx_q.*packets
rx_queue_0_packets: 0
rx_queue_1_packets: 0
rx_queue_2_packets: 0
rx_queue_3_packets: 0
2. From the Link Partner, send 10 ARP packets:
$ arping -c 10 -I enp170s0 169.254.1.2
3. On the DUT, verify the packet reception on Queue 0:
$ ethtool -S enp1s0 | grep rx_q.*packets
rx_queue_0_packets: 10
rx_queue_1_packets: 0
rx_queue_2_packets: 0
rx_queue_3_packets: 0
4. On the DUT, add a wildcard rule to route all packets to Queue 3:
$ sudo ethtool -N enp1s0 flow-type ether queue 3
5. From the Link Partner, send another 10 ARP packets:
$ arping -c 10 -I enp170s0 169.254.1.2
6. Now, packets are routed to Queue 3 by the wildcard (Default Queue) rule:
$ ethtool -S enp1s0 | grep rx_q.*packets
rx_queue_0_packets: 10
rx_queue_1_packets: 0
rx_queue_2_packets: 0
rx_queue_3_packets: 10
7. On the DUT, add a EtherType rule to route ARP packet to Queue 1:
$ sudo ethtool -N enp1s0 flow-type ether proto 0x0806 queue 1
8. From the Link Partner, send another 10 ARP packets:
$ arping -c 10 -I enp170s0 169.254.1.2
9. Now, packets are routed to Queue 1 by the EtherType rule because it is
higher priority than the wildcard (Default Queue) rule:
$ ethtool -S enp1s0 | grep rx_q.*packets
rx_queue_0_packets: 10
rx_queue_1_packets: 10
rx_queue_2_packets: 0
rx_queue_3_packets: 10
10. On the DUT, delete all the NFC rules:
$ sudo ethtool -N enp1s0 delete 63
$ sudo ethtool -N enp1s0 delete 64
11. From the Link Partner, send another 10 ARP packets:
$ arping -c 10 -I enp170s0 169.254.1.2
12. Now, packets are routed to Queue 0 because the value of Default Queue
is reset back to 0:
$ ethtool -S enp1s0 | grep rx_q.*packets
rx_queue_0_packets: 20
rx_queue_1_packets: 10
rx_queue_2_packets: 0
rx_queue_3_packets: 10
Co-developed-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
Signed-off-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
---
V2:
- use Ethtool wildcard rule instead of extra uAPI (Jakub Kicinski & Jacob Keller)
- combine MRQC register definitions into a single location (Kurt Kanzenbach)
- use FIELD_PREP (Kurt Kanzenbach)
- use RCT rule (Wojciech Drewek)
- no need brackets for single line code (Wojciech Drewek)
- use imperative mood in commit message (Marcin Szycik)
- ensure igc_ prefix in function name (Marcin Szycik)
V1: https://patchwork.ozlabs.org/project/intel-wired-lan/cover/20240730012212.775814-1-yoong.siang.song@intel.com/
---
drivers/net/ethernet/intel/igc/igc.h | 15 ++++++-------
drivers/net/ethernet/intel/igc/igc_defines.h | 4 ++++
drivers/net/ethernet/intel/igc/igc_ethtool.c | 18 ++++++++++++++++
drivers/net/ethernet/intel/igc/igc_main.c | 22 ++++++++++++++++++++
4 files changed, 52 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h
index 1525ae25fd3e..c580ecc954be 100644
--- a/drivers/net/ethernet/intel/igc/igc.h
+++ b/drivers/net/ethernet/intel/igc/igc.h
@@ -406,10 +406,6 @@ extern char igc_driver_name[];
#define IGC_FLAG_RSS_FIELD_IPV4_UDP BIT(6)
#define IGC_FLAG_RSS_FIELD_IPV6_UDP BIT(7)
-#define IGC_MRQC_ENABLE_RSS_MQ 0x00000002
-#define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
-#define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
-
/* RX-desc Write-Back format RSS Type's */
enum igc_rss_type_num {
IGC_RSS_TYPE_NO_HASH = 0,
@@ -635,6 +631,7 @@ enum igc_filter_match_flags {
IGC_FILTER_FLAG_DST_MAC_ADDR = BIT(3),
IGC_FILTER_FLAG_USER_DATA = BIT(4),
IGC_FILTER_FLAG_VLAN_ETYPE = BIT(5),
+ IGC_FILTER_FLAG_DEFAULT_QUEUE = BIT(6),
};
struct igc_nfc_filter {
@@ -662,10 +659,14 @@ struct igc_nfc_rule {
bool flex;
};
-/* IGC supports a total of 32 NFC rules: 16 MAC address based, 8 VLAN priority
- * based, 8 ethertype based and 32 Flex filter based rules.
+/* IGC supports a total of 65 NFC rules, listed below in order of priority:
+ * - 16 MAC address based filtering rules (highest priority)
+ * - 8 ethertype based filtering rules
+ * - 32 Flex filter based filtering rules
+ * - 8 VLAN priority based filtering rules
+ * - 1 default queue rule (lowest priority)
*/
-#define IGC_MAX_RXNFC_RULES 64
+#define IGC_MAX_RXNFC_RULES 65
struct igc_flex_filter {
u8 index;
diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/net/ethernet/intel/igc/igc_defines.h
index 86b346687196..498ba1522ca4 100644
--- a/drivers/net/ethernet/intel/igc/igc_defines.h
+++ b/drivers/net/ethernet/intel/igc/igc_defines.h
@@ -383,11 +383,15 @@
#define IGC_RXDEXT_STATERR_IPE 0x40000000
#define IGC_RXDEXT_STATERR_RXE 0x80000000
+#define IGC_MRQC_ENABLE_RSS_MQ 0x00000002
#define IGC_MRQC_RSS_FIELD_IPV4_TCP 0x00010000
#define IGC_MRQC_RSS_FIELD_IPV4 0x00020000
#define IGC_MRQC_RSS_FIELD_IPV6_TCP_EX 0x00040000
#define IGC_MRQC_RSS_FIELD_IPV6 0x00100000
#define IGC_MRQC_RSS_FIELD_IPV6_TCP 0x00200000
+#define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
+#define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
+#define IGC_MRQC_DEFAULT_QUEUE_MASK GENMASK(5, 3)
/* Header split receive */
#define IGC_RFCTL_IPV6_EX_DIS 0x00010000
diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index a7f397b58cd6..ecb35b693ce5 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -1283,6 +1283,24 @@ static void igc_ethtool_init_nfc_rule(struct igc_nfc_rule *rule,
rule->flex = true;
else
rule->flex = false;
+
+ /* The wildcard rule is only applied if:
+ * a) None of the other filtering rules match (match_flags is zero)
+ * b) The flow type is ETHER_FLOW only (no additional fields set)
+ * c) Mask for Source MAC address is not specified (all zeros)
+ * d) Mask for Destination MAC address is not specified (all zeros)
+ * e) Mask for L2 EtherType is not specified (zero)
+ *
+ * If all these conditions are met, the rule is treated as a wildcard
+ * rule. Default queue feature will be used, so that all packets that do
+ * not match any other rule will be routed to the default queue.
+ */
+ if (!rule->filter.match_flags &&
+ fsp->flow_type == ETHER_FLOW &&
+ is_zero_ether_addr(fsp->m_u.ether_spec.h_source) &&
+ is_zero_ether_addr(fsp->m_u.ether_spec.h_dest) &&
+ !fsp->m_u.ether_spec.h_proto)
+ rule->filter.match_flags = IGC_FILTER_FLAG_DEFAULT_QUEUE;
}
/**
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 2e12915b42a9..87311ea47018 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -3874,6 +3874,22 @@ static void igc_del_flex_filter(struct igc_adapter *adapter,
wr32(IGC_WUFC, wufc);
}
+static void igc_set_default_queue_filter(struct igc_adapter *adapter, u32 queue)
+{
+ struct igc_hw *hw = &adapter->hw;
+ u32 mrqc = rd32(IGC_MRQC);
+
+ mrqc &= ~IGC_MRQC_DEFAULT_QUEUE_MASK;
+ mrqc |= FIELD_PREP(IGC_MRQC_DEFAULT_QUEUE_MASK, queue);
+ wr32(IGC_MRQC, mrqc);
+}
+
+static void igc_reset_default_queue_filter(struct igc_adapter *adapter)
+{
+ /* Reset the default queue to its default value which is Queue 0 */
+ igc_set_default_queue_filter(adapter, 0);
+}
+
static int igc_enable_nfc_rule(struct igc_adapter *adapter,
struct igc_nfc_rule *rule)
{
@@ -3912,6 +3928,9 @@ static int igc_enable_nfc_rule(struct igc_adapter *adapter,
return err;
}
+ if (rule->filter.match_flags & IGC_FILTER_FLAG_DEFAULT_QUEUE)
+ igc_set_default_queue_filter(adapter, rule->action);
+
return 0;
}
@@ -3939,6 +3958,9 @@ static void igc_disable_nfc_rule(struct igc_adapter *adapter,
if (rule->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR)
igc_del_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST,
rule->filter.dst_addr);
+
+ if (rule->filter.match_flags & IGC_FILTER_FLAG_DEFAULT_QUEUE)
+ igc_reset_default_queue_filter(adapter);
}
/**
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue
2025-06-19 15:37 [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue Song Yoong Siang
@ 2025-06-19 15:49 ` Brett Creeley
2025-06-20 8:30 ` Song, Yoong Siang
2025-06-20 7:45 ` Kurt Kanzenbach
1 sibling, 1 reply; 5+ messages in thread
From: Brett Creeley @ 2025-06-19 15:49 UTC (permalink / raw)
To: Song Yoong Siang, Tony Nguyen, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Richard Cochran, Alexei Starovoitov,
Daniel Borkmann, Jesper Dangaard Brouer, John Fastabend,
Vinicius Costa Gomes, Jonathan Corbet, Przemek Kitszel,
Shinas Rasheed, Kevin Tian, Brett Creeley, Blanco Alcaine Hector,
Joshua Hay, Sasha Neftin, Andrew Lunn, Jacob Keller,
Kurt Kanzenbach, Wojciech Drewek, Marcin Szycik
Cc: intel-wired-lan, netdev, linux-kernel
On 6/19/2025 8:37 AM, Song Yoong Siang wrote:
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
>
>
> Introduce support for a lowest priority wildcard (catch-all) rule in
> ethtool's Network Flow Classification (NFC) for the igc driver. The
> wildcard rule directs all unmatched network traffic, including traffic not
> captured by Receive Side Scaling (RSS), to a specified queue. This
> functionality utilizes the Default Queue feature available in I225/I226
> hardware.
>
> The implementation has been validated on Intel ADL-S systems with two
> back-to-back connected I226 network interfaces.
>
> Testing Procedure:
> 1. On the Device Under Test (DUT), verify the initial statistic:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 0
> rx_queue_1_packets: 0
> rx_queue_2_packets: 0
> rx_queue_3_packets: 0
>
> 2. From the Link Partner, send 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 3. On the DUT, verify the packet reception on Queue 0:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 10
> rx_queue_1_packets: 0
> rx_queue_2_packets: 0
> rx_queue_3_packets: 0
>
> 4. On the DUT, add a wildcard rule to route all packets to Queue 3:
> $ sudo ethtool -N enp1s0 flow-type ether queue 3
>
> 5. From the Link Partner, send another 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 6. Now, packets are routed to Queue 3 by the wildcard (Default Queue) rule:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 10
> rx_queue_1_packets: 0
> rx_queue_2_packets: 0
> rx_queue_3_packets: 10
>
> 7. On the DUT, add a EtherType rule to route ARP packet to Queue 1:
> $ sudo ethtool -N enp1s0 flow-type ether proto 0x0806 queue 1
>
> 8. From the Link Partner, send another 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 9. Now, packets are routed to Queue 1 by the EtherType rule because it is
> higher priority than the wildcard (Default Queue) rule:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 10
> rx_queue_1_packets: 10
> rx_queue_2_packets: 0
> rx_queue_3_packets: 10
>
> 10. On the DUT, delete all the NFC rules:
> $ sudo ethtool -N enp1s0 delete 63
> $ sudo ethtool -N enp1s0 delete 64
>
> 11. From the Link Partner, send another 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 12. Now, packets are routed to Queue 0 because the value of Default Queue
> is reset back to 0:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 20
> rx_queue_1_packets: 10
> rx_queue_2_packets: 0
> rx_queue_3_packets: 10
>
> Co-developed-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
> Signed-off-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
> Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
> ---
> V2:
> - use Ethtool wildcard rule instead of extra uAPI (Jakub Kicinski & Jacob Keller)
> - combine MRQC register definitions into a single location (Kurt Kanzenbach)
> - use FIELD_PREP (Kurt Kanzenbach)
> - use RCT rule (Wojciech Drewek)
> - no need brackets for single line code (Wojciech Drewek)
> - use imperative mood in commit message (Marcin Szycik)
> - ensure igc_ prefix in function name (Marcin Szycik)
>
> V1: https://patchwork.ozlabs.org/project/intel-wired-lan/cover/20240730012212.775814-1-yoong.siang.song@intel.com/
> ---
> drivers/net/ethernet/intel/igc/igc.h | 15 ++++++-------
> drivers/net/ethernet/intel/igc/igc_defines.h | 4 ++++
> drivers/net/ethernet/intel/igc/igc_ethtool.c | 18 ++++++++++++++++
> drivers/net/ethernet/intel/igc/igc_main.c | 22 ++++++++++++++++++++
> 4 files changed, 52 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h
> index 1525ae25fd3e..c580ecc954be 100644
> --- a/drivers/net/ethernet/intel/igc/igc.h
> +++ b/drivers/net/ethernet/intel/igc/igc.h
> @@ -406,10 +406,6 @@ extern char igc_driver_name[];
> #define IGC_FLAG_RSS_FIELD_IPV4_UDP BIT(6)
> #define IGC_FLAG_RSS_FIELD_IPV6_UDP BIT(7)
>
> -#define IGC_MRQC_ENABLE_RSS_MQ 0x00000002
> -#define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
> -#define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
> -
Small nit, but moving these fields seems like a separate patch since
moving them isn't part of the wildcard rule changes.
Thanks,
Brett
> /* RX-desc Write-Back format RSS Type's */
> enum igc_rss_type_num {
> IGC_RSS_TYPE_NO_HASH = 0,
> @@ -635,6 +631,7 @@ enum igc_filter_match_flags {
> IGC_FILTER_FLAG_DST_MAC_ADDR = BIT(3),
> IGC_FILTER_FLAG_USER_DATA = BIT(4),
> IGC_FILTER_FLAG_VLAN_ETYPE = BIT(5),
> + IGC_FILTER_FLAG_DEFAULT_QUEUE = BIT(6),
> };
>
<snip>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue
2025-06-19 15:37 [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue Song Yoong Siang
2025-06-19 15:49 ` Brett Creeley
@ 2025-06-20 7:45 ` Kurt Kanzenbach
2025-06-20 8:23 ` Song, Yoong Siang
1 sibling, 1 reply; 5+ messages in thread
From: Kurt Kanzenbach @ 2025-06-20 7:45 UTC (permalink / raw)
To: Song Yoong Siang, Tony Nguyen, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Richard Cochran, Alexei Starovoitov,
Daniel Borkmann, Jesper Dangaard Brouer, John Fastabend,
Vinicius Costa Gomes, Jonathan Corbet, Przemek Kitszel,
Shinas Rasheed, Kevin Tian, Brett Creeley, Blanco Alcaine Hector,
Joshua Hay, Sasha Neftin, Andrew Lunn, Jacob Keller,
Wojciech Drewek, Marcin Szycik
Cc: intel-wired-lan, netdev, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2960 bytes --]
On Thu Jun 19 2025, Song Yoong Siang wrote:
> Introduce support for a lowest priority wildcard (catch-all) rule in
> ethtool's Network Flow Classification (NFC) for the igc driver. The
> wildcard rule directs all unmatched network traffic, including traffic not
> captured by Receive Side Scaling (RSS), to a specified queue. This
> functionality utilizes the Default Queue feature available in I225/I226
> hardware.
>
> The implementation has been validated on Intel ADL-S systems with two
> back-to-back connected I226 network interfaces.
>
> Testing Procedure:
> 1. On the Device Under Test (DUT), verify the initial statistic:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 0
> rx_queue_1_packets: 0
> rx_queue_2_packets: 0
> rx_queue_3_packets: 0
>
> 2. From the Link Partner, send 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 3. On the DUT, verify the packet reception on Queue 0:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 10
> rx_queue_1_packets: 0
> rx_queue_2_packets: 0
> rx_queue_3_packets: 0
>
> 4. On the DUT, add a wildcard rule to route all packets to Queue 3:
> $ sudo ethtool -N enp1s0 flow-type ether queue 3
>
> 5. From the Link Partner, send another 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 6. Now, packets are routed to Queue 3 by the wildcard (Default Queue) rule:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 10
> rx_queue_1_packets: 0
> rx_queue_2_packets: 0
> rx_queue_3_packets: 10
>
> 7. On the DUT, add a EtherType rule to route ARP packet to Queue 1:
> $ sudo ethtool -N enp1s0 flow-type ether proto 0x0806 queue 1
>
> 8. From the Link Partner, send another 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 9. Now, packets are routed to Queue 1 by the EtherType rule because it is
> higher priority than the wildcard (Default Queue) rule:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 10
> rx_queue_1_packets: 10
> rx_queue_2_packets: 0
> rx_queue_3_packets: 10
>
> 10. On the DUT, delete all the NFC rules:
> $ sudo ethtool -N enp1s0 delete 63
> $ sudo ethtool -N enp1s0 delete 64
>
> 11. From the Link Partner, send another 10 ARP packets:
> $ arping -c 10 -I enp170s0 169.254.1.2
>
> 12. Now, packets are routed to Queue 0 because the value of Default Queue
> is reset back to 0:
> $ ethtool -S enp1s0 | grep rx_q.*packets
> rx_queue_0_packets: 20
> rx_queue_1_packets: 10
> rx_queue_2_packets: 0
> rx_queue_3_packets: 10
>
> Co-developed-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
> Signed-off-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
> Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue
2025-06-20 7:45 ` Kurt Kanzenbach
@ 2025-06-20 8:23 ` Song, Yoong Siang
0 siblings, 0 replies; 5+ messages in thread
From: Song, Yoong Siang @ 2025-06-20 8:23 UTC (permalink / raw)
To: Kurt Kanzenbach, Nguyen, Anthony L, David S . Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Richard Cochran,
Alexei Starovoitov, Daniel Borkmann, Jesper Dangaard Brouer,
John Fastabend, Gomes, Vinicius, Jonathan Corbet,
Kitszel, Przemyslaw, Shinas Rasheed, Tian, Kevin, Brett Creeley,
Blanco Alcaine, Hector, Hay, Joshua A, Sasha Neftin, Andrew Lunn,
Keller, Jacob E, Marcin Szycik
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
On Friday, June 20, 2025 3:46 PM, Kurt Kanzenbach <kurt@linutronix.de> wrote:
>On Thu Jun 19 2025, Song Yoong Siang wrote:
>> Introduce support for a lowest priority wildcard (catch-all) rule in
>> ethtool's Network Flow Classification (NFC) for the igc driver. The
>> wildcard rule directs all unmatched network traffic, including traffic not
>> captured by Receive Side Scaling (RSS), to a specified queue. This
>> functionality utilizes the Default Queue feature available in I225/I226
>> hardware.
>>
>> The implementation has been validated on Intel ADL-S systems with two
>> back-to-back connected I226 network interfaces.
>>
>> Testing Procedure:
>> 1. On the Device Under Test (DUT), verify the initial statistic:
>> $ ethtool -S enp1s0 | grep rx_q.*packets
>> rx_queue_0_packets: 0
>> rx_queue_1_packets: 0
>> rx_queue_2_packets: 0
>> rx_queue_3_packets: 0
>>
>> 2. From the Link Partner, send 10 ARP packets:
>> $ arping -c 10 -I enp170s0 169.254.1.2
>>
>> 3. On the DUT, verify the packet reception on Queue 0:
>> $ ethtool -S enp1s0 | grep rx_q.*packets
>> rx_queue_0_packets: 10
>> rx_queue_1_packets: 0
>> rx_queue_2_packets: 0
>> rx_queue_3_packets: 0
>>
>> 4. On the DUT, add a wildcard rule to route all packets to Queue 3:
>> $ sudo ethtool -N enp1s0 flow-type ether queue 3
>>
>> 5. From the Link Partner, send another 10 ARP packets:
>> $ arping -c 10 -I enp170s0 169.254.1.2
>>
>> 6. Now, packets are routed to Queue 3 by the wildcard (Default Queue) rule:
>> $ ethtool -S enp1s0 | grep rx_q.*packets
>> rx_queue_0_packets: 10
>> rx_queue_1_packets: 0
>> rx_queue_2_packets: 0
>> rx_queue_3_packets: 10
>>
>> 7. On the DUT, add a EtherType rule to route ARP packet to Queue 1:
>> $ sudo ethtool -N enp1s0 flow-type ether proto 0x0806 queue 1
>>
>> 8. From the Link Partner, send another 10 ARP packets:
>> $ arping -c 10 -I enp170s0 169.254.1.2
>>
>> 9. Now, packets are routed to Queue 1 by the EtherType rule because it is
>> higher priority than the wildcard (Default Queue) rule:
>> $ ethtool -S enp1s0 | grep rx_q.*packets
>> rx_queue_0_packets: 10
>> rx_queue_1_packets: 10
>> rx_queue_2_packets: 0
>> rx_queue_3_packets: 10
>>
>> 10. On the DUT, delete all the NFC rules:
>> $ sudo ethtool -N enp1s0 delete 63
>> $ sudo ethtool -N enp1s0 delete 64
>>
>> 11. From the Link Partner, send another 10 ARP packets:
>> $ arping -c 10 -I enp170s0 169.254.1.2
>>
>> 12. Now, packets are routed to Queue 0 because the value of Default Queue
>> is reset back to 0:
>> $ ethtool -S enp1s0 | grep rx_q.*packets
>> rx_queue_0_packets: 20
>> rx_queue_1_packets: 10
>> rx_queue_2_packets: 0
>> rx_queue_3_packets: 10
>>
>> Co-developed-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
>> Signed-off-by: Blanco Alcaine Hector <hector.blanco.alcaine@intel.com>
>> Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
>
>Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
Hi Kurt Kanzenbach,
Thank you for reviewing the patch.
Brett Creeley points out a nit to have separate patch to
move following macros from igc.h to igc_defines.h.
#define IGC_MRQC_ENABLE_RSS_MQ 0x00000002
#define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
#define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
I plan to split this patch into two, then submit v3 patchset
with your reviewed-by tag on both patches.
Is this sound good to you?
Thanks & Regards
Siang
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue
2025-06-19 15:49 ` Brett Creeley
@ 2025-06-20 8:30 ` Song, Yoong Siang
0 siblings, 0 replies; 5+ messages in thread
From: Song, Yoong Siang @ 2025-06-20 8:30 UTC (permalink / raw)
To: Brett Creeley, Nguyen, Anthony L, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Richard Cochran, Alexei Starovoitov,
Daniel Borkmann, Jesper Dangaard Brouer, John Fastabend,
Gomes, Vinicius, Jonathan Corbet, Kitszel, Przemyslaw,
Shinas Rasheed, Tian, Kevin, Brett Creeley,
Blanco Alcaine, Hector, Hay, Joshua A, Andrew Lunn,
Keller, Jacob E, Kurt Kanzenbach, Marcin Szycik
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
On Thursday, June 19, 2025 11:49 PM, Brett Creeley <bcreeley@amd.com> wrote:
>On 6/19/2025 8:37 AM, Song Yoong Siang wrote:
>> diff --git a/drivers/net/ethernet/intel/igc/igc.h
>b/drivers/net/ethernet/intel/igc/igc.h
>> index 1525ae25fd3e..c580ecc954be 100644
>> --- a/drivers/net/ethernet/intel/igc/igc.h
>> +++ b/drivers/net/ethernet/intel/igc/igc.h
>> @@ -406,10 +406,6 @@ extern char igc_driver_name[];
>> #define IGC_FLAG_RSS_FIELD_IPV4_UDP BIT(6)
>> #define IGC_FLAG_RSS_FIELD_IPV6_UDP BIT(7)
>>
>> -#define IGC_MRQC_ENABLE_RSS_MQ 0x00000002
>> -#define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
>> -#define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
>> -
>
>Small nit, but moving these fields seems like a separate patch since
>moving them isn't part of the wildcard rule changes.
>
>Thanks,
>
>Brett
Hi Brett,
Thanks for reviewing the patch.
No problem, I can split the patch into two and submit v3.
Thanks & Regards
Siang
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-06-20 8:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-19 15:37 [PATCH iwl-next,v2 1/1] igc: Add wildcard rule support to ethtool NFC using Default Queue Song Yoong Siang
2025-06-19 15:49 ` Brett Creeley
2025-06-20 8:30 ` Song, Yoong Siang
2025-06-20 7:45 ` Kurt Kanzenbach
2025-06-20 8:23 ` Song, Yoong Siang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).