From: Rajkumar Manoharan <rmanohar@codeaurora.org>
To: johannes@sipsolutions.net
Cc: linux-wireless@vger.kernel.org,
Rajkumar Manoharan <rmanohar@codeaurora.org>
Subject: [PATCH 06/10] mac80211: add HE 6 GHz Band Capability IE in assoc. request
Date: Fri, 24 Apr 2020 15:41:44 -0700 [thread overview]
Message-ID: <1587768108-25248-7-git-send-email-rmanohar@codeaurora.org> (raw)
In-Reply-To: <1587768108-25248-1-git-send-email-rmanohar@codeaurora.org>
Construct HE 6 GHz band capability element (IEEE 802.11ax/D6.0, 9.4.2.261)
for association request and mesh beacon. The 6 GHz capability information
is passed from driver through iftypes caps.
Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org>
---
net/mac80211/ieee80211_i.h | 1 +
net/mac80211/mesh.c | 34 ++++++++++++++++++++++++++++++++++
net/mac80211/mesh.h | 2 ++
net/mac80211/mesh_plink.c | 3 ++-
net/mac80211/mlme.c | 12 ++++++++++--
net/mac80211/util.c | 15 +++++++++++++++
6 files changed, 64 insertions(+), 3 deletions(-)
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 450f11e820cc..d8b03b657431 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -2173,6 +2173,7 @@ u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype);
u8 *ieee80211_ie_build_he_cap(u8 *pos,
const struct ieee80211_sta_he_cap *he_cap,
u8 *end);
+u8 *ieee80211_ie_build_he_6ghz_band_cap(u8 *pos, u16 he_6ghz_cap);
u8 *ieee80211_ie_build_he_oper(u8 *pos);
int ieee80211_parse_bitrates(struct cfg80211_chan_def *chandef,
const struct ieee80211_supported_band *sband,
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index 36978a0e5000..72a7a38a470c 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -587,6 +587,39 @@ int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
return 0;
}
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+ struct sk_buff *skb)
+{
+ const struct ieee80211_sta_he_cap *he_cap;
+ struct ieee80211_supported_band *sband;
+ u8 ie_len;
+ u8 *pos;
+
+ sband = ieee80211_get_sband(sdata);
+ if (!sband)
+ return -EINVAL;
+
+ he_cap = ieee80211_get_he_iftype_cap(sband, NL80211_IFTYPE_MESH_POINT);
+
+ if (!he_cap ||
+ sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT ||
+ sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 ||
+ sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10)
+ return 0;
+
+ if (!he_cap->he_6ghz_cap)
+ return 0;
+
+ ie_len = 2 + 1 + sizeof(struct ieee80211_he_6ghz_band_cap);
+ if (skb_tailroom(skb) < ie_len)
+ return -ENOMEM;
+
+ pos = skb_put(skb, ie_len);
+ ieee80211_ie_build_he_6ghz_band_cap(pos, he_cap->he_6ghz_cap);
+
+ return 0;
+}
+
static void ieee80211_mesh_path_timer(struct timer_list *t)
{
struct ieee80211_sub_if_data *sdata =
@@ -885,6 +918,7 @@ ieee80211_mesh_build_beacon(struct ieee80211_if_mesh *ifmsh)
mesh_add_vht_oper_ie(sdata, skb) ||
mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) ||
mesh_add_he_oper_ie(sdata, skb) ||
+ mesh_add_he_6ghz_cap_ie(sdata, skb) ||
mesh_add_vendor_ies(sdata, skb))
goto out_free;
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h
index 953f720754e8..40492d1bd8fd 100644
--- a/net/mac80211/mesh.h
+++ b/net/mac80211/mesh.h
@@ -222,6 +222,8 @@ int mesh_add_he_cap_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb, u8 ie_len);
int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb);
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+ struct sk_buff *skb);
void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
void ieee80211s_init(void);
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index e3e29b8d641d..dedb2341ebdd 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -328,7 +328,8 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
mesh_add_vht_cap_ie(sdata, skb) ||
mesh_add_vht_oper_ie(sdata, skb) ||
mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) ||
- mesh_add_he_oper_ie(sdata, skb))
+ mesh_add_he_oper_ie(sdata, skb) ||
+ mesh_add_he_6ghz_cap_ie(sdata, skb))
goto free;
}
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 58a082efc3b3..6ff1087e3bba 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -654,6 +654,12 @@ static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata,
he_cap->he_cap_elem.phy_cap_info);
pos = skb_put(skb, he_cap_size);
ieee80211_ie_build_he_cap(pos, he_cap, pos + he_cap_size);
+
+ if (!he_cap->he_6ghz_cap)
+ return;
+
+ pos = skb_put(skb, 5); /* 2 + 1 + sizeof(he_cap->he_6ghz_cap) */
+ ieee80211_ie_build_he_6ghz_band_cap(pos, he_cap->he_6ghz_cap);
}
static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
@@ -4803,7 +4809,8 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
if (!sband->ht_cap.ht_supported) {
ifmgd->flags |= IEEE80211_STA_DISABLE_HT;
ifmgd->flags |= IEEE80211_STA_DISABLE_VHT;
- ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
+ if (sband->band != NL80211_BAND_6GHZ)
+ ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
}
if (!sband->vht_cap.vht_supported)
@@ -5493,7 +5500,8 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
if (req->flags & ASSOC_REQ_DISABLE_HT) {
ifmgd->flags |= IEEE80211_STA_DISABLE_HT;
ifmgd->flags |= IEEE80211_STA_DISABLE_VHT;
- ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
+ if (sband->band != NL80211_BAND_6GHZ)
+ ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
}
if (req->flags & ASSOC_REQ_DISABLE_VHT)
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 5a33755c22f4..2bcebe672c0d 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -2839,6 +2839,21 @@ u8 *ieee80211_ie_build_he_cap(u8 *pos,
return pos;
}
+u8 *ieee80211_ie_build_he_6ghz_band_cap(u8 *pos, u16 he_6ghz_cap)
+{
+ __le16 cap = cpu_to_le16(he_6ghz_cap);
+
+ *pos++ = WLAN_EID_EXTENSION;
+ *pos++ = 3;
+ *pos++ = WLAN_EID_EXT_HE_6GHZ_BAND_CAP;
+
+ /* Fixed data */
+ memcpy(pos, &cap, sizeof(cap));
+ pos += sizeof(cap);
+
+ return pos;
+}
+
u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
const struct cfg80211_chan_def *chandef,
u16 prot_mode, bool rifs_mode)
--
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 ` [PATCH 02/10] cfg80211: validate 6 GHz chandef Rajkumar Manoharan
2020-04-29 14:26 ` 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 ` Rajkumar Manoharan [this message]
2020-04-29 14:33 ` [PATCH 06/10] mac80211: add HE 6 GHz Band Capability IE in assoc. request 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-7-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.