From 584d192a05156dbda575285668677847f5ae5261 Mon Sep 17 00:00:00 2001 From: Luis R. Rodriguez Date: Wed, 8 Sep 2010 15:12:16 -0700 Subject: [PATCH 9/9] mac80211: send last 3/5 probe requests as unicast Some buggy APs do not respond to unicast probe requests so in the worst case we should try to send broadcast probe requests, otherwise we can get disconnected from these APs. Even if drivers do not have filters to disregard probe responses from foreign APs mac80211 will only process probe responses from our associated AP for re-arming connection monitoring. Cc: stable@kernel.org [2.6.32+] Signed-off-by: Luis R. Rodriguez --- net/mac80211/mlme.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index a37878f..6e60bef 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -1026,10 +1026,19 @@ static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata) { struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; const u8 *ssid; + u8 *dst = ifmgd->associated->bssid; + u8 unicast_limit = max(1, IEEE80211_MAX_PROBE_TRIES - 3); + + /* + * Try sending broadcast probe requests for the last three + * probe requests after the first ones failed since some + * buggy APs only support broadcast probe requests. + */ + if (ifmgd->probe_send_count >= unicast_limit) + dst = NULL; ssid = ieee80211_bss_get_ie(ifmgd->associated, WLAN_EID_SSID); - ieee80211_send_probe_req(sdata, ifmgd->associated->bssid, - ssid + 2, ssid[1], NULL, 0); + ieee80211_send_probe_req(sdata, dst, ssid + 2, ssid[1], NULL, 0); ifmgd->probe_send_count++; ifmgd->probe_timeout = jiffies + IEEE80211_PROBE_WAIT; -- 1.7.0.4