From: "Jean-Pierre Tosoni" <jp.tosoni@acksys.fr>
To: "'Vasanthakumar Thiagarajan'" <vthiagar@qti.qualcomm.com>
Cc: <linux-wireless@vger.kernel.org>
Subject: RE: [RFC 2/3] cfg80211: Disallow moving out of operating DFS channel in non-ETSI
Date: Wed, 25 Jan 2017 19:20:31 +0100 [thread overview]
Message-ID: <014301d27737$b693eca0$23bbc5e0$@acksys.fr> (raw)
In-Reply-To: <1485343870-23601-3-git-send-email-vthiagar@qti.qualcomm.com>
> -----Message d'origine-----
> De : linux-wireless-owner@vger.kernel.org [mailto:linux-wireless-
> owner@vger.kernel.org] De la part de Vasanthakumar Thiagarajan
> Envoyé : mercredi 25 janvier 2017 12:31
> À : johannes@sipsolutions.net
> Cc : linux-wireless@vger.kernel.org; Vasanthakumar Thiagarajan
> Objet : [RFC 2/3] cfg80211: Disallow moving out of operating DFS channel
> in non-ETSI
>
> For non-ETSI regulatory domain, CAC result on DFS channel may not be valid
> once moving out of that channel (as done during remain-on-channel,
> scannning and off-channel tx).
> Running CAC on an operating DFS channel after every off-channel operation
> will only add complexity and disturb the current link. Better do not allow
> any off-channel switch from a DFS operating channel in non-ETSI domain.
>
Moving out should be forbidden only to "master" devices i.e. AP, mesh,
ad-hoc.
"Slave" devices i.e. client stations, are not responsible for detecting
radars, hence, they can do an off-channel scan and go back to a "DFS
operating channel" without waiting for CAC.
It looks like your patch would forbid multichannel scan ?
> Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qti.qualcomm.com>
> ---
> net/wireless/nl80211.c | 38 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index
> 63dfa60..c614af4 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -6506,6 +6506,17 @@ static int nl80211_parse_random_mac(struct nlattr
> **attrs,
> return 0;
> }
>
> +static bool cfg80211_off_channel_oper_allowed(struct wireless_dev
> +*wdev) {
> + if (!cfg80211_beaconing_iface_active(wdev))
> + return true;
> +
> + if (!(wdev->chandef.chan->flags & IEEE80211_CHAN_RADAR))
> + return true;
> +
> + return regulatory_pre_cac_allowed(wdev->wiphy);
> +}
> +
> static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info
> *info) {
> struct cfg80211_registered_device *rdev = info->user_ptr[0]; @@ -
> 6631,6 +6642,21 @@ static int nl80211_trigger_scan(struct sk_buff *skb,
> struct genl_info *info)
>
> request->n_channels = i;
>
> + if (!cfg80211_off_channel_oper_allowed(wdev)) {
> + struct ieee80211_channel *chan;
> +
> + if (request->n_channels != 1) {
> + err = -EBUSY;
> + goto out_free;
> + }
> +
> + chan = request->channels[0];
> + if (chan->center_freq != wdev->chandef.chan->center_freq) {
> + err = -EBUSY;
> + goto out_free;
> + }
> + }
> +
> i = 0;
> if (n_ssids) {
> nla_for_each_nested(attr, info-
> >attrs[NL80211_ATTR_SCAN_SSIDS], tmp) { @@ -9053,6 +9079,7 @@ static int
> nl80211_remain_on_channel(struct sk_buff *skb,
> struct cfg80211_registered_device *rdev = info->user_ptr[0];
> struct wireless_dev *wdev = info->user_ptr[1];
> struct cfg80211_chan_def chandef;
> + const struct cfg80211_chan_def *compat_chandef;
> struct sk_buff *msg;
> void *hdr;
> u64 cookie;
> @@ -9081,6 +9108,14 @@ static int nl80211_remain_on_channel(struct sk_buff
> *skb,
> if (err)
> return err;
>
> + if (!(cfg80211_off_channel_oper_allowed(wdev) ||
> + cfg80211_chandef_identical(&wdev->chandef, &chandef))) {
> + compat_chandef = cfg80211_chandef_compatible(&wdev->chandef,
> + &chandef);
> + if (compat_chandef != &chandef)
> + return -EBUSY;
> + }
> +
> msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
> if (!msg)
> return -ENOMEM;
> @@ -9256,6 +9291,9 @@ static int nl80211_tx_mgmt(struct sk_buff *skb,
> struct genl_info *info)
> if (!chandef.chan && params.offchan)
> return -EINVAL;
>
> + if (params.offchan && !cfg80211_off_channel_oper_allowed(wdev))
> + return -EBUSY;
> +
> params.buf = nla_data(info->attrs[NL80211_ATTR_FRAME]);
> params.len = nla_len(info->attrs[NL80211_ATTR_FRAME]);
>
> --
> 1.9.1
next prev parent reply other threads:[~2017-01-25 18:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-25 11:31 [RFC 0/3] Pre-CAC and sharing DFS state across multiple radios Vasanthakumar Thiagarajan
2017-01-25 11:31 ` [RFC 1/3] cfg80211: Make pre-CAC results valid only for ETSI domain Vasanthakumar Thiagarajan
2017-01-26 9:34 ` Johannes Berg
2017-01-31 9:10 ` Thiagarajan, Vasanthakumar
2017-01-25 11:31 ` [RFC 2/3] cfg80211: Disallow moving out of operating DFS channel in non-ETSI Vasanthakumar Thiagarajan
2017-01-25 18:20 ` Jean-Pierre Tosoni [this message]
2017-01-31 8:40 ` Thiagarajan, Vasanthakumar
2017-01-26 9:36 ` Johannes Berg
2017-01-31 9:12 ` Thiagarajan, Vasanthakumar
2017-01-25 11:31 ` [RFC 3/3] cfg80211: Share Channel DFS state across wiphys of same DFS domain Vasanthakumar Thiagarajan
2017-01-26 9:41 ` Johannes Berg
2017-01-31 9:18 ` Thiagarajan, Vasanthakumar
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='014301d27737$b693eca0$23bbc5e0$@acksys.fr' \
--to=jp.tosoni@acksys.fr \
--cc=linux-wireless@vger.kernel.org \
--cc=vthiagar@qti.qualcomm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.