Handle interface disabled/enabled more consistently
It was possible for the interface not to be marked in INTERFACE_DISABLED state in case the event was processed for P2P GO because the wpa_s instance could have been removed in case of a separate group interface. Change the state first to avoid leaving different state for the case where separate group interface is not used. Mark scan to be a normal scan on INTERFACE_ENABLED so that scanning rules (e.g., skip scan if no networks enabled) get used consistently. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
8f2cf37923
commit
635874b55a
1 changed files with 10 additions and 0 deletions
|
@ -3379,6 +3379,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
||||||
if (!wpa_s->ap_iface) {
|
if (!wpa_s->ap_iface) {
|
||||||
wpa_supplicant_set_state(wpa_s,
|
wpa_supplicant_set_state(wpa_s,
|
||||||
WPA_DISCONNECTED);
|
WPA_DISCONNECTED);
|
||||||
|
wpa_s->scan_req = NORMAL_SCAN_REQ;
|
||||||
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||||
} else
|
} else
|
||||||
wpa_supplicant_set_state(wpa_s,
|
wpa_supplicant_set_state(wpa_s,
|
||||||
|
@ -3395,6 +3396,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
||||||
if (wpa_s->p2p_group_interface == P2P_GROUP_INTERFACE_GO ||
|
if (wpa_s->p2p_group_interface == P2P_GROUP_INTERFACE_GO ||
|
||||||
(wpa_s->current_ssid && wpa_s->current_ssid->p2p_group &&
|
(wpa_s->current_ssid && wpa_s->current_ssid->p2p_group &&
|
||||||
wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO)) {
|
wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO)) {
|
||||||
|
/*
|
||||||
|
* Mark interface disabled if this happens to end up not
|
||||||
|
* being removed as a separate P2P group interface.
|
||||||
|
*/
|
||||||
|
wpa_supplicant_set_state(wpa_s, WPA_INTERFACE_DISABLED);
|
||||||
/*
|
/*
|
||||||
* The interface was externally disabled. Remove
|
* The interface was externally disabled. Remove
|
||||||
* it assuming an external entity will start a
|
* it assuming an external entity will start a
|
||||||
|
@ -3405,6 +3411,10 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
||||||
wpas_p2p_interface_unavailable(wpa_s);
|
wpas_p2p_interface_unavailable(wpa_s);
|
||||||
else
|
else
|
||||||
wpas_p2p_disconnect(wpa_s);
|
wpas_p2p_disconnect(wpa_s);
|
||||||
|
/*
|
||||||
|
* wpa_s instance may have been freed, so must not use
|
||||||
|
* it here anymore.
|
||||||
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (wpa_s->p2p_scan_work && wpa_s->global->p2p &&
|
if (wpa_s->p2p_scan_work && wpa_s->global->p2p &&
|
||||||
|
|
Loading…
Reference in a new issue