From 57a2aacabf0f20efbdcd9828206edbbc328bc7ed Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 23 Feb 2017 00:03:00 +0200 Subject: [PATCH] Add option to disable broadcast deauth in hostapd on AP start/stop The new broadcast_deauth parameter can be used to disable sending of the Deauthentication frame whenever AP is started or stopped. The default behavior remains identical to the past behavior (broadcast_deauth=1). Signed-off-by: Jouni Malinen --- hostapd/config_file.c | 2 ++ hostapd/hostapd.conf | 4 ++++ src/ap/ap_config.c | 2 ++ src/ap/ap_config.h | 2 ++ src/ap/hostapd.c | 9 ++++++--- 5 files changed, 16 insertions(+), 3 deletions(-) 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;