From e8ae97aebe71cf02e0aa480bfdaa6a3520ee5d74 Mon Sep 17 00:00:00 2001 From: Ilan Peer Date: Mon, 24 Feb 2020 11:14:29 +0200 Subject: [PATCH] nl80211: Allow TX status for Authentication frames To support PASN authentication flow, where Authentication frames are sent by wpa_supplicant using the send_mlme() callback, modify the logic to also send EVENT_TX_STATUS for Authentication frames. Signed-off-by: Ilan Peer --- src/drivers/driver_nl80211_event.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c index 8327644fb..f4b0580f4 100644 --- a/src/drivers/driver_nl80211_event.c +++ b/src/drivers/driver_nl80211_event.c @@ -683,11 +683,16 @@ static void mlme_event_mgmt_tx_status(struct wpa_driver_nl80211_data *drv, size_t len, struct nlattr *ack) { union wpa_event_data event; - const struct ieee80211_hdr *hdr; - u16 fc; + const struct ieee80211_hdr *hdr = (const struct ieee80211_hdr *) frame; + u16 fc = le_to_host16(hdr->frame_control); wpa_printf(MSG_DEBUG, "nl80211: Frame TX status event"); - if (!is_ap_interface(drv->nlmode)) { + + if (WLAN_FC_GET_TYPE(fc) != WLAN_FC_TYPE_MGMT) + return; + + if (!is_ap_interface(drv->nlmode) && + WLAN_FC_GET_STYPE(fc) == WLAN_FC_STYPE_ACTION) { u64 cookie_val; if (!cookie) @@ -701,11 +706,13 @@ static void mlme_event_mgmt_tx_status(struct wpa_driver_nl80211_data *drv, " (match)" : " (unknown)", ack != NULL); if (cookie_val != drv->send_frame_cookie) return; + } else if (!is_ap_interface(drv->nlmode) && + WLAN_FC_GET_STYPE(fc) == WLAN_FC_STYPE_AUTH) { + wpa_printf(MSG_DEBUG, + "nl80211: Authentication frame TX status: ack=%d", + !!ack); } - hdr = (const struct ieee80211_hdr *) frame; - fc = le_to_host16(hdr->frame_control); - os_memset(&event, 0, sizeof(event)); event.tx_status.type = WLAN_FC_GET_TYPE(fc); event.tx_status.stype = WLAN_FC_GET_STYPE(fc);