From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com>
To: <dev@dpdk.org>
Cc: <xavier.huwei@huawei.com>
Subject: [dpdk-dev] [PATCH v 2/4] net/hns3: fix VLAN strip configuration when setting a PVID
Date: Wed, 3 Jun 2020 17:31:59 +0800 [thread overview]
Message-ID: <1591176721-46875-3-git-send-email-xavier.huwei@huawei.com> (raw)
In-Reply-To: <1591176721-46875-1-git-send-email-xavier.huwei@huawei.com>
From: Chengchang Tang <tangchengchang@huawei.com>
Currently, based on hns3 PF device, hardware will strip 2 vlan tags when
ULP calls rte_eth_dev_set_vlan_pvid API function to set a PVID whether
vlan strip related offload is turned on by calling rte_eth_dev_configure
or rte_eth_dev_set_vlan_offload API function.
When recieving a QinQ packet with the pvid tag, if ULP does not configure
the vlan strip by the method mentioned above, a layer of vlan tag will be
lost to ULP, which is not the expected result.
It is supposed to configure the vlan strip according to the upper level
process's configuration.
Fixes: 411d23b9eafb ("net/hns3: support VLAN")
Cc: stable@dpdk.org
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
---
drivers/net/hns3/hns3_ethdev.c | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 4030bd3..244a3b8 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -832,25 +832,28 @@ hns3_update_vlan_filter_entries(struct hns3_adapter *hns,
}
static int
-hns3_en_rx_strip_all(struct hns3_adapter *hns, int on)
+hns3_en_pvid_strip(struct hns3_adapter *hns, int on)
{
+ struct hns3_rx_vtag_cfg *old_cfg = &hns->pf.vtag_config.rx_vcfg;
struct hns3_rx_vtag_cfg rx_vlan_cfg;
- struct hns3_hw *hw = &hns->hw;
bool rx_strip_en;
int ret;
- rx_strip_en = on ? true : false;
- rx_vlan_cfg.strip_tag1_en = rx_strip_en;
- rx_vlan_cfg.strip_tag2_en = rx_strip_en;
+ rx_strip_en = old_cfg->rx_vlan_offload_en ? true : false;
+ if (on) {
+ rx_vlan_cfg.strip_tag1_en = rx_strip_en;
+ rx_vlan_cfg.strip_tag2_en = true;
+ } else {
+ rx_vlan_cfg.strip_tag1_en = false;
+ rx_vlan_cfg.strip_tag2_en = rx_strip_en;
+ }
rx_vlan_cfg.vlan1_vlan_prionly = false;
rx_vlan_cfg.vlan2_vlan_prionly = false;
- rx_vlan_cfg.rx_vlan_offload_en = rx_strip_en;
+ rx_vlan_cfg.rx_vlan_offload_en = old_cfg->rx_vlan_offload_en;
ret = hns3_set_vlan_rx_offload_cfg(hns, &rx_vlan_cfg);
- if (ret) {
- hns3_err(hw, "enable strip rx failed, ret =%d", ret);
+ if (ret)
return ret;
- }
hns3_update_rx_offload_cfg(hns, &rx_vlan_cfg);
return ret;
@@ -877,13 +880,15 @@ hns3_vlan_pvid_configure(struct hns3_adapter *hns, uint16_t pvid, int on)
HNS3_PORT_BASE_VLAN_DISABLE;
ret = hns3_vlan_txvlan_cfg(hns, port_base_vlan_state, pvid);
if (ret) {
- hns3_err(hw, "Failed to config tx vlan, ret =%d", ret);
+ hns3_err(hw, "failed to config tx vlan for pvid, ret = %d",
+ ret);
return ret;
}
- ret = hns3_en_rx_strip_all(hns, on);
+ ret = hns3_en_pvid_strip(hns, on);
if (ret) {
- hns3_err(hw, "Failed to config rx vlan strip, ret =%d", ret);
+ hns3_err(hw, "failed to config rx vlan strip for pvid, "
+ "ret = %d", ret);
return ret;
}
--
2.7.4
next prev parent reply other threads:[~2020-06-03 9:34 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-03 9:31 [dpdk-dev] [PATCH v 0/4] bugfixes for hns3 PMD driver Wei Hu (Xavier)
2020-06-03 9:31 ` [dpdk-dev] [PATCH v 1/4] net/hns3: remove unsupported VLAN capabilities Wei Hu (Xavier)
2020-06-03 9:31 ` Wei Hu (Xavier) [this message]
2020-06-03 9:32 ` [dpdk-dev] [PATCH v 3/4] net/hns3: fix VLAN tags report in Rx Wei Hu (Xavier)
2020-06-03 9:32 ` [dpdk-dev] [PATCH v 4/4] net/hns3: add checking tso segsz when sending TSO packets Wei Hu (Xavier)
2020-06-04 16:56 ` Ferruh Yigit
2020-06-05 8:50 ` Wei Hu (Xavier)
2020-06-05 9:44 ` Ferruh Yigit
2020-06-06 1:06 ` Wei Hu (Xavier)
2020-06-05 9:44 ` [dpdk-dev] [PATCH v 0/4] bugfixes for hns3 PMD driver Ferruh Yigit
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=1591176721-46875-3-git-send-email-xavier.huwei@huawei.com \
--to=xavier.huwei@huawei.com \
--cc=dev@dpdk.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;
as well as URLs for NNTP newsgroup(s).