Lines Matching refs:sme

31 #include "sme.h"
67 if (!index_within_array(groups, wpa_s->sme.sae_group_index))
71 int group = groups[wpa_s->sme.sae_group_index];
74 if (sae_set_group(&wpa_s->sme.sae, group) == 0) {
76 wpa_s->sme.sae.group);
79 wpa_s->sme.sae_group_index++;
118 if (reuse && wpa_s->sme.sae.tmp &&
119 os_memcmp(bssid, wpa_s->sme.sae.tmp->bssid, ETH_ALEN) == 0) {
132 &wpa_s->sme.sae) < 0) {
136 if (wpa_s->sme.sae.tmp)
137 os_memcpy(wpa_s->sme.sae.tmp->bssid, bssid, ETH_ALEN);
140 len = wpa_s->sme.sae_token ? wpabuf_len(wpa_s->sme.sae_token) : 0;
150 sae_write_commit(&wpa_s->sme.sae, buf, wpa_s->sme.sae_token,
170 sae_write_confirm(&wpa_s->sme.sae, buf);
211 if (sizeof(wpa_s->sme.assoc_req_ie) <
212 wpa_s->sme.assoc_req_ie_len + rrm_ie_len + 2) {
219 pos = wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len;
235 wpa_s->sme.assoc_req_ie_len += rrm_ie_len + 2;
283 if (wpa_s->sme.ssid_len != params.ssid_len ||
284 os_memcmp(wpa_s->sme.ssid, params.ssid, params.ssid_len) != 0)
285 wpa_s->sme.prev_bssid_set = 0;
287 wpa_s->sme.freq = params.freq;
288 os_memcpy(wpa_s->sme.ssid, params.ssid, params.ssid_len);
289 wpa_s->sme.ssid_len = params.ssid_len;
310 wpa_s->sme.sae_pmksa_caching = 0;
368 wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
370 wpa_s->sme.assoc_req_ie,
371 &wpa_s->sme.assoc_req_ie_len)) {
381 wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
383 wpa_s->sme.assoc_req_ie,
384 &wpa_s->sme.assoc_req_ie_len)) {
399 wpa_s->sme.assoc_req_ie_len = 0;
401 wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
403 wpa_s->sme.assoc_req_ie,
404 &wpa_s->sme.assoc_req_ie_len)) {
416 sizeof(wpa_s->sme.assoc_req_ie)) {
417 wpa_s->sme.assoc_req_ie_len = wpabuf_len(wps_ie);
418 os_memcpy(wpa_s->sme.assoc_req_ie, wpabuf_head(wps_ie),
419 wpa_s->sme.assoc_req_ie_len);
421 wpa_s->sme.assoc_req_ie_len = 0;
427 wpa_s->sme.assoc_req_ie_len = 0;
438 wpa_ie = os_memdup(wpa_s->sme.assoc_req_ie,
439 wpa_s->sme.assoc_req_ie_len);
443 wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
444 wpa_s->sme.assoc_req_ie_len = 0;
469 if (wpa_s->sme.assoc_req_ie_len + 5 <
470 sizeof(wpa_s->sme.assoc_req_ie)) {
472 u8 *pos = wpa_s->sme.assoc_req_ie +
473 wpa_s->sme.assoc_req_ie_len;
480 wpa_s->sme.assoc_req_ie_len += 5;
483 if (wpa_s->sme.prev_bssid_set && wpa_s->sme.ft_used &&
484 os_memcmp(md, wpa_s->sme.mobility_domain, 2) == 0 &&
489 params.ie = wpa_s->sme.ft_ies;
490 params.ie_len = wpa_s->sme.ft_ies_len;
496 wpa_s->sme.mfp = wpas_get_ssid_pmf(wpa_s, ssid);
497 if (wpa_s->sme.mfp != NO_MGMT_FRAME_PROTECTION) {
505 wpa_s->sme.mfp = MGMT_FRAME_PROTECTION_REQUIRED;
515 pos = wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len;
516 len = sizeof(wpa_s->sme.assoc_req_ie) -
517 wpa_s->sme.assoc_req_ie_len;
521 wpa_s->sme.assoc_req_ie_len += res;
529 if (wpa_s->sme.assoc_req_ie_len + fst_ies_len <=
530 sizeof(wpa_s->sme.assoc_req_ie)) {
531 os_memcpy(wpa_s->sme.assoc_req_ie +
532 wpa_s->sme.assoc_req_ie_len,
535 wpa_s->sme.assoc_req_ie_len += fst_ies_len;
542 wpa_s->sme.assoc_req_ie_len += wpas_supp_op_class_ie(
544 wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
545 sizeof(wpa_s->sme.assoc_req_ie) - wpa_s->sme.assoc_req_ie_len);
555 u8 *pos = wpa_s->sme.assoc_req_ie;
556 if (wpa_s->sme.assoc_req_ie_len > 0 && pos[0] == WLAN_EID_RSN)
559 wpa_s->sme.assoc_req_ie_len -
560 (pos - wpa_s->sme.assoc_req_ie));
561 wpa_s->sme.assoc_req_ie_len += ext_capab_len;
577 len = sizeof(wpa_s->sme.assoc_req_ie) -
578 wpa_s->sme.assoc_req_ie_len;
580 os_memcpy(wpa_s->sme.assoc_req_ie +
581 wpa_s->sme.assoc_req_ie_len,
583 wpa_s->sme.assoc_req_ie_len += wpabuf_len(hs20);
595 len = sizeof(wpa_s->sme.assoc_req_ie) -
596 wpa_s->sme.assoc_req_ie_len;
599 os_memcpy(wpa_s->sme.assoc_req_ie +
600 wpa_s->sme.assoc_req_ie_len,
602 wpa_s->sme.assoc_req_ie_len += wpa_ie_len;
614 len = sizeof(wpa_s->sme.assoc_req_ie) -
615 wpa_s->sme.assoc_req_ie_len;
617 os_memcpy(wpa_s->sme.assoc_req_ie +
618 wpa_s->sme.assoc_req_ie_len,
620 wpa_s->sme.assoc_req_ie_len += wpabuf_len(buf);
629 len = wpas_mbo_ie(wpa_s, wpa_s->sme.assoc_req_ie +
630 wpa_s->sme.assoc_req_ie_len,
631 sizeof(wpa_s->sme.assoc_req_ie) -
632 wpa_s->sme.assoc_req_ie_len,
636 wpa_s->sme.assoc_req_ie_len += len;
651 wpa_s->sme.sae_pmksa_caching = 1;
667 wpa_s->sme.sae.state = start ? SAE_COMMITTED : SAE_CONFIRMED;
751 wpa_s->sme.auth_alg = auth_alg;
809 wpa_s->sme.auth_alg = params.auth_alg;
875 if (radio_work_pending(wpa_s, "sme-connect")) {
877 * The previous sme-connect work might no longer be valid due to
882 "SME: Remove previous pending sme-connect");
883 radio_remove_works(wpa_s, "sme-connect", 0);
893 cwork->sme = 1;
896 wpa_s->sme.sae.state = SAE_NOTHING;
897 wpa_s->sme.sae.send_confirm = 0;
898 wpa_s->sme.sae_group_index = 0;
901 if (radio_add_work(wpa_s, bss->freq, "sme-connect", 1,
947 wpa_s->sme.sae.state = SAE_COMMITTED;
954 wpa_s->sme.seq_num++;
956 bssid, 1, wpa_s->sme.seq_num);
972 params.ssid = wpa_s->sme.ext_auth_ssid;
973 params.ssid_len = wpa_s->sme.ext_auth_ssid_len;
974 params.bssid = wpa_s->sme.ext_auth_bssid;
1014 wpa_s->sme.sae.state = SAE_CONFIRMED;
1021 wpa_s->sme.seq_num++;
1023 da, 2, wpa_s->sme.seq_num);
1040 os_memcpy(wpa_s->sme.ext_auth_bssid, data->external_auth.bssid,
1042 os_memcpy(wpa_s->sme.ext_auth_ssid, data->external_auth.ssid,
1044 wpa_s->sme.ext_auth_ssid_len = data->external_auth.ssid_len;
1045 wpa_s->sme.seq_num = 0;
1046 wpa_s->sme.sae.state = SAE_NOTHING;
1047 wpa_s->sme.sae.send_confirm = 0;
1048 wpa_s->sme.sae_group_index = 0;
1071 wpa_s->sme.sae.state == SAE_COMMITTED &&
1089 if (sae_group_allowed(&wpa_s->sme.sae, groups, group) !=
1096 wpabuf_free(wpa_s->sme.sae_token);
1097 wpa_s->sme.sae_token = wpabuf_alloc_copy(data + sizeof(le16),
1104 wpa_s, wpa_s->sme.ext_auth_bssid,
1111 wpa_s->sme.sae.state == SAE_COMMITTED &&
1114 wpa_s->sme.sae_group_index++;
1123 wpa_s, wpa_s->sme.ext_auth_bssid,
1150 if (wpa_s->sme.sae.state != SAE_COMMITTED)
1154 res = sae_parse_commit(&wpa_s->sme.sae, data, len, NULL, NULL,
1164 if (sae_process_commit(&wpa_s->sme.sae) < 0) {
1170 wpabuf_free(wpa_s->sme.sae_token);
1171 wpa_s->sme.sae_token = NULL;
1180 if (wpa_s->sme.sae.state != SAE_CONFIRMED)
1182 if (sae_check_confirm(&wpa_s->sme.sae, data, len) < 0)
1184 wpa_s->sme.sae.state = SAE_ACCEPTED;
1185 sae_clear_temp_data(&wpa_s->sme.sae);
1235 wpa_sm_set_pmk(wpa_s->wpa, wpa_s->sme.sae.pmk, PMK_LEN,
1236 wpa_s->sme.sae.pmkid, wpa_s->pending_bssid);
1291 wpa_sm_set_pmk(wpa_s->wpa, wpa_s->sme.sae.pmk, PMK_LEN,
1292 wpa_s->sme.sae.pmkid, wpa_s->pending_bssid);
1316 if (wpa_s->sme.auth_alg == WPA_AUTH_ALG_FILS ||
1317 wpa_s->sme.auth_alg == WPA_AUTH_ALG_FILS_SK_PFS)
1323 wpa_s->sme.auth_alg == data->auth.auth_type ||
1386 expect_auth_type = wpa_s->sme.auth_alg ==
1496 wpa_s->sme.assoc_req_ie,
1497 wpa_s->sme.assoc_req_ie_len);
1503 remove_ie(wpa_s->sme.assoc_req_ie,
1504 &wpa_s->sme.assoc_req_ie_len,
1508 wpa_s->sme.assoc_req_ie,
1509 wpa_s->sme.assoc_req_ie_len);
1510 remove_ie(wpa_s->sme.assoc_req_ie,
1511 &wpa_s->sme.assoc_req_ie_len,
1515 wpa_s->sme.assoc_req_ie,
1516 wpa_s->sme.assoc_req_ie_len);
1519 /* TODO: Make wpa_s->sme.assoc_req_ie use dynamic allocation */
1520 if (wpa_s->sme.assoc_req_ie_len + wpabuf_len(buf) >
1521 sizeof(wpa_s->sme.assoc_req_ie)) {
1527 os_memcpy(wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
1529 wpa_s->sme.assoc_req_ie_len += wpabuf_len(buf);
1532 wpa_s->sme.assoc_req_ie,
1533 wpa_s->sme.assoc_req_ie_len);
1544 if (get_ie_ext(wpa_s->sme.assoc_req_ie, wpa_s->sme.assoc_req_ie_len,
1576 if (wpa_s->sme.assoc_req_ie_len + wpabuf_len(owe_ie) >
1577 sizeof(wpa_s->sme.assoc_req_ie)) {
1583 os_memcpy(wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
1585 wpa_s->sme.assoc_req_ie_len += wpabuf_len(owe_ie);
1603 if (wpa_s->sme.assoc_req_ie_len +
1605 sizeof(wpa_s->sme.assoc_req_ie)) {
1612 os_memcpy(wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
1615 wpa_s->sme.assoc_req_ie_len += wpabuf_len(wpa_s->dpp_pfs->ie);
1624 wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len,
1625 sizeof(wpa_s->sme.assoc_req_ie) -
1626 wpa_s->sme.assoc_req_ie_len,
1633 wpa_s->sme.assoc_req_ie_len += multi_ap_ie_len;
1637 params.ssid = wpa_s->sme.ssid;
1638 params.ssid_len = wpa_s->sme.ssid_len;
1639 params.freq.freq = wpa_s->sme.freq;
1642 params.wpa_ie = wpa_s->sme.assoc_req_ie_len ?
1643 wpa_s->sme.assoc_req_ie : NULL;
1644 params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
1667 if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies &&
1668 get_ie(wpa_s->sme.ft_ies, wpa_s->sme.ft_ies_len,
1678 params.wpa_ie = wpa_s->sme.ft_ies;
1679 params.wpa_ie_len = wpa_s->sme.ft_ies_len;
1680 } else if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies) {
1687 remove_ie(wpa_s->sme.assoc_req_ie,
1688 &wpa_s->sme.assoc_req_ie_len,
1690 remove_ie(wpa_s->sme.assoc_req_ie,
1691 &wpa_s->sme.assoc_req_ie_len,
1693 remove_ie(wpa_s->sme.assoc_req_ie,
1694 &wpa_s->sme.assoc_req_ie_len,
1696 rm_en = get_ie(wpa_s->sme.assoc_req_ie,
1697 wpa_s->sme.assoc_req_ie_len,
1705 remove_ie(wpa_s->sme.assoc_req_ie,
1706 &wpa_s->sme.assoc_req_ie_len,
1711 wpa_s->sme.assoc_req_ie,
1712 wpa_s->sme.assoc_req_ie_len);
1713 if (wpa_s->sme.assoc_req_ie_len + wpa_s->sme.ft_ies_len +
1714 rm_en_len > sizeof(wpa_s->sme.assoc_req_ie)) {
1721 os_memmove(wpa_s->sme.assoc_req_ie + wpa_s->sme.ft_ies_len +
1723 wpa_s->sme.assoc_req_ie,
1724 wpa_s->sme.assoc_req_ie_len);
1725 pos = wpa_s->sme.ft_ies;
1726 end = pos + wpa_s->sme.ft_ies_len;
1727 wpos = wpa_s->sme.assoc_req_ie;
1739 wpa_s->sme.assoc_req_ie_len += wpa_s->sme.ft_ies_len +
1741 params.wpa_ie = wpa_s->sme.assoc_req_ie;
1742 params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
1749 params.mgmt_frame_protection = wpa_s->sme.mfp;
1751 if (wpa_s->sme.prev_bssid_set)
1752 params.prev_bssid = wpa_s->sme.prev_bssid;
1816 os_free(wpa_s->sme.ft_ies);
1817 wpa_s->sme.ft_ies = NULL;
1818 wpa_s->sme.ft_ies_len = 0;
1819 wpa_s->sme.ft_used = 0;
1823 os_memcpy(wpa_s->sme.mobility_domain, md, MOBILITY_DOMAIN_ID_LEN);
1825 os_free(wpa_s->sme.ft_ies);
1826 wpa_s->sme.ft_ies = os_memdup(ies, ies_len);
1827 if (wpa_s->sme.ft_ies == NULL)
1829 wpa_s->sme.ft_ies_len = ies_len;
1845 wpa_s->sme.prev_bssid_set = 0;
1866 if (wpa_s->sme.sae_pmksa_caching && wpa_s->current_ssid &&
1919 if (wpa_s->sme.prev_bssid_set) {
1928 wpa_drv_deauthenticate(wpa_s, wpa_s->sme.prev_bssid,
1988 wpa_s->sme.prev_bssid_set = 0;
1990 wpabuf_free(wpa_s->sme.sae_token);
1991 wpa_s->sme.sae_token = NULL;
1992 sae_clear_data(&wpa_s->sme.sae);
1995 if (wpa_s->sme.ft_ies || wpa_s->sme.ft_used)
2072 if (!wpa_s->sme.sched_obss_scan)
2075 wpa_s->sme.sched_obss_scan = 0;
2149 if (wpa_s->sme.ht_sec_chan == HT_SEC_CHAN_UNKNOWN &&
2159 wpa_s->sme.ht_sec_chan = HT_SEC_CHAN_ABOVE;
2161 wpa_s->sme.ht_sec_chan = HT_SEC_CHAN_BELOW;
2167 switch (wpa_s->sme.ht_sec_chan) {
2221 wpa_s->sme.sched_obss_scan = 1;
2224 eloop_register_timeout(wpa_s->sme.obss_scan_int, 0,
2238 wpa_s->sme.sched_obss_scan = 0;
2239 wpa_s->sme.ht_sec_chan = HT_SEC_CHAN_UNKNOWN;
2281 wpa_s->sme.obss_scan_int = WPA_GET_LE16(ie + 6);
2282 if (wpa_s->sme.obss_scan_int < 10) {
2285 wpa_s->sme.obss_scan_int);
2286 wpa_s->sme.obss_scan_int = 10;
2289 wpa_s->sme.obss_scan_int);
2290 eloop_register_timeout(wpa_s->sme.obss_scan_int, 0,
2306 os_reltime_sub(&now, &wpa_s->sme.sa_query_start, &passed);
2365 if (wpa_s->sme.sa_query_count > 0 &&
2369 nbuf = os_realloc_array(wpa_s->sme.sa_query_trans_id,
2370 wpa_s->sme.sa_query_count + 1,
2376 if (wpa_s->sme.sa_query_count == 0) {
2378 os_get_reltime(&wpa_s->sme.sa_query_start);
2380 trans_id = nbuf + wpa_s->sme.sa_query_count * WLAN_SA_QUERY_TR_ID_LEN;
2381 wpa_s->sme.sa_query_trans_id = nbuf;
2382 wpa_s->sme.sa_query_count++;
2396 wpa_s->sme.sa_query_count);
2410 if (wpa_s->sme.sa_query_trans_id)
2413 os_free(wpa_s->sme.sa_query_trans_id);
2414 wpa_s->sme.sa_query_trans_id = NULL;
2415 wpa_s->sme.sa_query_count = 0;
2435 if (wpa_s->sme.sa_query_count > 0)
2439 if (wpa_s->sme.last_unprot_disconnect.sec &&
2440 !os_reltime_expired(&now, &wpa_s->sme.last_unprot_disconnect, 10))
2442 wpa_s->sme.last_unprot_disconnect = now;
2515 if (!wpa_s->sme.sa_query_trans_id)
2524 for (i = 0; i < wpa_s->sme.sa_query_count; i++) {
2525 if (os_memcmp(wpa_s->sme.sa_query_trans_id +
2531 if (i >= wpa_s->sme.sa_query_count) {