void sme_sa_query_rx(struct wpa_supplicant *wpa_s, const u8 *sa, const u8 *data, size_t len) { int i; if (wpa_s->sme.sa_query_trans_id == NULL || len < 1 + WLAN_SA_QUERY_TR_ID_LEN || data[0] != WLAN_SA_QUERY_RESPONSE) return; wpa_dbg(wpa_s, MSG_DEBUG, "SME: Received SA Query response from " MACSTR " (trans_id %02x%02x)", MAC2STR(sa), data[1], data[2]); if (os_memcmp(sa, wpa_s->bssid, ETH_ALEN) != 0) return; for (i = 0; i < wpa_s->sme.sa_query_count; i++) { if (os_memcmp(wpa_s->sme.sa_query_trans_id + i * WLAN_SA_QUERY_TR_ID_LEN, data + 1, WLAN_SA_QUERY_TR_ID_LEN) == 0) break; } if (i >= wpa_s->sme.sa_query_count) { wpa_dbg(wpa_s, MSG_DEBUG, "SME: No matching SA Query " "transaction identifier found"); return; } wpa_dbg(wpa_s, MSG_DEBUG, "SME: Reply to pending SA Query received " "from " MACSTR, MAC2STR(sa)); sme_stop_sa_query(wpa_s); }
void sme_deinit(struct wpa_supplicant *wpa_s) { os_free(wpa_s->sme.ft_ies); wpa_s->sme.ft_ies = NULL; wpa_s->sme.ft_ies_len = 0; #ifdef CONFIG_IEEE80211W sme_stop_sa_query(wpa_s); #endif /* CONFIG_IEEE80211W */ eloop_cancel_timeout(sme_assoc_timer, wpa_s, NULL); eloop_cancel_timeout(sme_auth_timer, wpa_s, NULL); }
static int sme_check_sa_query_timeout(struct wpa_supplicant *wpa_s) { u32 tu; struct os_time now, passed; os_get_time(&now); os_time_sub(&now, &wpa_s->sme.sa_query_start, &passed); tu = (passed.sec * 1000000 + passed.usec) / 1024; if (sa_query_max_timeout < tu) { wpa_dbg(wpa_s, MSG_DEBUG, "SME: SA Query timed out"); sme_stop_sa_query(wpa_s); wpa_supplicant_deauthenticate( wpa_s, WLAN_REASON_PREV_AUTH_NOT_VALID); return 1; } return 0; }
void sme_deinit(struct wpa_supplicant *wpa_s) { os_free(wpa_s->sme.ft_ies); wpa_s->sme.ft_ies = NULL; wpa_s->sme.ft_ies_len = 0; #ifdef CONFIG_IEEE80211W sme_stop_sa_query(wpa_s); #endif /* CONFIG_IEEE80211W */ #ifdef CONFIG_SAE wpabuf_free(wpa_s->sme.sae_token); wpa_s->sme.sae_token = NULL; sae_clear_data(&wpa_s->sme.sae); #endif /* CONFIG_SAE */ eloop_cancel_timeout(sme_assoc_timer, wpa_s, NULL); eloop_cancel_timeout(sme_auth_timer, wpa_s, NULL); eloop_cancel_timeout(sme_obss_scan_timeout, wpa_s, NULL); }