Lines Matching +full:num +full:- +full:channels

2  * wpa_supplicant - MBO
7 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
32 return -1; in wpas_mbo_validate_non_pref_chan()
35 if (ieee80211_chan_to_freq(NULL, oper_class, chan) == -1) in wpas_mbo_validate_non_pref_chan()
36 return -1; in wpas_mbo_validate_non_pref_chan()
47 if (ie_len < MBO_IE_HEADER - 2) in mbo_attr_from_mbo_ie()
51 return get_ie(mbo, 2 + ie_len - MBO_IE_HEADER, attr); in mbo_attr_from_mbo_ie()
86 return get_ie(mbo, end - mbo, attr); in wpas_mbo_get_bss_attr()
95 bss->beacon_newer); in wpas_mbo_check_assoc_disallow()
109 wpa_s->disable_mbo_oce = 0; in wpas_mbo_check_pmf()
117 return; /* STA-CFON is not required to enable PMF */ in wpas_mbo_check_pmf()
123 wpa_s->disable_mbo_oce = 1; /* AP uses RSN without PMF */ in wpas_mbo_check_pmf()
125 wpa_s->disable_mbo_oce = 1; /* STA uses RSN without PMF */ in wpas_mbo_check_pmf()
126 if (wpa_s->disable_mbo_oce) in wpas_mbo_check_pmf()
138 wpabuf_put_u8(mbo, wpa_s->non_pref_chan[start].oper_class); in wpas_mbo_non_pref_chan_attr_body()
141 wpabuf_put_u8(mbo, wpa_s->non_pref_chan[i].chan); in wpas_mbo_non_pref_chan_attr_body()
143 wpabuf_put_u8(mbo, wpa_s->non_pref_chan[start].preference); in wpas_mbo_non_pref_chan_attr_body()
144 wpabuf_put_u8(mbo, wpa_s->non_pref_chan[start].reason); in wpas_mbo_non_pref_chan_attr_body()
158 size_t size = end - start + 3; in wpas_mbo_non_pref_chan_attr()
181 size_t size = end - start + 7; in wpas_mbo_non_pref_chan_subelement()
197 if (!wpa_s->non_pref_chan || !wpa_s->non_pref_chan_num) { in wpas_mbo_non_pref_chan_attrs()
204 start_pref = &wpa_s->non_pref_chan[0]; in wpas_mbo_non_pref_chan_attrs()
206 for (i = 1; i <= wpa_s->non_pref_chan_num; i++) { in wpas_mbo_non_pref_chan_attrs()
209 if (i < wpa_s->non_pref_chan_num) in wpas_mbo_non_pref_chan_attrs()
210 non_pref = &wpa_s->non_pref_chan[i]; in wpas_mbo_non_pref_chan_attrs()
212 non_pref->oper_class != start_pref->oper_class || in wpas_mbo_non_pref_chan_attrs()
213 non_pref->reason != start_pref->reason || in wpas_mbo_non_pref_chan_attrs()
214 non_pref->preference != start_pref->preference) { in wpas_mbo_non_pref_chan_attrs()
239 ((wpa_s->enable_oce & OCE_STA) ? 3 : 0)) in wpas_mbo_ie()
243 mbo = wpabuf_alloc(len - MBO_IE_HEADER); in wpas_mbo_ie()
247 /* Add non-preferred channels attribute */ in wpas_mbo_ie()
256 wpabuf_put_u8(mbo, wpa_s->conf->mbo_cell_capa); in wpas_mbo_ie()
259 if ((wpa_s->enable_oce & OCE_STA) && add_oce_capa) { in wpas_mbo_ie()
281 * Send WNM-Notification Request frame only in case of a change in in wpas_mbo_send_wnm_notification()
282 * non-preferred channels list during association, if the AP supports in wpas_mbo_send_wnm_notification()
285 if (wpa_s->wpa_state != WPA_COMPLETED || !wpa_s->current_bss || in wpas_mbo_send_wnm_notification()
286 !wpa_bss_get_vendor_ie(wpa_s->current_bss, MBO_IE_VENDOR_TYPE)) in wpas_mbo_send_wnm_notification()
295 wpa_s->mbo_wnm_token++; in wpas_mbo_send_wnm_notification()
296 if (wpa_s->mbo_wnm_token == 0) in wpas_mbo_send_wnm_notification()
297 wpa_s->mbo_wnm_token++; in wpas_mbo_send_wnm_notification()
298 wpabuf_put_u8(buf, wpa_s->mbo_wnm_token); in wpas_mbo_send_wnm_notification()
303 res = wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid, in wpas_mbo_send_wnm_notification()
304 wpa_s->own_addr, wpa_s->bssid, in wpas_mbo_send_wnm_notification()
308 "Failed to send WNM-Notification Request frame with non-preferred channel list"); in wpas_mbo_send_wnm_notification()
333 return a->oper_class == b->oper_class && a->chan == b->chan; in wpa_non_pref_chan_is_eq()
338 * wpa_non_pref_chan_cmp - Compare two channels for sorting
340 * In MBO IE non-preferred channel subelement we can put many channels in an
343 * the IE attributes and WNM Request subelements, save the channels sorted
350 if (a->oper_class != b->oper_class) in wpa_non_pref_chan_cmp()
351 return (int) a->oper_class - (int) b->oper_class; in wpa_non_pref_chan_cmp()
352 if (a->reason != b->reason) in wpa_non_pref_chan_cmp()
353 return (int) a->reason - (int) b->reason; in wpa_non_pref_chan_cmp()
354 return (int) a->preference - (int) b->preference; in wpa_non_pref_chan_cmp()
363 size_t num = 0, size = 0; in wpas_mbo_update_non_pref_chan() local
366 wpa_printf(MSG_DEBUG, "MBO: Update non-preferred channels, non_pref_chan=%s", in wpas_mbo_update_non_pref_chan()
370 * The shortest channel configuration is 7 characters - 3 colons and in wpas_mbo_update_non_pref_chan()
378 return -1; in wpas_mbo_update_non_pref_chan()
388 if (num == size) { in wpas_mbo_update_non_pref_chan()
400 chan = &chans[num]; in wpas_mbo_update_non_pref_chan()
407 wpa_printf(MSG_ERROR, "Invalid non-pref chan input %s", in wpas_mbo_update_non_pref_chan()
411 chan->oper_class = _oper_class; in wpas_mbo_update_non_pref_chan()
412 chan->chan = _chan; in wpas_mbo_update_non_pref_chan()
413 chan->preference = _preference; in wpas_mbo_update_non_pref_chan()
414 chan->reason = _reason; in wpas_mbo_update_non_pref_chan()
416 if (wpas_mbo_validate_non_pref_chan(chan->oper_class, in wpas_mbo_update_non_pref_chan()
417 chan->chan, chan->reason)) { in wpas_mbo_update_non_pref_chan()
420 chan->oper_class, chan->chan, chan->reason); in wpas_mbo_update_non_pref_chan()
424 for (i = 0; i < num; i++) in wpas_mbo_update_non_pref_chan()
427 if (i != num) { in wpas_mbo_update_non_pref_chan()
430 chan->oper_class, chan->chan); in wpas_mbo_update_non_pref_chan()
434 num++; in wpas_mbo_update_non_pref_chan()
440 qsort(chans, num, sizeof(struct wpa_mbo_non_pref_channel), in wpas_mbo_update_non_pref_chan()
445 os_free(wpa_s->non_pref_chan); in wpas_mbo_update_non_pref_chan()
446 wpa_s->non_pref_chan = chans; in wpas_mbo_update_non_pref_chan()
447 wpa_s->non_pref_chan_num = num; in wpas_mbo_update_non_pref_chan()
455 return -1; in wpas_mbo_update_non_pref_chan()
471 wpabuf_put_u8(ie, wpa_s->conf->mbo_cell_capa); in wpas_mbo_scan_ie()
472 if (wpa_s->enable_oce & OCE_STA) { in wpas_mbo_scan_ie()
477 *len = (u8 *) wpabuf_put(ie, 0) - len - 1; in wpas_mbo_scan_ie()
493 len -= 4; in wpas_mbo_ie_trans_req()
498 len -= 2; in wpas_mbo_ie_trans_req()
508 if (wpa_s->conf->mbo_cell_capa == in wpas_mbo_ie_trans_req()
519 wpa_s->wnm_mbo_trans_reason_present = 1; in wpas_mbo_ie_trans_req()
520 wpa_s->wnm_mbo_transition_reason = *pos; in wpas_mbo_ie_trans_req()
526 if (wpa_s->wnm_mode & in wpas_mbo_ie_trans_req()
531 } else if (wpa_s->wnm_mode & in wpas_mbo_ie_trans_req()
559 len -= elen; in wpas_mbo_ie_trans_req()
566 if (wpa_s->wnm_mbo_trans_reason_present) in wpas_mbo_ie_trans_req()
568 wpa_s->wnm_mbo_transition_reason); in wpas_mbo_ie_trans_req()
570 if (disallowed_sec && wpa_s->current_bss) in wpas_mbo_ie_trans_req()
571 wpa_bss_tmp_disallow(wpa_s, wpa_s->current_bss->bssid, in wpas_mbo_ie_trans_req()
599 if (wpa_s->conf->mbo_cell_capa == mbo_cell_capa) { in wpas_mbo_update_cell_capa()
606 wpa_s->conf->mbo_cell_capa = mbo_cell_capa; in wpas_mbo_update_cell_capa()
629 " does not support MBO - cannot request MBO ANQP elements from it", in mbo_build_anqp_buf()
630 MAC2STR(bss->bssid)); in mbo_build_anqp_buf()
634 /* Allocate size for the maximum case - all MBO subtypes are set */ in mbo_build_anqp_buf()
668 slen--; in mbo_parse_rx_anqp_resp()