0
0
mirror of https://git.openwrt.org/openwrt/openwrt.git/ synced 2025-10-05 23:42:55 +02:00

hostapd: skip dynamic reconfiguration while not in enabled state

Interface might be down or scanning. Better do a full restart in order to avoid
messing up the runtime state.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau
2025-10-03 15:32:25 +02:00
parent 18bdeda011
commit 7b2c9f6799
2 changed files with 35 additions and 0 deletions

View File

@@ -538,6 +538,11 @@ function iface_reload_config(name, phydev, config, old_config)
return false;
}
if (iface.state() != "ENABLED") {
hostapd.printf(`Interface ${iface_name} is not fully configured`);
return false;
}
let first_bss = get_config_bss(name, old_config, 0);
if (!first_bss) {
hostapd.printf(`Could not find bss of previous interface ${iface_name}`);

View File

@@ -380,6 +380,35 @@ uc_hostapd_bss_delete(uc_vm_t *vm, size_t nargs)
return NULL;
}
static uc_value_t *
uc_hostapd_iface_state(uc_vm_t *vm, size_t nargs)
{
#define hapd_state(name) [HAPD_IFACE_##name] = #name
static const char * const hapd_state_name[] = {
hapd_state(UNINITIALIZED),
hapd_state(DISABLED),
hapd_state(COUNTRY_UPDATE),
hapd_state(ACS),
hapd_state(HT_SCAN),
hapd_state(DFS),
hapd_state(NO_IR),
hapd_state(ENABLED),
};
struct hostapd_iface *iface = uc_fn_thisval("hostapd.iface");
const char *state = NULL;
if (!iface)
return NULL;
if (iface->state < ARRAY_SIZE(hapd_state_name))
state = hapd_state_name[iface->state];
if (!state)
state = "unknown";
return ucv_string_new(state);
}
static uc_value_t *
uc_hostapd_iface_add_bss(uc_vm_t *vm, size_t nargs)
{
@@ -930,6 +959,7 @@ int hostapd_ucode_init(struct hapd_interfaces *ifaces)
{ "delete", uc_hostapd_bss_delete },
};
static const uc_function_list_t iface_fns[] = {
{ "state", uc_hostapd_iface_state },
{ "set_bss_order", uc_hostapd_iface_set_bss_order },
{ "add_bss", uc_hostapd_iface_add_bss },
{ "stop", uc_hostapd_iface_stop },