aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2019-05-28 09:14:07 (GMT)
committerJouni Malinen <j@w1.fi>2019-05-28 10:33:00 (GMT)
commitd5d156bd923cb24423b997c8db36c0552ab11833 (patch)
tree43bf79d42c4bec56241400c4d9d1f9aaa3f90b87
parent658ed3ba62752b2c188e94f2e451d4ee5c363ac4 (diff)
downloadhostap-d5d156bd923cb24423b997c8db36c0552ab11833.zip
hostap-d5d156bd923cb24423b997c8db36c0552ab11833.tar.gz
hostap-d5d156bd923cb24423b997c8db36c0552ab11833.tar.bz2
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>
-rw-r--r--src/ap/ieee802_11.c6
-rw-r--r--src/ap/sta_info.c10
2 files changed, 14 insertions, 2 deletions
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
index f050336..741c4c2 100644
--- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c
@@ -2324,8 +2324,10 @@ static void handle_auth(struct hostapd_data *hapd,
sta->flags &= ~(WLAN_STA_ASSOC | WLAN_STA_AUTH |
WLAN_STA_AUTHORIZED);
- if (hostapd_sta_add(hapd, sta->addr, 0, 0, NULL, 0, 0,
- NULL, NULL, NULL, 0,
+ if (hostapd_sta_add(hapd, sta->addr, 0, 0,
+ sta->supported_rates,
+ sta->supported_rates_len,
+ 0, NULL, NULL, NULL, 0,
sta->flags, 0, 0, 0, 0)) {
hostapd_logger(hapd, sta->addr,
HOSTAPD_MODULE_IEEE80211,
diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c
index 98b609c..51d7884 100644
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
@@ -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 *sta;
+ int i;
sta = ap_get_sta(hapd, addr);
if (sta)
@@ -695,6 +696,15 @@ struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
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)) {
wpa_printf(MSG_DEBUG, "%s: register ap_handle_timer timeout "
"for " MACSTR " (%d seconds - ap_max_inactivity)",