From: Avraham Stern <avraham.stern@xxxxxxxxx> Move wpas_rrm_send_msr_report() and wpas_rrm_send_msr_report_mpdu() upper in rrm.c file so they can be used to send the measurement report in case the measurement request is rejected. This will be used in the next patch. Signed-off-by: Avrahams Stern <avraham.stern@xxxxxxxxx> --- wpa_supplicant/rrm.c | 97 ++++++++++++++++++++++++++-------------------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/wpa_supplicant/rrm.c b/wpa_supplicant/rrm.c index 3f35ace..69f7df9 100644 --- a/wpa_supplicant/rrm.c +++ b/wpa_supplicant/rrm.c @@ -373,6 +373,55 @@ reject: } +static void wpas_rrm_send_msr_report_mpdu(struct wpa_supplicant *wpa_s, + const u8 *data, size_t len) +{ + struct wpabuf *report = wpabuf_alloc(len + 3); + + if (!report) + return; + + wpabuf_put_u8(report, WLAN_ACTION_RADIO_MEASUREMENT); + wpabuf_put_u8(report, WLAN_RRM_RADIO_MEASUREMENT_REPORT); + wpabuf_put_u8(report, wpa_s->rrm.token); + + wpabuf_put_data(report, data, len); + + if (wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid, + wpa_s->own_addr, wpa_s->bssid, + wpabuf_head(report), wpabuf_len(report), 0)) { + wpa_printf(MSG_ERROR, + "RRM: Radio measurement report failed. Send action failed"); + } + + wpabuf_free(report); +} + + +static void wpas_rrm_send_msr_report(struct wpa_supplicant *wpa_s, + struct wpabuf *buf) +{ + int len = wpabuf_len(buf); + const u8 *pos = wpabuf_head_u8(buf), *next = pos; + +#define MPDU_REPORT_LEN (int)(IEEE80211_MAX_MMPDU_SIZE - IEEE80211_HDRLEN - 3) + + while (len) { + int send_len = (len > MPDU_REPORT_LEN) ? next - pos : len; + + if (send_len == len || + (send_len + next[1] + 2) > MPDU_REPORT_LEN) { + wpas_rrm_send_msr_report_mpdu(wpa_s, pos, send_len); + len -= send_len; + pos = next; + } + + next += next[1] + 2; + } +#undef MPDU_REPORT_LEN +} + + static int wpas_rrm_handle_msr_req_element(struct wpa_supplicant *wpa_s, struct rrm_measurement_request_element *req, @@ -473,54 +522,6 @@ out: } -static void wpas_rrm_send_msr_report_mpdu(struct wpa_supplicant *wpa_s, - const u8 *data, size_t len) -{ - struct wpabuf *report = wpabuf_alloc(len + 3); - - if (!report) - return; - - wpabuf_put_u8(report, WLAN_ACTION_RADIO_MEASUREMENT); - wpabuf_put_u8(report, WLAN_RRM_RADIO_MEASUREMENT_REPORT); - wpabuf_put_u8(report, wpa_s->rrm.token); - - wpabuf_put_data(report, data, len); - - if (wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid, - wpa_s->own_addr, wpa_s->bssid, - wpabuf_head(report), wpabuf_len(report), 0)) { - wpa_printf(MSG_ERROR, - "RRM: Radio measurement report failed. Send action failed"); - } - - wpabuf_free(report); -} - -static void wpas_rrm_send_msr_report(struct wpa_supplicant *wpa_s, - struct wpabuf *buf) -{ - int len = wpabuf_len(buf); - const u8 *pos = wpabuf_head_u8(buf), *next = pos; - -#define MPDU_REPORT_LEN (int)(IEEE80211_MAX_MMPDU_SIZE - IEEE80211_HDRLEN - 3) - - while (len) { - int send_len = (len > MPDU_REPORT_LEN) ? next - pos : len; - - if (send_len == len || - (send_len + next[1] + 2) > MPDU_REPORT_LEN) { - wpas_rrm_send_msr_report_mpdu(wpa_s, pos, send_len); - len -= send_len; - pos = next; - } - - next += next[1] + 2; - } -#undef MPDU_REPORT_LEN -} - - void wpas_rrm_handle_radio_measurement_request(struct wpa_supplicant *wpa_s, const u8 *src, const u8 *frame, size_t len) -- 1.9.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap