Skip normal scan when PNO is already in progress
authorRaja Mani <rmani@qti.qualcomm.com>
Sat, 18 Jan 2014 14:46:24 +0000 (20:16 +0530)
committerJouni Malinen <j@w1.fi>
Tue, 21 Jan 2014 14:19:49 +0000 (16:19 +0200)
Scan request failures are observed in wpa_supplicant debug log when
Android framework starts PNO scan in driver via ctrl interface command
'set pno 1' and wpa_supplicant also tries to issue a scan request after
PNO has started in the driver.

Some drivers may reject a normal scan request when PNO is already in
progress. wpa_supplicant should consider PNO status before issuing start
scan request to the driver. Otherwise, wpa_supplicant will get failures
from driver for the scan request and it will end up rescheduling scan
request in periodic interval and get a start scan request failure for
each attempt.

In order to avoid unnecessary scan attempt when PNO scan is already
running, PNO status is checked before issuing scan request to driver.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/events.c
wpa_supplicant/scan.c

index 2121bf0..6e6b011 100644 (file)
@@ -3236,6 +3236,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
                                         data->driver_gtk_rekey.replay_ctr);
                break;
        case EVENT_SCHED_SCAN_STOPPED:
+               wpa_s->pno = 0;
                wpa_s->sched_scanning = 0;
                wpa_supplicant_notify_scanning(wpa_s, 0);
 
index da827bd..ed8fa30 100644 (file)
@@ -521,6 +521,11 @@ static void wpa_supplicant_scan(void *eloop_ctx, void *timeout_ctx)
        size_t max_ssids;
        enum wpa_states prev_state;
 
+       if (wpa_s->pno) {
+               wpa_dbg(wpa_s, MSG_DEBUG, "Skip scan - PNO is in progress");
+               return;
+       }
+
        if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED) {
                wpa_dbg(wpa_s, MSG_DEBUG, "Skip scan - interface disabled");
                return;