Lines Matching refs:mlme

28 #include "mlme.h"
110 for (i = 0; i < wpa_s->mlme.num_modes; i++) {
111 mode = &wpa_s->mlme.modes[i];
113 wpa_s->mlme.curr_rates = mode->rates;
114 wpa_s->mlme.num_curr_rates = mode->num_rates;
145 if (count == wpa_s->mlme.wmm_last_param_set)
147 wpa_s->mlme.wmm_last_param_set = count;
193 if (wpa_s->mlme.associated == assoc && !assoc)
196 wpa_s->mlme.associated = assoc;
201 wpa_s->mlme.prev_bssid_set = 1;
202 os_memcpy(wpa_s->mlme.prev_bssid, wpa_s->bssid, ETH_ALEN);
203 data.assoc_info.req_ies = wpa_s->mlme.assocreq_ies;
204 data.assoc_info.req_ies_len = wpa_s->mlme.assocreq_ies_len;
205 data.assoc_info.resp_ies = wpa_s->mlme.assocresp_ies;
206 data.assoc_info.resp_ies_len = wpa_s->mlme.assocresp_ies_len;
207 data.assoc_info.freq = wpa_s->mlme.freq;
212 os_get_time(&wpa_s->mlme.last_probe);
248 mgmt->u.auth.auth_alg = host_to_le16(wpa_s->mlme.auth_alg);
250 wpa_s->mlme.auth_transaction = transaction + 1;
275 wpa_s->mlme.auth_tries++;
276 if (wpa_s->mlme.auth_tries > IEEE80211_AUTH_MAX_TRIES) {
282 wpa_s->mlme.state = IEEE80211_AUTHENTICATE;
290 if ((wpa_s->mlme.key_mgmt == KEY_MGMT_FT_802_1X ||
291 wpa_s->mlme.key_mgmt == KEY_MGMT_FT_PSK) &&
292 wpa_s->mlme.ft_ies) {
299 os_memcmp(mdie->mobility_domain, wpa_s->mlme.current_md,
303 wpa_s->mlme.auth_alg = WLAN_AUTH_FT;
304 extra = wpa_s->mlme.ft_ies;
305 extra_len = wpa_s->mlme.ft_ies_len;
326 if (wpa_s->mlme.curr_rates == NULL) {
331 buflen = sizeof(*mgmt) + 200 + wpa_s->mlme.extra_ie_len +
332 wpa_s->mlme.ssid_len;
334 if (wpa_s->mlme.ft_ies)
335 buflen += wpa_s->mlme.ft_ies_len;
345 capab = wpa_s->mlme.capab;
346 if (wpa_s->mlme.phymode == HOSTAPD_MODE_IEEE80211G) {
366 if (wpa_s->mlme.prev_bssid_set) {
373 wpa_s->mlme.prev_bssid,
385 blen += 2 + wpa_s->mlme.ssid_len;
387 *pos++ = wpa_s->mlme.ssid_len;
388 os_memcpy(pos, wpa_s->mlme.ssid, wpa_s->mlme.ssid_len);
390 len = wpa_s->mlme.num_curr_rates;
398 *pos++ = (u8) (wpa_s->mlme.curr_rates[i] / 5);
400 if (wpa_s->mlme.num_curr_rates > len) {
402 blen += wpa_s->mlme.num_curr_rates - len + 2;
404 *pos++ = wpa_s->mlme.num_curr_rates - len;
405 for (i = len; i < wpa_s->mlme.num_curr_rates; i++)
406 *pos++ = (u8) (wpa_s->mlme.curr_rates[i] / 5);
409 if (wpa_s->mlme.extra_ie && wpa_s->mlme.auth_alg != WLAN_AUTH_FT) {
411 blen += wpa_s->mlme.extra_ie_len;
412 os_memcpy(pos, wpa_s->mlme.extra_ie, wpa_s->mlme.extra_ie_len);
416 if ((wpa_s->mlme.key_mgmt == KEY_MGMT_FT_802_1X ||
417 wpa_s->mlme.key_mgmt == KEY_MGMT_FT_PSK) &&
418 wpa_s->mlme.auth_alg != WLAN_AUTH_FT &&
431 if ((wpa_s->mlme.key_mgmt == KEY_MGMT_FT_802_1X ||
432 wpa_s->mlme.key_mgmt == KEY_MGMT_FT_PSK) &&
433 wpa_s->mlme.auth_alg == WLAN_AUTH_FT && wpa_s->mlme.ft_ies) {
435 os_memcpy(pos, wpa_s->mlme.ft_ies, wpa_s->mlme.ft_ies_len);
436 pos += wpa_s->mlme.ft_ies_len;
437 blen += wpa_s->mlme.ft_ies_len;
441 if (wmm && wpa_s->mlme.wmm_enabled) {
455 os_free(wpa_s->mlme.assocreq_ies);
456 wpa_s->mlme.assocreq_ies_len = (buf + blen) - ies;
457 wpa_s->mlme.assocreq_ies = os_malloc(wpa_s->mlme.assocreq_ies_len);
458 if (wpa_s->mlme.assocreq_ies) {
459 os_memcpy(wpa_s->mlme.assocreq_ies, ies,
460 wpa_s->mlme.assocreq_ies_len);
529 if (wpa_s->mlme.mixed_cell ||
530 wpa_s->mlme.key_mgmt != KEY_MGMT_NONE)
547 wpa_s->mlme.assoc_tries++;
548 if (wpa_s->mlme.assoc_tries > IEEE80211_ASSOC_MAX_TRIES) {
554 wpa_s->mlme.state = IEEE80211_ASSOCIATE;
579 wpa_s->mlme.state = IEEE80211_ASSOCIATED;
591 if (wpa_s->mlme.probereq_poll) {
600 wpa_s->mlme.scan_ssid,
601 wpa_s->mlme.scan_ssid_len);
602 wpa_s->mlme.probereq_poll = 1;
605 wpa_s->mlme.probereq_poll = 0;
606 if (time_after(jiffies, wpa_s->mlme.last_probe +
608 wpa_s->mlme.last_probe = jiffies;
610 wpa_s->mlme.ssid,
611 wpa_s->mlme.ssid_len);
642 buf = os_malloc(sizeof(*mgmt) + 200 + wpa_s->mlme.extra_probe_ie_len);
672 for (i = 0; i < wpa_s->mlme.num_curr_rates; i++) {
688 *pos++ = wpa_s->mlme.curr_rates[i] / 5;
691 if (wpa_s->mlme.extra_probe_ie) {
692 os_memcpy(pos, wpa_s->mlme.extra_probe_ie,
693 wpa_s->mlme.extra_probe_ie_len);
694 len += wpa_s->mlme.extra_probe_ie_len;
718 wpa_s->mlme.authenticated = 1;
759 if (wpa_s->mlme.state != IEEE80211_AUTHENTICATE && !adhoc) {
813 if (auth_alg != wpa_s->mlme.auth_alg ||
814 auth_transaction != wpa_s->mlme.auth_transaction) {
823 "(auth_alg=%d code=%d)", wpa_s->mlme.auth_alg,
830 if (wpa_s->mlme.auth_algs & WPA_AUTH_ALG_OPEN)
832 if (wpa_s->mlme.auth_algs & WPA_AUTH_ALG_SHARED)
834 if (wpa_s->mlme.auth_algs & WPA_AUTH_ALG_LEAP)
836 if (wpa_s->mlme.auth_alg == WLAN_AUTH_OPEN)
838 else if (wpa_s->mlme.auth_alg == WLAN_AUTH_SHARED_KEY)
846 if (algs[pos] == wpa_s->mlme.auth_alg ||
852 wpa_s->mlme.auth_alg = algs[pos];
855 wpa_s->mlme.auth_alg);
862 switch (wpa_s->mlme.auth_alg) {
868 if (wpa_s->mlme.auth_transaction == 4)
885 wpa_s->mlme.wmm_enabled) {
943 if (wpa_s->mlme.authenticated)
946 if (wpa_s->mlme.state == IEEE80211_AUTHENTICATE ||
947 wpa_s->mlme.state == IEEE80211_ASSOCIATE ||
948 wpa_s->mlme.state == IEEE80211_ASSOCIATED) {
949 wpa_s->mlme.state = IEEE80211_AUTHENTICATE;
955 wpa_s->mlme.authenticated = 0;
986 if (wpa_s->mlme.associated)
989 if (wpa_s->mlme.state == IEEE80211_ASSOCIATED) {
990 wpa_s->mlme.state = IEEE80211_ASSOCIATE;
1074 if (wpa_s->mlme.state != IEEE80211_ASSOCIATE) {
1144 if (wpa_s->mlme.auth_alg == WLAN_AUTH_FT) {
1163 wpa_s->mlme.aid = aid;
1164 wpa_s->mlme.ap_capab = capab_info;
1166 os_free(wpa_s->mlme.assocresp_ies);
1167 wpa_s->mlme.assocresp_ies_len = len - (pos - (u8 *) mgmt);
1168 wpa_s->mlme.assocresp_ies = os_malloc(wpa_s->mlme.assocresp_ies_len);
1169 if (wpa_s->mlme.assocresp_ies) {
1170 os_memcpy(wpa_s->mlme.assocresp_ies, pos,
1171 wpa_s->mlme.assocresp_ies_len);
1192 if (wpa_drv_set_ssid(wpa_s, wpa_s->mlme.ssid, wpa_s->mlme.ssid_len) <
1206 if (elems.wmm && wpa_s->mlme.wmm_enabled)
1211 if (wpa_s->mlme.auth_alg != WLAN_AUTH_FT &&
1213 elems.wmm && wpa_s->mlme.wmm_enabled) {
1224 bss->hnext = wpa_s->mlme.sta_bss_hash[STA_HASH(bss->bssid)];
1225 wpa_s->mlme.sta_bss_hash[STA_HASH(bss->bssid)] = bss;
1234 b = wpa_s->mlme.sta_bss_hash[STA_HASH(bss->bssid)];
1238 wpa_s->mlme.sta_bss_hash[STA_HASH(bss->bssid)]
1262 bss->next = wpa_s->mlme.sta_bss_list;
1263 wpa_s->mlme.sta_bss_list = bss;
1274 bss = wpa_s->mlme.sta_bss_hash[STA_HASH(bssid)];
1301 bss = wpa_s->mlme.sta_bss_list;
1302 wpa_s->mlme.sta_bss_list = NULL;
1379 oper_mode = wpa_s->mlme.sta_scanning ?
1414 sta->supp_rates = wpa_s->mlme.supp_rates_bits;
1559 bss->hw_mode = wpa_s->mlme.phymode;
1561 bss->freq = wpa_s->mlme.freq;
1562 if (channel != wpa_s->mlme.channel &&
1563 (wpa_s->mlme.phymode == HOSTAPD_MODE_IEEE80211G ||
1564 wpa_s->mlme.phymode == HOSTAPD_MODE_IEEE80211B) &&
1602 if (!wpa_s->mlme.associated ||
1621 if (use_protection != !!wpa_s->mlme.use_protection) {
1626 wpa_s->mlme.use_protection = use_protection ? 1 : 0;
1627 wpa_s->mlme.cts_protect_erp_frames = use_protection;
1630 if (elems.wmm && wpa_s->mlme.wmm_enabled) {
1651 if (!adhoc || wpa_s->mlme.state != IEEE80211_IBSS_JOINED ||
1652 len < 24 + 2 || wpa_s->mlme.probe_resp == NULL)
1685 (pos[1] != wpa_s->mlme.ssid_len ||
1686 os_memcmp(pos + 2, wpa_s->mlme.ssid, wpa_s->mlme.ssid_len) != 0))
1694 skb = skb_copy(wpa_s->mlme.probe_resp, GFP_ATOMIC);
1762 wpa_s->mlme.prev_bssid_set = 1;
1763 wpa_s->mlme.auth_alg = WLAN_AUTH_FT;
1764 os_memcpy(wpa_s->mlme.prev_bssid, wpa_s->bssid, ETH_ALEN);
1828 if (wpa_s->mlme.state == IEEE80211_ASSOCIATE) {
1980 if (wpa_s->mlme.public_action_cb) {
1981 wpa_s->mlme.public_action_cb(
1982 wpa_s->mlme.public_action_cb_ctx,
2117 params.ssids[0].ssid = wpa_s->mlme.ssid;
2118 params.ssids[0].ssid_len = wpa_s->mlme.ssid_len;
2119 params.num_ssids = wpa_s->mlme.ssid_len ? 1 : 0;
2128 switch (wpa_s->mlme.state) {
2148 wpa_s->mlme.state);
2175 wpa_s->mlme.wmm_last_param_set = -1; /* allow any WMM update */
2178 if (wpa_s->mlme.auth_algs & WPA_AUTH_ALG_OPEN)
2179 wpa_s->mlme.auth_alg = WLAN_AUTH_OPEN;
2180 else if (wpa_s->mlme.auth_algs & WPA_AUTH_ALG_SHARED)
2181 wpa_s->mlme.auth_alg = WLAN_AUTH_SHARED_KEY;
2182 else if (wpa_s->mlme.auth_algs & WPA_AUTH_ALG_LEAP)
2183 wpa_s->mlme.auth_alg = WLAN_AUTH_LEAP;
2185 wpa_s->mlme.auth_alg = WLAN_AUTH_OPEN;
2187 wpa_s->mlme.auth_alg);
2188 wpa_s->mlme.auth_transaction = -1;
2189 wpa_s->mlme.auth_tries = wpa_s->mlme.assoc_tries = 0;
2291 len += 2 + wpa_s->mlme.ssid_len;
2293 *pos++ = wpa_s->mlme.ssid_len;
2294 os_memcpy(pos, wpa_s->mlme.ssid, wpa_s->mlme.ssid_len);
2339 control.tx_rate = (wpa_s->mlme.short_preamble &&
2350 wpa_s->mlme.probe_resp = skb_copy(skb, GFP_ATOMIC);
2351 if (wpa_s->mlme.probe_resp) {
2353 wpa_s->mlme.probe_resp->data;
2378 wpa_s->mlme.supp_rates_bits = rates;
2389 wpa_s->mlme.state = IEEE80211_IBSS_JOINED;
2464 if (wpa_s->mlme.ssid_len == 0)
2472 for (bss = wpa_s->mlme.sta_bss_list; bss; bss = bss->next) {
2473 if (wpa_s->mlme.ssid_len != bss->ssid_len ||
2474 os_memcmp(wpa_s->mlme.ssid, bss->ssid, bss->ssid_len) != 0
2506 if (wpa_s->mlme.state == IEEE80211_IBSS_JOINED &&
2510 } else if (time_after(jiffies, wpa_s->mlme.last_scan_completed +
2514 return ieee80211_sta_req_scan(wpa_s->mlme.ssid,
2515 wpa_s->mlme.ssid_len);
2516 } else if (wpa_s->mlme.state != IEEE80211_IBSS_JOINED) {
2519 if (time_after(jiffies, wpa_s->mlme.ibss_join_req +
2521 if (wpa_s->mlme.create_ibss &&
2524 if (wpa_s->mlme.create_ibss) {
2537 wpa_s->mlme.state = IEEE80211_IBSS_SEARCH;
2550 os_memcpy(ssid, wpa_s->mlme.ssid, wpa_s->mlme.ssid_len);
2551 *len = wpa_s->mlme.ssid_len;
2562 wpa_s->mlme.bssid_set = 0;
2563 wpa_s->mlme.freq = params->freq;
2572 wpa_s->mlme.bssid_set = 1;
2575 wpa_s->mlme.phymode = bss->hw_mode;
2576 wpa_s->mlme.channel = bss->channel;
2577 wpa_s->mlme.freq = bss->freq;
2608 if (wpa_s->mlme.ssid_len != params->ssid_len ||
2609 os_memcmp(wpa_s->mlme.ssid, params->ssid, params->ssid_len) != 0)
2610 wpa_s->mlme.prev_bssid_set = 0;
2611 os_memcpy(wpa_s->mlme.ssid, params->ssid, params->ssid_len);
2612 os_memset(wpa_s->mlme.ssid + params->ssid_len, 0,
2614 wpa_s->mlme.ssid_len = params->ssid_len;
2615 wpa_s->mlme.ssid_set = 1;
2617 os_free(wpa_s->mlme.extra_ie);
2619 wpa_s->mlme.extra_ie = NULL;
2620 wpa_s->mlme.extra_ie_len = 0;
2622 wpa_s->mlme.extra_ie = os_malloc(params->wpa_ie_len);
2623 if (wpa_s->mlme.extra_ie == NULL) {
2624 wpa_s->mlme.extra_ie_len = 0;
2627 os_memcpy(wpa_s->mlme.extra_ie, params->wpa_ie,
2629 wpa_s->mlme.extra_ie_len = params->wpa_ie_len;
2632 wpa_s->mlme.key_mgmt = params->key_mgmt_suite;
2634 ieee80211_sta_set_channel(wpa_s, wpa_s->mlme.phymode,
2635 wpa_s->mlme.channel, wpa_s->mlme.freq);
2637 if (params->mode == WPAS_MODE_IBSS && !wpa_s->mlme.bssid_set) {
2638 os_get_time(&wpa_s->mlme.ibss_join_req);
2639 wpa_s->mlme.state = IEEE80211_IBSS_SEARCH;
2643 if (wpa_s->mlme.bssid_set)
2652 wpa_s->mlme.scan_oper_channel = wpa_s->mlme.channel;
2653 wpa_s->mlme.scan_oper_freq = wpa_s->mlme.freq;
2654 wpa_s->mlme.scan_oper_phymode = wpa_s->mlme.phymode;
2660 wpa_s->mlme.channel = wpa_s->mlme.scan_oper_channel;
2661 wpa_s->mlme.freq = wpa_s->mlme.scan_oper_freq;
2662 wpa_s->mlme.phymode = wpa_s->mlme.scan_oper_phymode;
2663 if (wpa_s->mlme.freq == 0)
2665 return ieee80211_sta_set_channel(wpa_s, wpa_s->mlme.phymode,
2666 wpa_s->mlme.channel,
2667 wpa_s->mlme.freq);
2676 for (m = 0; m < wpa_s->mlme.num_modes; m++) {
2677 struct hostapd_hw_modes *mode = &wpa_s->mlme.modes[m];
2678 if ((int) mode->mode != (int) wpa_s->mlme.phymode)
2683 chan->chan == wpa_s->mlme.channel) {
2705 if (!wpa_s->mlme.sta_scanning || wpa_s->mlme.modes == NULL)
2710 switch (wpa_s->mlme.scan_state) {
2712 mode = &wpa_s->mlme.modes[wpa_s->mlme.scan_hw_mode_idx];
2713 if (wpa_s->mlme.scan_hw_mode_idx >=
2714 (int) wpa_s->mlme.num_modes ||
2715 (wpa_s->mlme.scan_hw_mode_idx + 1 ==
2716 (int) wpa_s->mlme.num_modes
2717 && wpa_s->mlme.scan_channel_idx >= mode->num_channels)) {
2724 wpa_s->mlme.sta_scanning = 0;
2725 os_get_time(&wpa_s->mlme.last_scan_completed);
2728 if (!wpa_s->mlme.bssid_set ||
2729 (wpa_s->mlme.state ==
2736 skip = !(wpa_s->mlme.hw_modes & (1 << mode->mode));
2737 chan = &mode->channels[wpa_s->mlme.scan_channel_idx];
2740 (wpa_s->mlme.hw_modes & (1 << HOSTAPD_MODE_IEEE80211G) &&
2742 wpa_s->mlme.scan_skip_11b))
2744 if (!skip && wpa_s->mlme.scan_freqs) {
2746 for (i = 0; wpa_s->mlme.scan_freqs[i]; i++) {
2747 if (wpa_s->mlme.scan_freqs[i] == chan->freq) {
2761 wpa_s->mlme.channel = chan->chan;
2762 wpa_s->mlme.freq = chan->freq;
2763 wpa_s->mlme.phymode = mode->mode;
2774 wpa_s->mlme.scan_channel_idx++;
2775 if (wpa_s->mlme.scan_channel_idx >=
2776 wpa_s->mlme.modes[wpa_s->mlme.scan_hw_mode_idx].
2778 wpa_s->mlme.scan_hw_mode_idx++;
2779 wpa_s->mlme.scan_channel_idx = 0;
2788 wpa_s->mlme.scan_state = SCAN_SEND_PROBE;
2793 wpa_s->mlme.scan_ssid,
2794 wpa_s->mlme.scan_ssid_len);
2799 wpa_s->mlme.scan_state = SCAN_SET_CHANNEL;
2837 if (wpa_s->mlme.sta_scanning)
2845 os_free(wpa_s->mlme.scan_freqs);
2850 wpa_s->mlme.scan_freqs = os_malloc((i + 1) * sizeof(int));
2851 if (wpa_s->mlme.scan_freqs)
2852 os_memcpy(wpa_s->mlme.scan_freqs, params->freqs,
2855 wpa_s->mlme.scan_freqs = NULL;
2859 wpa_s->mlme.sta_scanning = 1;
2863 wpa_s->mlme.scan_ssid_len = ssid_len;
2864 os_memcpy(wpa_s->mlme.scan_ssid, ssid, ssid_len);
2866 wpa_s->mlme.scan_ssid_len = 0;
2867 wpa_s->mlme.scan_skip_11b = 1; /* FIX: clear this is 11g is not
2869 wpa_s->mlme.scan_state = SCAN_SET_CHANNEL;
2870 wpa_s->mlme.scan_hw_mode_idx = 0;
2871 wpa_s->mlme.scan_channel_idx = 0;
2887 for (bss = wpa_s->mlme.sta_bss_list; bss; bss = bss->next)
2895 for (bss = wpa_s->mlme.sta_bss_list; bss; bss = bss->next) {
2960 sta->supp_rates = wpa_s->mlme.supp_rates_bits;
2983 if (!wpa_s->mlme.associated)
3001 if (wpa_s->mlme.sta_scanning) {
3037 wpa_s->mlme.modes = wpa_drv_get_hw_feature_data(wpa_s, &num_modes,
3039 if (wpa_s->mlme.modes == NULL) {
3045 wpa_s->mlme.num_modes = num_modes;
3047 wpa_s->mlme.hw_modes = 1 << HOSTAPD_MODE_IEEE80211A;
3048 wpa_s->mlme.hw_modes |= 1 << HOSTAPD_MODE_IEEE80211B;
3049 wpa_s->mlme.hw_modes |= 1 << HOSTAPD_MODE_IEEE80211G;
3051 wpa_s->mlme.wmm_enabled = 1;
3061 os_free(wpa_s->mlme.extra_ie);
3062 wpa_s->mlme.extra_ie = NULL;
3063 os_free(wpa_s->mlme.extra_probe_ie);
3064 wpa_s->mlme.extra_probe_ie = NULL;
3065 os_free(wpa_s->mlme.assocreq_ies);
3066 wpa_s->mlme.assocreq_ies = NULL;
3067 os_free(wpa_s->mlme.assocresp_ies);
3068 wpa_s->mlme.assocresp_ies = NULL;
3070 ieee80211_sta_free_hw_features(wpa_s->mlme.modes,
3071 wpa_s->mlme.num_modes);
3073 os_free(wpa_s->mlme.ft_ies);
3074 wpa_s->mlme.ft_ies = NULL;
3075 wpa_s->mlme.ft_ies_len = 0;
3078 os_free(wpa_s->mlme.scan_freqs);
3079 wpa_s->mlme.scan_freqs = NULL;
3090 os_memset(wpa_s->mlme.current_md, 0, MOBILITY_DOMAIN_ID_LEN);
3094 os_memcpy(wpa_s->mlme.current_md, md, MOBILITY_DOMAIN_ID_LEN);
3098 os_free(wpa_s->mlme.ft_ies);
3099 wpa_s->mlme.ft_ies = os_malloc(ies_len);
3100 if (wpa_s->mlme.ft_ies == NULL)
3102 os_memcpy(wpa_s->mlme.ft_ies, ies, ies_len);
3103 wpa_s->mlme.ft_ies_len = ies_len;
3166 os_free(wpa_s->mlme.extra_probe_ie);
3167 wpa_s->mlme.extra_probe_ie = NULL;
3168 wpa_s->mlme.extra_probe_ie_len = 0;
3173 wpa_s->mlme.extra_probe_ie = os_malloc(ies_len);
3174 if (wpa_s->mlme.extra_probe_ie == NULL)
3177 os_memcpy(wpa_s->mlme.extra_probe_ie, ies, ies_len);
3178 wpa_s->mlme.extra_probe_ie_len = ies_len;