|
@@ -375,7 +375,7 @@ qlcnic_send_cmd_descs(struct qlcnic_adapter *adapter,
|
|
|
|
|
|
static int
|
|
|
qlcnic_sre_macaddr_change(struct qlcnic_adapter *adapter, u8 *addr,
|
|
|
- unsigned op)
|
|
|
+ u16 vlan_id, unsigned op)
|
|
|
{
|
|
|
struct qlcnic_nic_req req;
|
|
|
struct qlcnic_mac_req *mac_req;
|
|
@@ -391,6 +391,8 @@ qlcnic_sre_macaddr_change(struct qlcnic_adapter *adapter, u8 *addr,
|
|
|
mac_req->op = op;
|
|
|
memcpy(mac_req->mac_addr, addr, 6);
|
|
|
|
|
|
+ req.words[1] = cpu_to_le64(vlan_id);
|
|
|
+
|
|
|
return qlcnic_send_cmd_descs(adapter, (struct cmd_desc_type0 *)&req, 1);
|
|
|
}
|
|
|
|
|
@@ -415,7 +417,7 @@ static int qlcnic_nic_add_mac(struct qlcnic_adapter *adapter, u8 *addr)
|
|
|
memcpy(cur->mac_addr, addr, ETH_ALEN);
|
|
|
|
|
|
if (qlcnic_sre_macaddr_change(adapter,
|
|
|
- cur->mac_addr, QLCNIC_MAC_ADD)) {
|
|
|
+ cur->mac_addr, 0, QLCNIC_MAC_ADD)) {
|
|
|
kfree(cur);
|
|
|
return -EIO;
|
|
|
}
|
|
@@ -485,7 +487,7 @@ void qlcnic_free_mac_list(struct qlcnic_adapter *adapter)
|
|
|
while (!list_empty(head)) {
|
|
|
cur = list_entry(head->next, struct qlcnic_mac_list_s, list);
|
|
|
qlcnic_sre_macaddr_change(adapter,
|
|
|
- cur->mac_addr, QLCNIC_MAC_DEL);
|
|
|
+ cur->mac_addr, 0, QLCNIC_MAC_DEL);
|
|
|
list_del(&cur->list);
|
|
|
kfree(cur);
|
|
|
}
|
|
@@ -506,7 +508,9 @@ void qlcnic_prune_lb_filters(struct qlcnic_adapter *adapter)
|
|
|
if (jiffies >
|
|
|
(QLCNIC_FILTER_AGE * HZ + tmp_fil->ftime)) {
|
|
|
qlcnic_sre_macaddr_change(adapter,
|
|
|
- tmp_fil->faddr, QLCNIC_MAC_DEL);
|
|
|
+ tmp_fil->faddr, tmp_fil->vlan_id,
|
|
|
+ tmp_fil->vlan_id ? QLCNIC_MAC_VLAN_DEL :
|
|
|
+ QLCNIC_MAC_DEL);
|
|
|
spin_lock_bh(&adapter->mac_learn_lock);
|
|
|
adapter->fhash.fnum--;
|
|
|
hlist_del(&tmp_fil->fnode);
|
|
@@ -528,8 +532,9 @@ void qlcnic_delete_lb_filters(struct qlcnic_adapter *adapter)
|
|
|
head = &(adapter->fhash.fhead[i]);
|
|
|
|
|
|
hlist_for_each_entry_safe(tmp_fil, tmp_hnode, n, head, fnode) {
|
|
|
- qlcnic_sre_macaddr_change(adapter,
|
|
|
- tmp_fil->faddr, QLCNIC_MAC_DEL);
|
|
|
+ qlcnic_sre_macaddr_change(adapter, tmp_fil->faddr,
|
|
|
+ tmp_fil->vlan_id, tmp_fil->vlan_id ?
|
|
|
+ QLCNIC_MAC_VLAN_DEL : QLCNIC_MAC_DEL);
|
|
|
spin_lock_bh(&adapter->mac_learn_lock);
|
|
|
adapter->fhash.fnum--;
|
|
|
hlist_del(&tmp_fil->fnode);
|