From: Ilan Peer <ilan.peer@xxxxxxxxx> Signed-off-by: Ilan Peer <ilan.peer@xxxxxxxxx> --- 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 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap