mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-01-31 01:04:03 -05:00
hostapd: Extend the configuration of RRM capabilities
Extend the radio_measurements parameter to save all the supported RRM capabilities as it's used in RM enabled capabilities element. Make this parameter not directly configurable via config file (though, keep the radio_measurements parameter for some time for backwards compatibility). Instead, add a configuration option to enable neighbor report via radio measurements. Other features can be added later as well. Signed-off-by: David Spinadel <david.spinadel@intel.com>
This commit is contained in:
parent
56de6fe4fe
commit
010182120d
@ -3321,7 +3321,15 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
|||||||
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) {
|
} else if (os_strcmp(buf, "radio_measurements") == 0) {
|
||||||
bss->radio_measurements = atoi(pos);
|
/*
|
||||||
|
* DEPRECATED: This parameter will be removed in the future.
|
||||||
|
* Use rrm_neighbor_report instead.
|
||||||
|
*/
|
||||||
|
int val = atoi(pos);
|
||||||
|
|
||||||
|
if (val & BIT(0))
|
||||||
|
bss->radio_measurements[0] |=
|
||||||
|
WLAN_RRM_CAPS_NEIGHBOR_REPORT;
|
||||||
} else if (os_strcmp(buf, "own_ie_override") == 0) {
|
} else if (os_strcmp(buf, "own_ie_override") == 0) {
|
||||||
struct wpabuf *tmp;
|
struct wpabuf *tmp;
|
||||||
size_t len = os_strlen(pos) / 2;
|
size_t len = os_strlen(pos) / 2;
|
||||||
@ -3468,6 +3476,10 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
|||||||
} else if (os_strcmp(buf, "civic") == 0) {
|
} else if (os_strcmp(buf, "civic") == 0) {
|
||||||
wpabuf_free(conf->civic);
|
wpabuf_free(conf->civic);
|
||||||
conf->civic = wpabuf_parse_bin(pos);
|
conf->civic = wpabuf_parse_bin(pos);
|
||||||
|
} else if (os_strcmp(buf, "rrm_neighbor_report") == 0) {
|
||||||
|
if (atoi(pos))
|
||||||
|
bss->radio_measurements[0] |=
|
||||||
|
WLAN_RRM_CAPS_NEIGHBOR_REPORT;
|
||||||
} else {
|
} else {
|
||||||
wpa_printf(MSG_ERROR,
|
wpa_printf(MSG_ERROR,
|
||||||
"Line %d: unknown configuration item '%s'",
|
"Line %d: unknown configuration item '%s'",
|
||||||
|
@ -1887,6 +1887,9 @@ own_ip_addr=127.0.0.1
|
|||||||
# The content of a location civic measurement subelement
|
# The content of a location civic measurement subelement
|
||||||
#civic=<Hexdump of binary data of the location civic report>
|
#civic=<Hexdump of binary data of the location civic report>
|
||||||
|
|
||||||
|
# Enable neighbor report via radio measurements
|
||||||
|
#rrm_neighbor_report=1
|
||||||
|
|
||||||
##### TESTING OPTIONS #########################################################
|
##### TESTING OPTIONS #########################################################
|
||||||
#
|
#
|
||||||
# The options in this section are only available when the build configuration
|
# The options in this section are only available when the build configuration
|
||||||
|
@ -572,7 +572,7 @@ struct hostapd_bss_config {
|
|||||||
#define MESH_ENABLED BIT(0)
|
#define MESH_ENABLED BIT(0)
|
||||||
int mesh;
|
int mesh;
|
||||||
|
|
||||||
int radio_measurements;
|
u8 radio_measurements[RRM_CAPABILITIES_IE_LEN];
|
||||||
|
|
||||||
int vendor_vht;
|
int vendor_vht;
|
||||||
|
|
||||||
|
@ -36,18 +36,21 @@
|
|||||||
static u8 * hostapd_eid_rm_enabled_capab(struct hostapd_data *hapd, u8 *eid,
|
static u8 * hostapd_eid_rm_enabled_capab(struct hostapd_data *hapd, u8 *eid,
|
||||||
size_t len)
|
size_t len)
|
||||||
{
|
{
|
||||||
if (!hapd->conf->radio_measurements || len < 2 + 4)
|
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;
|
return eid;
|
||||||
|
|
||||||
*eid++ = WLAN_EID_RRM_ENABLED_CAPABILITIES;
|
*eid++ = WLAN_EID_RRM_ENABLED_CAPABILITIES;
|
||||||
*eid++ = 5;
|
*eid++ = RRM_CAPABILITIES_IE_LEN;
|
||||||
*eid++ = (hapd->conf->radio_measurements & BIT(0)) ?
|
os_memcpy(eid, hapd->conf->radio_measurements, RRM_CAPABILITIES_IE_LEN);
|
||||||
WLAN_RRM_CAPS_NEIGHBOR_REPORT : 0x00;
|
|
||||||
*eid++ = 0x00;
|
return eid + RRM_CAPABILITIES_IE_LEN;
|
||||||
*eid++ = 0x00;
|
|
||||||
*eid++ = 0x00;
|
|
||||||
*eid++ = 0x00;
|
|
||||||
return eid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ u16 hostapd_own_capab_info(struct hostapd_data *hapd)
|
|||||||
int capab = WLAN_CAPABILITY_ESS;
|
int capab = WLAN_CAPABILITY_ESS;
|
||||||
int privacy;
|
int privacy;
|
||||||
int dfs;
|
int dfs;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* Check if any of configured channels require DFS */
|
/* Check if any of configured channels require DFS */
|
||||||
dfs = hostapd_is_dfs_required(hapd->iface);
|
dfs = hostapd_is_dfs_required(hapd->iface);
|
||||||
@ -187,8 +188,12 @@ u16 hostapd_own_capab_info(struct hostapd_data *hapd)
|
|||||||
(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)
|
for (i = 0; i < RRM_CAPABILITIES_IE_LEN; i++) {
|
||||||
capab |= IEEE80211_CAP_RRM;
|
if (hapd->conf->radio_measurements[i]) {
|
||||||
|
capab |= IEEE80211_CAP_RRM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return capab;
|
return capab;
|
||||||
}
|
}
|
||||||
|
@ -1504,6 +1504,8 @@ struct tpc_report {
|
|||||||
u8 link_margin;
|
u8 link_margin;
|
||||||
} STRUCT_PACKED;
|
} STRUCT_PACKED;
|
||||||
|
|
||||||
|
#define RRM_CAPABILITIES_IE_LEN 5
|
||||||
|
|
||||||
/* IEEE Std 802.11-2012, 8.5.7.4 - Link Measurement Request frame format */
|
/* IEEE Std 802.11-2012, 8.5.7.4 - Link Measurement Request frame format */
|
||||||
struct rrm_link_measurement_request {
|
struct rrm_link_measurement_request {
|
||||||
u8 dialog_token;
|
u8 dialog_token;
|
||||||
|
Loading…
Reference in New Issue
Block a user