[PATCH v2 12/44] AP: Match Rx frames against MLD address
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Mon May 22 12:33:40 PDT 2023
From: Ilan Peer <ilan.peer at intel.com>
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 Rx management frame, match it against
the MLD address.
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
src/ap/drv_callbacks.c | 13 +++++++++++--
src/ap/ieee802_11.c | 8 ++++++++
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
index 7da5c524cf..236a83f75f 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))
+ 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 e753fbb614..c22e7cf0d5 100644
--- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c
@@ -5494,6 +5494,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)) &&
+#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));
@@ -5513,6 +5517,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)) &&
+#endif /* CONFIG_IEEE80211BE */
os_memcmp(mgmt->da, hapd->own_addr, ETH_ALEN) != 0) {
hostapd_logger(hapd, mgmt->sa, HOSTAPD_MODULE_IEEE80211,
HOSTAPD_LEVEL_DEBUG,
--
2.38.1
More information about the Hostap
mailing list