RRM: Send reject/refuse response only to unicast measurement request
IEEE Std 802.11-2016, 11.11.6 specifies that a station that is unable to make a requested measurement or refuses to make a measurement shall respond only if the measurement request was received within an individually addressed radio measurement request frame, but shall not respond if such a request was received in a group addressed frame. Signed-off-by: Avraham Stern <avraham.stern@intel.com>
This commit is contained in:
parent
51143af7e7
commit
b3c148e9f8
3 changed files with 22 additions and 12 deletions
|
@ -3582,6 +3582,7 @@ static void wpas_event_rx_mgmt_action(struct wpa_supplicant *wpa_s,
|
|||
if (category == WLAN_ACTION_RADIO_MEASUREMENT &&
|
||||
payload[0] == WLAN_RRM_RADIO_MEASUREMENT_REQUEST) {
|
||||
wpas_rrm_handle_radio_measurement_request(wpa_s, mgmt->sa,
|
||||
mgmt->da,
|
||||
payload + 1,
|
||||
plen - 1);
|
||||
return;
|
||||
|
|
|
@ -355,7 +355,8 @@ wpas_rrm_build_lci_report(struct wpa_supplicant *wpa_s,
|
|||
return 0;
|
||||
|
||||
reject:
|
||||
if (wpas_rrm_report_elem(buf, req->token,
|
||||
if (!is_multicast_ether_addr(wpa_s->rrm.dst_addr) &&
|
||||
wpas_rrm_report_elem(buf, req->token,
|
||||
MEASUREMENT_REPORT_MODE_REJECT_INCAPABLE,
|
||||
req->type, NULL, 0) < 0) {
|
||||
wpa_printf(MSG_DEBUG, "RRM: Failed to add report element");
|
||||
|
@ -871,19 +872,22 @@ static void wpas_beacon_rep_table(struct wpa_supplicant *wpa_s,
|
|||
|
||||
static void wpas_rrm_refuse_request(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
struct wpabuf *buf = NULL;
|
||||
if (!is_multicast_ether_addr(wpa_s->rrm.dst_addr)) {
|
||||
struct wpabuf *buf = NULL;
|
||||
|
||||
if (wpas_rrm_report_elem(&buf, wpa_s->beacon_rep_data.token,
|
||||
MEASUREMENT_REPORT_MODE_REJECT_REFUSED,
|
||||
MEASURE_TYPE_BEACON, NULL, 0)) {
|
||||
wpa_printf(MSG_ERROR, "RRM: Memory allocation failed");
|
||||
if (wpas_rrm_report_elem(&buf, wpa_s->beacon_rep_data.token,
|
||||
MEASUREMENT_REPORT_MODE_REJECT_REFUSED,
|
||||
MEASURE_TYPE_BEACON, NULL, 0)) {
|
||||
wpa_printf(MSG_ERROR, "RRM: Memory allocation failed");
|
||||
wpabuf_free(buf);
|
||||
return;
|
||||
}
|
||||
|
||||
wpas_rrm_send_msr_report(wpa_s, buf);
|
||||
wpabuf_free(buf);
|
||||
return;
|
||||
}
|
||||
|
||||
wpas_rrm_send_msr_report(wpa_s, buf);
|
||||
wpas_clear_beacon_rep_data(wpa_s);
|
||||
wpabuf_free(buf);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1164,7 +1168,8 @@ wpas_rrm_handle_msr_req_element(
|
|||
}
|
||||
|
||||
reject:
|
||||
if (wpas_rrm_report_elem(buf, req->token,
|
||||
if (!is_multicast_ether_addr(wpa_s->rrm.dst_addr) &&
|
||||
wpas_rrm_report_elem(buf, req->token,
|
||||
MEASUREMENT_REPORT_MODE_REJECT_INCAPABLE,
|
||||
req->type, NULL, 0) < 0) {
|
||||
wpa_printf(MSG_DEBUG, "RRM: Failed to add report element");
|
||||
|
@ -1225,7 +1230,7 @@ out:
|
|||
|
||||
|
||||
void wpas_rrm_handle_radio_measurement_request(struct wpa_supplicant *wpa_s,
|
||||
const u8 *src,
|
||||
const u8 *src, const u8 *dst,
|
||||
const u8 *frame, size_t len)
|
||||
{
|
||||
struct wpabuf *report;
|
||||
|
@ -1249,6 +1254,7 @@ void wpas_rrm_handle_radio_measurement_request(struct wpa_supplicant *wpa_s,
|
|||
}
|
||||
|
||||
wpa_s->rrm.token = *frame;
|
||||
os_memcpy(wpa_s->rrm.dst_addr, dst, ETH_ALEN);
|
||||
|
||||
/* Number of repetitions is not supported */
|
||||
|
||||
|
|
|
@ -428,6 +428,9 @@ struct rrm_data {
|
|||
|
||||
/* token - Dialog token of the current radio measurement */
|
||||
u8 token;
|
||||
|
||||
/* destination address of the current radio measurement request */
|
||||
u8 dst_addr[ETH_ALEN];
|
||||
};
|
||||
|
||||
enum wpa_supplicant_test_failure {
|
||||
|
@ -1308,7 +1311,7 @@ int wpas_rrm_send_neighbor_rep_request(struct wpa_supplicant *wpa_s,
|
|||
struct wpabuf *neighbor_rep),
|
||||
void *cb_ctx);
|
||||
void wpas_rrm_handle_radio_measurement_request(struct wpa_supplicant *wpa_s,
|
||||
const u8 *src,
|
||||
const u8 *src, const u8 *dst,
|
||||
const u8 *frame, size_t len);
|
||||
void wpas_rrm_handle_link_measurement_request(struct wpa_supplicant *wpa_s,
|
||||
const u8 *src,
|
||||
|
|
Loading…
Reference in a new issue