Refactor channel list update event in wpa_supplicant
Update hardware features for all interfaces inside the loop, don't treat the calling wpa_s instance specially. Perform the P2P channel list updates after the hardware features are updated. This will prevent P2P from relying on stale information. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
This commit is contained in:
parent
b130812100
commit
0f4bccdbbe
1 changed files with 7 additions and 17 deletions
|
@ -2998,26 +2998,14 @@ static void wpa_supplicant_update_channel_list(
|
|||
if (wpa_s->drv_priv == NULL)
|
||||
return; /* Ignore event during drv initialization */
|
||||
|
||||
free_hw_features(wpa_s);
|
||||
wpa_s->hw.modes = wpa_drv_get_hw_feature_data(
|
||||
wpa_s, &wpa_s->hw.num_modes, &wpa_s->hw.flags);
|
||||
|
||||
wpas_p2p_update_channel_list(wpa_s);
|
||||
|
||||
/*
|
||||
* Check other interfaces to see if they share the same radio. If
|
||||
* so, they get updated with this same hw mode info.
|
||||
*/
|
||||
dl_list_for_each(ifs, &wpa_s->radio->ifaces, struct wpa_supplicant,
|
||||
radio_list) {
|
||||
if (ifs != wpa_s) {
|
||||
wpa_printf(MSG_DEBUG, "%s: Updating hw mode",
|
||||
ifs->ifname);
|
||||
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) {
|
||||
|
@ -3026,6 +3014,8 @@ static void wpa_supplicant_update_channel_list(
|
|||
wpa_supplicant_cancel_sched_scan(wpa_s);
|
||||
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||
}
|
||||
|
||||
wpas_p2p_update_channel_list(wpa_s);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue