blob: 277f5faa2b13ae70b348ec74fbc57a5e5b3e93b6 [file] [log] [blame]
From 401cb8a661c5e7d796a17bb289209663a6c42741 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 c67d08b..02f4f87 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -2098,6 +2098,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;
@@ -2121,7 +2127,7 @@ int ieee802_11_set_beacon(struct hostapd_data *hapd)
if (colocated == iface || !colocated || !colocated->conf)
continue;
- if (is_6g == is_6ghz_op_class(colocated->conf->op_class))
+ if (!is_6g || is_6ghz_op_class(colocated->conf->op_class))
continue;
for (i = 0; i < colocated->num_bss; i++) {
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 78fd9d8..9e247da 100644
--- a/src/ap/bss_load.c
+++ b/src/ap/bss_load.c
@@ -58,7 +58,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 (hapd->conf->chan_util_avg_period) {
iface->chan_util_samples_sum += iface->channel_utilization;
--
2.25.1