diff --git a/hostapd/config_file.c b/hostapd/config_file.c index 9e954400e..85c634f84 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -3673,6 +3673,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, #endif /* CONFIG_FILS */ } else if (os_strcmp(buf, "multicast_to_unicast") == 0) { bss->multicast_to_unicast = atoi(pos); + } else if (os_strcmp(buf, "broadcast_deauth") == 0) { + bss->broadcast_deauth = atoi(pos); } else { wpa_printf(MSG_ERROR, "Line %d: unknown configuration item '%s'", diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index c4eebff82..da975050d 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -511,6 +511,10 @@ wmm_ac_vo_acm=0 # #multicast_to_unicast=0 +# Send broadcast Deauthentication frame on AP start/stop +# Default: 1 (enabled) +#broadcast_deauth=1 + ##### IEEE 802.11n related configuration ###################################### # ieee80211n: Whether IEEE 802.11n (HT) is enabled diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c index 9abcab7fb..a996ea81f 100644 --- a/src/ap/ap_config.c +++ b/src/ap/ap_config.c @@ -107,6 +107,8 @@ void hostapd_config_defaults_bss(struct hostapd_bss_config *bss) bss->dhcp_server_port = DHCP_SERVER_PORT; bss->dhcp_relay_port = DHCP_SERVER_PORT; #endif /* CONFIG_FILS */ + + bss->broadcast_deauth = 1; } diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index fdd5a1abc..cbdb786f5 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -617,6 +617,8 @@ struct hostapd_bss_config { #endif /* CONFIG_FILS */ int multicast_to_unicast; + + int broadcast_deauth; }; /** diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index d05dc5c24..4ae7520b2 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -491,9 +491,12 @@ static int hostapd_flush_old_stations(struct hostapd_data *hapd, u16 reason) ret = -1; } } - wpa_dbg(hapd->msg_ctx, MSG_DEBUG, "Deauthenticate all stations"); - os_memset(addr, 0xff, ETH_ALEN); - hostapd_drv_sta_deauth(hapd, addr, reason); + if (hapd->conf && hapd->conf->broadcast_deauth) { + wpa_dbg(hapd->msg_ctx, MSG_DEBUG, + "Deauthenticate all stations"); + os_memset(addr, 0xff, ETH_ALEN); + hostapd_drv_sta_deauth(hapd, addr, reason); + } hostapd_free_stas(hapd); return ret;