AP: add station with basic rates configuration
When a new station is added, let it have some supported rates (they're empty without this change), using the basic rates that it must support to connect. This, together with the kernel-side changes for client-side, lets us finish the complete auth/assoc handshake with higher rates than the mandatory ones, without any further config. However, the downside to this is that a broken station that doesn't check the basic rates are supported before it tries to connect will possibly not get any response to its auth frame. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
658ed3ba62
commit
d5d156bd92
2 changed files with 14 additions and 2 deletions
|
@ -2324,8 +2324,10 @@ static void handle_auth(struct hostapd_data *hapd,
|
||||||
sta->flags &= ~(WLAN_STA_ASSOC | WLAN_STA_AUTH |
|
sta->flags &= ~(WLAN_STA_ASSOC | WLAN_STA_AUTH |
|
||||||
WLAN_STA_AUTHORIZED);
|
WLAN_STA_AUTHORIZED);
|
||||||
|
|
||||||
if (hostapd_sta_add(hapd, sta->addr, 0, 0, NULL, 0, 0,
|
if (hostapd_sta_add(hapd, sta->addr, 0, 0,
|
||||||
NULL, NULL, NULL, 0,
|
sta->supported_rates,
|
||||||
|
sta->supported_rates_len,
|
||||||
|
0, NULL, NULL, NULL, 0,
|
||||||
sta->flags, 0, 0, 0, 0)) {
|
sta->flags, 0, 0, 0, 0)) {
|
||||||
hostapd_logger(hapd, sta->addr,
|
hostapd_logger(hapd, sta->addr,
|
||||||
HOSTAPD_MODULE_IEEE80211,
|
HOSTAPD_MODULE_IEEE80211,
|
||||||
|
|
|
@ -671,6 +671,7 @@ void ap_sta_session_warning_timeout(struct hostapd_data *hapd,
|
||||||
struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
|
struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
|
||||||
{
|
{
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
|
int i;
|
||||||
|
|
||||||
sta = ap_get_sta(hapd, addr);
|
sta = ap_get_sta(hapd, addr);
|
||||||
if (sta)
|
if (sta)
|
||||||
|
@ -695,6 +696,15 @@ struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < WLAN_SUPP_RATES_MAX; i++) {
|
||||||
|
if (!hapd->iface->basic_rates)
|
||||||
|
break;
|
||||||
|
if (hapd->iface->basic_rates[i] < 0)
|
||||||
|
break;
|
||||||
|
sta->supported_rates[i] = hapd->iface->basic_rates[i] / 5;
|
||||||
|
}
|
||||||
|
sta->supported_rates_len = i;
|
||||||
|
|
||||||
if (!(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_INACTIVITY_TIMER)) {
|
if (!(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_INACTIVITY_TIMER)) {
|
||||||
wpa_printf(MSG_DEBUG, "%s: register ap_handle_timer timeout "
|
wpa_printf(MSG_DEBUG, "%s: register ap_handle_timer timeout "
|
||||||
"for " MACSTR " (%d seconds - ap_max_inactivity)",
|
"for " MACSTR " (%d seconds - ap_max_inactivity)",
|
||||||
|
|
Loading…
Add table
Reference in a new issue