RRM: Send Radio Measurement response when beacon report scan fails

When failing to trigger scan for beacon report (e.g., when the
requested duration is not supported by the driver), send a
Radio Measurement response with the mode set to refused and don't
retry the scan.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
This commit is contained in:
Avraham Stern 2017-06-11 15:41:20 +03:00 committed by Jouni Malinen
parent d557183150
commit 3756acfd48
3 changed files with 8 additions and 2 deletions

View file

@ -870,7 +870,7 @@ static void wpas_beacon_rep_table(struct wpa_supplicant *wpa_s,
} }
static void wpas_rrm_refuse_request(struct wpa_supplicant *wpa_s) void wpas_rrm_refuse_request(struct wpa_supplicant *wpa_s)
{ {
if (!is_multicast_ether_addr(wpa_s->rrm.dst_addr)) { if (!is_multicast_ether_addr(wpa_s->rrm.dst_addr)) {
struct wpabuf *buf = NULL; struct wpabuf *buf = NULL;

View file

@ -200,7 +200,8 @@ static void wpas_trigger_scan_cb(struct wpa_radio_work *work, int deinit)
wpa_scan_free_params(params); wpa_scan_free_params(params);
work->ctx = NULL; work->ctx = NULL;
if (ret) { if (ret) {
int retry = wpa_s->last_scan_req != MANUAL_SCAN_REQ; int retry = wpa_s->last_scan_req != MANUAL_SCAN_REQ &&
!wpa_s->beacon_rep_data.token;
if (wpa_s->disconnected) if (wpa_s->disconnected)
retry = 0; retry = 0;
@ -222,6 +223,10 @@ static void wpas_trigger_scan_cb(struct wpa_radio_work *work, int deinit)
/* Clear the scan_res_handler */ /* Clear the scan_res_handler */
wpa_s->scan_res_handler = NULL; wpa_s->scan_res_handler = NULL;
} }
if (wpa_s->beacon_rep_data.token)
wpas_rrm_refuse_request(wpa_s);
return; return;
} }

View file

@ -1317,6 +1317,7 @@ void wpas_rrm_handle_link_measurement_request(struct wpa_supplicant *wpa_s,
const u8 *src, const u8 *src,
const u8 *frame, size_t len, const u8 *frame, size_t len,
int rssi); int rssi);
void wpas_rrm_refuse_request(struct wpa_supplicant *wpa_s);
int wpas_beacon_rep_scan_process(struct wpa_supplicant *wpa_s, int wpas_beacon_rep_scan_process(struct wpa_supplicant *wpa_s,
struct wpa_scan_results *scan_res, struct wpa_scan_results *scan_res,
struct scan_info *info); struct scan_info *info);