From: Luca Coelho <luca@coelho.fi>
To: linux-wireless@vger.kernel.org
Cc: johannes@sipsolutions.net, michal.kazior@tieto.com,
sw@simonwunderlich.de, bzhao@marvell.com, arend@broadcom.com
Subject: [PATCH v7 4/5] cfg80211/mac80211: move combination check to mac80211 for ibss
Date: Thu, 27 Feb 2014 11:14:56 +0200 [thread overview]
Message-ID: <1393492497-29500-5-git-send-email-luca@coelho.fi> (raw)
In-Reply-To: <1393492497-29500-1-git-send-email-luca@coelho.fi>
From: Luciano Coelho <luciano.coelho@intel.com>
Now that mac80211 can check the interface combinations itself, move
the combinations check from cfg80211 to mac80211 when joining an IBSS.
Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
---
In v2:
* lock the chanctx mutex in ieee80211_ibss_join() before calling
ieee80211_check_combinations(). (Thanks Michal);
* pass the mode argument instead of IEEE80211_CHANCTX_SHARED to
ieee80211_check_combinations() in ieee80211_vif_use_channel();
In v3:
* moved the second change from v2 (pass the mode argument...) to
the previous patch, where it should be;
In v4:
* rebased on top of slightly modified applied patches
In v5:
* use local and sdata in ibss when calling
ieee80211_check_combinations()
In v7:
* don't pass local in ieee80211_check_combinations() anymore;
---
net/mac80211/ibss.c | 29 ++++++++++++++++++++++++++---
net/wireless/ibss.c | 28 ----------------------------
2 files changed, 26 insertions(+), 31 deletions(-)
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index bca7d09..01934c5 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -1643,7 +1643,30 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
u32 changed = 0;
u32 rate_flags;
struct ieee80211_supported_band *sband;
+ enum ieee80211_chanctx_mode chanmode;
+ struct ieee80211_local *local = sdata->local;
+ int radar_detect_width;
int i;
+ int ret;
+
+ radar_detect_width = cfg80211_chandef_dfs_required(local->hw.wiphy,
+ ¶ms->chandef,
+ sdata->vif.type);
+ if (radar_detect_width < 0)
+ return radar_detect_width;
+
+ if (radar_detect_width > 0 && !params->userspace_handles_dfs)
+ return -EINVAL;
+
+ chanmode = (params->channel_fixed && !radar_detect_width) ?
+ IEEE80211_CHANCTX_SHARED : IEEE80211_CHANCTX_EXCLUSIVE;
+
+ mutex_lock(&local->chanctx_mtx);
+ ret = ieee80211_check_combinations(sdata, ¶ms->chandef, chanmode,
+ radar_detect_width);
+ mutex_unlock(&local->chanctx_mtx);
+ if (ret < 0)
+ return ret;
if (params->bssid) {
memcpy(sdata->u.ibss.bssid, params->bssid, ETH_ALEN);
@@ -1658,7 +1681,7 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
/* fix basic_rates if channel does not support these rates */
rate_flags = ieee80211_chandef_rate_flags(¶ms->chandef);
- sband = sdata->local->hw.wiphy->bands[params->chandef.chan->band];
+ sband = local->hw.wiphy->bands[params->chandef.chan->band];
for (i = 0; i < sband->n_bitrates; i++) {
if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
sdata->u.ibss.basic_rates &= ~BIT(i);
@@ -1707,9 +1730,9 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
ieee80211_bss_info_change_notify(sdata, changed);
sdata->smps_mode = IEEE80211_SMPS_OFF;
- sdata->needed_rx_chains = sdata->local->rx_chains;
+ sdata->needed_rx_chains = local->rx_chains;
- ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+ ieee80211_queue_work(&local->hw, &sdata->work);
return 0;
}
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index d81cb68..8282de8 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -88,8 +88,6 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
struct cfg80211_cached_keys *connkeys)
{
struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct ieee80211_channel *check_chan;
- u8 radar_detect_width = 0;
int err;
ASSERT_WDEV_LOCK(wdev);
@@ -126,32 +124,6 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
#ifdef CONFIG_CFG80211_WEXT
wdev->wext.ibss.chandef = params->chandef;
#endif
- check_chan = params->chandef.chan;
- if (params->userspace_handles_dfs) {
- /* Check for radar even if the current channel is not
- * a radar channel - it might decide to change to DFS
- * channel later.
- */
- radar_detect_width = BIT(params->chandef.width);
- }
-
- /* TODO: We need to check the combinations at this point, we
- * probably must move this call down to join_ibss() in
- * mac80211.
- */
- err = cfg80211_can_use_iftype_chan(rdev, wdev, wdev->iftype,
- check_chan,
- (params->channel_fixed &&
- !radar_detect_width)
- ? CHAN_MODE_SHARED
- : CHAN_MODE_EXCLUSIVE,
- radar_detect_width);
-
- if (err) {
- wdev->connect_keys = NULL;
- return err;
- }
-
err = rdev_join_ibss(rdev, dev, params);
if (err) {
wdev->connect_keys = NULL;
--
1.8.5.3
next prev parent reply other threads:[~2014-02-27 9:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 9:14 [PATCH v7 0/5] cfg80211/mac80211: move interface combinations check to mac80211 Luca Coelho
2014-02-27 9:14 ` [PATCH v7 1/5] cfg80211: refactor cfg80211_can_use_iftype_chan() Luca Coelho
2014-02-27 9:14 ` [PATCH v7 2/5] cfg80211/mac80211: refactor cfg80211_chandef_dfs_required() Luca Coelho
2014-02-27 9:14 ` [PATCH v7 3/5] cfg80211/mac80211: move interface counting for combination check to mac80211 Luca Coelho
2014-03-03 15:17 ` Luca Coelho
2014-02-27 9:14 ` Luca Coelho [this message]
2014-02-27 9:14 ` [PATCH v7 5/5] cfg80211/mac80211: move more combination checks " Luca Coelho
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1393492497-29500-5-git-send-email-luca@coelho.fi \
--to=luca@coelho.fi \
--cc=arend@broadcom.com \
--cc=bzhao@marvell.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=michal.kazior@tieto.com \
--cc=sw@simonwunderlich.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox