From: Rajkumar Manoharan <rmanohar@codeaurora.org>
To: johannes@sipsolutions.net
Cc: linux-wireless@vger.kernel.org,
Rajkumar Manoharan <rmanohar@codeaurora.org>
Subject: [PATCH 02/10] cfg80211: validate 6 GHz chandef
Date: Fri, 24 Apr 2020 15:41:40 -0700 [thread overview]
Message-ID: <1587768108-25248-3-git-send-email-rmanohar@codeaurora.org> (raw)
In-Reply-To: <1587768108-25248-1-git-send-email-rmanohar@codeaurora.org>
Validate the params of set_channel against 6 GHz frequency range
and bandwidth allowed.
Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org>
---
include/net/cfg80211.h | 14 ++++++++++++++
net/wireless/chan.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 70e48f66dac8..13d3d8f92c99 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -730,6 +730,20 @@ cfg80211_chandef_is_edmg(const struct cfg80211_chan_def *chandef)
}
/**
+ * cfg80211_chandef_is_6ghz - check if chandef represents an 6 GHz channel
+ *
+ * @chandef: the channel definition
+ *
+ * Return: %true if frequency is in 6 GHz range, %false otherwise.
+ */
+static inline bool
+cfg80211_chandef_is_6ghz(const struct cfg80211_chan_def *chandef)
+{
+ return (chandef->center_freq1 > 5940 && chandef->center_freq1 < 7105);
+}
+
+
+/**
* cfg80211_chandef_compatible - check if two channel definitions are compatible
* @chandef1: first channel definition
* @chandef2: second channel definition
diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index fcac5c6366e1..42d27cada237 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -19,6 +19,29 @@ static bool cfg80211_valid_60g_freq(u32 freq)
return freq >= 58320 && freq <= 70200;
}
+static bool cfg80211_is_6ghz_freq(u32 freq)
+{
+ return (freq > 5940 && freq < 7105);
+}
+
+static enum nl80211_chan_width cfg80211_chan_to_bw_6ghz(u8 idx)
+{
+ /* channels: 1, 5, 9, 13... */
+ if ((idx & 0x3) == 0x1)
+ return NL80211_CHAN_WIDTH_20;
+ /* channels 3, 11, 19... */
+ if ((idx & 0x7) == 0x3)
+ return NL80211_CHAN_WIDTH_40;
+ /* channels 7, 23, 39.. */
+ if ((idx & 0xf) == 0x7)
+ return NL80211_CHAN_WIDTH_80;
+ /* channels 15, 47, 79...*/
+ if ((idx & 0x1f) == 0xf)
+ return NL80211_CHAN_WIDTH_160;
+
+ return NL80211_CHAN_WIDTH_20;
+}
+
void cfg80211_chandef_create(struct cfg80211_chan_def *chandef,
struct ieee80211_channel *chan,
enum nl80211_channel_type chan_type)
@@ -139,6 +162,25 @@ static bool cfg80211_edmg_chandef_valid(const struct cfg80211_chan_def *chandef)
return true;
}
+static bool cfg80211_6ghz_chandef_valid(const struct cfg80211_chan_def *chandef)
+{
+ enum nl80211_chan_width bw;
+ int chan_idx;
+
+ if (!cfg80211_is_6ghz_freq(chandef->center_freq1))
+ return false;
+
+ chan_idx = ieee80211_frequency_to_channel(chandef->center_freq1);
+ if (chan_idx <= 0)
+ return false;
+
+ bw = cfg80211_chan_to_bw_6ghz(chan_idx);
+ if (bw != chandef->width)
+ return false;
+
+ return true;
+}
+
bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
{
u32 control_freq;
@@ -213,6 +255,10 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
!cfg80211_edmg_chandef_valid(chandef))
return false;
+ if (cfg80211_chandef_is_6ghz(chandef) &&
+ !cfg80211_6ghz_chandef_valid(chandef))
+ return false;
+
return true;
}
EXPORT_SYMBOL(cfg80211_chandef_valid);
--
2.7.4
next prev parent reply other threads:[~2020-04-24 22:42 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-24 22:41 [PATCH 00/10] mac80211: add 6 GHz IEs support Rajkumar Manoharan
2020-04-24 22:41 ` [PATCH 01/10] mac80211: fix memory overlap due to variable length param Rajkumar Manoharan
2020-04-24 22:41 ` Rajkumar Manoharan [this message]
2020-04-29 14:26 ` [PATCH 02/10] cfg80211: validate 6 GHz chandef Johannes Berg
2020-04-30 0:02 ` Rajkumar Manoharan
2020-04-30 19:54 ` Johannes Berg
2020-04-24 22:41 ` [PATCH 03/10] nl80211: add HE 6 GHz Band Capability support Rajkumar Manoharan
2020-04-29 14:28 ` Johannes Berg
2020-04-30 0:04 ` Rajkumar Manoharan
2020-04-24 22:41 ` [PATCH 04/10] mac80211: add HE 6 GHz Band Capabilities into parse extension Rajkumar Manoharan
2020-04-24 22:41 ` [PATCH 05/10] mac80211: handle HE 6 GHz Capability in HE STA processing Rajkumar Manoharan
2020-04-29 14:31 ` Johannes Berg
2020-04-30 0:11 ` Rajkumar Manoharan
2020-04-24 22:41 ` [PATCH 06/10] mac80211: add HE 6 GHz Band Capability IE in assoc. request Rajkumar Manoharan
2020-04-29 14:33 ` Johannes Berg
2020-04-30 0:14 ` Rajkumar Manoharan
2020-04-30 19:52 ` Johannes Berg
2020-04-24 22:41 ` [PATCH 07/10] mac80211: build HE operation with 6 GHz oper information Rajkumar Manoharan
2020-04-24 22:41 ` [PATCH 08/10] mac80211: do not allow HT/VHT IEs in 6 GHz mesh mode Rajkumar Manoharan
2020-04-24 22:41 ` [PATCH 09/10] mac80211: determine chantype from HE operation in 6 GHz Rajkumar Manoharan
2020-04-29 14:34 ` Johannes Berg
2020-04-30 0:18 ` Rajkumar Manoharan
2020-04-30 19:53 ` Johannes Berg
2020-04-24 22:41 ` [PATCH 10/10] ath11k: build HE 6 GHz capability Rajkumar Manoharan
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=1587768108-25248-3-git-send-email-rmanohar@codeaurora.org \
--to=rmanohar@codeaurora.org \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
/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.