aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlan Peer <ilan.peer@intel.com>2013-09-02 12:40:59 (GMT)
committerJouni Malinen <j@w1.fi>2013-11-24 10:29:20 (GMT)
commit6f72577f2963759898f18e86294c275aaed9de9a (patch)
tree11bca9265228ece188e8c4d29a824aeb1af34fed
parent336167c80e4bf46e4c9974e81bb8cf72e56bb75e (diff)
downloadhostap-6f72577f2963759898f18e86294c275aaed9de9a.zip
hostap-6f72577f2963759898f18e86294c275aaed9de9a.tar.gz
hostap-6f72577f2963759898f18e86294c275aaed9de9a.tar.bz2
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>
-rw-r--r--wpa_supplicant/events.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 2894af5..7452e3e 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -3196,6 +3196,20 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
break;
case EVENT_INTERFACE_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_set_state(wpa_s, WPA_INTERFACE_DISABLED);
break;