[PATCH 04/18] sched_scan: Restart pno/sched_scan on channel list update

Peer, Ilan ilan.peer at intel.com
Tue Sep 27 00:05:22 PDT 2016



> -----Original Message-----
> From: Hostap [mailto:hostap-bounces at lists.infradead.org] On Behalf Of
> Jouni Malinen
> Sent: Sunday, September 25, 2016 22:22
> To: Otcheretianski, Andrei <andrei.otcheretianski at intel.com>
> Cc: Arik Nemtsov <arik at wizery.com>; hostap at lists.infradead.org; Nemtsov,
> ArikX <arikx.nemtsov at intel.com>
> Subject: Re: [PATCH 04/18] sched_scan: Restart pno/sched_scan on channel
> list update
> 
> 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?
> 

The simulated timeout was to handle possible race where an ongoing scheduled scan has stopped asynchronously while trying to restart a new scheduled scan cycle. This is similar to what is done in wpa_supplicant_sched_scan_timeout().

> 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.
> 

That's a bug. I'll prepare a fixed version for the patch.

Regards,

Ilan.



More information about the Hostap mailing list