]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
GAS: Handle no-ACK TX status for GAS request frames
authorJouni Malinen <jouni@qca.qualcomm.com>
Sun, 26 Mar 2017 09:34:06 +0000 (12:34 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 26 Mar 2017 18:13:21 +0000 (21:13 +0300)
Previously, only the success and failure (to TX) cases were handled. It
is also possible for the driver to transmit the frame, but not receive
an ACK from the recipient. Address that by waiting for a short period of
time for a response. This fixes cases where OSU provider icon fetching
could get stuck if no ACK frame is received.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
wpa_supplicant/gas_query.c

index db481a59197af89d20a63453d9f50e68df03ebb4..91cf19a20f20496197291b315adfdd62a3c95f7f 100644 (file)
@@ -243,10 +243,17 @@ static void gas_query_tx_status(struct wpa_supplicant *wpa_s,
        }
        os_get_reltime(&query->last_oper);
 
-       if (result == OFFCHANNEL_SEND_ACTION_SUCCESS) {
+       if (result == OFFCHANNEL_SEND_ACTION_SUCCESS ||
+           result == OFFCHANNEL_SEND_ACTION_NO_ACK) {
                eloop_cancel_timeout(gas_query_timeout, gas, query);
-               eloop_register_timeout(GAS_QUERY_TIMEOUT_PERIOD, 0,
-                                      gas_query_timeout, gas, query);
+               if (result == OFFCHANNEL_SEND_ACTION_NO_ACK) {
+                       wpa_printf(MSG_DEBUG, "GAS: No ACK to GAS request");
+                       eloop_register_timeout(0, 250000,
+                                              gas_query_timeout, gas, query);
+               } else {
+                       eloop_register_timeout(GAS_QUERY_TIMEOUT_PERIOD, 0,
+                                              gas_query_timeout, gas, query);
+               }
                if (query->wait_comeback && !query->retry) {
                        eloop_cancel_timeout(gas_query_rx_comeback_timeout,
                                             gas, query);