AP: Unsolicited broadcast Probe Response configuration

Add hostapd configuration options for unsolicited broadcast
Probe Response transmission for in-band discovery in 6 GHz.
Maximum allowed packet interval is 20 TUs (IEEE P802.11ax/D8.0
26.17.2.3.2, AP behavior for fast passive scanning).
Setting value to 0 disables the transmission.

Signed-off-by: Aloka Dixit <alokad@codeaurora.org>
This commit is contained in:
Aloka Dixit 2020-09-11 02:45:46 +00:00 committed by Jouni Malinen
parent 11736a1a78
commit 024b4b2a29
5 changed files with 58 additions and 0 deletions

View file

@ -3617,6 +3617,16 @@ static int hostapd_config_fill(struct hostapd_config *conf,
conf->he_6ghz_rx_ant_pat = atoi(pos); conf->he_6ghz_rx_ant_pat = atoi(pos);
} else if (os_strcmp(buf, "he_6ghz_tx_ant_pat") == 0) { } else if (os_strcmp(buf, "he_6ghz_tx_ant_pat") == 0) {
conf->he_6ghz_tx_ant_pat = atoi(pos); conf->he_6ghz_tx_ant_pat = atoi(pos);
} else if (os_strcmp(buf, "unsol_bcast_probe_resp_interval") == 0) {
int val = atoi(pos);
if (val < 0 || val > 20) {
wpa_printf(MSG_ERROR,
"Line %d: invalid unsol_bcast_probe_resp_interval value",
line);
return 1;
}
bss->unsol_bcast_probe_resp_interval = val;
#endif /* CONFIG_IEEE80211AX */ #endif /* CONFIG_IEEE80211AX */
} else if (os_strcmp(buf, "max_listen_interval") == 0) { } else if (os_strcmp(buf, "max_listen_interval") == 0) {
bss->max_listen_interval = atoi(pos); bss->max_listen_interval = atoi(pos);

View file

@ -933,6 +933,14 @@ wmm_ac_vo_acm=0
# (default) # (default)
#he_6ghz_tx_ant_pat=1 #he_6ghz_tx_ant_pat=1
# Unsolicited broadcast Probe Response transmission settings
# This is for the 6 GHz band only. If the interval is set to a non-zero value,
# the AP schedules unsolicited broadcast Probe Response frames to be
# transmitted for in-band discovery. Refer to
# IEEE P802.11ax/D8.0 26.17.2.3.2, AP behavior for fast passive scanning.
# Valid range: 0..20 TUs; default is 0 (disabled)
#unsol_bcast_probe_resp_interval=0
##### IEEE 802.1X-2004 related configuration ################################## ##### IEEE 802.1X-2004 related configuration ##################################
# Require IEEE 802.1X authorization # Require IEEE 802.1X authorization

View file

@ -878,6 +878,8 @@ struct hostapd_bss_config {
int *pasn_groups; int *pasn_groups;
#endif /* CONFIG_PASN */ #endif /* CONFIG_PASN */
unsigned int unsol_bcast_probe_resp_interval;
}; };
/** /**

View file

@ -1124,6 +1124,23 @@ static u8 * hostapd_probe_resp_offloads(struct hostapd_data *hapd,
#endif /* NEED_AP_MLME */ #endif /* NEED_AP_MLME */
#ifdef CONFIG_IEEE80211AX
/* Unsolicited broadcast Probe Response transmission, 6 GHz only */
static u8 * hostapd_unsol_bcast_probe_resp(struct hostapd_data *hapd,
struct wpa_driver_ap_params *params)
{
if (!is_6ghz_op_class(hapd->iconf->op_class))
return NULL;
params->unsol_bcast_probe_resp_interval =
hapd->conf->unsol_bcast_probe_resp_interval;
return hostapd_gen_probe_resp(hapd, NULL, 0,
&params->unsol_bcast_probe_resp_tmpl_len);
}
#endif /* CONFIG_IEEE80211AX */
void sta_track_del(struct hostapd_sta_info *info) void sta_track_del(struct hostapd_sta_info *info)
{ {
#ifdef CONFIG_TAXONOMY #ifdef CONFIG_TAXONOMY
@ -1719,6 +1736,10 @@ void ieee802_11_free_ap_params(struct wpa_driver_ap_params *params)
os_free(params->fd_frame_tmpl); os_free(params->fd_frame_tmpl);
params->fd_frame_tmpl = NULL; params->fd_frame_tmpl = NULL;
#endif /* CONFIG_FILS */ #endif /* CONFIG_FILS */
#ifdef CONFIG_IEEE80211AX
os_free(params->unsol_bcast_probe_resp_tmpl);
params->unsol_bcast_probe_resp_tmpl = NULL;
#endif /* CONFIG_IEEE80211AX */
} }
@ -1769,6 +1790,8 @@ int ieee802_11_set_beacon(struct hostapd_data *hapd)
params.he_bss_color = hapd->iface->conf->he_op.he_bss_color; params.he_bss_color = hapd->iface->conf->he_op.he_bss_color;
params.twt_responder = hostapd_get_he_twt_responder(hapd, params.twt_responder = hostapd_get_he_twt_responder(hapd,
IEEE80211_MODE_AP); IEEE80211_MODE_AP);
params.unsol_bcast_probe_resp_tmpl =
hostapd_unsol_bcast_probe_resp(hapd, &params);
#endif /* CONFIG_IEEE80211AX */ #endif /* CONFIG_IEEE80211AX */
hapd->reenable_beacon = 0; hapd->reenable_beacon = 0;
#ifdef CONFIG_SAE #ifdef CONFIG_SAE

View file

@ -1561,6 +1561,21 @@ struct wpa_driver_ap_params {
* FILS Discovery frame template length * FILS Discovery frame template length
*/ */
size_t fd_frame_tmpl_len; size_t fd_frame_tmpl_len;
/**
* Unsolicited broadcast Probe Response interval in TUs
*/
unsigned int unsol_bcast_probe_resp_interval;
/**
* Unsolicited broadcast Probe Response template data
*/
u8 *unsol_bcast_probe_resp_tmpl;
/**
* Unsolicited broadcast Probe Response template length
*/
size_t unsol_bcast_probe_resp_tmpl_len;
}; };
struct wpa_driver_mesh_bss_params { struct wpa_driver_mesh_bss_params {