--- /dev/null
+--- a/src/ap/hostapd.c
++++ b/src/ap/hostapd.c
+@@ -2420,7 +2420,11 @@ static int hostapd_owe_iface_iter(struct
+ if (!bss->conf->ssid.ssid_set || !bss->conf->ssid.ssid_len ||
+ is_zero_ether_addr(bss->own_addr))
+ continue;
+-
++ if (!os_memcmp(hapd->conf->owe_transition_bssid, bss->own_addr, ETH_ALEN) &&
++ hapd->conf->owe_transition_ssid_len == bss->conf->ssid.ssid_len &&
++ !os_memcmp(hapd->conf->owe_transition_ssid, bss->conf->ssid.ssid,
++ bss->conf->ssid.ssid_len))
++ return 0;
+ os_memcpy(hapd->conf->owe_transition_bssid, bss->own_addr,
+ ETH_ALEN);
+ os_memcpy(hapd->conf->owe_transition_ssid,
+@@ -2437,10 +2441,6 @@ static int hostapd_owe_iface_iter(struct
+
+ int hostapd_owe_trans_get_info(struct hostapd_data *hapd)
+ {
+- if (hapd->conf->owe_transition_ssid_len > 0 &&
+- !is_zero_ether_addr(hapd->conf->owe_transition_bssid))
+- return 0;
+-
+ /* Find transition mode SSID/BSSID information from a BSS operated by
+ * this hostapd instance. */
+ if (!hapd->iface->interfaces ||
if (conf->wmm_enabled < 0)
conf->wmm_enabled = hapd->iconf->ieee80211n |
hapd->iconf->ieee80211ax;
+@@ -2487,7 +2493,7 @@ static int hostapd_owe_iface_iter2(struc
+ #endif /* CONFIG_OWE */
+
+
+-static void hostapd_owe_update_trans(struct hostapd_iface *iface)
++void hostapd_owe_update_trans(struct hostapd_iface *iface)
+ {
+ #ifdef CONFIG_OWE
+ /* Check whether the enabled BSS can complete OWE transition mode
@@ -2954,7 +2960,7 @@ hostapd_alloc_bss_data(struct hostapd_if
}
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
int reassoc);
void hostapd_interface_deinit_free(struct hostapd_iface *iface);
+@@ -815,6 +824,7 @@ hostapd_switch_channel_fallback(struct h
+ void hostapd_cleanup_cs_params(struct hostapd_data *hapd);
+ void hostapd_periodic_iface(struct hostapd_iface *iface);
+ int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
++void hostapd_owe_update_trans(struct hostapd_iface *iface);;
+ void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
+
+ void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap);
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -3928,6 +3928,25 @@ struct wpa_driver_ops {
{
--- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h
-@@ -825,6 +825,7 @@ void hostapd_cleanup_cs_params(struct ho
- void hostapd_periodic_iface(struct hostapd_iface *iface);
+@@ -826,6 +826,7 @@ void hostapd_periodic_iface(struct hosta
int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
+ void hostapd_owe_update_trans(struct hostapd_iface *iface);;
void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
+int hostapd_check_max_sta(struct hostapd_data *hapd);
int bridge_hairpin; /* hairpin_mode on bridge members */
--- a/src/ap/wpa_auth_glue.c
+++ b/src/ap/wpa_auth_glue.c
-@@ -1815,8 +1815,12 @@ int hostapd_setup_wpa(struct hostapd_dat
+@@ -1821,8 +1821,12 @@ int hostapd_setup_wpa(struct hostapd_dat
wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
const char *ft_iface;
hostapd_setup_bss(hapd, hapd == iface->bss[0], true);
hostapd_ucode_update_interfaces();
+ hostapd_owe_update_trans(iface);
done:
ret = 0;
conf->bss[idx] = NULL;
ret = hostapd_ucode_bss_get_uval(hapd);
hostapd_ucode_update_interfaces();
+ hostapd_owe_update_trans(iface);
goto out;
deinit_ctrl:
ieee802_11_set_beacon(hapd);
}
+ hostapd_owe_update_trans(iface);
return ucv_boolean_new(true);
}
hostapd_ubus_add_bss(hapd);
hostapd_ucode_update_interfaces();
+ hostapd_owe_update_trans(hapd->iface);
out:
if (interfaces->ctrl_iface_init)
interfaces->ctrl_iface_init(hapd);