[PATCH 04/18] sched_scan: Restart pno/sched_scan on channel list update
Jouni Malinen
j at w1.fi
Sun Sep 25 12:21:56 PDT 2016
On Mon, Sep 05, 2016 at 05:32:57PM +0300, andrei.otcheretianski at intel.com wrote:
> As the scan channels might need to change when the channel list has
> been updated by the kernel.
> diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
> @@ -3223,14 +3223,22 @@ static void wpa_supplicant_update_channel_list(
> free_hw_features(ifs);
> ifs->hw.modes = wpa_drv_get_hw_feature_data(
> ifs, &ifs->hw.num_modes, &ifs->hw.flags);
> - }
>
> - /* Restart sched_scan with updated channel list */
> - if (wpa_s->sched_scanning) {
> - wpa_dbg(wpa_s, MSG_DEBUG,
> - "Channel list changed restart sched scan.");
> - wpa_supplicant_cancel_sched_scan(wpa_s);
> - wpa_supplicant_req_scan(wpa_s, 0, 0);
> + /* Restart pno/sched_scan with updated channel list */
> + if (ifs->pno) {
> + wpas_stop_pno(ifs);
> + wpas_start_pno(ifs);
> + } else if (ifs->sched_scanning && !ifs->pno_sched_pending) {
OK.. So this part looks straightforward..
> + /*
> + * simulate a timeout to restart it. reset the state
> + * to start from the beginning.
> + */
> + wpa_dbg(ifs, MSG_DEBUG,
> + "Channel list changed restart sched scan.");
> + ifs->sched_scan_timed_out = 1;
> + wpa_s->prev_sched_ssid = NULL;
> + wpa_supplicant_cancel_sched_scan(ifs);
While this does something else than the previous code. Could you please
clarify why this uses a simulated timeout to restart sched_scan?
And is that "wpa_s->prev_sched_ssid = NULL" really supposed to use wpa_s
instead of ifs? I'd assume this was a missed change from moving to be
within the dl_list_for_each loop with ifs being the pointer to the
specific interface while wpa_s is pointing to the interface that
received the channel list update event.
--
Jouni Malinen PGP id EFC895FA
More information about the Hostap
mailing list