hostapd: fix SIGHUP for multi-bss
SVN-Revision: 23601
This commit is contained in:
parent
b6d0865e7f
commit
0fbff7de83
1 changed files with 89 additions and 0 deletions
89
package/hostapd/patches/440-mbss_reload_fix.patch
Normal file
89
package/hostapd/patches/440-mbss_reload_fix.patch
Normal file
|
@ -0,0 +1,89 @@
|
|||
--- a/src/ap/hostapd.c
|
||||
+++ b/src/ap/hostapd.c
|
||||
@@ -42,37 +42,8 @@ static int hostapd_setup_encryption(char
|
||||
|
||||
extern int wpa_debug_level;
|
||||
|
||||
-
|
||||
-int hostapd_reload_config(struct hostapd_iface *iface)
|
||||
+static int hostapd_reload_bss(struct hostapd_data *hapd)
|
||||
{
|
||||
- struct hostapd_data *hapd = iface->bss[0];
|
||||
- struct hostapd_config *newconf, *oldconf;
|
||||
- size_t j;
|
||||
-
|
||||
- if (iface->config_read_cb == NULL)
|
||||
- return -1;
|
||||
- newconf = iface->config_read_cb(iface->config_fname);
|
||||
- if (newconf == NULL)
|
||||
- return -1;
|
||||
-
|
||||
- /*
|
||||
- * Deauthenticate all stations since the new configuration may not
|
||||
- * allow them to use the BSS anymore.
|
||||
- */
|
||||
- for (j = 0; j < iface->num_bss; j++)
|
||||
- hostapd_flush_old_stations(iface->bss[j]);
|
||||
-
|
||||
-#ifndef CONFIG_NO_RADIUS
|
||||
- /* TODO: update dynamic data based on changed configuration
|
||||
- * items (e.g., open/close sockets, etc.) */
|
||||
- radius_client_flush(hapd->radius, 0);
|
||||
-#endif /* CONFIG_NO_RADIUS */
|
||||
-
|
||||
- oldconf = hapd->iconf;
|
||||
- hapd->iconf = newconf;
|
||||
- hapd->conf = &newconf->bss[0];
|
||||
- iface->conf = newconf;
|
||||
-
|
||||
if (hostapd_setup_wpa_psk(hapd->conf)) {
|
||||
wpa_printf(MSG_ERROR, "Failed to re-configure WPA PSK "
|
||||
"after reloading configuration");
|
||||
@@ -110,10 +81,46 @@ int hostapd_reload_config(struct hostapd
|
||||
wpa_printf(MSG_ERROR, "Could not set SSID for kernel driver");
|
||||
/* try to continue */
|
||||
}
|
||||
+ wpa_printf(MSG_DEBUG, "Reconfigured interface %s", hapd->conf->iface);
|
||||
+}
|
||||
+
|
||||
+int hostapd_reload_config(struct hostapd_iface *iface)
|
||||
+{
|
||||
+ struct hostapd_data *hapd = iface->bss[0];
|
||||
+ struct hostapd_config *newconf, *oldconf;
|
||||
+ size_t j;
|
||||
+
|
||||
+ if (iface->config_read_cb == NULL)
|
||||
+ return -1;
|
||||
+ newconf = iface->config_read_cb(iface->config_fname);
|
||||
+ if (newconf == NULL)
|
||||
+ return -1;
|
||||
+
|
||||
+ /*
|
||||
+ * Deauthenticate all stations since the new configuration may not
|
||||
+ * allow them to use the BSS anymore.
|
||||
+ */
|
||||
+ for (j = 0; j < iface->num_bss; j++)
|
||||
+ hostapd_flush_old_stations(iface->bss[j]);
|
||||
+
|
||||
+#ifndef CONFIG_NO_RADIUS
|
||||
+ /* TODO: update dynamic data based on changed configuration
|
||||
+ * items (e.g., open/close sockets, etc.) */
|
||||
+ radius_client_flush(hapd->radius, 0);
|
||||
+#endif /* CONFIG_NO_RADIUS */
|
||||
+
|
||||
+ oldconf = hapd->iconf;
|
||||
+ iface->conf = newconf;
|
||||
+
|
||||
+ for (j = 0; j < iface->num_bss; j++) {
|
||||
+ hapd = iface->bss[j];
|
||||
+ hapd->iconf = newconf;
|
||||
+ hapd->conf = &newconf->bss[j];
|
||||
+ hostapd_reload_bss(hapd);
|
||||
+ }
|
||||
|
||||
hostapd_config_free(oldconf);
|
||||
|
||||
- wpa_printf(MSG_DEBUG, "Reconfigured interface %s", hapd->conf->iface);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue