hostapd: fix AP+STA reconnects
[openwrt.git] / 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 }
This page took 0.053709 seconds and 5 git commands to generate.