]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
AP: add station with basic rates configuration
authorJohannes Berg <johannes.berg@intel.com>
Tue, 28 May 2019 09:14:07 +0000 (11:14 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 28 May 2019 10:33:00 +0000 (13:33 +0300)
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>
src/ap/ieee802_11.c
src/ap/sta_info.c

index f050336557fcc6dc6f17d4ef4320953d1befdd89..741c4c2ecd18c2903bc010ada463f2c83e5ccf54 100644 (file)
@@ -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,
index 98b609c18a60be77f926ee973d646715457a2e51..51d7884365483550a3740603b9dd46282fa31758 100644 (file)
@@ -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)",