qlcnic: Fix setting Guest VLAN
o When configuring guest VLAN after PVID configuration, VF was loading with previously configured PVID. Clear the PVID which was previously configured before configuring guest VLAN. o Display guest VLAN when it is configured Signed-off-by: Manish Chopra <manish.chopra@qlogic.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6226204bcf
commit
7cfc1cebda
1 changed files with 25 additions and 1 deletions
|
@ -1749,6 +1749,7 @@ int qlcnic_sriov_set_vf_vlan(struct net_device *netdev, int vf,
|
||||||
|
|
||||||
switch (vlan) {
|
switch (vlan) {
|
||||||
case 4095:
|
case 4095:
|
||||||
|
vp->vlan = 0;
|
||||||
vp->vlan_mode = QLC_GUEST_VLAN_MODE;
|
vp->vlan_mode = QLC_GUEST_VLAN_MODE;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1767,6 +1768,29 @@ int qlcnic_sriov_set_vf_vlan(struct net_device *netdev, int vf,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __u32 qlcnic_sriov_get_vf_vlan(struct qlcnic_adapter *adapter,
|
||||||
|
struct qlcnic_vport *vp, int vf)
|
||||||
|
{
|
||||||
|
__u32 vlan = 0;
|
||||||
|
|
||||||
|
switch (vp->vlan_mode) {
|
||||||
|
case QLC_PVID_MODE:
|
||||||
|
vlan = vp->vlan;
|
||||||
|
break;
|
||||||
|
case QLC_GUEST_VLAN_MODE:
|
||||||
|
vlan = MAX_VLAN_ID;
|
||||||
|
break;
|
||||||
|
case QLC_NO_VLAN_MODE:
|
||||||
|
vlan = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
netdev_info(adapter->netdev, "Invalid VLAN mode = %d for VF %d\n",
|
||||||
|
vp->vlan_mode, vf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return vlan;
|
||||||
|
}
|
||||||
|
|
||||||
int qlcnic_sriov_get_vf_config(struct net_device *netdev,
|
int qlcnic_sriov_get_vf_config(struct net_device *netdev,
|
||||||
int vf, struct ifla_vf_info *ivi)
|
int vf, struct ifla_vf_info *ivi)
|
||||||
{
|
{
|
||||||
|
@ -1782,7 +1806,7 @@ int qlcnic_sriov_get_vf_config(struct net_device *netdev,
|
||||||
|
|
||||||
vp = sriov->vf_info[vf].vp;
|
vp = sriov->vf_info[vf].vp;
|
||||||
memcpy(&ivi->mac, vp->mac, ETH_ALEN);
|
memcpy(&ivi->mac, vp->mac, ETH_ALEN);
|
||||||
ivi->vlan = vp->vlan;
|
ivi->vlan = qlcnic_sriov_get_vf_vlan(adapter, vp, vf);
|
||||||
ivi->qos = vp->qos;
|
ivi->qos = vp->qos;
|
||||||
ivi->spoofchk = vp->spoofchk;
|
ivi->spoofchk = vp->spoofchk;
|
||||||
if (vp->max_tx_bw == MAX_BW)
|
if (vp->max_tx_bw == MAX_BW)
|
||||||
|
|
Loading…
Add table
Reference in a new issue