wifi: cfg80211: generate an ML element for per-STA profiles
The specification says that this information should not be explicitly included in the per-STA profile. However, we need this information readily available in the BSS for userspace and also internally when associating. As such, append the appropriate element before adding/updating the BSS. Signed-off-by: Benjamin Berg <benjamin.berg@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://msgid.link/20231211085121.abde63d9cc6d.I3d346be0f84f51dccf4f4f92a3e997e6102b9456@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
f6289e5d31
commit
5f478adf1f
@ -2621,6 +2621,7 @@ static void cfg80211_parse_ml_sta_data(struct wiphy *wiphy,
|
||||
const struct element *elem;
|
||||
struct cfg80211_mle *mle;
|
||||
u16 control;
|
||||
u8 ml_common_len;
|
||||
u8 *new_ie;
|
||||
struct cfg80211_bss *bss;
|
||||
int mld_id;
|
||||
@ -2651,6 +2652,8 @@ static void cfg80211_parse_ml_sta_data(struct wiphy *wiphy,
|
||||
!(control & IEEE80211_MLC_BASIC_PRES_MLD_CAPA_OP))
|
||||
return;
|
||||
|
||||
ml_common_len = ml_elem->variable[0];
|
||||
|
||||
/* length + MLD MAC address + link ID info + BSS Params Change Count */
|
||||
pos = ml_elem->variable + 1 + 6 + 1 + 1;
|
||||
|
||||
@ -2767,6 +2770,34 @@ static void cfg80211_parse_ml_sta_data(struct wiphy *wiphy,
|
||||
if (!data.ielen)
|
||||
continue;
|
||||
|
||||
/* The generated elements do not contain:
|
||||
* - Basic ML element
|
||||
* - A TBTT entry in the RNR for the transmitting AP
|
||||
*
|
||||
* This information is needed both internally and in userspace
|
||||
* as such, we should append it here.
|
||||
*/
|
||||
if (data.ielen + 3 + sizeof(*ml_elem) + ml_common_len >
|
||||
IEEE80211_MAX_DATA_LEN)
|
||||
continue;
|
||||
|
||||
/* Copy the Basic Multi-Link element including the common
|
||||
* information, and then fix up the link ID.
|
||||
* Note that the ML element length has been verified and we
|
||||
* also checked that it contains the link ID.
|
||||
*/
|
||||
new_ie[data.ielen++] = WLAN_EID_EXTENSION;
|
||||
new_ie[data.ielen++] = 1 + sizeof(*ml_elem) + ml_common_len;
|
||||
new_ie[data.ielen++] = WLAN_EID_EXT_EHT_MULTI_LINK;
|
||||
memcpy(new_ie + data.ielen, ml_elem,
|
||||
sizeof(*ml_elem) + ml_common_len);
|
||||
|
||||
new_ie[data.ielen + sizeof(*ml_elem) + 1 + ETH_ALEN] = link_id;
|
||||
|
||||
data.ielen += sizeof(*ml_elem) + ml_common_len;
|
||||
|
||||
/* TODO: Add an RNR containing only the reporting AP */
|
||||
|
||||
bss = cfg80211_inform_single_bss_data(wiphy, &data, gfp);
|
||||
if (!bss)
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user