Add a hostapd testing option for skipping association pruning

The new skip_prune_assoc=1 parameter can be used to configure hostapd
not to prune associations from other BSSs operated by the same process
when a station associates with another BSS. This can be helpful in
testing roaming cases where association and authorization state is
maintained in an AP when the stations returns.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2020-03-28 20:39:19 +02:00
parent 1a18f8df63
commit 54e2961f80
3 changed files with 7 additions and 0 deletions

View file

@ -4206,6 +4206,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
bss->igtk_rsc_override = wpabuf_parse_bin(pos); bss->igtk_rsc_override = wpabuf_parse_bin(pos);
} else if (os_strcmp(buf, "no_beacon_rsnxe") == 0) { } else if (os_strcmp(buf, "no_beacon_rsnxe") == 0) {
bss->no_beacon_rsnxe = atoi(pos); bss->no_beacon_rsnxe = atoi(pos);
} else if (os_strcmp(buf, "skip_prune_assoc") == 0) {
bss->skip_prune_assoc = atoi(pos);
#endif /* CONFIG_TESTING_OPTIONS */ #endif /* CONFIG_TESTING_OPTIONS */
#ifdef CONFIG_SAE #ifdef CONFIG_SAE
} else if (os_strcmp(buf, "sae_password") == 0) { } else if (os_strcmp(buf, "sae_password") == 0) {

View file

@ -685,6 +685,7 @@ struct hostapd_bss_config {
struct wpabuf *gtk_rsc_override; struct wpabuf *gtk_rsc_override;
struct wpabuf *igtk_rsc_override; struct wpabuf *igtk_rsc_override;
int no_beacon_rsnxe; int no_beacon_rsnxe;
int skip_prune_assoc;
#endif /* CONFIG_TESTING_OPTIONS */ #endif /* CONFIG_TESTING_OPTIONS */
#define MESH_ENABLED BIT(0) #define MESH_ENABLED BIT(0)

View file

@ -56,6 +56,10 @@ static int prune_associations(struct hostapd_iface *iface, void *ctx)
ohapd = iface->bss[j]; ohapd = iface->bss[j];
if (ohapd == data->hapd) if (ohapd == data->hapd)
continue; continue;
#ifdef CONFIG_TESTING_OPTIONS
if (ohapd->conf->skip_prune_assoc)
continue;
#endif /* CONFIG_TESTING_OPTIONS */
#ifdef CONFIG_FST #ifdef CONFIG_FST
/* Don't prune STAs belong to same FST */ /* Don't prune STAs belong to same FST */
if (ohapd->iface->fst && if (ohapd->iface->fst &&