P2P: Handle INTERFACE_DISABLED event on a P2P GO interface
An INTERFACE_DISABLED event received on an interface that is currently operating a P2P GO means that the group session ended. In such a case, if the interface was dynamically added remove it, and if not, remove all the network blocks that are temporary, assuming that if needed a new session will be started by an external entity. The use case was triggering rfkill (both SW and HW). This case popped up as part of a testing cycle, where after a toggle in the rfkill state, the result was that the interface was not deleted, but on the other hand the wpa_supplicant did not configure the kernel to re-start the AP functionality again. Signed-hostap: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
336167c80e
commit
6f72577f29
1 changed files with 14 additions and 0 deletions
|
@ -3196,6 +3196,20 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
||||||
break;
|
break;
|
||||||
case EVENT_INTERFACE_DISABLED:
|
case EVENT_INTERFACE_DISABLED:
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, "Interface was disabled");
|
wpa_dbg(wpa_s, MSG_DEBUG, "Interface was disabled");
|
||||||
|
#ifdef CONFIG_P2P
|
||||||
|
if (wpa_s->p2p_group_interface == P2P_GROUP_INTERFACE_GO ||
|
||||||
|
(wpa_s->current_ssid && wpa_s->current_ssid->p2p_group &&
|
||||||
|
wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO)) {
|
||||||
|
/*
|
||||||
|
* The interface was externally disabled. Remove
|
||||||
|
* it assuming an external entity will start a
|
||||||
|
* new session if needed.
|
||||||
|
*/
|
||||||
|
wpas_p2p_disconnect(wpa_s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
wpa_supplicant_mark_disassoc(wpa_s);
|
wpa_supplicant_mark_disassoc(wpa_s);
|
||||||
wpa_supplicant_set_state(wpa_s, WPA_INTERFACE_DISABLED);
|
wpa_supplicant_set_state(wpa_s, WPA_INTERFACE_DISABLED);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue