mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
BACKPORT: nl80211: add handling for BSS color
This patch adds the attributes, policy and parsing code to allow userland to send the info about the BSS coloring settings to the kernel. Bug: 154782456 Signed-off-by: John Crispin <[email protected]> Link: https://lore.kernel.org/r/[email protected] [johannes: remove the strict policy parsing, that was a misunderstanding] Signed-off-by: Johannes Berg <[email protected]> Change-Id: Ib24133d6825ef455819f697de6d9d67c856c315e (cherry picked from commit 5c5e52d1bb962510fecdc1ebecdde89694d1b223) Signed-off-by: Vamsi Krishna <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
50635d9eba
commit
92a63a3d99
3 changed files with 81 additions and 0 deletions
|
|
@ -321,6 +321,13 @@ he_obss_pd_policy[NL80211_HE_OBSS_PD_ATTR_MAX + 1] = {
|
|||
NLA_POLICY_RANGE(NLA_U8, 1, 20),
|
||||
};
|
||||
|
||||
static const struct nla_policy
|
||||
he_bss_color_policy[NL80211_HE_BSS_COLOR_ATTR_MAX + 1] = {
|
||||
[NL80211_HE_BSS_COLOR_ATTR_COLOR] = NLA_POLICY_RANGE(NLA_U8, 1, 63),
|
||||
[NL80211_HE_BSS_COLOR_ATTR_DISABLED] = { .type = NLA_FLAG },
|
||||
[NL80211_HE_BSS_COLOR_ATTR_PARTIAL] = { .type = NLA_FLAG },
|
||||
};
|
||||
|
||||
const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
|
||||
[0] = { .strict_start_type = NL80211_ATTR_HE_OBSS_PD },
|
||||
[NL80211_ATTR_WIPHY] = { .type = NLA_U32 },
|
||||
|
|
@ -629,6 +636,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
|
|||
[NL80211_ATTR_TWT_RESPONDER] = { .type = NLA_FLAG },
|
||||
[NL80211_ATTR_HE_OBSS_PD] = NLA_POLICY_NESTED(he_obss_pd_policy),
|
||||
[NL80211_ATTR_VLAN_ID] = NLA_POLICY_RANGE(NLA_U16, 1, VLAN_N_VID - 2),
|
||||
[NL80211_ATTR_HE_BSS_COLOR] = NLA_POLICY_NESTED(he_bss_color_policy),
|
||||
};
|
||||
|
||||
/* policy for the key attributes */
|
||||
|
|
@ -4515,6 +4523,30 @@ static int nl80211_parse_he_obss_pd(struct nlattr *attrs,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int nl80211_parse_he_bss_color(struct nlattr *attrs,
|
||||
struct cfg80211_he_bss_color *he_bss_color)
|
||||
{
|
||||
struct nlattr *tb[NL80211_HE_BSS_COLOR_ATTR_MAX + 1];
|
||||
int err;
|
||||
|
||||
err = nla_parse_nested(tb, NL80211_HE_BSS_COLOR_ATTR_MAX, attrs,
|
||||
he_bss_color_policy, NULL);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!tb[NL80211_HE_BSS_COLOR_ATTR_COLOR])
|
||||
return -EINVAL;
|
||||
|
||||
he_bss_color->color =
|
||||
nla_get_u8(tb[NL80211_HE_BSS_COLOR_ATTR_COLOR]);
|
||||
he_bss_color->disabled =
|
||||
nla_get_flag(tb[NL80211_HE_BSS_COLOR_ATTR_DISABLED]);
|
||||
he_bss_color->partial =
|
||||
nla_get_flag(tb[NL80211_HE_BSS_COLOR_ATTR_PARTIAL]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void nl80211_check_ap_rate_selectors(struct cfg80211_ap_settings *params,
|
||||
const u8 *rates)
|
||||
{
|
||||
|
|
@ -4806,6 +4838,14 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_HE_BSS_COLOR]) {
|
||||
err = nl80211_parse_he_bss_color(
|
||||
info->attrs[NL80211_ATTR_HE_BSS_COLOR],
|
||||
¶ms.he_bss_color);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
nl80211_calculate_ap_params(¶ms);
|
||||
|
||||
if (info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])
|
||||
|
|
|
|||
Loading…
Reference in a new issue