Root/package/hostapd/patches/440-mbss_reload_fix.patch

1--- a/src/ap/hostapd.c
2+++ b/src/ap/hostapd.c
3@@ -42,37 +42,8 @@ static int hostapd_setup_encryption(char
4 
5 extern int wpa_debug_level;
6 
7-
8-int hostapd_reload_config(struct hostapd_iface *iface)
9+static int hostapd_reload_bss(struct hostapd_data *hapd)
10 {
11- struct hostapd_data *hapd = iface->bss[0];
12- struct hostapd_config *newconf, *oldconf;
13- size_t j;
14-
15- if (iface->config_read_cb == NULL)
16- return -1;
17- newconf = iface->config_read_cb(iface->config_fname);
18- if (newconf == NULL)
19- return -1;
20-
21- /*
22- * Deauthenticate all stations since the new configuration may not
23- * allow them to use the BSS anymore.
24- */
25- for (j = 0; j < iface->num_bss; j++)
26- hostapd_flush_old_stations(iface->bss[j]);
27-
28-#ifndef CONFIG_NO_RADIUS
29- /* TODO: update dynamic data based on changed configuration
30- * items (e.g., open/close sockets, etc.) */
31- radius_client_flush(hapd->radius, 0);
32-#endif /* CONFIG_NO_RADIUS */
33-
34- oldconf = hapd->iconf;
35- hapd->iconf = newconf;
36- hapd->conf = &newconf->bss[0];
37- iface->conf = newconf;
38-
39     if (hostapd_setup_wpa_psk(hapd->conf)) {
40         wpa_printf(MSG_ERROR, "Failed to re-configure WPA PSK "
41                "after reloading configuration");
42@@ -110,10 +81,46 @@ int hostapd_reload_config(struct hostapd
43         wpa_printf(MSG_ERROR, "Could not set SSID for kernel driver");
44         /* try to continue */
45     }
46+ wpa_printf(MSG_DEBUG, "Reconfigured interface %s", hapd->conf->iface);
47+}
48+
49+int hostapd_reload_config(struct hostapd_iface *iface)
50+{
51+ struct hostapd_data *hapd = iface->bss[0];
52+ struct hostapd_config *newconf, *oldconf;
53+ size_t j;
54+
55+ if (iface->config_read_cb == NULL)
56+ return -1;
57+ newconf = iface->config_read_cb(iface->config_fname);
58+ if (newconf == NULL)
59+ return -1;
60+
61+ /*
62+ * Deauthenticate all stations since the new configuration may not
63+ * allow them to use the BSS anymore.
64+ */
65+ for (j = 0; j < iface->num_bss; j++)
66+ hostapd_flush_old_stations(iface->bss[j]);
67+
68+#ifndef CONFIG_NO_RADIUS
69+ /* TODO: update dynamic data based on changed configuration
70+ * items (e.g., open/close sockets, etc.) */
71+ radius_client_flush(hapd->radius, 0);
72+#endif /* CONFIG_NO_RADIUS */
73+
74+ oldconf = hapd->iconf;
75+ iface->conf = newconf;
76+
77+ for (j = 0; j < iface->num_bss; j++) {
78+ hapd = iface->bss[j];
79+ hapd->iconf = newconf;
80+ hapd->conf = &newconf->bss[j];
81+ hostapd_reload_bss(hapd);
82+ }
83 
84     hostapd_config_free(oldconf);
85 
86- wpa_printf(MSG_DEBUG, "Reconfigured interface %s", hapd->conf->iface);
87 
88     return 0;
89 }
90

Archive Download this file



interactive