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)
+ tmp_hapd = get_hapd_bssid(hapd->iface, get_hdr_bssid(hdr, len));
+ if (tmp_hapd) {
+ hapd = tmp_hapd;
+#ifdef CONFIG_IEEE80211BE
+ } else if (hapd->conf->mld_ap &&
+ os_memcmp(hapd->mld_addr, get_hdr_bssid(hdr, len),
+ ETH_ALEN) == 0) {
+ /* AP MLD address match - use hapd pointer as-is */
+#endif /* CONFIG_IEEE80211BE */
+ } else {
return;
+ }
+
if (hapd == HAPD_BROADCAST) {
if (stype != WLAN_FC_STYPE_ACTION || len <= 25 ||
buf[24] != WLAN_ACTION_PUBLIC)