(Re-)Association response frames should include radio measurement capabilities, in order to let stations know, if the can for example use neighbor requests. I tested this commit with a Samsung S8, which does not send neighbor requests without this commit and sends them afterwards. Signed-off-by: Markus Theil <markus.theil@xxxxxxxxxxxxx> --- src/ap/beacon.c | 21 --------------------- src/ap/ieee802_11.c | 24 ++++++++++++++++++++++++ src/ap/ieee802_11.h | 1 + 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/ap/beacon.c b/src/ap/beacon.c index 29c7e383d..ecee27aa6 100644 --- a/src/ap/beacon.c +++ b/src/ap/beacon.c @@ -36,27 +36,6 @@ #ifdef NEED_AP_MLME -static u8 * hostapd_eid_rm_enabled_capab(struct hostapd_data *hapd, u8 *eid, - size_t len) -{ - size_t i; - - for (i = 0; i < RRM_CAPABILITIES_IE_LEN; i++) { - if (hapd->conf->radio_measurements[i]) - break; - } - - if (i == RRM_CAPABILITIES_IE_LEN || len < 2 + RRM_CAPABILITIES_IE_LEN) - return eid; - - *eid++ = WLAN_EID_RRM_ENABLED_CAPABILITIES; - *eid++ = RRM_CAPABILITIES_IE_LEN; - os_memcpy(eid, hapd->conf->radio_measurements, RRM_CAPABILITIES_IE_LEN); - - return eid + RRM_CAPABILITIES_IE_LEN; -} - - static u8 * hostapd_eid_bss_load(struct hostapd_data *hapd, u8 *eid, size_t len) { if (len < 2 + 5) diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index ffa303d69..ec5873f95 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -139,6 +139,27 @@ u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid) } +u8 * hostapd_eid_rm_enabled_capab(struct hostapd_data *hapd, u8 *eid, + size_t len) +{ + size_t i; + + for (i = 0; i < RRM_CAPABILITIES_IE_LEN; i++) { + if (hapd->conf->radio_measurements[i]) + break; + } + + if (i == RRM_CAPABILITIES_IE_LEN || len < 2 + RRM_CAPABILITIES_IE_LEN) + return eid; + + *eid++ = WLAN_EID_RRM_ENABLED_CAPABILITIES; + *eid++ = RRM_CAPABILITIES_IE_LEN; + os_memcpy(eid, hapd->conf->radio_measurements, RRM_CAPABILITIES_IE_LEN); + + return eid + RRM_CAPABILITIES_IE_LEN; +} + + u8 * hostapd_eid_ext_supp_rates(struct hostapd_data *hapd, u8 *eid) { u8 *pos = eid; @@ -3689,6 +3710,9 @@ static u16 send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta, } #endif /* CONFIG_MBO */ + /* radio measurement capabilities */ + p = hostapd_eid_rm_enabled_capab(hapd, p, buf + buflen - p); + #ifdef CONFIG_IEEE80211R_AP if (sta && status_code == WLAN_STATUS_SUCCESS) { /* IEEE 802.11r: Mobility Domain Information, Fast BSS diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h index 0983d4c8b..5491dd4eb 100644 --- a/src/ap/ieee802_11.h +++ b/src/ap/ieee802_11.h @@ -62,6 +62,7 @@ u8 * hostapd_eid_he_capab(struct hostapd_data *hapd, u8 *eid, u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid); u8 * hostapd_eid_he_mu_edca_parameter_set(struct hostapd_data *hapd, u8 *eid); u8 * hostapd_eid_spatial_reuse(struct hostapd_data *hapd, u8 *eid); +u8 * hostapd_eid_rm_enabled_capab(struct hostapd_data *hapd, u8 *eid, size_t len); int hostapd_ht_operation_update(struct hostapd_iface *iface); void ieee802_11_send_sa_query_req(struct hostapd_data *hapd, -- 2.25.0 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap