if the NL80211_SCAN_FLAG_PASSIVE_RADAR flag was specified upon
sw scan start, passively scan any channel marked as DFS.

Signed-off-by: Antonio Quartulli <[email protected]>
---
 net/mac80211/scan.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index 4aeca4b..d8f7b4a 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -599,7 +599,9 @@ static int __ieee80211_start_scan(struct 
ieee80211_sub_if_data *sdata,
 
                if ((req->channels[0]->flags &
                     IEEE80211_CHAN_NO_IR) ||
-                   !req->n_ssids) {
+                   !req->n_ssids ||
+                   ((chan->flags & IEEE80211_CHAN_RADAR) &&
+                    (scan_req->flags & NL80211_SCAN_FLAG_PASSIVE_RADAR))) {
                        next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
                } else {
                        ieee80211_scan_state_send_probe(local, &next_delay);
@@ -645,7 +647,9 @@ ieee80211_scan_get_channel_time(struct ieee80211_channel 
*chan)
         * TODO: channel switching also consumes quite some time,
         * add that delay as well to get a better estimation
         */
-       if (chan->flags & IEEE80211_CHAN_NO_IR)
+       if ((chan->flags & IEEE80211_CHAN_NO_IR) ||
+           ((chan->flags & IEEE80211_CHAN_RADAR) &&
+            (scan_req->flags & NL80211_SCAN_FLAG_PASSIVE_RADAR)))
                return IEEE80211_PASSIVE_CHANNEL_TIME;
        return IEEE80211_PROBE_DELAY + IEEE80211_CHANNEL_TIME;
 }
@@ -777,7 +781,9 @@ static void ieee80211_scan_state_set_channel(struct 
ieee80211_local *local,
         *
         * In any case, it is not necessary for a passive scan.
         */
-       if (chan->flags & IEEE80211_CHAN_NO_IR || !scan_req->n_ssids) {
+       if (chan->flags & IEEE80211_CHAN_NO_IR || !scan_req->n_ssids ||
+           ((chan->flags & IEEE80211_CHAN_RADAR) &&
+            (scan_req->flags & NL80211_SCAN_FLAG_PASSIVE_RADAR))) {
                *next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
                local->next_scan_state = SCAN_DECISION;
                return;
-- 
2.6.3

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to