aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-11-09 14:17:50 (GMT)
committerJouni Malinen <j@w1.fi>2010-11-09 14:17:50 (GMT)
commit5a5009dc925b19101aad099b9748ee8713375b76 (patch)
tree30c335f7ce6546f07650a6a6740935ed36aa7bf1
parentd38ae2ea85d7f67062c04f91b33fc045f9e792b5 (diff)
downloadhostap-5a5009dc925b19101aad099b9748ee8713375b76.zip
hostap-5a5009dc925b19101aad099b9748ee8713375b76.tar.gz
hostap-5a5009dc925b19101aad099b9748ee8713375b76.tar.bz2
Fix rate table handling
With the nl80211 driver, the rate table is mode dependent, so it must be initialized after the hardware mode has been selected.
-rw-r--r--src/ap/hostapd.c11
-rw-r--r--src/ap/hw_features.c12
-rw-r--r--src/ap/hw_features.h8
3 files changed, 21 insertions, 10 deletions
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index c5b678a..d7cd92c 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -728,6 +728,17 @@ int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err)
}
}
+ if (iface->current_mode) {
+ if (hostapd_prepare_rates(hapd, iface->current_mode)) {
+ wpa_printf(MSG_ERROR, "Failed to prepare rates "
+ "table.");
+ hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211,
+ HOSTAPD_LEVEL_WARNING,
+ "Failed to prepare rates table.");
+ return -1;
+ }
+ }
+
if (hapd->iconf->rts_threshold > -1 &&
hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) {
wpa_printf(MSG_ERROR, "Could not set RTS threshold for "
diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
index 3bceb52..8d9a511 100644
--- a/src/ap/hw_features.c
+++ b/src/ap/hw_features.c
@@ -101,8 +101,8 @@ int hostapd_get_hw_features(struct hostapd_iface *iface)
}
-static int hostapd_prepare_rates(struct hostapd_data *hapd,
- struct hostapd_hw_modes *mode)
+int hostapd_prepare_rates(struct hostapd_data *hapd,
+ struct hostapd_hw_modes *mode)
{
int i, num_basic_rates = 0;
int basic_rates_a[] = { 60, 120, 240, -1 };
@@ -668,14 +668,6 @@ int hostapd_select_hw_mode(struct hostapd_iface *iface)
return -1;
}
- if (hostapd_prepare_rates(iface->bss[0], iface->current_mode)) {
- wpa_printf(MSG_ERROR, "Failed to prepare rates table.");
- hostapd_logger(iface->bss[0], NULL, HOSTAPD_MODULE_IEEE80211,
- HOSTAPD_LEVEL_WARNING,
- "Failed to prepare rates table.");
- return -1;
- }
-
return 0;
}
diff --git a/src/ap/hw_features.h b/src/ap/hw_features.h
index 0295549..88c2322 100644
--- a/src/ap/hw_features.h
+++ b/src/ap/hw_features.h
@@ -25,6 +25,8 @@ const char * hostapd_hw_mode_txt(int mode);
int hostapd_hw_get_freq(struct hostapd_data *hapd, int chan);
int hostapd_hw_get_channel(struct hostapd_data *hapd, int freq);
int hostapd_check_ht_capab(struct hostapd_iface *iface);
+int hostapd_prepare_rates(struct hostapd_data *hapd,
+ struct hostapd_hw_modes *mode);
#else /* NEED_AP_MLME */
static inline void
hostapd_free_hw_features(struct hostapd_hw_modes *hw_features,
@@ -57,6 +59,12 @@ static inline int hostapd_check_ht_capab(struct hostapd_iface *iface)
return 0;
}
+static inline int hostapd_prepare_rates(struct hostapd_data *hapd,
+ struct hostapd_hw_modes *mode)
+{
+ return 0;
+}
+
#endif /* NEED_AP_MLME */
#endif /* HW_FEATURES_H */