[PATCH 29/50] AP: Handle TX status for MLD AP

Andrei Otcheretianski andrei.otcheretianski at intel.com
Wed Feb 15 15:08:43 PST 2023


From: Ilan Peer <ilan.peer at intel.com>

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 src/ap/drv_callbacks.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
index 5869d71f44..8dc4ad1ffb 100644
--- a/src/ap/drv_callbacks.c
+++ b/src/ap/drv_callbacks.c
@@ -1534,12 +1534,26 @@ static void hostapd_mgmt_tx_cb(struct hostapd_data *hapd, const u8 *buf,
 			       size_t len, u16 stype, int ok)
 {
 	struct ieee80211_hdr *hdr;
-	struct hostapd_data *orig_hapd = hapd;
+	struct hostapd_data *orig_hapd = hapd, *tmp_hapd;
 
 	hdr = (struct ieee80211_hdr *) buf;
-	hapd = get_hapd_bssid(hapd->iface, get_hdr_bssid(hdr, len));
-	if (!hapd)
-		return;
+	tmp_hapd = get_hapd_bssid(hapd->iface, get_hdr_bssid(hdr, len));
+	if (tmp_hapd) {
+		hapd = tmp_hapd;
+	} else {
+		bool mld_ap_match = false;
+
+#ifdef CONFIG_IEEE80211BE
+		mld_ap_match = (hapd->conf->mld_ap &&
+				!os_memcmp(hapd->mld_addr,
+					   get_hdr_bssid(hdr, len),
+					   ETH_ALEN));
+#endif /* CONFIG_IEEE80211BE */
+
+		if (!mld_ap_match)
+			return;
+	}
+
 	if (hapd == HAPD_BROADCAST) {
 		if (stype != WLAN_FC_STYPE_ACTION || len <= 25 ||
 		    buf[24] != WLAN_ACTION_PUBLIC)
-- 
2.38.1




More information about the Hostap mailing list