mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 01:49:36 +00:00
cfg80211: Support all iftypes in autodisconnect_wk
Currently autodisconnect_wk assumes that only interface types of P2P_CLIENT and STATION use conn_owner_nlportid. Change this so all interface types are supported. Signed-off-by: Denis Kenzior <denkenz@gmail.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
2c390e44e4
commit
37b1c00468
1 changed files with 32 additions and 11 deletions
|
@ -1239,17 +1239,38 @@ void cfg80211_autodisconnect_wk(struct work_struct *work)
|
|||
wdev_lock(wdev);
|
||||
|
||||
if (wdev->conn_owner_nlportid) {
|
||||
/*
|
||||
* Use disconnect_bssid if still connecting and ops->disconnect
|
||||
* not implemented. Otherwise we can use cfg80211_disconnect.
|
||||
*/
|
||||
if (rdev->ops->disconnect || wdev->current_bss)
|
||||
cfg80211_disconnect(rdev, wdev->netdev,
|
||||
WLAN_REASON_DEAUTH_LEAVING, true);
|
||||
else
|
||||
cfg80211_mlme_deauth(rdev, wdev->netdev,
|
||||
wdev->disconnect_bssid, NULL, 0,
|
||||
WLAN_REASON_DEAUTH_LEAVING, false);
|
||||
switch (wdev->iftype) {
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
cfg80211_leave_ibss(rdev, wdev->netdev, false);
|
||||
break;
|
||||
case NL80211_IFTYPE_AP:
|
||||
case NL80211_IFTYPE_P2P_GO:
|
||||
cfg80211_stop_ap(rdev, wdev->netdev, false);
|
||||
break;
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
cfg80211_leave_mesh(rdev, wdev->netdev);
|
||||
break;
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_P2P_CLIENT:
|
||||
/*
|
||||
* Use disconnect_bssid if still connecting and
|
||||
* ops->disconnect not implemented. Otherwise we can
|
||||
* use cfg80211_disconnect.
|
||||
*/
|
||||
if (rdev->ops->disconnect || wdev->current_bss)
|
||||
cfg80211_disconnect(rdev, wdev->netdev,
|
||||
WLAN_REASON_DEAUTH_LEAVING,
|
||||
true);
|
||||
else
|
||||
cfg80211_mlme_deauth(rdev, wdev->netdev,
|
||||
wdev->disconnect_bssid,
|
||||
NULL, 0,
|
||||
WLAN_REASON_DEAUTH_LEAVING,
|
||||
false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
wdev_unlock(wdev);
|
||||
|
|
Loading…
Reference in a new issue