]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
AP: Use AP MLD MAC address for terminating MLO association
authorIlan Peer <ilan.peer@intel.com>
Wed, 13 Dec 2023 14:04:07 +0000 (16:04 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 16 Dec 2023 16:49:56 +0000 (18:49 +0200)
Use the AP MLD MAC address when sending Deauthentication and
Disassociation frames to a non-AP MLD.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
src/ap/ap_drv_ops.c

index 11a4eac8223c8b53178621808296a9e88d5e72e2..fd0f97748e08ddd6e7ef432408e53323300b4e71 100644 (file)
@@ -832,15 +832,21 @@ int hostapd_drv_sta_deauth(struct hostapd_data *hapd,
                           const u8 *addr, int reason)
 {
        int link_id = -1;
+       const u8 *own_addr = hapd->own_addr;
 
 #ifdef CONFIG_IEEE80211BE
-       if (hapd->conf->mld_ap)
+       if (hapd->conf->mld_ap) {
+               struct sta_info *sta = ap_get_sta(hapd, addr);
+
                link_id = hapd->mld_link_id;
+               if (sta && sta->mld_info.mld_sta)
+                       own_addr = hapd->mld_addr;
+       }
 #endif /* CONFIG_IEEE80211BE */
 
        if (!hapd->driver || !hapd->driver->sta_deauth || !hapd->drv_priv)
                return 0;
-       return hapd->driver->sta_deauth(hapd->drv_priv, hapd->own_addr, addr,
+       return hapd->driver->sta_deauth(hapd->drv_priv, own_addr, addr,
                                        reason, link_id);
 }
 
@@ -848,9 +854,20 @@ int hostapd_drv_sta_deauth(struct hostapd_data *hapd,
 int hostapd_drv_sta_disassoc(struct hostapd_data *hapd,
                             const u8 *addr, int reason)
 {
+       const u8 *own_addr = hapd->own_addr;
+
+#ifdef CONFIG_IEEE80211BE
+       if (hapd->conf->mld_ap) {
+               struct sta_info *sta = ap_get_sta(hapd, addr);
+
+               if (sta && sta->mld_info.mld_sta)
+                       own_addr = hapd->mld_addr;
+       }
+#endif /* CONFIG_IEEE80211BE */
+
        if (!hapd->driver || !hapd->driver->sta_disassoc || !hapd->drv_priv)
                return 0;
-       return hapd->driver->sta_disassoc(hapd->drv_priv, hapd->own_addr, addr,
+       return hapd->driver->sta_disassoc(hapd->drv_priv, own_addr, addr,
                                          reason);
 }