qtnfmac: cleanup wdev structure between its uses
Driver uses statically allocated wdev structures for each virtual interface. However wdev structure is not properly cleaned up between its uses. As a result, various bugs appear when userspace tools like hostapd were not gracefully stopped. In particular, this commit fixes the following issue: - start hostapd with more than 2 mBSS - kill hostapd using SIGKILL - start again hostapd with more than 2 mBSS However only two mBSS entities will be started: primary and the last BSS listed in hostapd config. Signed-off-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
36e8c538b3
commit
9a3beeb5b7
@ -177,8 +177,6 @@ int qtnf_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
vif->netdev->ieee80211_ptr = NULL;
|
||||
vif->netdev = NULL;
|
||||
vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
||||
eth_zero_addr(vif->mac_addr);
|
||||
eth_zero_addr(vif->bssid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -216,10 +214,12 @@ static struct wireless_dev *qtnf_add_virtual_intf(struct wiphy *wiphy,
|
||||
}
|
||||
|
||||
eth_zero_addr(vif->mac_addr);
|
||||
eth_zero_addr(vif->bssid);
|
||||
vif->bss_priority = QTNF_DEF_BSS_PRIORITY;
|
||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
||||
memset(&vif->wdev, 0, sizeof(vif->wdev));
|
||||
vif->wdev.wiphy = wiphy;
|
||||
vif->wdev.iftype = type;
|
||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
||||
break;
|
||||
default:
|
||||
pr_err("MAC%u: unsupported IF type %d\n", mac->macid, type);
|
||||
@ -255,8 +255,6 @@ err_mac:
|
||||
qtnf_cmd_send_del_intf(vif);
|
||||
err_cmd:
|
||||
vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
||||
eth_zero_addr(vif->mac_addr);
|
||||
eth_zero_addr(vif->bssid);
|
||||
|
||||
return ERR_PTR(-EFAULT);
|
||||
}
|
||||
|
@ -394,7 +394,6 @@ int qtnf_core_net_attach(struct qtnf_wmac *mac, struct qtnf_vif *vif,
|
||||
dev = alloc_netdev_mqs(sizeof(struct qtnf_vif *), name,
|
||||
name_assign_type, ether_setup, 1, 1);
|
||||
if (!dev) {
|
||||
memset(&vif->wdev, 0, sizeof(vif->wdev));
|
||||
vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user