Lines Matching refs:sta
47 struct sta_info *sta, int success,
51 static void ieee802_1x_send(struct hostapd_data *hapd, struct sta_info *sta, in ieee802_1x_send() argument
79 if (wpa_auth_pairwise_set(sta->wpa_sm)) in ieee802_1x_send()
90 MAC2STR(sta->addr), hex); in ieee802_1x_send()
95 if (sta->flags & WLAN_STA_PREAUTH) { in ieee802_1x_send()
96 rsn_preauth_send(hapd, sta, buf, len); in ieee802_1x_send()
104 hapd, sta->addr, buf, len, in ieee802_1x_send()
105 encrypt, hostapd_sta_flags_to_drv(sta->flags), link_id); in ieee802_1x_send()
113 struct sta_info *sta, in ieee802_1x_set_authorized() argument
119 if (sta->flags & WLAN_STA_PREAUTH) in ieee802_1x_set_authorized()
122 update = ap_sta_set_authorized_flag(hapd, sta, authorized); in ieee802_1x_set_authorized()
123 res = hostapd_set_authorized(hapd, sta, authorized); in ieee802_1x_set_authorized()
125 ap_sta_set_authorized_event(hapd, sta, authorized); in ieee802_1x_set_authorized()
126 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_set_authorized()
133 MAC2STR(sta->addr), errno); in ieee802_1x_set_authorized()
137 MAC2STR(sta->addr)); in ieee802_1x_set_authorized()
141 os_get_reltime(&sta->connected_time); in ieee802_1x_set_authorized()
142 accounting_sta_start(hapd, sta); in ieee802_1x_set_authorized()
148 struct sta_info *sta, in ieee802_1x_ml_set_sta_authorized() argument
161 if (authorized && hapd->mld_link_id != sta->mld_assoc_link_id) in ieee802_1x_ml_set_sta_authorized()
165 struct mld_link_info *link = &sta->mld_info.links[link_id]; in ieee802_1x_ml_set_sta_authorized()
180 if (tmp_sta == sta || in ieee802_1x_ml_set_sta_authorized()
182 sta->mld_assoc_link_id || in ieee802_1x_ml_set_sta_authorized()
183 tmp_sta->aid != sta->aid) in ieee802_1x_ml_set_sta_authorized()
198 struct sta_info *sta, int authorized) in ieee802_1x_set_sta_authorized() argument
200 ieee802_1x_set_authorized(hapd, sta, authorized, false); in ieee802_1x_set_sta_authorized()
201 ieee802_1x_ml_set_sta_authorized(hapd, sta, !!authorized); in ieee802_1x_set_sta_authorized()
210 struct sta_info *sta, in ieee802_1x_tx_key_one() argument
218 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_tx_key_one()
300 ieee802_1x_send(hapd, sta, IEEE802_1X_TYPE_EAPOL_KEY, (u8 *) key, len); in ieee802_1x_tx_key_one()
301 if (sta->eapol_sm) in ieee802_1x_tx_key_one()
302 sta->eapol_sm->dot1xAuthEapolFramesTx++; in ieee802_1x_tx_key_one()
307 static void ieee802_1x_tx_key(struct hostapd_data *hapd, struct sta_info *sta) in ieee802_1x_tx_key() argument
310 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_tx_key()
316 MAC2STR(sta->addr)); in ieee802_1x_tx_key()
319 if (sta->vlan_id > 0) { in ieee802_1x_tx_key()
326 ieee802_1x_tx_key_one(hapd, sta, eapol->default_wep_key_idx, 1, in ieee802_1x_tx_key()
347 ieee802_1x_tx_key_one(hapd, sta, 0, 0, ikey, in ieee802_1x_tx_key()
353 sta->addr, 0, 0, 1, NULL, 0, ikey, in ieee802_1x_tx_key()
385 int radius_sta_rate(struct hostapd_data *hapd, struct sta_info *sta) in radius_sta_rate() argument
390 for (i = 0; i < sta->supported_rates_len; i++) in radius_sta_rate()
391 if ((sta->supported_rates[i] & 0x7f) > rate) in radius_sta_rate()
392 rate = sta->supported_rates[i] & 0x7f; in radius_sta_rate()
438 struct sta_info *sta, in add_common_radius_sta_attr_rsn() argument
444 ver = wpa_auth_sta_wpa_version(sta->wpa_sm); in add_common_radius_sta_attr_rsn()
445 val = wpa_auth_get_pairwise(sta->wpa_sm); in add_common_radius_sta_attr_rsn()
468 val = wpa_auth_sta_key_mgmt(sta->wpa_sm); in add_common_radius_sta_attr_rsn()
498 struct sta_info *sta, in add_common_radius_sta_attr() argument
513 sta->aid > 0 && in add_common_radius_sta_attr()
514 !radius_msg_add_attr_int32(msg, RADIUS_ATTR_NAS_PORT, sta->aid)) { in add_common_radius_sta_attr()
520 MAC2STR(sta->addr)); in add_common_radius_sta_attr()
528 if (sta->flags & WLAN_STA_PREAUTH) { in add_common_radius_sta_attr()
533 radius_sta_rate(hapd, sta) / 2, in add_common_radius_sta_attr()
534 (radius_sta_rate(hapd, sta) & 1) ? ".5" : "", in add_common_radius_sta_attr()
546 if (sta->acct_session_id) { in add_common_radius_sta_attr()
548 (unsigned long long) sta->acct_session_id); in add_common_radius_sta_attr()
558 sta->eapol_sm && sta->eapol_sm->acct_multi_session_id) { in add_common_radius_sta_attr()
561 sta->eapol_sm->acct_multi_session_id); in add_common_radius_sta_attr()
573 sta->wpa_sm && in add_common_radius_sta_attr()
574 (wpa_key_mgmt_ft(wpa_auth_sta_key_mgmt(sta->wpa_sm)) || in add_common_radius_sta_attr()
575 sta->auth_alg == WLAN_AUTH_FT) && in add_common_radius_sta_attr()
586 if ((hapd->conf->wpa || hapd->conf->osen) && sta->wpa_sm && in add_common_radius_sta_attr()
587 add_common_radius_sta_attr_rsn(hapd, req_attr, sta, msg) < 0) in add_common_radius_sta_attr()
596 struct sta_info *sta, in add_common_radius_attr() argument
670 if (sta && add_common_radius_sta_attr(hapd, req_attr, sta, msg) < 0) in add_common_radius_attr()
686 int add_sqlite_radius_attr(struct hostapd_data *hapd, struct sta_info *sta, in add_sqlite_radius_attr() argument
698 os_snprintf(addrtxt, sizeof(addrtxt), MACSTR, MAC2STR(sta->addr)); in add_sqlite_radius_attr()
744 struct sta_info *sta, in ieee802_1x_encapsulate_radius() argument
748 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_encapsulate_radius()
780 if (add_common_radius_attr(hapd, hapd->conf->radius_auth_req_attr, sta, in ieee802_1x_encapsulate_radius()
784 if (sta && add_sqlite_radius_attr(hapd, sta, msg, 0) < 0) in ieee802_1x_encapsulate_radius()
849 if (sta->hs20_ie && wpabuf_len(sta->hs20_ie) > 0) { in ieee802_1x_encapsulate_radius()
854 pos = wpabuf_head_u8(sta->hs20_ie); in ieee802_1x_encapsulate_radius()
857 wpabuf_len(sta->hs20_ie) >= 3) in ieee802_1x_encapsulate_radius()
872 if (sta->roaming_consortium && in ieee802_1x_encapsulate_radius()
875 wpabuf_head(sta->roaming_consortium), in ieee802_1x_encapsulate_radius()
876 wpabuf_len(sta->roaming_consortium))) { in ieee802_1x_encapsulate_radius()
909 if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, sta->addr) < 0) in ieee802_1x_encapsulate_radius()
921 struct sta_info *sta, struct eap_hdr *eap, in handle_eap_response() argument
925 struct eapol_state_machine *sm = sta->eapol_sm; in handle_eap_response()
954 struct sta_info *sta, struct eap_hdr *eap, in handle_eap_initiate() argument
959 struct eapol_state_machine *sm = sta->eapol_sm; in handle_eap_initiate()
1009 static void handle_eap(struct hostapd_data *hapd, struct sta_info *sta, in handle_eap() argument
1041 handle_eap_response(hapd, sta, eap, eap_len); in handle_eap()
1044 handle_eap_initiate(hapd, sta, eap, eap_len); in handle_eap()
1051 ieee802_1x_alloc_eapol_sm(struct hostapd_data *hapd, struct sta_info *sta) in ieee802_1x_alloc_eapol_sm() argument
1055 if (sta->flags & WLAN_STA_PREAUTH) in ieee802_1x_alloc_eapol_sm()
1057 if (sta->wpa_sm) { in ieee802_1x_alloc_eapol_sm()
1059 if (wpa_auth_sta_get_pmksa(sta->wpa_sm)) in ieee802_1x_alloc_eapol_sm()
1062 return eapol_auth_alloc(hapd->eapol_auth, sta->addr, flags, in ieee802_1x_alloc_eapol_sm()
1063 sta->wps_ie, sta->p2p_ie, sta, in ieee802_1x_alloc_eapol_sm()
1064 sta->identity, sta->radius_cui); in ieee802_1x_alloc_eapol_sm()
1068 static void ieee802_1x_save_eapol(struct sta_info *sta, const u8 *buf, in ieee802_1x_save_eapol() argument
1071 if (sta->pending_eapol_rx) { in ieee802_1x_save_eapol()
1072 wpabuf_free(sta->pending_eapol_rx->buf); in ieee802_1x_save_eapol()
1074 sta->pending_eapol_rx = in ieee802_1x_save_eapol()
1075 os_malloc(sizeof(*sta->pending_eapol_rx)); in ieee802_1x_save_eapol()
1076 if (!sta->pending_eapol_rx) in ieee802_1x_save_eapol()
1080 sta->pending_eapol_rx->buf = wpabuf_alloc_copy(buf, len); in ieee802_1x_save_eapol()
1081 if (!sta->pending_eapol_rx->buf) { in ieee802_1x_save_eapol()
1082 os_free(sta->pending_eapol_rx); in ieee802_1x_save_eapol()
1083 sta->pending_eapol_rx = NULL; in ieee802_1x_save_eapol()
1087 sta->pending_eapol_rx->encrypted = encrypted; in ieee802_1x_save_eapol()
1088 os_get_reltime(&sta->pending_eapol_rx->rx_time); in ieee802_1x_save_eapol()
1092 static bool ieee802_1x_check_encryption(struct sta_info *sta, in ieee802_1x_check_encryption() argument
1102 if (!(sta->flags & WLAN_STA_MFP)) in ieee802_1x_check_encryption()
1104 return !wpa_auth_pairwise_set(sta->wpa_sm); in ieee802_1x_check_encryption()
1121 struct sta_info *sta; in ieee802_1x_receive() local
1135 sta = ap_get_sta(hapd, sa); in ieee802_1x_receive()
1136 if (!sta || (!(sta->flags & (WLAN_STA_ASSOC | WLAN_STA_PREAUTH)) && in ieee802_1x_receive()
1141 if (sta && (sta->flags & WLAN_STA_AUTH)) { in ieee802_1x_receive()
1143 " for later use", MAC2STR(sta->addr)); in ieee802_1x_receive()
1144 ieee802_1x_save_eapol(sta, buf, len, encrypted); in ieee802_1x_receive()
1163 if (sta->eapol_sm) in ieee802_1x_receive()
1164 sta->eapol_sm->dot1xAuthEapLengthErrorFramesRx++; in ieee802_1x_receive()
1173 if (sta->eapol_sm) { in ieee802_1x_receive()
1174 sta->eapol_sm->dot1xAuthLastEapolFrameVersion = hdr->version; in ieee802_1x_receive()
1175 sta->eapol_sm->dot1xAuthEapolFramesRx++; in ieee802_1x_receive()
1183 wpa_receive(hapd->wpa_auth, sta->wpa_sm, (u8 *) hdr, in ieee802_1x_receive()
1189 !(sta->flags & (WLAN_STA_WPS | WLAN_STA_MAYBE_WPS))) { in ieee802_1x_receive()
1195 key_mgmt = wpa_auth_sta_key_mgmt(sta->wpa_sm); in ieee802_1x_receive()
1204 if (!ieee802_1x_check_encryption(sta, encrypted, hdr->type)) { in ieee802_1x_receive()
1210 if (!sta->eapol_sm) { in ieee802_1x_receive()
1211 sta->eapol_sm = ieee802_1x_alloc_eapol_sm(hapd, sta); in ieee802_1x_receive()
1212 if (!sta->eapol_sm) in ieee802_1x_receive()
1217 u32 wflags = sta->flags & (WLAN_STA_WPS | in ieee802_1x_receive()
1231 sta->eapol_sm->flags |= EAPOL_SM_WAIT_START; in ieee802_1x_receive()
1236 sta->eapol_sm->eap_if->portEnabled = true; in ieee802_1x_receive()
1248 handle_eap(hapd, sta, (u8 *) (hdr + 1), datalen); in ieee802_1x_receive()
1252 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_receive()
1255 sta->eapol_sm->flags &= ~EAPOL_SM_WAIT_START; in ieee802_1x_receive()
1256 pmksa = wpa_auth_sta_get_pmksa(sta->wpa_sm); in ieee802_1x_receive()
1258 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_WPA, in ieee802_1x_receive()
1261 wpa_auth_sta_clear_pmksa(sta->wpa_sm, pmksa); in ieee802_1x_receive()
1263 sta->eapol_sm->eapolStart = true; in ieee802_1x_receive()
1264 sta->eapol_sm->dot1xAuthEapolStartFramesRx++; in ieee802_1x_receive()
1265 eap_server_clear_identity(sta->eapol_sm->eap); in ieee802_1x_receive()
1266 wpa_auth_sm_event(sta->wpa_sm, WPA_REAUTH_EAPOL); in ieee802_1x_receive()
1270 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_receive()
1273 sta->acct_terminate_cause = in ieee802_1x_receive()
1275 accounting_sta_stop(hapd, sta); in ieee802_1x_receive()
1276 sta->eapol_sm->eapolLogoff = true; in ieee802_1x_receive()
1277 sta->eapol_sm->dot1xAuthEapolLogoffFramesRx++; in ieee802_1x_receive()
1278 eap_server_clear_identity(sta->eapol_sm->eap); in ieee802_1x_receive()
1283 if (!ap_sta_is_authorized(sta)) { in ieee802_1x_receive()
1304 sta->eapol_sm->dot1xAuthInvalidEapolFramesRx++; in ieee802_1x_receive()
1308 eapol_auth_step(sta->eapol_sm); in ieee802_1x_receive()
1320 void ieee802_1x_new_station(struct hostapd_data *hapd, struct sta_info *sta) in ieee802_1x_new_station() argument
1329 ((hapd->conf->wpa && (sta->flags & WLAN_STA_MAYBE_WPS)) || in ieee802_1x_new_station()
1330 (sta->flags & WLAN_STA_WPS))) { in ieee802_1x_new_station()
1347 ieee802_1x_free_station(hapd, sta); in ieee802_1x_new_station()
1351 key_mgmt = wpa_auth_sta_key_mgmt(sta->wpa_sm); in ieee802_1x_new_station()
1360 ieee802_1x_free_station(hapd, sta); in ieee802_1x_new_station()
1364 if (!sta->eapol_sm) { in ieee802_1x_new_station()
1365 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_new_station()
1367 sta->eapol_sm = ieee802_1x_alloc_eapol_sm(hapd, sta); in ieee802_1x_new_station()
1368 if (!sta->eapol_sm) { in ieee802_1x_new_station()
1369 hostapd_logger(hapd, sta->addr, in ieee802_1x_new_station()
1379 sta->eapol_sm->flags &= ~EAPOL_SM_WAIT_START; in ieee802_1x_new_station()
1381 !(sta->flags & WLAN_STA_WPS2)) { in ieee802_1x_new_station()
1389 sta->eapol_sm->flags |= EAPOL_SM_WAIT_START; in ieee802_1x_new_station()
1393 sta->eapol_sm->eap_if->portEnabled = true; in ieee802_1x_new_station()
1396 if (sta->auth_alg == WLAN_AUTH_FT) { in ieee802_1x_new_station()
1397 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_new_station()
1402 sta->eapol_sm->keyRun = true; in ieee802_1x_new_station()
1403 sta->eapol_sm->eap_if->eapKeyAvailable = true; in ieee802_1x_new_station()
1404 sta->eapol_sm->auth_pae_state = AUTH_PAE_AUTHENTICATING; in ieee802_1x_new_station()
1405 sta->eapol_sm->be_auth_state = BE_AUTH_SUCCESS; in ieee802_1x_new_station()
1406 sta->eapol_sm->authSuccess = true; in ieee802_1x_new_station()
1407 sta->eapol_sm->authFail = false; in ieee802_1x_new_station()
1408 sta->eapol_sm->portValid = true; in ieee802_1x_new_station()
1409 if (sta->eapol_sm->eap) in ieee802_1x_new_station()
1410 eap_sm_notify_cached(sta->eapol_sm->eap); in ieee802_1x_new_station()
1411 ap_sta_bind_vlan(hapd, sta); in ieee802_1x_new_station()
1417 if (sta->auth_alg == WLAN_AUTH_FILS_SK || in ieee802_1x_new_station()
1418 sta->auth_alg == WLAN_AUTH_FILS_SK_PFS || in ieee802_1x_new_station()
1419 sta->auth_alg == WLAN_AUTH_FILS_PK) { in ieee802_1x_new_station()
1420 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_new_station()
1425 sta->eapol_sm->keyRun = true; in ieee802_1x_new_station()
1426 sta->eapol_sm->eap_if->eapKeyAvailable = true; in ieee802_1x_new_station()
1427 sta->eapol_sm->auth_pae_state = AUTH_PAE_AUTHENTICATING; in ieee802_1x_new_station()
1428 sta->eapol_sm->be_auth_state = BE_AUTH_SUCCESS; in ieee802_1x_new_station()
1429 sta->eapol_sm->authSuccess = true; in ieee802_1x_new_station()
1430 sta->eapol_sm->authFail = false; in ieee802_1x_new_station()
1431 sta->eapol_sm->portValid = true; in ieee802_1x_new_station()
1432 if (sta->eapol_sm->eap) in ieee802_1x_new_station()
1433 eap_sm_notify_cached(sta->eapol_sm->eap); in ieee802_1x_new_station()
1434 wpa_auth_set_ptk_rekey_timer(sta->wpa_sm); in ieee802_1x_new_station()
1439 pmksa = wpa_auth_sta_get_pmksa(sta->wpa_sm); in ieee802_1x_new_station()
1441 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_new_station()
1446 sta->eapol_sm->keyRun = true; in ieee802_1x_new_station()
1447 sta->eapol_sm->eap_if->eapKeyAvailable = true; in ieee802_1x_new_station()
1448 sta->eapol_sm->auth_pae_state = AUTH_PAE_AUTHENTICATING; in ieee802_1x_new_station()
1449 sta->eapol_sm->be_auth_state = BE_AUTH_SUCCESS; in ieee802_1x_new_station()
1450 sta->eapol_sm->authSuccess = true; in ieee802_1x_new_station()
1451 sta->eapol_sm->authFail = false; in ieee802_1x_new_station()
1452 if (sta->eapol_sm->eap) in ieee802_1x_new_station()
1453 eap_sm_notify_cached(sta->eapol_sm->eap); in ieee802_1x_new_station()
1454 pmksa_cache_to_eapol_data(hapd, pmksa, sta->eapol_sm); in ieee802_1x_new_station()
1455 ap_sta_bind_vlan(hapd, sta); in ieee802_1x_new_station()
1463 sta->eapol_sm->reAuthenticate = true; in ieee802_1x_new_station()
1465 eapol_auth_step(sta->eapol_sm); in ieee802_1x_new_station()
1470 void ieee802_1x_free_station(struct hostapd_data *hapd, struct sta_info *sta) in ieee802_1x_free_station() argument
1472 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_free_station()
1475 eloop_cancel_timeout(ieee802_1x_wnm_notif_send, hapd, sta); in ieee802_1x_free_station()
1478 if (sta->pending_eapol_rx) { in ieee802_1x_free_station()
1479 wpabuf_free(sta->pending_eapol_rx->buf); in ieee802_1x_free_station()
1480 os_free(sta->pending_eapol_rx); in ieee802_1x_free_station()
1481 sta->pending_eapol_rx = NULL; in ieee802_1x_free_station()
1487 sta->eapol_sm = NULL; in ieee802_1x_free_station()
1500 struct sta_info *sta) in ieee802_1x_decapsulate_radius() argument
1507 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_decapsulate_radius()
1522 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_decapsulate_radius()
1530 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_decapsulate_radius()
1564 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_decapsulate_radius()
1577 struct sta_info *sta, struct radius_msg *msg, in ieee802_1x_get_keys() argument
1585 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_get_keys()
1640 struct sta_info *sta, in ieee802_1x_store_radius_class() argument
1645 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_store_radius_class()
1689 MAC2STR(sta->addr)); in ieee802_1x_store_radius_class()
1695 struct sta_info *sta, in ieee802_1x_update_sta_identity() argument
1700 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_update_sta_identity()
1713 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_update_sta_identity()
1727 struct sta_info *sta, in ieee802_1x_update_sta_cui() argument
1730 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_update_sta_cui()
1753 static void ieee802_1x_hs20_sub_rem(struct sta_info *sta, u8 *pos, size_t len) in ieee802_1x_hs20_sub_rem() argument
1755 sta->remediation = 1; in ieee802_1x_hs20_sub_rem()
1756 os_free(sta->remediation_url); in ieee802_1x_hs20_sub_rem()
1758 sta->remediation_url = os_malloc(len); in ieee802_1x_hs20_sub_rem()
1759 if (!sta->remediation_url) in ieee802_1x_hs20_sub_rem()
1761 sta->remediation_method = pos[0]; in ieee802_1x_hs20_sub_rem()
1762 os_memcpy(sta->remediation_url, pos + 1, len - 1); in ieee802_1x_hs20_sub_rem()
1763 sta->remediation_url[len - 1] = '\0'; in ieee802_1x_hs20_sub_rem()
1767 MAC2STR(sta->addr), sta->remediation_method, in ieee802_1x_hs20_sub_rem()
1768 sta->remediation_url); in ieee802_1x_hs20_sub_rem()
1770 sta->remediation_url = NULL; in ieee802_1x_hs20_sub_rem()
1773 MACSTR, MAC2STR(sta->addr)); in ieee802_1x_hs20_sub_rem()
1780 struct sta_info *sta, const u8 *pos, in ieee802_1x_hs20_deauth_req() argument
1789 sta->hs20_deauth_requested = 1; in ieee802_1x_hs20_deauth_req()
1790 sta->hs20_deauth_on_ack = url_len == 0; in ieee802_1x_hs20_deauth_req()
1794 wpabuf_free(sta->hs20_deauth_req); in ieee802_1x_hs20_deauth_req()
1795 sta->hs20_deauth_req = wpabuf_alloc(len + 1); in ieee802_1x_hs20_deauth_req()
1796 if (sta->hs20_deauth_req) { in ieee802_1x_hs20_deauth_req()
1797 wpabuf_put_data(sta->hs20_deauth_req, pos, 3); in ieee802_1x_hs20_deauth_req()
1798 wpabuf_put_u8(sta->hs20_deauth_req, url_len); in ieee802_1x_hs20_deauth_req()
1799 wpabuf_put_data(sta->hs20_deauth_req, pos + 3, url_len); in ieee802_1x_hs20_deauth_req()
1808 ap_sta_session_timeout(hapd, sta, timeout); in ieee802_1x_hs20_deauth_req()
1813 struct sta_info *sta, u8 *pos, in ieee802_1x_hs20_session_info() argument
1821 os_free(sta->hs20_session_info_url); in ieee802_1x_hs20_session_info()
1822 sta->hs20_session_info_url = os_malloc(len); in ieee802_1x_hs20_session_info()
1823 if (!sta->hs20_session_info_url) in ieee802_1x_hs20_session_info()
1826 os_memcpy(sta->hs20_session_info_url, pos + 1, len - 1); in ieee802_1x_hs20_session_info()
1827 sta->hs20_session_info_url[len - 1] = '\0'; in ieee802_1x_hs20_session_info()
1830 sta->hs20_session_info_url, swt, session_timeout); in ieee802_1x_hs20_session_info()
1847 sta->hs20_disassoc_timer = swt * 60 * 1000 / beacon_int * 125 / 128; in ieee802_1x_hs20_session_info()
1848 if (sta->hs20_disassoc_timer > 65535) in ieee802_1x_hs20_session_info()
1849 sta->hs20_disassoc_timer = 65535; in ieee802_1x_hs20_session_info()
1851 ap_sta_session_warning_timeout(hapd, sta, warning_time); in ieee802_1x_hs20_session_info()
1856 struct sta_info *sta, u8 *pos, in ieee802_1x_hs20_t_c_filtering() argument
1864 hs20_t_c_filtering(hapd, sta, pos[0] & BIT(0)); in ieee802_1x_hs20_t_c_filtering()
1869 struct sta_info *sta, u8 *pos, size_t len) in ieee802_1x_hs20_t_c_url() argument
1871 os_free(sta->t_c_url); in ieee802_1x_hs20_t_c_url()
1872 sta->t_c_url = os_malloc(len + 1); in ieee802_1x_hs20_t_c_url()
1873 if (!sta->t_c_url) in ieee802_1x_hs20_t_c_url()
1875 os_memcpy(sta->t_c_url, pos, len); in ieee802_1x_hs20_t_c_url()
1876 sta->t_c_url[len] = '\0'; in ieee802_1x_hs20_t_c_url()
1878 "HS 2.0: Terms and Conditions URL %s", sta->t_c_url); in ieee802_1x_hs20_t_c_url()
1885 struct sta_info *sta, in ieee802_1x_check_hs20() argument
1894 sta->remediation = 0; in ieee802_1x_check_hs20()
1895 sta->hs20_deauth_requested = 0; in ieee802_1x_check_hs20()
1896 sta->hs20_deauth_on_ack = 0; in ieee802_1x_check_hs20()
1920 ieee802_1x_hs20_sub_rem(sta, pos, sublen); in ieee802_1x_check_hs20()
1923 ieee802_1x_hs20_deauth_req(hapd, sta, pos, sublen); in ieee802_1x_check_hs20()
1926 ieee802_1x_hs20_session_info(hapd, sta, pos, sublen, in ieee802_1x_check_hs20()
1930 ieee802_1x_hs20_t_c_filtering(hapd, sta, pos, sublen); in ieee802_1x_check_hs20()
1933 ieee802_1x_hs20_t_c_url(hapd, sta, pos, sublen); in ieee802_1x_check_hs20()
1948 struct sta_info *sta, in ieee802_1x_select_radius_identifier() argument
1952 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_select_radius_identifier()
1978 struct sta_info *sta) in ieee802_1x_update_vlan() argument
1989 sta->eapol_sm->authFail = true; in ieee802_1x_update_vlan()
1990 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_RADIUS, in ieee802_1x_update_vlan()
1996 ap_sta_set_vlan(hapd, sta, &vlan_desc); in ieee802_1x_update_vlan()
2002 sta->eapol_sm->authFail = true; in ieee802_1x_update_vlan()
2003 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_update_vlan()
2009 return ap_sta_set_vlan(hapd, sta, &vlan_desc); in ieee802_1x_update_vlan()
2029 struct sta_info *sta; in ieee802_1x_receive_auth() local
2043 sta = sm->sta; in ieee802_1x_receive_auth()
2060 MAC2STR(sta->addr)); in ieee802_1x_receive_auth()
2077 hostapd_logger(hapd, sta->addr, in ieee802_1x_receive_auth()
2083 sta->acct_interim_interval = acct_interim_interval; in ieee802_1x_receive_auth()
2091 ieee802_1x_update_vlan(msg, hapd, sta) < 0) in ieee802_1x_receive_auth()
2094 if (sta->vlan_id > 0) { in ieee802_1x_receive_auth()
2095 hostapd_logger(hapd, sta->addr, in ieee802_1x_receive_auth()
2098 "VLAN ID %d", sta->vlan_id); in ieee802_1x_receive_auth()
2101 if ((sta->flags & WLAN_STA_ASSOC) && in ieee802_1x_receive_auth()
2102 ap_sta_bind_vlan(hapd, sta) < 0) in ieee802_1x_receive_auth()
2106 sta->session_timeout_set = !!session_timeout_set; in ieee802_1x_receive_auth()
2107 os_get_reltime(&sta->session_timeout); in ieee802_1x_receive_auth()
2108 sta->session_timeout.sec += session_timeout; in ieee802_1x_receive_auth()
2115 ap_sta_session_timeout(hapd, sta, session_timeout); in ieee802_1x_receive_auth()
2117 ap_sta_no_session_timeout(hapd, sta); in ieee802_1x_receive_auth()
2121 ieee802_1x_get_keys(hapd, sta, msg, req, shared_secret, in ieee802_1x_receive_auth()
2123 ieee802_1x_store_radius_class(hapd, sta, msg); in ieee802_1x_receive_auth()
2124 ieee802_1x_update_sta_identity(hapd, sta, msg); in ieee802_1x_receive_auth()
2125 ieee802_1x_update_sta_cui(hapd, sta, msg); in ieee802_1x_receive_auth()
2126 ieee802_1x_check_hs20(hapd, sta, msg, in ieee802_1x_receive_auth()
2137 MACSTR, reason_code, MAC2STR(sta->addr)); in ieee802_1x_receive_auth()
2138 sta->disconnect_reason_code = reason_code; in ieee802_1x_receive_auth()
2161 ieee802_1x_decapsulate_radius(hapd, sta); in ieee802_1x_receive_auth()
2167 if (sta->flags & in ieee802_1x_receive_auth()
2171 hapd, sta, hdr->code == RADIUS_CODE_ACCESS_ACCEPT, in ieee802_1x_receive_auth()
2186 void ieee802_1x_abort_auth(struct hostapd_data *hapd, struct sta_info *sta) in ieee802_1x_abort_auth() argument
2188 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_abort_auth()
2193 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_abort_auth()
2208 MAC2STR(sta->addr)); in ieee802_1x_abort_auth()
2211 ap_sta_disconnect(hapd, sta, sta->addr, in ieee802_1x_abort_auth()
2246 struct sta_info *sta, void *ctx) in ieee802_1x_sta_key_available() argument
2248 if (sta->eapol_sm) { in ieee802_1x_sta_key_available()
2249 sta->eapol_sm->eap_if->eapKeyAvailable = true; in ieee802_1x_sta_key_available()
2250 eapol_auth_step(sta->eapol_sm); in ieee802_1x_sta_key_available()
2310 struct sta_info *sta = sta_ctx; in ieee802_1x_eapol_send() local
2312 if ((sta->flags & (WLAN_STA_WPS | WLAN_STA_MAYBE_WPS)) == in ieee802_1x_eapol_send()
2316 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_eapol_send()
2328 sta->flags |= WLAN_STA_WPS; in ieee802_1x_eapol_send()
2342 struct sta_info *sta = sta_ctx; in ieee802_1x_aaa_send() local
2344 ieee802_1x_encapsulate_radius(hapd, sta, data, datalen); in ieee802_1x_aaa_send()
2353 struct sta_info *sta = sta_ctx; in _ieee802_1x_finished() local
2356 rsn_preauth_finished(hapd, sta, success); in _ieee802_1x_finished()
2360 return ieee802_1x_finished(hapd, sta, success, remediation, logoff); in _ieee802_1x_finished()
2416 struct sta_info *sta; in ieee802_1x_sta_entry_alive() local
2418 sta = ap_get_sta(hapd, addr); in ieee802_1x_sta_entry_alive()
2419 if (!sta || !sta->eapol_sm) in ieee802_1x_sta_entry_alive()
2455 struct sta_info *sta = sta_ctx; in ieee802_1x_set_port_authorized() local
2457 ieee802_1x_set_sta_authorized(hapd, sta, authorized); in ieee802_1x_set_port_authorized()
2464 struct sta_info *sta = sta_ctx; in _ieee802_1x_abort_auth() local
2466 ieee802_1x_abort_auth(hapd, sta); in _ieee802_1x_abort_auth()
2476 struct sta_info *sta = sta_ctx; in _ieee802_1x_tx_key() local
2478 ieee802_1x_tx_key(hapd, sta); in _ieee802_1x_tx_key()
2489 struct sta_info *sta = sta_ctx; in ieee802_1x_eapol_event() local
2493 wpa_auth_sm_notify(sta->wpa_sm); in ieee802_1x_eapol_event()
2496 wpa_auth_sm_event(sta->wpa_sm, WPA_REAUTH_EAPOL); in ieee802_1x_eapol_event()
2669 int ieee802_1x_tx_status(struct hostapd_data *hapd, struct sta_info *sta, in ieee802_1x_tx_status() argument
2677 if (!sta) in ieee802_1x_tx_status()
2691 return ieee802_1x_eapol_tx_status(hapd, sta, pos, buf + len - pos, in ieee802_1x_tx_status()
2696 int ieee802_1x_eapol_tx_status(struct hostapd_data *hapd, struct sta_info *sta, in ieee802_1x_eapol_tx_status() argument
2708 MAC2STR(sta->addr), xhdr->version, xhdr->type, in ieee802_1x_eapol_tx_status()
2713 (sta->flags & WLAN_STA_WPS) && in ieee802_1x_eapol_tx_status()
2714 ap_sta_pending_delayed_1x_auth_fail_disconnect(hapd, sta)) { in ieee802_1x_eapol_tx_status()
2731 sta->wpa_sm, ack); in ieee802_1x_eapol_tx_status()
2741 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X, in ieee802_1x_eapol_tx_status()
2859 int ieee802_1x_get_mib_sta(struct hostapd_data *hapd, struct sta_info *sta, in ieee802_1x_get_mib_sta() argument
2863 struct eapol_state_machine *sm = sta->eapol_sm; in ieee802_1x_get_mib_sta()
2878 sta->aid, in ieee802_1x_get_mib_sta()
2982 os_reltime_age(&sta->acct_session_start, &diff); in ieee802_1x_get_mib_sta()
3001 (unsigned long long) sta->acct_session_id, in ieee802_1x_get_mib_sta()
3003 wpa_auth_sta_key_mgmt(sta->wpa_sm))) ? in ieee802_1x_get_mib_sta()
3042 struct sta_info *sta = timeout_ctx; in ieee802_1x_wnm_notif_send() local
3044 if (sta->remediation) { in ieee802_1x_wnm_notif_send()
3047 MAC2STR(sta->addr)); in ieee802_1x_wnm_notif_send()
3048 hs20_send_wnm_notification(hapd, sta->addr, in ieee802_1x_wnm_notif_send()
3049 sta->remediation_method, in ieee802_1x_wnm_notif_send()
3050 sta->remediation_url); in ieee802_1x_wnm_notif_send()
3051 os_free(sta->remediation_url); in ieee802_1x_wnm_notif_send()
3052 sta->remediation_url = NULL; in ieee802_1x_wnm_notif_send()
3055 if (sta->hs20_deauth_req) { in ieee802_1x_wnm_notif_send()
3058 MAC2STR(sta->addr)); in ieee802_1x_wnm_notif_send()
3059 hs20_send_wnm_notification_deauth_req(hapd, sta->addr, in ieee802_1x_wnm_notif_send()
3060 sta->hs20_deauth_req); in ieee802_1x_wnm_notif_send()
3063 if (sta->hs20_t_c_filtering) { in ieee802_1x_wnm_notif_send()
3066 MAC2STR(sta->addr)); in ieee802_1x_wnm_notif_send()
3067 hs20_send_wnm_notification_t_c(hapd, sta->addr, sta->t_c_url); in ieee802_1x_wnm_notif_send()
3068 os_free(sta->t_c_url); in ieee802_1x_wnm_notif_send()
3069 sta->t_c_url = NULL; in ieee802_1x_wnm_notif_send()
3076 struct sta_info *sta, int success, in ieee802_1x_finished() argument
3087 if (remediation && !sta->remediation) { in ieee802_1x_finished()
3088 sta->remediation = 1; in ieee802_1x_finished()
3089 os_free(sta->remediation_url); in ieee802_1x_finished()
3090 sta->remediation_url = in ieee802_1x_finished()
3092 sta->remediation_method = 1; /* SOAP-XML SPP */ in ieee802_1x_finished()
3095 if (success && (sta->remediation || sta->hs20_deauth_req || in ieee802_1x_finished()
3096 sta->hs20_t_c_filtering)) { in ieee802_1x_finished()
3098 MACSTR " in 100 ms", MAC2STR(sta->addr)); in ieee802_1x_finished()
3099 eloop_cancel_timeout(ieee802_1x_wnm_notif_send, hapd, sta); in ieee802_1x_finished()
3101 hapd, sta); in ieee802_1x_finished()
3106 ieee802_1x_notify_create_actor_hapd(hapd, sta); in ieee802_1x_finished()
3109 key = ieee802_1x_get_key(sta->eapol_sm, &len); in ieee802_1x_finished()
3110 if (sta->session_timeout_set) { in ieee802_1x_finished()
3112 os_reltime_sub(&sta->session_timeout, &now, &remaining); in ieee802_1x_finished()
3117 if (success && key && len >= PMK_LEN && !sta->remediation && in ieee802_1x_finished()
3118 !sta->hs20_deauth_requested && in ieee802_1x_finished()
3119 wpa_auth_pmksa_add(sta->wpa_sm, key, len, session_timeout, in ieee802_1x_finished()
3120 sta->eapol_sm) == 0) { in ieee802_1x_finished()
3121 hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_WPA, in ieee802_1x_finished()
3137 ap_sta_delayed_1x_auth_fail_disconnect(hapd, sta, in ieee802_1x_finished()
3139 if (logoff && sta->wpa_sm) in ieee802_1x_finished()