[PATCH 5/6] AP: Remove link stations on a new station authentication
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Mon Dec 25 09:43:02 PST 2023
From: Ilan Peer <ilan.peer at intel.com>
When a station tries to authenticate to an AP that hosts
a MLD AP, need to remove all station instances from all
APs.
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
src/ap/sta_info.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c
index db2e8ca26c..b224ef955a 100644
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
@@ -1715,6 +1715,35 @@ int ap_sta_pending_delayed_1x_auth_fail_disconnect(struct hostapd_data *hapd,
}
+#ifdef CONFIG_IEEE80211BE
+static void ap_sta_remove_link_sta(struct hostapd_data *hapd,
+ struct sta_info *sta)
+{
+ struct hostapd_data *tmp_hapd;
+ unsigned int i, j;
+
+ for_each_mld_link(tmp_hapd, i, j, hapd->iface->interfaces,
+ hapd->conf->mld_id) {
+ struct sta_info *tmp_sta;
+
+ if (hapd == tmp_hapd)
+ continue;
+
+ for (tmp_sta = tmp_hapd->sta_list; tmp_sta;
+ tmp_sta = tmp_sta->next) {
+ if (tmp_sta == sta ||
+ os_memcmp(tmp_sta->addr, sta->addr,
+ ETH_ALEN))
+ continue;
+
+ ap_free_sta(tmp_hapd, tmp_sta);
+ break;
+ }
+ }
+}
+#endif /* CONFIG_IEEE80211BE */
+
+
int ap_sta_re_add(struct hostapd_data *hapd, struct sta_info *sta)
{
const u8 *mld_link_addr = NULL;
@@ -1734,7 +1763,14 @@ int ap_sta_re_add(struct hostapd_data *hapd, struct sta_info *sta)
mld_link_sta = sta->mld_assoc_link_id != mld_link_id;
mld_link_addr = sta->mld_info.links[mld_link_id].peer_addr;
+
+ /*
+ * In case the AP hosts an MLD AP, need to remove the station
+ * from all relevant links/APs.
+ */
+ ap_sta_remove_link_sta(hapd, sta);
}
+
#endif /* CONFIG_IEEE80211BE */
ap_sta_set_authorized(hapd, sta, 0);
--
2.43.0
More information about the Hostap
mailing list