[PATCH 1/2] MLD: Change get_shared_radio_freqs_data() to also support MLD connections
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Sun Jan 11 04:01:30 PST 2026
From: Ilan Peer <ilan.peer at intel.com>
For now, the frequencies are the ones associated with the valid links
and not the active links.
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
wpa_supplicant/wpa_supplicant.c | 64 +++++++++++++++++++++++----------
1 file changed, 45 insertions(+), 19 deletions(-)
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 293d4920ea..62336f9cdc 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -9539,8 +9539,8 @@ int get_shared_radio_freqs_data(struct wpa_supplicant *wpa_s,
{
struct wpa_supplicant *ifs;
u8 bssid[ETH_ALEN];
- int freq;
- unsigned int idx = 0, i;
+ int freqs[MAX_NUM_MLD_LINKS];
+ unsigned int idx = 0, i, j, n_freqs;
wpa_dbg(wpa_s, MSG_DEBUG,
"Determining shared radio frequencies (max len %u)", len);
@@ -9548,36 +9548,62 @@ int get_shared_radio_freqs_data(struct wpa_supplicant *wpa_s,
dl_list_for_each(ifs, &wpa_s->radio->ifaces, struct wpa_supplicant,
radio_list) {
+ n_freqs = 0;
if (idx == len)
break;
if (exclude_current && ifs == wpa_s)
continue;
- if (ifs->current_ssid == NULL || ifs->assoc_freq == 0)
+ if (!ifs->current_ssid || (!ifs->assoc_freq &&
+ !ifs->valid_links))
continue;
if (ifs->current_ssid->mode == WPAS_MODE_AP ||
ifs->current_ssid->mode == WPAS_MODE_P2P_GO ||
- ifs->current_ssid->mode == WPAS_MODE_MESH)
- freq = ifs->current_ssid->frequency;
- else if (wpa_drv_get_bssid(ifs, bssid) == 0)
- freq = ifs->assoc_freq;
- else
- continue;
+ ifs->current_ssid->mode == WPAS_MODE_MESH) {
+ freqs[n_freqs++] = ifs->current_ssid->frequency;
+ } else if (ifs->valid_links) {
+ struct driver_sta_mlo_info drv_mlo;
- /* Hold only distinct freqs */
- for (i = 0; i < idx; i++)
- if (freqs_data[i].freq == freq)
- break;
+ os_memset(&drv_mlo, 0, sizeof(drv_mlo));
- if (i == idx)
- freqs_data[idx++].freq = freq;
+ if (wpas_drv_get_sta_mlo_info(ifs, &drv_mlo)) {
+ wpa_dbg(wpa_s, MSG_INFO,
+ "Failed to get MLO link info");
+ continue;
+ }
+
+ if (!drv_mlo.valid_links)
+ continue;
- if (ifs->current_ssid->mode == WPAS_MODE_INFRA) {
- freqs_data[i].flags |= ifs->current_ssid->p2p_group ?
- WPA_FREQ_USED_BY_P2P_CLIENT :
- WPA_FREQ_USED_BY_INFRA_STATION;
+ for_each_link(drv_mlo.valid_links, j) {
+ if (!drv_mlo.links[j].freq)
+ continue;
+
+ freqs[n_freqs++] = drv_mlo.links[j].freq;
+ }
+ } else if (wpa_drv_get_bssid(ifs, bssid) == 0) {
+ freqs[n_freqs++] = ifs->assoc_freq;
+ } else {
+ continue;
+ }
+
+ /* Hold only distinct freqs */
+ for (j = 0; j < n_freqs && idx < len; j++) {
+ for (i = 0; i < idx; i++)
+ if (freqs_data[i].freq == freqs[j])
+ break;
+
+ if (i == idx)
+ freqs_data[idx++].freq = freqs[j];
+
+ if (ifs->current_ssid->mode == WPAS_MODE_INFRA) {
+ freqs_data[i].flags |=
+ ifs->current_ssid->p2p_group ?
+ WPA_FREQ_USED_BY_P2P_CLIENT :
+ WPA_FREQ_USED_BY_INFRA_STATION;
+ }
}
}
--
2.52.0
More information about the Hostap
mailing list