diff options
author | Sara Sharon <sara.sharon@intel.com> | 2016-01-25 08:46:35 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2016-02-24 03:04:27 -0500 |
commit | d321cd014e51baab475efbdec468255b9e0ec822 (patch) | |
tree | da69c64e900b89327966ad209abcf5260c217497 /net | |
parent | f4a0f0c5264e72d9279fbf9cf48a061526e8f788 (diff) |
mac80211: fix ibss scan parameters
When joining IBSS a full scan should be initiated in order to search
for existing cell, unless the fixed_channel parameter was set.
A default channel to create the IBSS on if no cell was found is
provided as well.
However - a scan is initiated only on the default channel provided
regardless of whether ifibss->fixed_channel is set or not, with the
obvious result of the cell not joining existing IBSS cell that is
on another channel.
Fixes: 76bed0f43b27 ("mac80211: IBSS fix scan request")
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/ibss.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c index e5e8a317b865..9b983788ee51 100644 --- a/net/mac80211/ibss.c +++ b/net/mac80211/ibss.c | |||
@@ -7,6 +7,7 @@ | |||
7 | * Copyright 2007, Michael Wu <flamingice@sourmilk.net> | 7 | * Copyright 2007, Michael Wu <flamingice@sourmilk.net> |
8 | * Copyright 2009, Johannes Berg <johannes@sipsolutions.net> | 8 | * Copyright 2009, Johannes Berg <johannes@sipsolutions.net> |
9 | * Copyright 2013-2014 Intel Mobile Communications GmbH | 9 | * Copyright 2013-2014 Intel Mobile Communications GmbH |
10 | * Copyright(c) 2016 Intel Deutschland GmbH | ||
10 | * | 11 | * |
11 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
@@ -1483,14 +1484,21 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata) | |||
1483 | 1484 | ||
1484 | sdata_info(sdata, "Trigger new scan to find an IBSS to join\n"); | 1485 | sdata_info(sdata, "Trigger new scan to find an IBSS to join\n"); |
1485 | 1486 | ||
1486 | num = ieee80211_ibss_setup_scan_channels(local->hw.wiphy, | ||
1487 | &ifibss->chandef, | ||
1488 | channels, | ||
1489 | ARRAY_SIZE(channels)); | ||
1490 | scan_width = cfg80211_chandef_to_scan_width(&ifibss->chandef); | 1487 | scan_width = cfg80211_chandef_to_scan_width(&ifibss->chandef); |
1491 | ieee80211_request_ibss_scan(sdata, ifibss->ssid, | 1488 | |
1492 | ifibss->ssid_len, channels, num, | 1489 | if (ifibss->fixed_channel) { |
1493 | scan_width); | 1490 | num = ieee80211_ibss_setup_scan_channels(local->hw.wiphy, |
1491 | &ifibss->chandef, | ||
1492 | channels, | ||
1493 | ARRAY_SIZE(channels)); | ||
1494 | ieee80211_request_ibss_scan(sdata, ifibss->ssid, | ||
1495 | ifibss->ssid_len, channels, | ||
1496 | num, scan_width); | ||
1497 | } else { | ||
1498 | ieee80211_request_ibss_scan(sdata, ifibss->ssid, | ||
1499 | ifibss->ssid_len, NULL, | ||
1500 | 0, scan_width); | ||
1501 | } | ||
1494 | } else { | 1502 | } else { |
1495 | int interval = IEEE80211_SCAN_INTERVAL; | 1503 | int interval = IEEE80211_SCAN_INTERVAL; |
1496 | 1504 | ||