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");
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");
+ wpabuf_free(buf);
+ return;
+ }
- 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");
+ 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);
}
}
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");
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;
}
wpa_s->rrm.token = *frame;
+ os_memcpy(wpa_s->rrm.dst_addr, dst, ETH_ALEN);
/* Number of repetitions is not supported */