[openwrt/openwrt] hostapd: fix OWE ssid update on configuration changes
LEDE Commits
lede-commits at lists.infradead.org
Sat Sep 21 11:37:55 PDT 2024
nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/df1011e0b7c0c2497d40d57eff0cd604b8aece48
commit df1011e0b7c0c2497d40d57eff0cd604b8aece48
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Wed Sep 18 18:26:45 2024 +0200
hostapd: fix OWE ssid update on configuration changes
Refresh OWE transition IEs on updating BSS interfaces
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
.../hostapd/patches/180-fix_owe_ssid_update.patch | 26 ++++++++++++++++++++++
.../hostapd/patches/601-ucode_support.patch | 17 ++++++++++++++
.../hostapd/patches/720-iface_max_num_sta.patch | 4 ++--
.../services/hostapd/patches/730-ft_iface.patch | 2 +-
.../network/services/hostapd/src/src/ap/ucode.c | 4 ++++
5 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch b/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch
new file mode 100644
index 0000000000..5581922b27
--- /dev/null
+++ b/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch
@@ -0,0 +1,26 @@
+--- 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 ||
diff --git a/package/network/services/hostapd/patches/601-ucode_support.patch b/package/network/services/hostapd/patches/601-ucode_support.patch
index 8407118219..4288e0f789 100644
--- a/package/network/services/hostapd/patches/601-ucode_support.patch
+++ b/package/network/services/hostapd/patches/601-ucode_support.patch
@@ -148,6 +148,15 @@ as adding/removing 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
}
@@ -213,6 +222,14 @@ as adding/removing interfaces.
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 {
diff --git a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch
index f0e838bf2f..e9d35de6be 100644
--- a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch
+++ b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch
@@ -79,9 +79,9 @@ full device, e.g. in order to deal with hardware/driver limitations
{
--- 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);
diff --git a/package/network/services/hostapd/patches/730-ft_iface.patch b/package/network/services/hostapd/patches/730-ft_iface.patch
index 648641e43a..ac7d3abd78 100644
--- a/package/network/services/hostapd/patches/730-ft_iface.patch
+++ b/package/network/services/hostapd/patches/730-ft_iface.patch
@@ -29,7 +29,7 @@ a VLAN interface on top of the bridge, instead of using the bridge directly
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;
diff --git a/package/network/services/hostapd/src/src/ap/ucode.c b/package/network/services/hostapd/src/src/ap/ucode.c
index 2c1e706804..c8a2b13a28 100644
--- a/package/network/services/hostapd/src/src/ap/ucode.c
+++ b/package/network/services/hostapd/src/src/ap/ucode.c
@@ -259,6 +259,7 @@ uc_hostapd_bss_set_config(uc_vm_t *vm, size_t nargs)
hostapd_setup_bss(hapd, hapd == iface->bss[0], true);
hostapd_ucode_update_interfaces();
+ hostapd_owe_update_trans(iface);
done:
ret = 0;
@@ -379,6 +380,7 @@ uc_hostapd_iface_add_bss(uc_vm_t *vm, size_t nargs)
conf->bss[idx] = NULL;
ret = hostapd_ucode_bss_get_uval(hapd);
hostapd_ucode_update_interfaces();
+ hostapd_owe_update_trans(iface);
goto out;
deinit_ctrl:
@@ -607,6 +609,7 @@ out:
ieee802_11_set_beacon(hapd);
}
+ hostapd_owe_update_trans(iface);
return ucv_boolean_new(true);
}
@@ -698,6 +701,7 @@ uc_hostapd_bss_rename(uc_vm_t *vm, size_t nargs)
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);
More information about the lede-commits
mailing list