* [dpdk-stable] [PATCH] net/i40e: fix vlan promisc setting
@ 2017-04-01 6:15 Wenzhuo Lu
2017-04-03 13:38 ` Ferruh Yigit
0 siblings, 1 reply; 2+ messages in thread
From: Wenzhuo Lu @ 2017-04-01 6:15 UTC (permalink / raw)
To: dev; +Cc: Wenzhuo Lu, stable
After adding VLAN filter, the VLAN promiscuous mode is
disabled. But there's no chance to enable it.
So add the check after deleting VLAN filter. If there's
no VLAN filter left, enable the VLAN promiscuous mode.
Fixes: 310dac2fde07 ("net/i40e: fix VLAN filter issue")
Cc: stable@dpdk.org
Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
---
drivers/net/i40e/i40e_ethdev.c | 42 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 39 insertions(+), 3 deletions(-)
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 00079bb..63ca029 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -11448,6 +11448,32 @@ int rte_pmd_i40e_set_vf_vlan_tag(uint8_t port, uint16_t vf_id, uint8_t on)
return ret;
}
+static int
+i40e_vlan_filter_count(struct i40e_vsi *vsi)
+{
+ uint32_t j, k;
+ uint16_t vlan_id;
+ int count = 0;
+
+ for (j = 0; j < I40E_VFTA_SIZE; j++) {
+ if (!vsi->vfta[j])
+ continue;
+
+ for (k = 0; k < I40E_UINT32_BIT_SIZE; k++) {
+ if (!(vsi->vfta[j] & (1 << k)))
+ continue;
+
+ vlan_id = j * I40E_UINT32_BIT_SIZE + k;
+ if (!vlan_id)
+ continue;
+
+ count++;
+ }
+ }
+
+ return count;
+}
+
int rte_pmd_i40e_set_vf_vlan_filter(uint8_t port, uint16_t vlan_id,
uint64_t vf_mask, uint8_t on)
{
@@ -11465,7 +11491,7 @@ int rte_pmd_i40e_set_vf_vlan_filter(uint8_t port, uint16_t vlan_id,
if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
- if (vlan_id > ETHER_MAX_VLAN_ID) {
+ if (vlan_id > ETHER_MAX_VLAN_ID || !vlan_id) {
PMD_DRV_LOG(ERR, "Invalid VLAN ID.");
return -EINVAL;
}
@@ -11499,15 +11525,25 @@ int rte_pmd_i40e_set_vf_vlan_filter(uint8_t port, uint16_t vlan_id,
if (on) {
if (!vsi->vlan_filter_on) {
vsi->vlan_filter_on = true;
+ i40e_aq_set_vsi_vlan_promisc(hw,
+ vsi->seid,
+ false,
+ NULL);
if (!vsi->vlan_anti_spoof_on)
i40e_add_rm_all_vlan_filter(
vsi, true);
}
- i40e_aq_set_vsi_vlan_promisc(hw, vsi->seid,
- false, NULL);
ret = i40e_vsi_add_vlan(vsi, vlan_id);
} else {
ret = i40e_vsi_delete_vlan(vsi, vlan_id);
+
+ if (!i40e_vlan_filter_count(vsi)) {
+ vsi->vlan_filter_on = false;
+ i40e_aq_set_vsi_vlan_promisc(hw,
+ vsi->seid,
+ true,
+ NULL);
+ }
}
}
}
--
1.9.3
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [dpdk-stable] [PATCH] net/i40e: fix vlan promisc setting
2017-04-01 6:15 [dpdk-stable] [PATCH] net/i40e: fix vlan promisc setting Wenzhuo Lu
@ 2017-04-03 13:38 ` Ferruh Yigit
0 siblings, 0 replies; 2+ messages in thread
From: Ferruh Yigit @ 2017-04-03 13:38 UTC (permalink / raw)
To: Wenzhuo Lu, dev; +Cc: stable
On 4/1/2017 7:15 AM, Wenzhuo Lu wrote:
> After adding VLAN filter, the VLAN promiscuous mode is
> disabled. But there's no chance to enable it.
> So add the check after deleting VLAN filter. If there's
> no VLAN filter left, enable the VLAN promiscuous mode.
>
> Fixes: 310dac2fde07 ("net/i40e: fix VLAN filter issue")
>
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Applied to dpdk-next-net/master, thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-04-03 13:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-01 6:15 [dpdk-stable] [PATCH] net/i40e: fix vlan promisc setting Wenzhuo Lu
2017-04-03 13:38 ` Ferruh Yigit
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).