if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
return;
- hostapd.remove_iface(cfg.bss[0].ifname);
for (let bss in cfg.bss)
wdev_remove(bss.ifname);
}
let config_inline = iface_gen_config(phy, config, !!phy_status);
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)
return false;
if (!phy_status)
return true;
- let iface = hostapd.interfaces[bss.ifname];
+ let iface = hostapd.interfaces[phy];
if (!iface)
return false;
{
let phy = phydev.name;
+ hostapd.remove_iface(phy);
iface_remove(old_config);
iface_remove(config);
if (!old_config.bss || !old_config.bss[0])
return false;
- let iface_name = old_config.bss[0].ifname;
- let iface = hostapd.interfaces[iface_name];
+ let iface = hostapd.interfaces[phy];
if (!iface) {
hostapd.printf(`Could not find previous interface ${iface_name}`);
return false;
}
+ let iface_name = old_config.bss[0].ifname;
let first_bss = hostapd.bss[iface_name];
if (!first_bss) {
hostapd.printf(`Could not find bss of previous interface ${iface_name}`);
hostapd.data.config[phy] = config;
- if (!config)
+ if (!config) {
+ hostapd.remove_iface(phy);
return iface_remove(old_config);
+ }
let phydev = phy_open(phy);
if (!phydev) {
if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname)
return 0;
- let iface = hostapd.interfaces[config.bss[0].ifname];
+ let iface = hostapd.interfaces[phy];
if (!iface)
return 0;
{
if (!hapd)
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
+++ b/wpa_supplicant/Makefile
@@ -195,8 +195,20 @@ endif
--- a/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,
int reassoc)
{
if (hapd->tkip_countermeasures) {
hostapd_drv_sta_deauth(hapd, sta->addr,
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