mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
wifi: mac80211: S1G capabilities information element in probe request
Add the missing S1G capabilities information element to probe requests. Signed-off-by: Kieran Frewen <kieran.frewen@morsemicro.com> Co-developed-by: Gilad Itzkovitch <gilad.itzkovitch@morsemicro.com> Signed-off-by: Gilad Itzkovitch <gilad.itzkovitch@morsemicro.com> Link: https://lore.kernel.org/r/20230223032512.3848105-1-gilad.itzkovitch@virscient.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
968a768d28
commit
0333a81bc8
2 changed files with 24 additions and 0 deletions
|
@ -2491,6 +2491,7 @@ void ieee80211_add_s1g_capab_ie(struct ieee80211_sub_if_data *sdata,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
void ieee80211_add_aid_request_ie(struct ieee80211_sub_if_data *sdata,
|
void ieee80211_add_aid_request_ie(struct ieee80211_sub_if_data *sdata,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
|
u8 *ieee80211_ie_build_s1g_cap(u8 *pos, struct ieee80211_sta_s1g_cap *s1g_cap);
|
||||||
|
|
||||||
/* channel management */
|
/* channel management */
|
||||||
bool ieee80211_chandef_ht_oper(const struct ieee80211_ht_operation *ht_oper,
|
bool ieee80211_chandef_ht_oper(const struct ieee80211_ht_operation *ht_oper,
|
||||||
|
|
|
@ -1959,6 +1959,14 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
|
||||||
rate_flags = ieee80211_chandef_rate_flags(chandef);
|
rate_flags = ieee80211_chandef_rate_flags(chandef);
|
||||||
shift = ieee80211_chandef_get_shift(chandef);
|
shift = ieee80211_chandef_get_shift(chandef);
|
||||||
|
|
||||||
|
/* For direct scan add S1G IE and consider its override bits */
|
||||||
|
if (band == NL80211_BAND_S1GHZ) {
|
||||||
|
if (end - pos < 2 + sizeof(struct ieee80211_s1g_cap))
|
||||||
|
goto out_err;
|
||||||
|
pos = ieee80211_ie_build_s1g_cap(pos, &sband->s1g_cap);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
num_rates = 0;
|
num_rates = 0;
|
||||||
for (i = 0; i < sband->n_bitrates; i++) {
|
for (i = 0; i < sband->n_bitrates; i++) {
|
||||||
if ((BIT(i) & rate_mask) == 0)
|
if ((BIT(i) & rate_mask) == 0)
|
||||||
|
@ -3020,6 +3028,21 @@ size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset)
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 *ieee80211_ie_build_s1g_cap(u8 *pos, struct ieee80211_sta_s1g_cap *s1g_cap)
|
||||||
|
{
|
||||||
|
*pos++ = WLAN_EID_S1G_CAPABILITIES;
|
||||||
|
*pos++ = sizeof(struct ieee80211_s1g_cap);
|
||||||
|
memset(pos, 0, sizeof(struct ieee80211_s1g_cap));
|
||||||
|
|
||||||
|
memcpy(pos, &s1g_cap->cap, sizeof(s1g_cap->cap));
|
||||||
|
pos += sizeof(s1g_cap->cap);
|
||||||
|
|
||||||
|
memcpy(pos, &s1g_cap->nss_mcs, sizeof(s1g_cap->nss_mcs));
|
||||||
|
pos += sizeof(s1g_cap->nss_mcs);
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
|
u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
|
||||||
u16 cap)
|
u16 cap)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue