AP: AID allocation for MLD
Find an AID that is unused on all the affiliated links when assigning an AID to a non-AP MLD. Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
This commit is contained in:
parent
11a607d121
commit
d924be3bd0
1 changed files with 40 additions and 2 deletions
|
@ -3256,6 +3256,42 @@ static u8 hostapd_max_bssid_indicator(struct hostapd_data *hapd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static u32 hostapd_get_aid_word(struct hostapd_data *hapd,
|
||||||
|
struct sta_info *sta, int i)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
u32 aid_word = 0;
|
||||||
|
|
||||||
|
/* Do not assign an AID that is in use on any of the affiliated links
|
||||||
|
* when finding an AID for a non-AP MLD. */
|
||||||
|
if (hapd->conf->mld_ap) {
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (j = 0; j < MAX_NUM_MLD_LINKS; j++) {
|
||||||
|
struct hostapd_data *link_bss;
|
||||||
|
|
||||||
|
if (!sta->mld_info.links[j].valid)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
link_bss = hostapd_mld_get_link_bss(hapd, j);
|
||||||
|
if (!link_bss) {
|
||||||
|
/* This shouldn't happen, just skip */
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"MLD: Failed to get link BSS for AID");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
aid_word |= link_bss->sta_aid[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return aid_word;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_IEEE80211BE */
|
||||||
|
|
||||||
|
return hapd->sta_aid[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta)
|
int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta)
|
||||||
{
|
{
|
||||||
int i, j = 32, aid;
|
int i, j = 32, aid;
|
||||||
|
@ -3270,10 +3306,12 @@ int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for (i = 0; i < AID_WORDS; i++) {
|
for (i = 0; i < AID_WORDS; i++) {
|
||||||
if (hapd->sta_aid[i] == (u32) -1)
|
u32 aid_word = hostapd_get_aid_word(hapd, sta, i);
|
||||||
|
|
||||||
|
if (aid_word == (u32) -1)
|
||||||
continue;
|
continue;
|
||||||
for (j = 0; j < 32; j++) {
|
for (j = 0; j < 32; j++) {
|
||||||
if (!(hapd->sta_aid[i] & BIT(j)))
|
if (!(aid_word & BIT(j)))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (j < 32)
|
if (j < 32)
|
||||||
|
|
Loading…
Reference in a new issue