hostapd: fix frequency selection for ap+sta

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 39426
This commit is contained in:
Felix Fietkau 2014-01-30 13:21:30 +00:00
parent 5dcb4cc7d1
commit 2725913d2a
4 changed files with 23 additions and 13 deletions

View file

@ -17,3 +17,13 @@
if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next &&
ssid->wpa_passphrase_set && ssid->wpa_passphrase) {
/*
@@ -172,6 +182,9 @@ int hostapd_reload_config(struct hostapd
oldconf = hapd->iconf;
iface->conf = newconf;
+ if (iface->conf->channel)
+ iface->freq = hostapd_hw_get_freq(hapd, iface->conf->channel);
+
for (j = 0; j < iface->num_bss; j++) {
hapd = iface->bss[j];
hapd->iconf = newconf;

View file

@ -1,6 +1,6 @@
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -1100,13 +1100,8 @@ int hostapd_setup_interface_complete(str
@@ -1103,13 +1103,8 @@ int hostapd_setup_interface_complete(str
size_t j;
u8 *prev_addr;
@ -16,7 +16,7 @@
wpa_printf(MSG_DEBUG, "Completing interface initialization");
if (iface->conf->channel) {
@@ -1137,7 +1132,7 @@ int hostapd_setup_interface_complete(str
@@ -1140,7 +1135,7 @@ int hostapd_setup_interface_complete(str
hapd->iconf->vht_oper_centr_freq_seg1_idx)) {
wpa_printf(MSG_ERROR, "Could not set channel for "
"kernel driver");
@ -25,7 +25,7 @@
}
}
@@ -1148,7 +1143,7 @@ int hostapd_setup_interface_complete(str
@@ -1151,7 +1146,7 @@ int hostapd_setup_interface_complete(str
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211,
HOSTAPD_LEVEL_WARNING,
"Failed to prepare rates table.");
@ -34,7 +34,7 @@
}
}
@@ -1156,14 +1151,14 @@ int hostapd_setup_interface_complete(str
@@ -1159,14 +1154,14 @@ int hostapd_setup_interface_complete(str
hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) {
wpa_printf(MSG_ERROR, "Could not set RTS threshold for "
"kernel driver");
@ -51,7 +51,7 @@
}
prev_addr = hapd->own_addr;
@@ -1173,7 +1168,7 @@ int hostapd_setup_interface_complete(str
@@ -1176,7 +1171,7 @@ int hostapd_setup_interface_complete(str
if (j)
os_memcpy(hapd->own_addr, prev_addr, ETH_ALEN);
if (hostapd_setup_bss(hapd, j == 0))
@ -60,7 +60,7 @@
if (hostapd_mac_comp_empty(hapd->conf->bssid) == 0)
prev_addr = hapd->own_addr;
}
@@ -1188,7 +1183,7 @@ int hostapd_setup_interface_complete(str
@@ -1191,7 +1186,7 @@ int hostapd_setup_interface_complete(str
if (hostapd_driver_commit(hapd) < 0) {
wpa_printf(MSG_ERROR, "%s: Failed to commit driver "
"configuration", __func__);
@ -69,7 +69,7 @@
}
/*
@@ -1213,6 +1208,13 @@ int hostapd_setup_interface_complete(str
@@ -1216,6 +1211,13 @@ int hostapd_setup_interface_complete(str
iface->interfaces->terminate_on_error--;
return 0;

View file

@ -31,7 +31,7 @@
#include "ieee802_11_auth.h"
#include "vlan_init.h"
#include "wpa_auth.h"
@@ -329,6 +330,7 @@ static void hostapd_cleanup(struct hosta
@@ -332,6 +333,7 @@ static void hostapd_cleanup(struct hosta
static void hostapd_cleanup_iface_partial(struct hostapd_iface *iface)
{
wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);

View file

@ -498,7 +498,7 @@
+#endif
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -262,6 +262,7 @@ static void hostapd_free_hapd_data(struc
@@ -265,6 +265,7 @@ static void hostapd_free_hapd_data(struc
hapd->started = 0;
wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
@ -506,7 +506,7 @@
iapp_deinit(hapd->iapp);
hapd->iapp = NULL;
accounting_deinit(hapd);
@@ -831,6 +832,8 @@ static int hostapd_setup_bss(struct host
@@ -834,6 +835,8 @@ static int hostapd_setup_bss(struct host
if (hapd->driver && hapd->driver->set_operstate)
hapd->driver->set_operstate(hapd->drv_priv, 1);
@ -515,7 +515,7 @@
return 0;
}
@@ -1105,6 +1108,7 @@ int hostapd_setup_interface_complete(str
@@ -1108,6 +1111,7 @@ int hostapd_setup_interface_complete(str
if (err)
goto error;
@ -523,7 +523,7 @@
wpa_printf(MSG_DEBUG, "Completing interface initialization");
if (iface->conf->channel) {
#ifdef NEED_AP_MLME
@@ -1213,6 +1217,7 @@ int hostapd_setup_interface_complete(str
@@ -1216,6 +1220,7 @@ int hostapd_setup_interface_complete(str
error:
wpa_printf(MSG_ERROR, "Interface initialization failed");
@ -531,7 +531,7 @@
hostapd_set_state(iface, HAPD_IFACE_DISABLED);
if (iface->interfaces && iface->interfaces->terminate_on_error)
eloop_terminate();
@@ -1534,6 +1539,7 @@ void hostapd_interface_deinit_free(struc
@@ -1537,6 +1542,7 @@ void hostapd_interface_deinit_free(struc
(unsigned int) iface->conf->num_bss);
driver = iface->bss[0]->driver;
drv_priv = iface->bss[0]->drv_priv;