Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1269221/?format=api
{ "id": 1269221, "url": "http://patchwork.ozlabs.org/api/patches/1269221/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200411002834.13916-4-andre.guedes@intel.com/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20200411002834.13916-4-andre.guedes@intel.com>", "list_archive_url": null, "date": "2020-04-11T00:28:33", "name": "[3/4] igc: Add support for source address filters in core", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "523950f43068a63a915f74d6f89ebb663474eec6", "submitter": { "id": 72323, "url": "http://patchwork.ozlabs.org/api/people/72323/?format=api", "name": "Andre Guedes", "email": "andre.guedes@intel.com" }, "delegate": { "id": 68, "url": "http://patchwork.ozlabs.org/api/users/68/?format=api", "username": "jtkirshe", "first_name": "Jeff", "last_name": "Kirsher", "email": "jeffrey.t.kirsher@intel.com" }, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200411002834.13916-4-andre.guedes@intel.com/mbox/", "series": [ { "id": 169691, "url": "http://patchwork.ozlabs.org/api/series/169691/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=169691", "date": "2020-04-11T00:28:30", "name": "igc: Enable NFC rules based on source MAC address", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/169691/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1269221/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1269221/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Authentication-Results": [ "ozlabs.org; spf=pass (sender SPF authorized)\n\tsmtp.mailfrom=osuosl.org (client-ip=140.211.166.137;\n\thelo=fraxinus.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=intel.com" ], "Received": [ "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 48zbN158M1z9sSr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 11 Apr 2020 10:28:49 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id A8AFE862A5;\n\tSat, 11 Apr 2020 00:28:46 +0000 (UTC)", "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id AaxUUALH8NOp; Sat, 11 Apr 2020 00:28:44 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 23BEA85DD8;\n\tSat, 11 Apr 2020 00:28:44 +0000 (UTC)", "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\tby ash.osuosl.org (Postfix) with ESMTP id 441F71BF9CB\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tSat, 11 Apr 2020 00:28:42 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 4135785DD8\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tSat, 11 Apr 2020 00:28:42 +0000 (UTC)", "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id ir49GToW78mZ for <intel-wired-lan@lists.osuosl.org>;\n\tSat, 11 Apr 2020 00:28:41 +0000 (UTC)", "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby fraxinus.osuosl.org (Postfix) with ESMTPS id 506F8862AC\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tSat, 11 Apr 2020 00:28:41 +0000 (UTC)", "from fmsmga001.fm.intel.com ([10.253.24.23])\n\tby orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; \n\t10 Apr 2020 17:28:40 -0700", "from nwu5-mobl1.amr.corp.intel.com ([10.134.124.160])\n\tby fmsmga001.fm.intel.com with ESMTP; 10 Apr 2020 17:28:39 -0700" ], "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6", "IronPort-SDR": [ "vZfu/DxeKQ1rlsvEXTk0VCs2hS8VNhehSU8vddA3E1bqT/fXPjM9GTuy/y9UEpE70R5fgGjsiV\n\tyNrX6jAhs/IA==", "U861a/hr+Ba+A9SDxFYembGCyIwCTQwA02Sfcgiv2FiNwryHZwXQEJ3UbK0KQ2h+79yWdGnNJa\n\tdJoh4fDn3/Fg==" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.72,368,1580803200\"; d=\"scan'208\";a=\"362585534\"", "From": "Andre Guedes <andre.guedes@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Fri, 10 Apr 2020 17:28:33 -0700", "Message-Id": "<20200411002834.13916-4-andre.guedes@intel.com>", "X-Mailer": "git-send-email 2.26.0", "In-Reply-To": "<20200411002834.13916-1-andre.guedes@intel.com>", "References": "<20200411002834.13916-1-andre.guedes@intel.com>", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [PATCH 3/4] igc: Add support for source address\n\tfilters in core", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>", "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "intel-wired-lan-bounces@osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>" }, "content": "This patch extends MAC address filter internal APIs igc_add_mac_filter()\nand igc_del_mac_filter(), as well as local helpers, to support filters\nbased on source address.\n\nA new parameters 'type' is added to the APIs to indicate if the filter\ntype is source or destination. In case it is source type, the RAH\nregister is configured accordingly in igc_set_mac_filter_hw().\n\nSigned-off-by: Andre Guedes <andre.guedes@intel.com>\n---\n drivers/net/ethernet/intel/igc/igc.h | 13 ++++--\n drivers/net/ethernet/intel/igc/igc_defines.h | 2 +\n drivers/net/ethernet/intel/igc/igc_ethtool.c | 6 ++-\n drivers/net/ethernet/intel/igc/igc_main.c | 49 +++++++++++++-------\n 4 files changed, 49 insertions(+), 21 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h\nindex 654481cea1f2..a887331bc622 100644\n--- a/drivers/net/ethernet/intel/igc/igc.h\n+++ b/drivers/net/ethernet/intel/igc/igc.h\n@@ -29,6 +29,11 @@ void igc_set_ethtool_ops(struct net_device *);\n #define MAX_ETYPE_FILTER\t\t8\n #define IGC_RETA_SIZE\t\t\t128\n \n+enum igc_mac_filter_type {\n+\tIGC_MAC_FILTER_TYPE_DST = 0,\n+\tIGC_MAC_FILTER_TYPE_SRC\n+};\n+\n struct igc_tx_queue_stats {\n \tu64 packets;\n \tu64 bytes;\n@@ -228,9 +233,11 @@ void igc_write_rss_indir_tbl(struct igc_adapter *adapter);\n bool igc_has_link(struct igc_adapter *adapter);\n void igc_reset(struct igc_adapter *adapter);\n int igc_set_spd_dplx(struct igc_adapter *adapter, u32 spd, u8 dplx);\n-int igc_add_mac_filter(struct igc_adapter *adapter, const u8 *addr,\n-\t\t const s8 queue);\n-int igc_del_mac_filter(struct igc_adapter *adapter, const u8 *addr);\n+int igc_add_mac_filter(struct igc_adapter *adapter,\n+\t\t enum igc_mac_filter_type type, const u8 *addr,\n+\t\t int queue);\n+int igc_del_mac_filter(struct igc_adapter *adapter,\n+\t\t enum igc_mac_filter_type type, const u8 *addr);\n int igc_add_vlan_prio_filter(struct igc_adapter *adapter, int prio,\n \t\t\t int queue);\n void igc_del_vlan_prio_filter(struct igc_adapter *adapter, int prio);\ndiff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/net/ethernet/intel/igc/igc_defines.h\nindex e190a7f83c3c..389a2c340261 100644\n--- a/drivers/net/ethernet/intel/igc/igc_defines.h\n+++ b/drivers/net/ethernet/intel/igc/igc_defines.h\n@@ -63,6 +63,8 @@\n * manageability enabled, allowing us room for 15 multicast addresses.\n */\n #define IGC_RAH_RAH_MASK\t0x0000FFFF\n+#define IGC_RAH_ASEL_MASK\t0x00030000\n+#define IGC_RAH_ASEL_SRC_ADDR\tBIT(16)\n #define IGC_RAH_QSEL_MASK\t0x000C0000\n #define IGC_RAH_QSEL_SHIFT\t18\n #define IGC_RAH_QSEL_ENABLE\tBIT(28)\ndiff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c\nindex 36e94142b248..20d22df52f09 100644\n--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c\n+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c\n@@ -1207,7 +1207,8 @@ int igc_add_filter(struct igc_adapter *adapter, struct igc_nfc_filter *input)\n \t}\n \n \tif (input->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR) {\n-\t\terr = igc_add_mac_filter(adapter, input->filter.dst_addr,\n+\t\terr = igc_add_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST,\n+\t\t\t\t\t input->filter.dst_addr,\n \t\t\t\t\t input->action);\n \t\tif (err)\n \t\t\treturn err;\n@@ -1239,7 +1240,8 @@ int igc_erase_filter(struct igc_adapter *adapter, struct igc_nfc_filter *input)\n \t}\n \n \tif (input->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR)\n-\t\tigc_del_mac_filter(adapter, input->filter.dst_addr);\n+\t\tigc_del_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST,\n+\t\t\t\t input->filter.dst_addr);\n \n \treturn 0;\n }\ndiff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c\nindex 1779d20299d0..c5f0f7690ad3 100644\n--- a/drivers/net/ethernet/intel/igc/igc_main.c\n+++ b/drivers/net/ethernet/intel/igc/igc_main.c\n@@ -766,12 +766,14 @@ static void igc_setup_tctl(struct igc_adapter *adapter)\n * igc_set_mac_filter_hw() - Set MAC address filter in hardware.\n * @adapter: Pointer to adapter where the filter should be set.\n * @index: Filter index.\n- * @addr: Destination MAC address.\n+ * @type: MAC address filter type (source or destination).\n+ * @addr: MAC address.\n * @queue: If non-negative, queue assignment feature is enabled and frames\n * matching the filter are enqueued onto 'queue'. Otherwise, queue\n * assignment is disabled.\n */\n static void igc_set_mac_filter_hw(struct igc_adapter *adapter, int index,\n+\t\t\t\t enum igc_mac_filter_type type,\n \t\t\t\t const u8 *addr, int queue)\n {\n \tstruct net_device *dev = adapter->netdev;\n@@ -784,6 +786,11 @@ static void igc_set_mac_filter_hw(struct igc_adapter *adapter, int index,\n \tral = le32_to_cpup((__le32 *)(addr));\n \trah = le16_to_cpup((__le16 *)(addr + 4));\n \n+\tif (type == IGC_MAC_FILTER_TYPE_SRC) {\n+\t\trah &= ~IGC_RAH_ASEL_MASK;\n+\t\trah |= IGC_RAH_ASEL_SRC_ADDR;\n+\t}\n+\n \tif (queue >= 0) {\n \t\trah &= ~IGC_RAH_QSEL_MASK;\n \t\trah |= (queue << IGC_RAH_QSEL_SHIFT);\n@@ -825,7 +832,7 @@ static void igc_set_default_mac_filter(struct igc_adapter *adapter)\n \n \tnetdev_dbg(dev, \"Set default MAC address filter: address %pM\", addr);\n \n-\tigc_set_mac_filter_hw(adapter, 0, addr, -1);\n+\tigc_set_mac_filter_hw(adapter, 0, IGC_MAC_FILTER_TYPE_DST, addr, -1);\n }\n \n /**\n@@ -2180,7 +2187,8 @@ static void igc_nfc_filter_restore(struct igc_adapter *adapter)\n \tspin_unlock(&adapter->nfc_lock);\n }\n \n-static int igc_find_mac_filter(struct igc_adapter *adapter, const u8 *addr)\n+static int igc_find_mac_filter(struct igc_adapter *adapter,\n+\t\t\t enum igc_mac_filter_type type, const u8 *addr)\n {\n \tstruct igc_hw *hw = &adapter->hw;\n \tint max_entries = hw->mac.rar_entry_count;\n@@ -2193,6 +2201,8 @@ static int igc_find_mac_filter(struct igc_adapter *adapter, const u8 *addr)\n \n \t\tif (!(rah & IGC_RAH_AV))\n \t\t\tcontinue;\n+\t\tif (!!(rah & IGC_RAH_ASEL_SRC_ADDR) != type)\n+\t\t\tcontinue;\n \t\tif ((rah & IGC_RAH_RAH_MASK) !=\n \t\t le16_to_cpup((__le16 *)(addr + 4)))\n \t\t\tcontinue;\n@@ -2225,6 +2235,7 @@ static int igc_get_avail_mac_filter_slot(struct igc_adapter *adapter)\n /**\n * igc_add_mac_filter() - Add MAC address filter.\n * @adapter: Pointer to adapter where the filter should be added.\n+ * @type: MAC address filter type (source or destination).\n * @addr: MAC address.\n * @queue: If non-negative, queue assignment feature is enabled and frames\n * matching the filter are enqueued onto 'queue'. Otherwise, queue\n@@ -2232,8 +2243,9 @@ static int igc_get_avail_mac_filter_slot(struct igc_adapter *adapter)\n *\n * Return: 0 in case of success, negative errno code otherwise.\n */\n-int igc_add_mac_filter(struct igc_adapter *adapter, const u8 *addr,\n-\t\t const s8 queue)\n+int igc_add_mac_filter(struct igc_adapter *adapter,\n+\t\t enum igc_mac_filter_type type, const u8 *addr,\n+\t\t int queue)\n {\n \tstruct net_device *dev = adapter->netdev;\n \tint index;\n@@ -2241,7 +2253,7 @@ int igc_add_mac_filter(struct igc_adapter *adapter, const u8 *addr,\n \tif (!is_valid_ether_addr(addr))\n \t\treturn -EINVAL;\n \n-\tindex = igc_find_mac_filter(adapter, addr);\n+\tindex = igc_find_mac_filter(adapter, type, addr);\n \tif (index >= 0)\n \t\tgoto update_filter;\n \n@@ -2249,22 +2261,25 @@ int igc_add_mac_filter(struct igc_adapter *adapter, const u8 *addr,\n \tif (index < 0)\n \t\treturn -ENOSPC;\n \n-\tnetdev_dbg(dev, \"Add MAC address filter: index %d address %pM queue %d\",\n-\t\t index, addr, queue);\n+\tnetdev_dbg(dev, \"Add MAC address filter: index %d type %s address %pM queue %d\",\n+\t\t index, type == IGC_MAC_FILTER_TYPE_DST ? \"dst\" : \"src\",\n+\t\t addr, queue);\n \n update_filter:\n-\tigc_set_mac_filter_hw(adapter, index, addr, queue);\n+\tigc_set_mac_filter_hw(adapter, index, type, addr, queue);\n \treturn 0;\n }\n \n /**\n * igc_del_mac_filter() - Delete MAC address filter.\n * @adapter: Pointer to adapter where the filter should be deleted from.\n+ * @type: MAC address filter type (source or destination).\n * @addr: MAC address.\n *\n * Return: 0 in case of success, negative errno code otherwise.\n */\n-int igc_del_mac_filter(struct igc_adapter *adapter, const u8 *addr)\n+int igc_del_mac_filter(struct igc_adapter *adapter,\n+\t\t enum igc_mac_filter_type type, const u8 *addr)\n {\n \tstruct net_device *dev = adapter->netdev;\n \tint index;\n@@ -2272,7 +2287,7 @@ int igc_del_mac_filter(struct igc_adapter *adapter, const u8 *addr)\n \tif (!is_valid_ether_addr(addr))\n \t\treturn -EINVAL;\n \n-\tindex = igc_find_mac_filter(adapter, addr);\n+\tindex = igc_find_mac_filter(adapter, type, addr);\n \tif (index < 0)\n \t\treturn -ENOENT;\n \n@@ -2283,10 +2298,12 @@ int igc_del_mac_filter(struct igc_adapter *adapter, const u8 *addr)\n \t\t */\n \t\tnetdev_dbg(dev, \"Disable default MAC filter queue assignment\");\n \n-\t\tigc_set_mac_filter_hw(adapter, 0, addr, -1);\n+\t\tigc_set_mac_filter_hw(adapter, 0, type, addr, -1);\n \t} else {\n-\t\tnetdev_dbg(dev, \"Delete MAC address filter: index %d address %pM\",\n-\t\t\t index, addr);\n+\t\tnetdev_dbg(dev, \"Delete MAC address filter: index %d type %s address %pM\",\n+\t\t\t index,\n+\t\t\t type == IGC_MAC_FILTER_TYPE_DST ? \"dst\" : \"src\",\n+\t\t\t addr);\n \n \t\tigc_clear_mac_filter_hw(adapter, index);\n \t}\n@@ -2443,14 +2460,14 @@ static int igc_uc_sync(struct net_device *netdev, const unsigned char *addr)\n {\n \tstruct igc_adapter *adapter = netdev_priv(netdev);\n \n-\treturn igc_add_mac_filter(adapter, addr, -1);\n+\treturn igc_add_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST, addr, -1);\n }\n \n static int igc_uc_unsync(struct net_device *netdev, const unsigned char *addr)\n {\n \tstruct igc_adapter *adapter = netdev_priv(netdev);\n \n-\treturn igc_del_mac_filter(adapter, addr);\n+\treturn igc_del_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST, addr);\n }\n \n /**\n", "prefixes": [ "3/4" ] }