]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - src/ap/sta_info.c
Update STA flags to the driver immediately on disconnection
[thirdparty/hostap.git] / src / ap / sta_info.c
index d3aa15da301a4a491e10b9d24c667c6d733abddb..903be28d46db3cc9297a071aac28dc278478575c 100644 (file)
@@ -164,6 +164,7 @@ void ap_free_sta(struct hostapd_data *hapd, struct sta_info *sta)
 
        /* just in case */
        ap_sta_set_authorized(hapd, sta, 0);
+       hostapd_set_sta_flags(hapd, sta);
 
        if (sta->flags & (WLAN_STA_WDS | WLAN_STA_MULTI_AP))
                hostapd_set_wds_sta(hapd, NULL, sta->addr, sta->aid, 0);
@@ -544,6 +545,7 @@ skip_poll:
        case STA_DISASSOC_FROM_CLI:
                ap_sta_set_authorized(hapd, sta, 0);
                sta->flags &= ~WLAN_STA_ASSOC;
+               hostapd_set_sta_flags(hapd, sta);
                ieee802_1x_notify_port_enabled(sta->eapol_sm, 0);
                if (!sta->acct_terminate_cause)
                        sta->acct_terminate_cause =
@@ -812,6 +814,7 @@ void ap_sta_disassociate(struct hostapd_data *hapd, struct sta_info *sta,
                sta->timeout_next = STA_DEAUTH;
        }
        ap_sta_set_authorized(hapd, sta, 0);
+       hostapd_set_sta_flags(hapd, sta);
        wpa_printf(MSG_DEBUG, "%s: reschedule ap_handle_timer timeout "
                   "for " MACSTR " (%d seconds - "
                   "AP_MAX_INACTIVITY_AFTER_DISASSOC)",
@@ -862,6 +865,7 @@ void ap_sta_deauthenticate(struct hostapd_data *hapd, struct sta_info *sta,
        sta->last_seq_ctrl = WLAN_INVALID_MGMT_SEQ;
        sta->flags &= ~(WLAN_STA_AUTH | WLAN_STA_ASSOC | WLAN_STA_ASSOC_REQ_OK);
        ap_sta_set_authorized(hapd, sta, 0);
+       hostapd_set_sta_flags(hapd, sta);
        sta->timeout_next = STA_REMOVE;
        wpa_printf(MSG_DEBUG, "%s: reschedule ap_handle_timer timeout "
                   "for " MACSTR " (%d seconds - "
@@ -1329,9 +1333,10 @@ void ap_sta_disconnect(struct hostapd_data *hapd, struct sta_info *sta,
        if (sta == NULL)
                return;
        ap_sta_set_authorized(hapd, sta, 0);
+       sta->flags &= ~(WLAN_STA_AUTH | WLAN_STA_ASSOC);
+       hostapd_set_sta_flags(hapd, sta);
        wpa_auth_sm_event(sta->wpa_sm, WPA_DEAUTH);
        ieee802_1x_notify_port_enabled(sta->eapol_sm, 0);
-       sta->flags &= ~(WLAN_STA_AUTH | WLAN_STA_ASSOC);
        wpa_printf(MSG_DEBUG, "%s: %s: reschedule ap_handle_timer timeout "
                   "for " MACSTR " (%d seconds - "
                   "AP_MAX_INACTIVITY_AFTER_DEAUTH)",