]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wpa_supplicant: Do not disconnect on deinit if WoWLAN is enabled
authorAlfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
Thu, 14 Jun 2018 09:00:43 +0000 (11:00 +0200)
committerJouni Malinen <j@w1.fi>
Mon, 30 Dec 2019 16:51:06 +0000 (18:51 +0200)
Do not disconnect on interface deinit when WoWLAN is enabled, so we can
boot the system with WoWLAN after S5 (poweroff).

Signed-off-by: Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
wpa_supplicant/driver_i.h
wpa_supplicant/wpa_supplicant.c

index cf9972a6b7d5198f16bdc1f9a10bf2516b5a6636..31643a858c510dfa6c8945a75536a1d0d040ee38 100644 (file)
@@ -681,6 +681,13 @@ static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
                                          qos_map_set_len);
 }
 
+static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s)
+{
+       if (!wpa_s->driver->get_wowlan)
+               return 0;
+       return wpa_s->driver->get_wowlan(wpa_s->drv_priv);
+}
+
 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
                                 const struct wowlan_triggers *triggers)
 {
index 2ef1dcdc12537804530d001f60b44a3c7e22b5ad..ce4ce0bfb22f61444e51ba6ee92774e7e64213b5 100644 (file)
@@ -6318,11 +6318,17 @@ static void wpa_supplicant_deinit_iface(struct wpa_supplicant *wpa_s,
 
        wpa_s->disconnected = 1;
        if (wpa_s->drv_priv) {
-               wpa_supplicant_deauthenticate(wpa_s,
-                                             WLAN_REASON_DEAUTH_LEAVING);
+               /* Don't deauthenticate if WoWLAN is enabled */
+               if (!wpa_drv_get_wowlan(wpa_s)) {
+                       wpa_supplicant_deauthenticate(
+                               wpa_s, WLAN_REASON_DEAUTH_LEAVING);
 
-               wpa_drv_set_countermeasures(wpa_s, 0);
-               wpa_clear_keys(wpa_s, NULL);
+                       wpa_drv_set_countermeasures(wpa_s, 0);
+                       wpa_clear_keys(wpa_s, NULL);
+               } else {
+                       wpa_msg(wpa_s, MSG_INFO,
+                               "Do not deauthenticate as part of interface deinit since WoWLAN is enabled");
+               }
        }
 
        wpa_supplicant_cleanup(wpa_s);