DPDK patches and discussions
 help / color / mirror / Atom feed
From: Rasesh Mody <rasesh.mody@qlogic.com>
To: <dev@dpdk.org>
Cc: <Dept-EngDPDKDev@qlogic.com>, Harish Patil <harish.patil@qlogic.com>
Subject: [dpdk-dev] [PATCH v2 12/22] qede: add enable/disable VLAN filtering
Date: Fri, 30 Sep 2016 00:05:59 -0700	[thread overview]
Message-ID: <1475219169-8774-13-git-send-email-rasesh.mody@qlogic.com> (raw)
In-Reply-To: <1475219169-8774-1-git-send-email-rasesh.mody@qlogic.com>

From: Harish Patil <harish.patil@qlogic.com>

The device doesn't explicitly support enable/disable
of VLAN filtering. However, VLAN filtering takes effect
when a matching VLAN is configured. So in order to
support enable/disable of VLAN filtering, VLAN 0 is
added/removed respectively. A check is added to ensure that
the user removes all the configured VLANs before disabling
VLAN filtering.

Also VLAN offloads shall be enabled by default and
vlan_tci_outer is to set to 0 for Q-in-Q packets.

Fixes: 2ea6f76 ("qede: add core driver")

Signed-off-by: Harish Patil <harish.patil@qlogic.com>
---
 drivers/net/qede/qede_ethdev.c | 35 ++++++++++++++++++++++++++++++++---
 drivers/net/qede/qede_ethdev.h |  4 ++++
 drivers/net/qede/qede_rxtx.c   |  1 +
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index c72d02f..a376f88 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -372,16 +372,40 @@ static void qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
 {
 	struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
 	struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
+	struct rte_eth_rxmode *rxmode = &eth_dev->data->dev_conf.rxmode;
 
 	if (mask & ETH_VLAN_STRIP_MASK) {
-		if (eth_dev->data->dev_conf.rxmode.hw_vlan_strip)
+		if (rxmode->hw_vlan_strip)
 			(void)qede_vlan_stripping(eth_dev, 1);
 		else
 			(void)qede_vlan_stripping(eth_dev, 0);
 	}
 
-	DP_INFO(edev, "vlan offload mask %d vlan-strip %d\n",
-		mask, eth_dev->data->dev_conf.rxmode.hw_vlan_strip);
+	if (mask & ETH_VLAN_FILTER_MASK) {
+		/* VLAN filtering kicks in when a VLAN is added */
+		if (rxmode->hw_vlan_filter) {
+			qede_vlan_filter_set(eth_dev, 0, 1);
+		} else {
+			if (qdev->configured_vlans > 1) { /* Excluding VLAN0 */
+				DP_NOTICE(edev, false,
+				  " Please remove existing VLAN filters"
+				  " before disabling VLAN filtering\n");
+				/* Signal app that VLAN filtering is still
+				 * enabled
+				 */
+				rxmode->hw_vlan_filter = true;
+			} else {
+				qede_vlan_filter_set(eth_dev, 0, 0);
+			}
+		}
+	}
+
+	if (mask & ETH_VLAN_EXTEND_MASK)
+		DP_INFO(edev, "No offloads are supported with VLAN Q-in-Q"
+			" and classification is based on outer tag only\n");
+
+	DP_INFO(edev, "vlan offload mask %d vlan-strip %d vlan-filter %d\n",
+		mask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter);
 }
 
 static int qede_set_ucast_rx_vlan(struct qede_dev *qdev,
@@ -584,6 +608,11 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
 	if (IS_PF(edev))
 		qede_mac_addr_set(eth_dev, &qdev->primary_mac);
 
+	/* Enable VLAN offloads by default */
+	qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK  |
+				       ETH_VLAN_FILTER_MASK |
+				       ETH_VLAN_EXTEND_MASK);
+
 	qdev->state = QEDE_DEV_CONFIG;
 
 	return 0;
diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h
index ed2d41c..526d3be 100644
--- a/drivers/net/qede/qede_ethdev.h
+++ b/drivers/net/qede/qede_ethdev.h
@@ -152,6 +152,10 @@ struct qede_dev {
 	char drv_ver[QED_DRV_VER_STR_SIZE];
 };
 
+/* Static functions */
+static int qede_vlan_filter_set(struct rte_eth_dev *eth_dev,
+				uint16_t vlan_id, int on);
+
 int qed_fill_eth_dev_info(struct ecore_dev *edev,
 				 struct qed_dev_eth_info *info);
 int qede_dev_set_link_state(struct rte_eth_dev *eth_dev, bool link_up);
diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index 6973d1c..9df0d133 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -945,6 +945,7 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 			 */
 			rx_mb->vlan_tci = rte_le_to_cpu_16(fp_cqe->vlan_tag);
 			rx_mb->ol_flags |= PKT_RX_QINQ_PKT;
+			rx_mb->vlan_tci_outer = 0;
 		}
 
 		rx_pkts[rx_pkt] = rx_mb;
-- 
1.8.3.1

  parent reply	other threads:[~2016-09-30  7:07 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-30  7:05 [dpdk-dev] [PATCH v2 00/22] qede: update qede pmd to 1.2.2.1 and enable by default Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 01/22] qede/base: add new files and shuffle the code Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 02/22] qede/base: formatting changes Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 03/22] qede: use FW CONFIG defines as needed Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 04/22] qede/base: update base driver Rasesh Mody
2016-09-30 16:44   ` Ferruh Yigit
     [not found]     ` <BLUPR0701MB157207202A7D8EB817D33DA59FC10@BLUPR0701MB1572.namprd07.prod.outlook.com>
2016-10-05 16:29       ` Thomas Monjalon
2016-10-10 23:31         ` Mody, Rasesh
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 05/22] qede/base: add the driver support for the MFW crash dump Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 06/22] qede: enable support for unequal number of RX/TX queues Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 07/22] qede: fix port (re)configuration issue Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 08/22] qede/base: allow MTU change via vport-update Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 09/22] qede: add missing 100G link speed capability Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 10/22] qede: remove unused/dead code Rasesh Mody
2016-09-30  7:05 ` [dpdk-dev] [PATCH v2 11/22] qede: fixes for VLAN filters Rasesh Mody
2016-09-30  7:05 ` Rasesh Mody [this message]
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 13/22] qede: fix RSS related issues Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 14/22] qede:add scatter gather support Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 15/22] qede/base: change rx tx queue start APIs Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 16/22] qede/base: add support to initiate PF FLR Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 17/22] qede: skip slowpath polling for 100G VF device Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 18/22] qede: fix driver version string Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 19/22] qede: add support for queue statistics Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 20/22] qede: remove external dependency and enable by default Rasesh Mody
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 21/22] doc: update qede pmd documentation Rasesh Mody
2016-09-30 15:11   ` Mcnamara, John
2016-09-30  7:06 ` [dpdk-dev] [PATCH v2 22/22] qede: update driver version Rasesh Mody

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=1475219169-8774-13-git-send-email-rasesh.mody@qlogic.com \
    --to=rasesh.mody@qlogic.com \
    --cc=Dept-EngDPDKDev@qlogic.com \
    --cc=dev@dpdk.org \
    --cc=harish.patil@qlogic.com \
    /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;
as well as URLs for NNTP newsgroup(s).