blob: 1695996fd3f9fa5b171a9c81b762f55f35dc2f6c [file] [log] [blame]
From 53dbf487d72a05ae692d98930852c3b98cc6dad6 Mon Sep 17 00:00:00 2001
From: Michael-CY Lee <michael-cy.lee@mediatek.com>
Date: Wed, 4 Oct 2023 11:12:52 +0800
Subject: [PATCH] hostapd: mtk: avoid unnecessary beacon update for 6 GHz
co-location
There are two reasons to update beacon for 6 GHz co-location:
1. 6 GHz out-of-band discovery
2. MLD operational parameters update
BSS load update is unrelated with the above two reasons, and therefore is
not a case to update beacon for 6 GHz co-location.
Moreover, updating beacon for 6 GHz co-location when BSS load update
makes hostapd set beacon too frequently in a multiple BSSes case.
Besides, it is also not necessary to update beacon for 6 GHz BSS when
setting 2/5 GHz beacon. (i.e., no need for 2/5 GHz co-location)
This patch adds an new function to update beacon only for current BSS,
and uses the function duriong BSS load update.
Also it changes the condition check to make beacon update only for 6 GHz
co-location.
Signed-off-by: Michael Lee <michael-cy.lee@mediatek.com>
Signed-off-by: Money Wang <money.wang@mediatek.com>
---
src/ap/beacon.c | 8 +++++++-
src/ap/beacon.h | 1 +
src/ap/bss_load.c | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index d160675..684bdc0 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -2216,6 +2216,12 @@ fail:
}
+void ieee802_11_set_beacon_per_bss_only(struct hostapd_data *hapd)
+{
+ __ieee802_11_set_beacon(hapd);
+}
+
+
int ieee802_11_set_beacon(struct hostapd_data *hapd)
{
struct hostapd_iface *iface = hapd->iface;
@@ -2246,7 +2252,7 @@ int ieee802_11_set_beacon(struct hostapd_data *hapd)
mld_ap = true;
#endif /* CONFIG_IEEE80211BE */
- if (is_6g == is_6ghz_op_class(other->conf->op_class) &&
+ if ((!is_6g || is_6ghz_op_class(other->conf->op_class)) &&
!mld_ap)
continue;
diff --git a/src/ap/beacon.h b/src/ap/beacon.h
index c320825..b32b2a7 100644
--- a/src/ap/beacon.h
+++ b/src/ap/beacon.h
@@ -15,6 +15,7 @@ struct ieee80211_mgmt;
void handle_probe_req(struct hostapd_data *hapd,
const struct ieee80211_mgmt *mgmt, size_t len,
int ssi_signal);
+void ieee802_11_set_beacon_per_bss_only(struct hostapd_data *hapd);
int ieee802_11_set_beacon(struct hostapd_data *hapd);
int ieee802_11_set_beacons(struct hostapd_iface *iface);
int ieee802_11_update_beacons(struct hostapd_iface *iface);
diff --git a/src/ap/bss_load.c b/src/ap/bss_load.c
index 725d3cd..e9baafc 100644
--- a/src/ap/bss_load.c
+++ b/src/ap/bss_load.c
@@ -55,7 +55,7 @@ static void update_channel_utilization(void *eloop_data, void *user_data)
return;
}
- ieee802_11_set_beacon(hapd);
+ ieee802_11_set_beacon_per_bss_only(hapd);
if (get_bss_load_update_timeout(hapd, &sec, &usec) < 0)
return;
--
2.25.1