Lines Matching +full:scan +full:- +full:count
2 * Driver interaction with Linux nl80211/cfg80211 - Scanning
4 * Copyright (c) 2002-2014, Jouni Malinen <j@w1.fi>
6 * Copyright (c) 2009-2010, Atheros Communications
20 #include "common/qca-vendor.h"
29 unsigned int count; member
43 if (info->count >= MAX_NL80211_NOISE_FREQS) in get_noise_for_scan_results()
68 info->freq[info->count] = in get_noise_for_scan_results()
70 info->noise[info->count] = in get_noise_for_scan_results()
72 info->count++; in get_noise_for_scan_results()
93 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_abort_scan()
95 wpa_printf(MSG_DEBUG, "nl80211: Abort scan"); in nl80211_abort_scan()
99 wpa_printf(MSG_DEBUG, "nl80211: Abort scan failed: ret=%d (%s)", in nl80211_abort_scan()
100 ret, strerror(-ret)); in nl80211_abort_scan()
114 wpa_printf(MSG_DEBUG, "nl80211: Abort vendor scan with cookie 0x%llx", in nl80211_abort_vendor_scan()
132 "nl80211: Aborting vendor scan with cookie 0x%llx failed: ret=%d (%s)", in nl80211_abort_vendor_scan()
134 strerror(-ret)); in nl80211_abort_vendor_scan()
140 return -1; in nl80211_abort_vendor_scan()
146 * wpa_driver_nl80211_scan_timeout - Scan timeout to report scan completion
150 * This function can be used as registered timeout when starting a scan to
151 * generate a scan completed event if the driver does not report this.
157 wpa_printf(MSG_DEBUG, "nl80211: Scan timeout - try to abort it"); in wpa_driver_nl80211_scan_timeout()
159 if (drv->vendor_scan_cookie && in wpa_driver_nl80211_scan_timeout()
160 nl80211_abort_vendor_scan(drv, drv->vendor_scan_cookie) == 0) in wpa_driver_nl80211_scan_timeout()
163 if (!drv->vendor_scan_cookie && in wpa_driver_nl80211_scan_timeout()
164 nl80211_abort_scan(drv->first_bss) == 0) in wpa_driver_nl80211_scan_timeout()
167 wpa_printf(MSG_DEBUG, "nl80211: Failed to abort scan"); in wpa_driver_nl80211_scan_timeout()
169 if (drv->ap_scan_as_station != NL80211_IFTYPE_UNSPECIFIED) in wpa_driver_nl80211_scan_timeout()
170 nl80211_restore_ap_mode(drv->first_bss); in wpa_driver_nl80211_scan_timeout()
172 wpa_printf(MSG_DEBUG, "nl80211: Try to get scan results"); in wpa_driver_nl80211_scan_timeout()
181 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_scan_common()
190 if (params->num_ssids) { in nl80211_scan_common()
196 for (i = 0; i < params->num_ssids; i++) { in nl80211_scan_common()
197 wpa_printf(MSG_MSGDUMP, "nl80211: Scan SSID %s", in nl80211_scan_common()
198 wpa_ssid_txt(params->ssids[i].ssid, in nl80211_scan_common()
199 params->ssids[i].ssid_len)); in nl80211_scan_common()
200 if (nla_put(msg, i + 1, params->ssids[i].ssid_len, in nl80211_scan_common()
201 params->ssids[i].ssid)) in nl80211_scan_common()
207 * If allowed, scan for 6 GHz APs that are reported by other in nl80211_scan_common()
209 * to be scanned, it is highly likely that non-PSC channels in nl80211_scan_common()
211 * transmission restrictions mandated in IEEE Std 802.11ax-2021, in nl80211_scan_common()
213 * all non-PSC channels would take a significant amount of time. in nl80211_scan_common()
215 if (!params->non_coloc_6ghz) { in nl80211_scan_common()
217 "nl80211: Scan co-located APs on 6 GHz"); in nl80211_scan_common()
221 wpa_printf(MSG_DEBUG, "nl80211: Passive scan requested"); in nl80211_scan_common()
224 if (params->extra_ies) { in nl80211_scan_common()
225 wpa_hexdump(MSG_MSGDUMP, "nl80211: Scan extra IEs", in nl80211_scan_common()
226 params->extra_ies, params->extra_ies_len); in nl80211_scan_common()
227 if (nla_put(msg, NL80211_ATTR_IE, params->extra_ies_len, in nl80211_scan_common()
228 params->extra_ies)) in nl80211_scan_common()
232 if (params->freqs) { in nl80211_scan_common()
237 for (i = 0; params->freqs[i]; i++) { in nl80211_scan_common()
238 wpa_printf(MSG_MSGDUMP, "nl80211: Scan frequency %u " in nl80211_scan_common()
239 "MHz", params->freqs[i]); in nl80211_scan_common()
240 if (nla_put_u32(msg, i + 1, params->freqs[i])) in nl80211_scan_common()
246 os_free(drv->filter_ssids); in nl80211_scan_common()
247 drv->filter_ssids = params->filter_ssids; in nl80211_scan_common()
248 params->filter_ssids = NULL; in nl80211_scan_common()
249 drv->num_filter_ssids = params->num_filter_ssids; in nl80211_scan_common()
251 if (!drv->hostapd && is_ap_interface(drv->nlmode)) { in nl80211_scan_common()
256 if (params->only_new_results) { in nl80211_scan_common()
261 if (params->low_priority && drv->have_low_prio_scan) { in nl80211_scan_common()
267 if (params->mac_addr_rand) { in nl80211_scan_common()
272 if (params->mac_addr) { in nl80211_scan_common()
274 MAC2STR(params->mac_addr)); in nl80211_scan_common()
276 params->mac_addr)) in nl80211_scan_common()
280 if (params->mac_addr_mask) { in nl80211_scan_common()
282 MACSTR, MAC2STR(params->mac_addr_mask)); in nl80211_scan_common()
284 params->mac_addr_mask)) in nl80211_scan_common()
289 if (params->duration) { in nl80211_scan_common()
290 if (!(drv->capa.rrm_flags & in nl80211_scan_common()
293 params->duration)) in nl80211_scan_common()
296 if (params->duration_mandatory && in nl80211_scan_common()
302 if (params->oce_scan) { in nl80211_scan_common()
317 if (params->min_probe_req_content) { in nl80211_scan_common()
318 if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_SCAN_MIN_PREQ) in nl80211_scan_common()
338 * wpa_driver_nl80211_scan - Request the driver to initiate scan
340 * @params: Scan parameters
341 * Returns: 0 on success, -1 on failure
346 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_scan()
347 int ret = -1, timeout; in wpa_driver_nl80211_scan()
350 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: scan request"); in wpa_driver_nl80211_scan()
351 drv->scan_for_auth = 0; in wpa_driver_nl80211_scan()
354 return -1; in wpa_driver_nl80211_scan()
358 return -1; in wpa_driver_nl80211_scan()
360 if (params->p2p_probe) { in wpa_driver_nl80211_scan()
363 wpa_printf(MSG_DEBUG, "nl80211: P2P probe - mask SuppRates"); in wpa_driver_nl80211_scan()
372 * 9, 12, 18, 24, 36, 48, 54 Mbps from non-MCS rates. All 5 GHz in wpa_driver_nl80211_scan()
384 if (params->bssid) { in wpa_driver_nl80211_scan()
385 wpa_printf(MSG_DEBUG, "nl80211: Scan for a specific BSSID: " in wpa_driver_nl80211_scan()
386 MACSTR, MAC2STR(params->bssid)); in wpa_driver_nl80211_scan()
387 if (nla_put(msg, NL80211_ATTR_BSSID, ETH_ALEN, params->bssid)) in wpa_driver_nl80211_scan()
394 if (!params->mac_addr_rand && in wpa_driver_nl80211_scan()
395 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, params->bssid)) in wpa_driver_nl80211_scan()
402 wpa_printf(MSG_DEBUG, "nl80211: Scan trigger failed: ret=%d " in wpa_driver_nl80211_scan()
403 "(%s)", ret, strerror(-ret)); in wpa_driver_nl80211_scan()
404 if (drv->hostapd && is_ap_interface(drv->nlmode)) { in wpa_driver_nl80211_scan()
406 * mac80211 does not allow scan requests in AP mode, so in wpa_driver_nl80211_scan()
409 drv->ap_scan_as_station = drv->nlmode; in wpa_driver_nl80211_scan()
422 drv->scan_state = SCAN_REQUESTED; in wpa_driver_nl80211_scan()
423 /* Not all drivers generate "scan completed" wireless event, so try to in wpa_driver_nl80211_scan()
425 timeout = drv->uses_6ghz ? 20 : 10; in wpa_driver_nl80211_scan()
426 if (drv->uses_s1g) in wpa_driver_nl80211_scan()
428 if (drv->scan_complete_events) { in wpa_driver_nl80211_scan()
430 * The driver seems to deliver events to notify when scan is in wpa_driver_nl80211_scan()
436 wpa_printf(MSG_DEBUG, "Scan requested (ret=%d) - scan timeout %d " in wpa_driver_nl80211_scan()
438 eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, drv->ctx); in wpa_driver_nl80211_scan()
440 drv, drv->ctx); in wpa_driver_nl80211_scan()
441 drv->last_scan_cmd = NL80211_CMD_TRIGGER_SCAN; in wpa_driver_nl80211_scan()
455 struct sched_scan_plan *scan_plans = params->sched_scan_plans; in nl80211_sched_scan_add_scan_plans()
460 return -1; in nl80211_sched_scan_add_scan_plans()
462 for (i = 0; i < params->sched_scan_plans_num; i++) { in nl80211_sched_scan_add_scan_plans()
466 return -1; in nl80211_sched_scan_add_scan_plans()
470 drv->capa.max_sched_scan_plan_interval) { in nl80211_sched_scan_add_scan_plans()
472 "nl80211: sched scan plan no. %u: Invalid interval: %u", in nl80211_sched_scan_add_scan_plans()
474 return -1; in nl80211_sched_scan_add_scan_plans()
479 return -1; in nl80211_sched_scan_add_scan_plans()
482 drv->capa.max_sched_scan_plan_iterations) { in nl80211_sched_scan_add_scan_plans()
484 "nl80211: sched scan plan no. %u: Invalid number of iterations: %u", in nl80211_sched_scan_add_scan_plans()
486 return -1; in nl80211_sched_scan_add_scan_plans()
492 return -1; in nl80211_sched_scan_add_scan_plans()
497 * All the scan plans must specify the number of iterations in nl80211_sched_scan_add_scan_plans()
500 * last scan plan. in nl80211_sched_scan_add_scan_plans()
506 if (i != params->sched_scan_plans_num - 1) { in nl80211_sched_scan_add_scan_plans()
508 "nl80211: All sched scan plans but the last must specify number of iterations"); in nl80211_sched_scan_add_scan_plans()
509 return -1; in nl80211_sched_scan_add_scan_plans()
518 * wpa_driver_nl80211_sched_scan - Initiate a scheduled scan
520 * @params: Scan parameters
521 * Returns: 0 on success, -1 on failure or if not supported
527 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_sched_scan()
528 int ret = -1; in wpa_driver_nl80211_sched_scan()
532 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: sched_scan request"); in wpa_driver_nl80211_sched_scan()
535 if (!drv->capa.sched_scan_supported) in wpa_driver_nl80211_sched_scan()
539 if (!params->sched_scan_plans_num || in wpa_driver_nl80211_sched_scan()
540 params->sched_scan_plans_num > drv->capa.max_sched_scan_plans) { in wpa_driver_nl80211_sched_scan()
542 "nl80211: Invalid number of sched scan plans: %u", in wpa_driver_nl80211_sched_scan()
543 params->sched_scan_plans_num); in wpa_driver_nl80211_sched_scan()
544 return -1; in wpa_driver_nl80211_sched_scan()
551 if (drv->capa.max_sched_scan_plan_iterations) { in wpa_driver_nl80211_sched_scan()
556 params->sched_scan_plans[0].interval * 1000)) in wpa_driver_nl80211_sched_scan()
560 if ((drv->num_filter_ssids && in wpa_driver_nl80211_sched_scan()
561 (int) drv->num_filter_ssids <= drv->capa.max_match_sets) || in wpa_driver_nl80211_sched_scan()
562 params->filter_rssi) { in wpa_driver_nl80211_sched_scan()
568 for (i = 0; i < drv->num_filter_ssids; i++) { in wpa_driver_nl80211_sched_scan()
571 "nl80211: Sched scan filter SSID %s", in wpa_driver_nl80211_sched_scan()
572 wpa_ssid_txt(drv->filter_ssids[i].ssid, in wpa_driver_nl80211_sched_scan()
573 drv->filter_ssids[i].ssid_len)); in wpa_driver_nl80211_sched_scan()
578 drv->filter_ssids[i].ssid_len, in wpa_driver_nl80211_sched_scan()
579 drv->filter_ssids[i].ssid) || in wpa_driver_nl80211_sched_scan()
580 (params->filter_rssi && in wpa_driver_nl80211_sched_scan()
583 params->filter_rssi))) in wpa_driver_nl80211_sched_scan()
595 if (params->filter_rssi) { in wpa_driver_nl80211_sched_scan()
600 params->filter_rssi)) in wpa_driver_nl80211_sched_scan()
603 "nl80211: Sched scan RSSI filter %d dBm", in wpa_driver_nl80211_sched_scan()
604 params->filter_rssi); in wpa_driver_nl80211_sched_scan()
611 if (params->relative_rssi_set) { in wpa_driver_nl80211_sched_scan()
616 params->relative_rssi); in wpa_driver_nl80211_sched_scan()
618 params->relative_rssi)) in wpa_driver_nl80211_sched_scan()
621 if (params->relative_adjust_rssi) { in wpa_driver_nl80211_sched_scan()
624 switch (params->relative_adjust_band) { in wpa_driver_nl80211_sched_scan()
635 rssi_adjust.delta = params->relative_adjust_rssi; in wpa_driver_nl80211_sched_scan()
644 if (params->sched_scan_start_delay && in wpa_driver_nl80211_sched_scan()
646 params->sched_scan_start_delay)) in wpa_driver_nl80211_sched_scan()
651 /* TODO: if we get an error here, we should fall back to normal scan */ in wpa_driver_nl80211_sched_scan()
655 wpa_printf(MSG_DEBUG, "nl80211: Sched scan start failed: " in wpa_driver_nl80211_sched_scan()
656 "ret=%d (%s)", ret, strerror(-ret)); in wpa_driver_nl80211_sched_scan()
660 wpa_printf(MSG_DEBUG, "nl80211: Sched scan requested (ret=%d)", ret); in wpa_driver_nl80211_sched_scan()
669 * wpa_driver_nl80211_stop_sched_scan - Stop a scheduled scan
671 * Returns: 0 on success, -1 on failure or if not supported
676 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_stop_sched_scan()
681 if (!drv->capa.sched_scan_supported) in wpa_driver_nl80211_stop_sched_scan()
689 "nl80211: Sched scan stop failed: ret=%d (%s)", in wpa_driver_nl80211_stop_sched_scan()
690 ret, strerror(-ret)); in wpa_driver_nl80211_stop_sched_scan()
693 "nl80211: Sched scan stop sent"); in wpa_driver_nl80211_stop_sched_scan()
706 if (drv->filter_ssids == NULL) in nl80211_scan_filtered()
713 for (i = 0; i < drv->num_filter_ssids; i++) { in nl80211_scan_filtered()
714 if (ssid[1] == drv->filter_ssids[i].ssid_len && in nl80211_scan_filtered()
715 os_memcmp(ssid + 2, drv->filter_ssids[i].ssid, ssid[1]) == in nl80211_scan_filtered()
786 os_memcpy(r->bssid, nla_data(bss[NL80211_BSS_BSSID]), in nl80211_parse_bss_info()
789 r->freq = nla_get_u32(bss[NL80211_BSS_FREQUENCY]); in nl80211_parse_bss_info()
791 r->beacon_int = nla_get_u16(bss[NL80211_BSS_BEACON_INTERVAL]); in nl80211_parse_bss_info()
793 r->caps = nla_get_u16(bss[NL80211_BSS_CAPABILITY]); in nl80211_parse_bss_info()
794 r->flags |= WPA_SCAN_NOISE_INVALID; in nl80211_parse_bss_info()
796 r->level = nla_get_u32(bss[NL80211_BSS_SIGNAL_MBM]); in nl80211_parse_bss_info()
797 r->level /= 100; /* mBm to dBm */ in nl80211_parse_bss_info()
798 r->flags |= WPA_SCAN_LEVEL_DBM | WPA_SCAN_QUAL_INVALID; in nl80211_parse_bss_info()
800 r->level = nla_get_u8(bss[NL80211_BSS_SIGNAL_UNSPEC]); in nl80211_parse_bss_info()
801 r->flags |= WPA_SCAN_QUAL_INVALID; in nl80211_parse_bss_info()
803 r->flags |= WPA_SCAN_LEVEL_INVALID | WPA_SCAN_QUAL_INVALID; in nl80211_parse_bss_info()
805 r->tsf = nla_get_u64(bss[NL80211_BSS_TSF]); in nl80211_parse_bss_info()
808 if (tsf > r->tsf) { in nl80211_parse_bss_info()
809 r->tsf = tsf; in nl80211_parse_bss_info()
810 r->beacon_newer = true; in nl80211_parse_bss_info()
814 r->age = nla_get_u32(bss[NL80211_BSS_SEEN_MS_AGO]); in nl80211_parse_bss_info()
824 * scan result age since the driver reports this and in nl80211_parse_bss_info()
828 r->age = ((u64) ts.tv_sec * 1000000000 + in nl80211_parse_bss_info()
829 ts.tv_nsec - boottime) / 1000000; in nl80211_parse_bss_info()
832 r->ie_len = ie_len; in nl80211_parse_bss_info()
838 r->beacon_ie_len = beacon_ie_len; in nl80211_parse_bss_info()
847 r->flags |= WPA_SCAN_ASSOCIATED; in nl80211_parse_bss_info()
855 r->parent_tsf = nla_get_u64(bss[NL80211_BSS_PARENT_TSF]); in nl80211_parse_bss_info()
856 os_memcpy(r->tsf_bssid, nla_data(bss[NL80211_BSS_PARENT_BSSID]), in nl80211_parse_bss_info()
873 struct wpa_scan_results *res = _arg->res; in bss_info_handler()
877 r = nl80211_parse_bss_info(_arg->drv, msg, _arg->bssid); in bss_info_handler()
885 tmp = os_realloc_array(res->res, res->num + 1, in bss_info_handler()
891 tmp[res->num++] = r; in bss_info_handler()
892 res->res = tmp; in bss_info_handler()
901 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) { in clear_state_mismatch()
907 drv->first_bss); in clear_state_mismatch()
915 if (!(r->flags & WPA_SCAN_ASSOCIATED)) in nl80211_check_bss_status()
918 wpa_printf(MSG_DEBUG, "nl80211: Scan results indicate BSS status with " in nl80211_check_bss_status()
919 MACSTR " as associated", MAC2STR(r->bssid)); in nl80211_check_bss_status()
920 if (is_sta_interface(drv->nlmode) && !drv->associated) { in nl80211_check_bss_status()
923 clear_state_mismatch(drv, r->bssid); in nl80211_check_bss_status()
924 } else if (is_sta_interface(drv->nlmode) && in nl80211_check_bss_status()
925 !ether_addr_equal(drv->bssid, r->bssid)) { in nl80211_check_bss_status()
929 MAC2STR(drv->bssid)); in nl80211_check_bss_status()
931 if (!ether_addr_equal(drv->sta_mlo_info.ap_mld_addr, in nl80211_check_bss_status()
932 drv->bssid)) { in nl80211_check_bss_status()
933 clear_state_mismatch(drv, r->bssid); in nl80211_check_bss_status()
935 if (!is_zero_ether_addr(drv->sta_mlo_info.ap_mld_addr)) in nl80211_check_bss_status()
937 drv, drv->sta_mlo_info.ap_mld_addr); in nl80211_check_bss_status()
939 clear_state_mismatch(drv, drv->bssid); in nl80211_check_bss_status()
954 for (i = 0; i < res->num; i++) in wpa_driver_nl80211_check_bss_status()
955 nl80211_check_bss_status(drv, res->res[i]); in wpa_driver_nl80211_check_bss_status()
964 for (i = 0; res && i < info->count; i++) { in nl80211_update_scan_res_noise()
965 if ((int) info->freq[i] != res->freq || in nl80211_update_scan_res_noise()
966 !(res->flags & WPA_SCAN_NOISE_INVALID)) in nl80211_update_scan_res_noise()
968 res->noise = info->noise[i]; in nl80211_update_scan_res_noise()
969 res->flags &= ~WPA_SCAN_NOISE_INVALID; in nl80211_update_scan_res_noise()
981 int count = 0; in nl80211_get_scan_results() local
987 if (!(msg = nl80211_cmd_msg(drv->first_bss, NLM_F_DUMP, in nl80211_get_scan_results()
997 if (ret == -EAGAIN) { in nl80211_get_scan_results()
998 count++; in nl80211_get_scan_results()
999 if (count >= 10) { in nl80211_get_scan_results()
1001 "nl80211: Failed to receive consistent scan result dump"); in nl80211_get_scan_results()
1004 "nl80211: Failed to receive consistent scan result dump - try again"); in nl80211_get_scan_results()
1012 wpa_printf(MSG_DEBUG, "nl80211: Received scan results (%lu " in nl80211_get_scan_results()
1013 "BSSes)", (unsigned long) res->num); in nl80211_get_scan_results()
1017 for (i = 0; i < res->num; ++i) in nl80211_get_scan_results()
1018 nl80211_update_scan_res_noise(res->res[i], in nl80211_get_scan_results()
1023 wpa_printf(MSG_DEBUG, "nl80211: Scan result fetch failed: ret=%d " in nl80211_get_scan_results()
1024 "(%s)", ret, strerror(-ret)); in nl80211_get_scan_results()
1031 * wpa_driver_nl80211_get_scan_results - Fetch the latest scan results
1034 * Returns: Scan results on success, -1 on failure
1040 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_scan_results()
1060 r = nl80211_parse_bss_info(ctx->drv, msg, NULL); in nl80211_dump_scan_handler()
1064 ctx->idx, MAC2STR(r->bssid), r->freq, in nl80211_dump_scan_handler()
1065 r->flags & WPA_SCAN_ASSOCIATED ? " [assoc]" : ""); in nl80211_dump_scan_handler()
1066 ctx->idx++; in nl80211_dump_scan_handler()
1077 wpa_printf(MSG_DEBUG, "nl80211: Scan result dump"); in nl80211_dump_scan()
1080 msg = nl80211_cmd_msg(drv->first_bss, NLM_F_DUMP, NL80211_CMD_GET_SCAN); in nl80211_dump_scan()
1090 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_abort_scan()
1093 * If scan_cookie is zero, a normal scan through kernel (cfg80211) in wpa_driver_nl80211_abort_scan()
1094 * was triggered, hence abort the cfg80211 scan instead of the vendor in wpa_driver_nl80211_abort_scan()
1095 * scan. in wpa_driver_nl80211_abort_scan()
1097 if (drv->scan_vendor_cmd_avail && scan_cookie) in wpa_driver_nl80211_abort_scan()
1132 * wpa_driver_nl80211_vendor_scan - Request the driver to initiate a vendor scan
1134 * @params: Scan parameters
1135 * Returns: 0 on success, -1 on failure
1140 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_vendor_scan()
1145 int ret = -1; in wpa_driver_nl80211_vendor_scan()
1148 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: vendor scan request"); in wpa_driver_nl80211_vendor_scan()
1149 drv->scan_for_auth = 0; in wpa_driver_nl80211_vendor_scan()
1161 if (params->num_ssids) { in wpa_driver_nl80211_vendor_scan()
1167 for (i = 0; i < params->num_ssids; i++) { in wpa_driver_nl80211_vendor_scan()
1168 wpa_printf(MSG_MSGDUMP, "nl80211: Scan SSID %s", in wpa_driver_nl80211_vendor_scan()
1169 wpa_ssid_txt(params->ssids[i].ssid, in wpa_driver_nl80211_vendor_scan()
1170 params->ssids[i].ssid_len)); in wpa_driver_nl80211_vendor_scan()
1171 if (nla_put(msg, i + 1, params->ssids[i].ssid_len, in wpa_driver_nl80211_vendor_scan()
1172 params->ssids[i].ssid)) in wpa_driver_nl80211_vendor_scan()
1178 if (params->extra_ies) { in wpa_driver_nl80211_vendor_scan()
1179 wpa_hexdump(MSG_MSGDUMP, "nl80211: Scan extra IEs", in wpa_driver_nl80211_vendor_scan()
1180 params->extra_ies, params->extra_ies_len); in wpa_driver_nl80211_vendor_scan()
1182 params->extra_ies_len, params->extra_ies)) in wpa_driver_nl80211_vendor_scan()
1186 if (params->freqs) { in wpa_driver_nl80211_vendor_scan()
1193 for (i = 0; params->freqs[i]; i++) { in wpa_driver_nl80211_vendor_scan()
1195 "nl80211: Scan frequency %u MHz", in wpa_driver_nl80211_vendor_scan()
1196 params->freqs[i]); in wpa_driver_nl80211_vendor_scan()
1197 if (nla_put_u32(msg, i + 1, params->freqs[i])) in wpa_driver_nl80211_vendor_scan()
1203 os_free(drv->filter_ssids); in wpa_driver_nl80211_vendor_scan()
1204 drv->filter_ssids = params->filter_ssids; in wpa_driver_nl80211_vendor_scan()
1205 params->filter_ssids = NULL; in wpa_driver_nl80211_vendor_scan()
1206 drv->num_filter_ssids = params->num_filter_ssids; in wpa_driver_nl80211_vendor_scan()
1208 if (params->low_priority && drv->have_low_prio_scan) { in wpa_driver_nl80211_vendor_scan()
1214 if (params->mac_addr_rand) { in wpa_driver_nl80211_vendor_scan()
1219 if (params->mac_addr) { in wpa_driver_nl80211_vendor_scan()
1221 MAC2STR(params->mac_addr)); in wpa_driver_nl80211_vendor_scan()
1223 ETH_ALEN, params->mac_addr)) in wpa_driver_nl80211_vendor_scan()
1227 if (params->mac_addr_mask) { in wpa_driver_nl80211_vendor_scan()
1229 MACSTR, MAC2STR(params->mac_addr_mask)); in wpa_driver_nl80211_vendor_scan()
1231 ETH_ALEN, params->mac_addr_mask)) in wpa_driver_nl80211_vendor_scan()
1240 if (params->p2p_probe) { in wpa_driver_nl80211_vendor_scan()
1243 wpa_printf(MSG_DEBUG, "nl80211: P2P probe - mask SuppRates"); in wpa_driver_nl80211_vendor_scan()
1253 * 9, 12, 18, 24, 36, 48, 54 Mbps from non-MCS rates. All 5 GHz in wpa_driver_nl80211_vendor_scan()
1265 if (params->bssid) { in wpa_driver_nl80211_vendor_scan()
1266 wpa_printf(MSG_DEBUG, "nl80211: Scan for a specific BSSID: " in wpa_driver_nl80211_vendor_scan()
1267 MACSTR, MAC2STR(params->bssid)); in wpa_driver_nl80211_vendor_scan()
1269 params->bssid)) in wpa_driver_nl80211_vendor_scan()
1273 if (is_ap_interface(drv->nlmode) && in wpa_driver_nl80211_vendor_scan()
1274 params->link_id != NL80211_DRV_LINK_ID_NA && in wpa_driver_nl80211_vendor_scan()
1275 nla_put_u8(msg, QCA_WLAN_VENDOR_ATTR_SCAN_LINK_ID, params->link_id)) in wpa_driver_nl80211_vendor_scan()
1284 "nl80211: Vendor scan trigger failed: ret=%d (%s)", in wpa_driver_nl80211_vendor_scan()
1285 ret, strerror(-ret)); in wpa_driver_nl80211_vendor_scan()
1289 drv->vendor_scan_cookie = cookie; in wpa_driver_nl80211_vendor_scan()
1290 drv->scan_state = SCAN_REQUESTED; in wpa_driver_nl80211_vendor_scan()
1292 params->scan_cookie = cookie; in wpa_driver_nl80211_vendor_scan()
1295 "nl80211: Vendor scan requested (ret=%d) - scan timeout 30 seconds, scan cookie:0x%llx", in wpa_driver_nl80211_vendor_scan()
1297 eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, drv->ctx); in wpa_driver_nl80211_vendor_scan()
1299 drv, drv->ctx); in wpa_driver_nl80211_vendor_scan()
1300 drv->last_scan_cmd = NL80211_CMD_VENDOR; in wpa_driver_nl80211_vendor_scan()
1309 * nl80211_set_default_scan_ies - Set the scan default IEs to the driver
1313 * Returns: 0 on success, -1 on failure
1318 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_default_scan_ies()
1321 int ret = -1; in nl80211_set_default_scan_ies()
1323 if (!drv->set_wifi_conf_vendor_cmd_avail) in nl80211_set_default_scan_ies()
1324 return -1; in nl80211_set_default_scan_ies()
1336 wpa_hexdump(MSG_MSGDUMP, "nl80211: Scan default IEs", ies, ies_len); in nl80211_set_default_scan_ies()
1347 "nl80211: Set scan default IEs failed: ret=%d (%s)", in nl80211_set_default_scan_ies()
1348 ret, strerror(-ret)); in nl80211_set_default_scan_ies()