OLD | NEW |
1 /* | 1 /* |
2 * BSS client mode implementation | 2 * BSS client mode implementation |
3 * Copyright 2003-2008, Jouni Malinen <j@w1.fi> | 3 * Copyright 2003-2008, Jouni Malinen <j@w1.fi> |
4 * Copyright 2004, Instant802 Networks, Inc. | 4 * Copyright 2004, Instant802 Networks, Inc. |
5 * Copyright 2005, Devicescape Software, Inc. | 5 * Copyright 2005, Devicescape Software, Inc. |
6 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> | 6 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> |
7 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> | 7 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> |
8 * | 8 * |
9 * This program is free software; you can redistribute it and/or modify | 9 * This program is free software; you can redistribute it and/or modify |
10 * it under the terms of the GNU General Public License version 2 as | 10 * it under the terms of the GNU General Public License version 2 as |
(...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 return; | 1020 return; |
1021 | 1021 |
1022 mod_timer(&sdata->u.mgd.conn_mon_timer, | 1022 mod_timer(&sdata->u.mgd.conn_mon_timer, |
1023 round_jiffies_up(jiffies + IEEE80211_CONNECTION_IDLE_TIME)); | 1023 round_jiffies_up(jiffies + IEEE80211_CONNECTION_IDLE_TIME)); |
1024 } | 1024 } |
1025 | 1025 |
1026 static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata) | 1026 static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata) |
1027 { | 1027 { |
1028 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; | 1028 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; |
1029 const u8 *ssid; | 1029 const u8 *ssid; |
| 1030 u8 *dst = ifmgd->associated->bssid; |
| 1031 u8 unicast_limit = max(1, IEEE80211_MAX_PROBE_TRIES - 3); |
| 1032 |
| 1033 /* |
| 1034 * Try sending broadcast probe requests for the last three |
| 1035 * probe requests after the first ones failed since some |
| 1036 * buggy APs only support broadcast probe requests. |
| 1037 */ |
| 1038 if (ifmgd->probe_send_count >= unicast_limit) |
| 1039 dst = NULL; |
1030 | 1040 |
1031 ssid = ieee80211_bss_get_ie(ifmgd->associated, WLAN_EID_SSID); | 1041 ssid = ieee80211_bss_get_ie(ifmgd->associated, WLAN_EID_SSID); |
1032 » ieee80211_send_probe_req(sdata, ifmgd->associated->bssid, | 1042 » ieee80211_send_probe_req(sdata, dst, ssid + 2, ssid[1], NULL, 0); |
1033 » » » » ssid + 2, ssid[1], NULL, 0); | |
1034 | 1043 |
1035 ifmgd->probe_send_count++; | 1044 ifmgd->probe_send_count++; |
1036 ifmgd->probe_timeout = jiffies + IEEE80211_PROBE_WAIT; | 1045 ifmgd->probe_timeout = jiffies + IEEE80211_PROBE_WAIT; |
1037 run_again(ifmgd, ifmgd->probe_timeout); | 1046 run_again(ifmgd, ifmgd->probe_timeout); |
1038 } | 1047 } |
1039 | 1048 |
1040 static void ieee80211_mgd_probe_ap(struct ieee80211_sub_if_data *sdata, | 1049 static void ieee80211_mgd_probe_ap(struct ieee80211_sub_if_data *sdata, |
1041 bool beacon) | 1050 bool beacon) |
1042 { | 1051 { |
1043 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; | 1052 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; |
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2379 enum nl80211_cqm_rssi_threshold_event rssi_event, | 2388 enum nl80211_cqm_rssi_threshold_event rssi_event, |
2380 gfp_t gfp) | 2389 gfp_t gfp) |
2381 { | 2390 { |
2382 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); | 2391 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); |
2383 | 2392 |
2384 trace_api_cqm_rssi_notify(sdata, rssi_event); | 2393 trace_api_cqm_rssi_notify(sdata, rssi_event); |
2385 | 2394 |
2386 cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp); | 2395 cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp); |
2387 } | 2396 } |
2388 EXPORT_SYMBOL(ieee80211_cqm_rssi_notify); | 2397 EXPORT_SYMBOL(ieee80211_cqm_rssi_notify); |
OLD | NEW |