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.
This commit is contained in:
parent
d38ae2ea85
commit
5a5009dc92
3 changed files with 21 additions and 10 deletions
|
@ -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 &&
|
if (hapd->iconf->rts_threshold > -1 &&
|
||||||
hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) {
|
hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) {
|
||||||
wpa_printf(MSG_ERROR, "Could not set RTS threshold for "
|
wpa_printf(MSG_ERROR, "Could not set RTS threshold for "
|
||||||
|
|
|
@ -101,8 +101,8 @@ int hostapd_get_hw_features(struct hostapd_iface *iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_prepare_rates(struct hostapd_data *hapd,
|
int hostapd_prepare_rates(struct hostapd_data *hapd,
|
||||||
struct hostapd_hw_modes *mode)
|
struct hostapd_hw_modes *mode)
|
||||||
{
|
{
|
||||||
int i, num_basic_rates = 0;
|
int i, num_basic_rates = 0;
|
||||||
int basic_rates_a[] = { 60, 120, 240, -1 };
|
int basic_rates_a[] = { 60, 120, 240, -1 };
|
||||||
|
@ -668,14 +668,6 @@ int hostapd_select_hw_mode(struct hostapd_iface *iface)
|
||||||
return -1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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_freq(struct hostapd_data *hapd, int chan);
|
||||||
int hostapd_hw_get_channel(struct hostapd_data *hapd, int freq);
|
int hostapd_hw_get_channel(struct hostapd_data *hapd, int freq);
|
||||||
int hostapd_check_ht_capab(struct hostapd_iface *iface);
|
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 */
|
#else /* NEED_AP_MLME */
|
||||||
static inline void
|
static inline void
|
||||||
hostapd_free_hw_features(struct hostapd_hw_modes *hw_features,
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int hostapd_prepare_rates(struct hostapd_data *hapd,
|
||||||
|
struct hostapd_hw_modes *mode)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* NEED_AP_MLME */
|
#endif /* NEED_AP_MLME */
|
||||||
|
|
||||||
#endif /* HW_FEATURES_H */
|
#endif /* HW_FEATURES_H */
|
||||||
|
|
Loading…
Reference in a new issue