diff options
author | Antonio Quartulli <ordex@autistici.org> | 2012-10-16 02:39:22 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-10-18 11:21:22 -0400 |
commit | 5c95b940bd97e744267249e3b0780e6ef04b029c (patch) | |
tree | a781656df4682ebd39669fea9ea11d28adef55e2 /net | |
parent | 4ee3e063f10acf6fd17c0ee6f1d0a95726e74cb2 (diff) |
nl/cfg80211: force scan using an AP vif if requested
If the user wants to scan using a vif configured as AP,
cfg80211 must give him a chance to do it, even if this
will disrupt the stations performance due to off-channel
scanning. To do so, this patch adds a 'force' flag to the
SCAN_TRIGGER command which tells cfg80211 to perform the
scanning operation even if the vif is an AP and the
beaconing has already started.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/cfg.c | 11 | ||||
-rw-r--r-- | net/mac80211/main.c | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 5739bfbf2999..5eab1325a0f6 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -1855,7 +1855,16 @@ static int ieee80211_scan(struct wiphy *wiphy, | |||
1855 | * beaconing hasn't been configured yet | 1855 | * beaconing hasn't been configured yet |
1856 | */ | 1856 | */ |
1857 | case NL80211_IFTYPE_AP: | 1857 | case NL80211_IFTYPE_AP: |
1858 | if (sdata->u.ap.beacon) | 1858 | /* |
1859 | * If the scan has been forced (and the driver supports | ||
1860 | * forcing), don't care about being beaconing already. | ||
1861 | * This will create problems to the attached stations (e.g. all | ||
1862 | * the frames sent while scanning on other channel will be | ||
1863 | * lost) | ||
1864 | */ | ||
1865 | if (sdata->u.ap.beacon && | ||
1866 | (!(wiphy->features & NL80211_FEATURE_AP_SCAN) || | ||
1867 | !(req->flags & NL80211_SCAN_FLAG_AP))) | ||
1859 | return -EOPNOTSUPP; | 1868 | return -EOPNOTSUPP; |
1860 | break; | 1869 | break; |
1861 | default: | 1870 | default: |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index ba5a23249771..c42094be2f0b 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -603,7 +603,9 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, | |||
603 | NL80211_FEATURE_HT_IBSS; | 603 | NL80211_FEATURE_HT_IBSS; |
604 | 604 | ||
605 | if (!ops->hw_scan) | 605 | if (!ops->hw_scan) |
606 | wiphy->features |= NL80211_FEATURE_LOW_PRIORITY_SCAN; | 606 | wiphy->features |= NL80211_FEATURE_LOW_PRIORITY_SCAN | |
607 | NL80211_FEATURE_AP_SCAN; | ||
608 | |||
607 | 609 | ||
608 | if (!ops->set_key) | 610 | if (!ops->set_key) |
609 | wiphy->flags |= WIPHY_FLAG_IBSS_RSN; | 611 | wiphy->flags |= WIPHY_FLAG_IBSS_RSN; |