diff --git a/src/ap/beacon.c b/src/ap/beacon.c index 626783123..c9bbfa93b 100644 --- a/src/ap/beacon.c +++ b/src/ap/beacon.c @@ -198,6 +198,7 @@ void handle_probe_req(struct hostapd_data *hapd, struct sta_info *sta = NULL; size_t buflen; size_t i; + int noack; ie = mgmt->u.probe_req.variable; if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req)) @@ -407,7 +408,13 @@ void handle_probe_req(struct hostapd_data *hapd, pos = hostapd_eid_p2p_manage(hapd, pos); #endif /* CONFIG_P2P_MANAGER */ - if (hostapd_drv_send_mlme(hapd, resp, pos - (u8 *) resp, 0) < 0) + /* + * If this is a broadcast probe request, apply no ack policy to avoid + * excessive retries. + */ + noack = !!(elems.ssid_len == 0 && is_broadcast_ether_addr(mgmt->da)); + + if (hostapd_drv_send_mlme(hapd, resp, pos - (u8 *) resp, noack) < 0) perror("handle_probe_req: send"); os_free(resp);