Message ID | 20190516103404.3679-1-johannes@sipsolutions.net |
---|---|
State | Superseded |
Headers | show |
Series | ap: add station with basic rates configuration | expand |
On 16/05/2019 12:34, Johannes Berg wrote: > From: Johannes Berg <johannes.berg@intel.com> > > 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. > > Change-Id: I9ff3334572ee100832345aaf84f750935399c937 > Signed-off-by: Johannes Berg <johannes.berg@intel.com> Johannes, upstreams typically don't want to see the Change-Id tags in submissions. That's unless you have an agreement to the contrary with Jouni. HTH, Jan
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index 56f6363a3dba..7aaa5ad90ee9 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, sta->flags, 0, 0, 0, 0)) { + if (hostapd_sta_add(hapd, sta->addr, 0, 0, + sta->supported_rates, + sta->supported_rates_len, + 0, NULL, NULL, sta->flags, 0, 0, 0, 0)) { hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_NOTICE, diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c index 4f9eae8477b6..23bb5b0871f2 100644 --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c @@ -670,6 +670,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) @@ -694,6 +695,13 @@ 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[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)",