From: Ilan Peer Date: Mon, 22 May 2023 19:33:40 +0000 (+0300) Subject: AP: Match received Management frames against MLD address X-Git-Tag: hostap_2_11~1145 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=79a9df6e88eef3f7a1f4ffa295e5ac8fc85f9b87;p=thirdparty%2Fhostap.git AP: Match received Management frames against MLD address Once a station is added to the underlying driver, the driver is expected to do address translation and use MLD addresses. Thus, when handling a received Management frame, match it against the MLD address. Signed-off-by: Ilan Peer --- diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c index 7da5c524c..0cd8ce744 100644 --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c @@ -1459,6 +1459,7 @@ static int hostapd_mgmt_rx(struct hostapd_data *hapd, struct rx_mgmt *rx_mgmt) const u8 *bssid; struct hostapd_frame_info fi; int ret; + bool is_mld = false; #ifdef CONFIG_TESTING_OPTIONS if (hapd->ext_mgmt_frame_handling) { @@ -1480,8 +1481,16 @@ static int hostapd_mgmt_rx(struct hostapd_data *hapd, struct rx_mgmt *rx_mgmt) if (bssid == NULL) return 0; - hapd = get_hapd_bssid(iface, bssid); - if (hapd == NULL) { +#ifdef CONFIG_IEEE80211BE + if (hapd->conf->mld_ap && + os_memcmp(hapd->mld_addr, bssid, ETH_ALEN) == 0) + is_mld = true; +#endif /* CONFIG_IEEE80211BE */ + + if (!is_mld) + hapd = get_hapd_bssid(iface, bssid); + + if (!hapd) { u16 fc = le_to_host16(hdr->frame_control); /* diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index a289b26af..1436bd4e0 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -5495,6 +5495,10 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len, #ifdef CONFIG_MESH !(hapd->conf->mesh & MESH_ENABLED) && #endif /* CONFIG_MESH */ +#ifdef CONFIG_IEEE80211BE + !(hapd->conf->mld_ap && + os_memcmp(hapd->mld_addr, mgmt->bssid, ETH_ALEN) == 0) && +#endif /* CONFIG_IEEE80211BE */ os_memcmp(mgmt->bssid, hapd->own_addr, ETH_ALEN) != 0) { wpa_printf(MSG_INFO, "MGMT: BSSID=" MACSTR " not our address", MAC2STR(mgmt->bssid)); @@ -5514,6 +5518,10 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len, if ((!is_broadcast_ether_addr(mgmt->da) || stype != WLAN_FC_STYPE_ACTION) && +#ifdef CONFIG_IEEE80211BE + !(hapd->conf->mld_ap && + os_memcmp(hapd->mld_addr, mgmt->bssid, ETH_ALEN) == 0) && +#endif /* CONFIG_IEEE80211BE */ os_memcmp(mgmt->da, hapd->own_addr, ETH_ALEN) != 0) { hostapd_logger(hapd, mgmt->sa, HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_DEBUG,