RRM: Add AP mode minimal advertisement support for testing
The new hostapd.conf radio_measurements parameter can now be used to configure a test build to advertise support for radio measurements with neighbor report enabled. There is no real functionality that would actually process the request, i.e., this only for the purpose of minimal STA side testing for now. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
357edd386f
commit
0629eeb490
4 changed files with 31 additions and 0 deletions
|
@ -3129,6 +3129,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
pos++;
|
pos++;
|
||||||
WPA_PUT_LE16(&bss->bss_load_test[3], atoi(pos));
|
WPA_PUT_LE16(&bss->bss_load_test[3], atoi(pos));
|
||||||
bss->bss_load_test_set = 1;
|
bss->bss_load_test_set = 1;
|
||||||
|
} else if (os_strcmp(buf, "radio_measurements") == 0) {
|
||||||
|
bss->radio_measurements = atoi(pos);
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
} else if (os_strcmp(buf, "vendor_elements") == 0) {
|
} else if (os_strcmp(buf, "vendor_elements") == 0) {
|
||||||
struct wpabuf *elems;
|
struct wpabuf *elems;
|
||||||
|
|
|
@ -549,6 +549,8 @@ struct hostapd_bss_config {
|
||||||
|
|
||||||
#define MESH_ENABLED BIT(0)
|
#define MESH_ENABLED BIT(0)
|
||||||
int mesh;
|
int mesh;
|
||||||
|
|
||||||
|
int radio_measurements;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,24 @@
|
||||||
|
|
||||||
#ifdef NEED_AP_MLME
|
#ifdef NEED_AP_MLME
|
||||||
|
|
||||||
|
static u8 * hostapd_eid_rm_enabled_capab(struct hostapd_data *hapd, u8 *eid,
|
||||||
|
size_t len)
|
||||||
|
{
|
||||||
|
if (!hapd->conf->radio_measurements || len < 2 + 4)
|
||||||
|
return eid;
|
||||||
|
|
||||||
|
*eid++ = WLAN_EID_RRM_ENABLED_CAPABILITIES;
|
||||||
|
*eid++ = 5;
|
||||||
|
*eid++ = (hapd->conf->radio_measurements & BIT(0)) ?
|
||||||
|
WLAN_RRM_CAPS_NEIGHBOR_REPORT : 0x00;
|
||||||
|
*eid++ = 0x00;
|
||||||
|
*eid++ = 0x00;
|
||||||
|
*eid++ = 0x00;
|
||||||
|
*eid++ = 0x00;
|
||||||
|
return eid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static u8 * hostapd_eid_bss_load(struct hostapd_data *hapd, u8 *eid, size_t len)
|
static u8 * hostapd_eid_bss_load(struct hostapd_data *hapd, u8 *eid, size_t len)
|
||||||
{
|
{
|
||||||
if (len < 2 + 5)
|
if (len < 2 + 5)
|
||||||
|
@ -409,6 +427,8 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
|
||||||
|
|
||||||
pos = hostapd_eid_bss_load(hapd, pos, epos - pos);
|
pos = hostapd_eid_bss_load(hapd, pos, epos - pos);
|
||||||
|
|
||||||
|
pos = hostapd_eid_rm_enabled_capab(hapd, pos, epos - pos);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211N
|
#ifdef CONFIG_IEEE80211N
|
||||||
pos = hostapd_eid_ht_capabilities(hapd, pos);
|
pos = hostapd_eid_ht_capabilities(hapd, pos);
|
||||||
pos = hostapd_eid_ht_operation(hapd, pos);
|
pos = hostapd_eid_ht_operation(hapd, pos);
|
||||||
|
@ -819,6 +839,10 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
|
||||||
tailpos = hostapd_eid_wpa(hapd, tailpos, tail + BEACON_TAIL_BUF_SIZE -
|
tailpos = hostapd_eid_wpa(hapd, tailpos, tail + BEACON_TAIL_BUF_SIZE -
|
||||||
tailpos);
|
tailpos);
|
||||||
|
|
||||||
|
tailpos = hostapd_eid_rm_enabled_capab(hapd, tailpos,
|
||||||
|
tail + BEACON_TAIL_BUF_SIZE -
|
||||||
|
tailpos);
|
||||||
|
|
||||||
tailpos = hostapd_eid_bss_load(hapd, tailpos,
|
tailpos = hostapd_eid_bss_load(hapd, tailpos,
|
||||||
tail + BEACON_TAIL_BUF_SIZE - tailpos);
|
tail + BEACON_TAIL_BUF_SIZE - tailpos);
|
||||||
|
|
||||||
|
|
|
@ -199,6 +199,9 @@ u16 hostapd_own_capab_info(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
(hapd->iconf->spectrum_mgmt_required || dfs))
|
(hapd->iconf->spectrum_mgmt_required || dfs))
|
||||||
capab |= WLAN_CAPABILITY_SPECTRUM_MGMT;
|
capab |= WLAN_CAPABILITY_SPECTRUM_MGMT;
|
||||||
|
|
||||||
|
if (hapd->conf->radio_measurements)
|
||||||
|
capab |= IEEE80211_CAP_RRM;
|
||||||
|
|
||||||
return capab;
|
return capab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue