|
@@ -2579,7 +2579,9 @@ static int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
|
|
|
drv->capa.flags |= WPA_DRIVER_FLAGS_SANE_ERROR_CODES;
|
|
|
drv->capa.flags |= WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE;
|
|
|
drv->capa.flags |= WPA_DRIVER_FLAGS_EAPOL_TX_STATUS;
|
|
|
- drv->capa.flags |= WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS;
|
|
|
+
|
|
|
+ if (!info.device_ap_sme)
|
|
|
+ drv->capa.flags |= WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS;
|
|
|
|
|
|
drv->device_ap_sme = info.device_ap_sme;
|
|
|
drv->poll_command_supported = info.poll_command_supported;
|
|
@@ -7399,8 +7401,12 @@ static int i802_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
|
|
|
int reason)
|
|
|
{
|
|
|
struct i802_bss *bss = priv;
|
|
|
+ struct wpa_driver_nl80211_data *drv = bss->drv;
|
|
|
struct ieee80211_mgmt mgmt;
|
|
|
|
|
|
+ if (drv->device_ap_sme)
|
|
|
+ return wpa_driver_nl80211_sta_remove(bss, addr);
|
|
|
+
|
|
|
memset(&mgmt, 0, sizeof(mgmt));
|
|
|
mgmt.frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT,
|
|
|
WLAN_FC_STYPE_DEAUTH);
|
|
@@ -7418,8 +7424,12 @@ static int i802_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
|
|
|
int reason)
|
|
|
{
|
|
|
struct i802_bss *bss = priv;
|
|
|
+ struct wpa_driver_nl80211_data *drv = bss->drv;
|
|
|
struct ieee80211_mgmt mgmt;
|
|
|
|
|
|
+ if (drv->device_ap_sme)
|
|
|
+ return wpa_driver_nl80211_sta_remove(bss, addr);
|
|
|
+
|
|
|
memset(&mgmt, 0, sizeof(mgmt));
|
|
|
mgmt.frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT,
|
|
|
WLAN_FC_STYPE_DISASSOC);
|