hostapd: use phy name for hostapd interfaces instead of first-bss ifname

Improves reliability in error handling

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2023-09-19 11:02:54 +02:00
parent 053f8f92d1
commit a511480368
3 changed files with 21 additions and 9 deletions

View File

@ -26,7 +26,6 @@ function iface_remove(cfg)
if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname) if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
return; return;
hostapd.remove_iface(cfg.bss[0].ifname);
for (let bss in cfg.bss) for (let bss in cfg.bss)
wdev_remove(bss.ifname); wdev_remove(bss.ifname);
} }
@ -95,14 +94,14 @@ function iface_add(phy, config, phy_status)
let config_inline = iface_gen_config(phy, config, !!phy_status); let config_inline = iface_gen_config(phy, config, !!phy_status);
let bss = config.bss[0]; let bss = config.bss[0];
let ret = hostapd.add_iface(`bss_config=${bss.ifname}:${config_inline}`); let ret = hostapd.add_iface(`bss_config=${phy}:${config_inline}`);
if (ret < 0) if (ret < 0)
return false; return false;
if (!phy_status) if (!phy_status)
return true; return true;
let iface = hostapd.interfaces[bss.ifname]; let iface = hostapd.interfaces[phy];
if (!iface) if (!iface)
return false; return false;
@ -127,6 +126,7 @@ function iface_restart(phydev, config, old_config)
{ {
let phy = phydev.name; let phy = phydev.name;
hostapd.remove_iface(phy);
iface_remove(old_config); iface_remove(old_config);
iface_remove(config); iface_remove(config);
@ -267,13 +267,13 @@ function iface_reload_config(phydev, config, old_config)
if (!old_config.bss || !old_config.bss[0]) if (!old_config.bss || !old_config.bss[0])
return false; return false;
let iface_name = old_config.bss[0].ifname; let iface = hostapd.interfaces[phy];
let iface = hostapd.interfaces[iface_name];
if (!iface) { if (!iface) {
hostapd.printf(`Could not find previous interface ${iface_name}`); hostapd.printf(`Could not find previous interface ${iface_name}`);
return false; return false;
} }
let iface_name = old_config.bss[0].ifname;
let first_bss = hostapd.bss[iface_name]; let first_bss = hostapd.bss[iface_name];
if (!first_bss) { if (!first_bss) {
hostapd.printf(`Could not find bss of previous interface ${iface_name}`); hostapd.printf(`Could not find bss of previous interface ${iface_name}`);
@ -512,8 +512,10 @@ function iface_set_config(phy, config)
hostapd.data.config[phy] = config; hostapd.data.config[phy] = config;
if (!config) if (!config) {
hostapd.remove_iface(phy);
return iface_remove(old_config); return iface_remove(old_config);
}
let phydev = phy_open(phy); let phydev = phy_open(phy);
if (!phydev) { if (!phydev) {
@ -667,7 +669,7 @@ let main_obj = {
if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname) if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname)
return 0; return 0;
let iface = hostapd.interfaces[config.bss[0].ifname]; let iface = hostapd.interfaces[phy];
if (!iface) if (!iface)
return 0; return 0;

View File

@ -142,6 +142,16 @@
{ {
if (!hapd) if (!hapd)
return; return;
@@ -3491,7 +3495,8 @@ int hostapd_remove_iface(struct hapd_int
hapd_iface = interfaces->iface[i];
if (hapd_iface == NULL)
return -1;
- if (!os_strcmp(hapd_iface->conf->bss[0]->iface, buf)) {
+ if (!os_strcmp(hapd_iface->phy, buf) ||
+ !os_strcmp(hapd_iface->conf->bss[0]->iface, buf)) {
wpa_printf(MSG_INFO, "Remove interface '%s'", buf);
hapd_iface->driver_ap_teardown =
!!(hapd_iface->drv_flags &
--- a/wpa_supplicant/Makefile --- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile
@@ -195,8 +195,20 @@ endif @@ -195,8 +195,20 @@ endif

View File

@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -3563,6 +3563,8 @@ int hostapd_remove_iface(struct hapd_int @@ -3564,6 +3564,8 @@ int hostapd_remove_iface(struct hapd_int
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
int reassoc) int reassoc)
{ {
@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
if (hapd->tkip_countermeasures) { if (hapd->tkip_countermeasures) {
hostapd_drv_sta_deauth(hapd, sta->addr, hostapd_drv_sta_deauth(hapd, sta->addr,
WLAN_REASON_MICHAEL_MIC_FAILURE); WLAN_REASON_MICHAEL_MIC_FAILURE);
@@ -3570,10 +3572,16 @@ void hostapd_new_assoc_sta(struct hostap @@ -3571,10 +3573,16 @@ void hostapd_new_assoc_sta(struct hostap
} }
#ifdef CONFIG_IEEE80211BE #ifdef CONFIG_IEEE80211BE