Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Vinicius Costa Gomes <vinicius.gomes@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [next-queue PATCH v6 06/10] igb: Allow filters to be added for the local MAC address
Date: Thu, 29 Mar 2018 14:07:47 -0700	[thread overview]
Message-ID: <20180329210751.11531-7-vinicius.gomes@intel.com> (raw)
In-Reply-To: <20180329210751.11531-1-vinicius.gomes@intel.com>

Users expect that when adding a steering filter for the local MAC
address, that all the traffic directed to that address will go to some
queue.

Currently, it's not possible to configure entries in the "in use"
state, which is the normal state of the local MAC address entry (it is
the default), this patch allows to override the steering configuration
of "in use" entries, if the filter to be added match the address and
address type (source or destination) of an existing entry.

There is a bit of a special handling for entries referring to the
local MAC address, when they are removed, only the steering
configuration is reset.

Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 40 +++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index e3da35cab786..1b6fad88107a 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -6844,6 +6844,27 @@ static void igb_set_default_mac_filter(struct igb_adapter *adapter)
 	igb_rar_set_index(adapter, 0);
 }
 
+/* If the filter to be added and an already existing filter express
+ * the same address and address type, it should be possible to only
+ * override the other configurations, for example the queue to steer
+ * traffic.
+ */
+static bool igb_mac_entry_can_be_used(const struct igb_mac_addr *entry,
+				      const u8 *addr, const u8 flags)
+{
+	if (!(entry->state & IGB_MAC_STATE_IN_USE))
+		return true;
+
+	if ((entry->state & IGB_MAC_STATE_SRC_ADDR) !=
+	    (flags & IGB_MAC_STATE_SRC_ADDR))
+		return false;
+
+	if (!ether_addr_equal(addr, entry->addr))
+		return false;
+
+	return true;
+}
+
 /* Add a MAC filter for 'addr' directing matching traffic to 'queue',
  * 'flags' is used to indicate what kind of match is made, match is by
  * default for the destination address, if matching by source address
@@ -6866,7 +6887,8 @@ static int igb_add_mac_filter_flags(struct igb_adapter *adapter,
 	 * addresses.
 	 */
 	for (i = 0; i < rar_entries; i++) {
-		if (adapter->mac_table[i].state & IGB_MAC_STATE_IN_USE)
+		if (!igb_mac_entry_can_be_used(&adapter->mac_table[i],
+					       addr, flags))
 			continue;
 
 		ether_addr_copy(adapter->mac_table[i].addr, addr);
@@ -6918,9 +6940,19 @@ static int igb_del_mac_filter_flags(struct igb_adapter *adapter,
 		if (!ether_addr_equal(adapter->mac_table[i].addr, addr))
 			continue;
 
-		adapter->mac_table[i].state = 0;
-		memset(adapter->mac_table[i].addr, 0, ETH_ALEN);
-		adapter->mac_table[i].queue = 0;
+		/* When a filter for the default address is "deleted",
+		 * we return it to its initial configuration
+		 */
+		if (adapter->mac_table[i].state & IGB_MAC_STATE_DEFAULT) {
+			adapter->mac_table[i].state =
+				IGB_MAC_STATE_DEFAULT | IGB_MAC_STATE_IN_USE;
+			adapter->mac_table[i].queue =
+				adapter->vfs_allocated_count;
+		} else {
+			adapter->mac_table[i].state = 0;
+			adapter->mac_table[i].queue = 0;
+			memset(adapter->mac_table[i].addr, 0, ETH_ALEN);
+		}
 
 		igb_rar_set_index(adapter, i);
 		return 0;
-- 
2.16.3


  parent reply	other threads:[~2018-03-29 21:07 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-29 21:07 [Intel-wired-lan] [next-queue PATCH v6 00/10] igb: offloading of receive filters Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 01/10] igb: Fix not adding filter elements to the list Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 02/10] igb: Fix queue selection on MAC filters on i210 Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 03/10] igb: Enable the hardware traffic class feature bit for igb models Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 04/10] igb: Add support for MAC address filters specifying source addresses Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 05/10] igb: Add support for enabling queue steering in filters Vinicius Costa Gomes
2018-03-29 21:07 ` Vinicius Costa Gomes [this message]
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 07/10] igb: Enable nfc filters to specify MAC addresses Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 08/10] igb: Add MAC address support for ethtool nftuple filters Vinicius Costa Gomes
2018-04-05  1:47   ` Brown, Aaron F
2018-04-05 17:59     ` Vinicius Costa Gomes
2018-04-07  2:11       ` Brown, Aaron F
2018-04-09 17:33         ` Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 09/10] igb: Add the skeletons for tc-flower offloading Vinicius Costa Gomes
2018-03-29 21:07 ` [Intel-wired-lan] [next-queue PATCH v6 10/10] igb: Add support for adding offloaded clsflower filters Vinicius Costa Gomes
2018-04-07  2:19   ` Brown, Aaron F
2018-04-09 17:36     ` Vinicius Costa Gomes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180329210751.11531-7-vinicius.gomes@intel.com \
    --to=vinicius.gomes@intel.com \
    --cc=intel-wired-lan@osuosl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox