nl80211: Parse NL80211_ATTR_HE_BSS_COLOR as a part of nl80211_parse_beacon
NL80211_ATTR_HE_BSS_COLOR attribute can be included in both NL80211_CMD_START_AP and NL80211_CMD_SET_BEACON commands. Move he_bss_color from cfg80211_ap_settings to cfg80211_beacon_data and parse NL80211_ATTR_HE_BSS_COLOR as a part of nl80211_parse_beacon() to have bss color settings parsed for both start ap and set beacon commands. Add a new flag he_bss_color_valid to indicate whether NL80211_ATTR_HE_BSS_COLOR attribute is included. Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com> Link: https://lore.kernel.org/r/1649867295-7204-2-git-send-email-quic_ramess@quicinc.com [fix build ...] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Родитель
5dfad10812
Коммит
3d48cb7481
|
@ -1183,6 +1183,9 @@ struct cfg80211_mbssid_elems {
|
|||
* Token (measurement type 11)
|
||||
* @lci_len: LCI data length
|
||||
* @civicloc_len: Civic location data length
|
||||
* @he_bss_color: BSS Color settings
|
||||
* @he_bss_color_valid: indicates whether bss color
|
||||
attribute is present in beacon data or not.
|
||||
*/
|
||||
struct cfg80211_beacon_data {
|
||||
const u8 *head, *tail;
|
||||
|
@ -1202,6 +1205,8 @@ struct cfg80211_beacon_data {
|
|||
size_t probe_resp_len;
|
||||
size_t lci_len;
|
||||
size_t civicloc_len;
|
||||
struct cfg80211_he_bss_color he_bss_color;
|
||||
bool he_bss_color_valid;
|
||||
};
|
||||
|
||||
struct mac_address {
|
||||
|
@ -1292,7 +1297,6 @@ struct cfg80211_unsol_bcast_probe_resp {
|
|||
* @sae_h2e_required: stations must support direct H2E technique in SAE
|
||||
* @flags: flags, as defined in enum cfg80211_ap_settings_flags
|
||||
* @he_obss_pd: OBSS Packet Detection settings
|
||||
* @he_bss_color: BSS Color settings
|
||||
* @he_oper: HE operation IE (or %NULL if HE isn't enabled)
|
||||
* @fils_discovery: FILS discovery transmission parameters
|
||||
* @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
|
||||
|
@ -1326,7 +1330,6 @@ struct cfg80211_ap_settings {
|
|||
bool twt_responder;
|
||||
u32 flags;
|
||||
struct ieee80211_he_obss_pd he_obss_pd;
|
||||
struct cfg80211_he_bss_color he_bss_color;
|
||||
struct cfg80211_fils_discovery fils_discovery;
|
||||
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
|
||||
struct cfg80211_mbssid_config mbssid_config;
|
||||
|
|
|
@ -1174,7 +1174,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
|
|||
IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK);
|
||||
changed |= BSS_CHANGED_HE_OBSS_PD;
|
||||
|
||||
if (params->he_bss_color.enabled)
|
||||
if (params->beacon.he_bss_color.enabled)
|
||||
changed |= BSS_CHANGED_HE_BSS_COLOR;
|
||||
}
|
||||
|
||||
|
@ -1231,7 +1231,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
|
|||
sdata->vif.bss_conf.allow_p2p_go_ps = sdata->vif.p2p;
|
||||
sdata->vif.bss_conf.twt_responder = params->twt_responder;
|
||||
sdata->vif.bss_conf.he_obss_pd = params->he_obss_pd;
|
||||
sdata->vif.bss_conf.he_bss_color = params->he_bss_color;
|
||||
sdata->vif.bss_conf.he_bss_color = params->beacon.he_bss_color;
|
||||
sdata->vif.bss_conf.s1g = params->chandef.chan->band ==
|
||||
NL80211_BAND_S1GHZ;
|
||||
|
||||
|
|
|
@ -5173,6 +5173,30 @@ nl80211_parse_mbssid_elems(struct wiphy *wiphy, struct nlattr *attrs)
|
|||
return elems;
|
||||
}
|
||||
|
||||
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->enabled =
|
||||
!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 int nl80211_parse_beacon(struct cfg80211_registered_device *rdev,
|
||||
struct nlattr *attrs[],
|
||||
struct cfg80211_beacon_data *bcn)
|
||||
|
@ -5253,6 +5277,14 @@ static int nl80211_parse_beacon(struct cfg80211_registered_device *rdev,
|
|||
bcn->ftm_responder = -1;
|
||||
}
|
||||
|
||||
if (attrs[NL80211_ATTR_HE_BSS_COLOR]) {
|
||||
err = nl80211_parse_he_bss_color(attrs[NL80211_ATTR_HE_BSS_COLOR],
|
||||
&bcn->he_bss_color);
|
||||
if (err)
|
||||
return err;
|
||||
bcn->he_bss_color_valid = true;
|
||||
}
|
||||
|
||||
if (attrs[NL80211_ATTR_MBSSID_ELEMS]) {
|
||||
struct cfg80211_mbssid_elems *mbssid =
|
||||
nl80211_parse_mbssid_elems(&rdev->wiphy,
|
||||
|
@ -5311,30 +5343,6 @@ 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->enabled =
|
||||
!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 int nl80211_parse_fils_discovery(struct cfg80211_registered_device *rdev,
|
||||
struct nlattr *attrs,
|
||||
struct cfg80211_ap_settings *params)
|
||||
|
@ -5726,14 +5734,6 @@ 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)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_FILS_DISCOVERY]) {
|
||||
err = nl80211_parse_fils_discovery(rdev,
|
||||
info->attrs[NL80211_ATTR_FILS_DISCOVERY],
|
||||
|
|
Загрузка…
Ссылка в новой задаче