diff options
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 05e3fb889d77..652e5695225a 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -1018,7 +1018,8 @@ int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, | |||
1018 | struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, | 1018 | struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, |
1019 | u8 *dst, | 1019 | u8 *dst, |
1020 | const u8 *ssid, size_t ssid_len, | 1020 | const u8 *ssid, size_t ssid_len, |
1021 | const u8 *ie, size_t ie_len) | 1021 | const u8 *ie, size_t ie_len, |
1022 | bool directed) | ||
1022 | { | 1023 | { |
1023 | struct ieee80211_local *local = sdata->local; | 1024 | struct ieee80211_local *local = sdata->local; |
1024 | struct sk_buff *skb; | 1025 | struct sk_buff *skb; |
@@ -1035,8 +1036,16 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, | |||
1035 | return NULL; | 1036 | return NULL; |
1036 | } | 1037 | } |
1037 | 1038 | ||
1038 | chan = ieee80211_frequency_to_channel( | 1039 | /* |
1039 | local->hw.conf.channel->center_freq); | 1040 | * Do not send DS Channel parameter for directed probe requests |
1041 | * in order to maximize the chance that we get a response. Some | ||
1042 | * badly-behaved APs don't respond when this parameter is included. | ||
1043 | */ | ||
1044 | if (directed) | ||
1045 | chan = 0; | ||
1046 | else | ||
1047 | chan = ieee80211_frequency_to_channel( | ||
1048 | local->hw.conf.channel->center_freq); | ||
1040 | 1049 | ||
1041 | buf_len = ieee80211_build_preq_ies(local, buf, ie, ie_len, | 1050 | buf_len = ieee80211_build_preq_ies(local, buf, ie, ie_len, |
1042 | local->hw.conf.channel->band, | 1051 | local->hw.conf.channel->band, |
@@ -1062,11 +1071,13 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, | |||
1062 | 1071 | ||
1063 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | 1072 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, |
1064 | const u8 *ssid, size_t ssid_len, | 1073 | const u8 *ssid, size_t ssid_len, |
1065 | const u8 *ie, size_t ie_len) | 1074 | const u8 *ie, size_t ie_len, |
1075 | bool directed) | ||
1066 | { | 1076 | { |
1067 | struct sk_buff *skb; | 1077 | struct sk_buff *skb; |
1068 | 1078 | ||
1069 | skb = ieee80211_build_probe_req(sdata, dst, ssid, ssid_len, ie, ie_len); | 1079 | skb = ieee80211_build_probe_req(sdata, dst, ssid, ssid_len, ie, ie_len, |
1080 | directed); | ||
1070 | if (skb) | 1081 | if (skb) |
1071 | ieee80211_tx_skb(sdata, skb); | 1082 | ieee80211_tx_skb(sdata, skb); |
1072 | } | 1083 | } |