From c1bc0dd80de855dd766371915bca02ab15af0439 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 19 Apr 2020 15:43:41 +0300 Subject: [PATCH] nl80211: Disable EAPOL TX over control port in AP mode by default Since this nl80211 mechanism for sending EAPOL frames does not currently support TX status notification, disable it by default of AP mode where the Authenticator state machine uses those notifications to optimize retransmission. The control port TX can be enabled for AP mode with driver param control_port_ap=1. Signed-off-by: Jouni Malinen --- src/drivers/driver_nl80211.c | 8 +++++++- src/drivers/driver_nl80211.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index c72dda381..0ffb14dc7 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -5328,7 +5328,10 @@ static int wpa_driver_nl80211_hapd_send_eapol( int res; int qos = flags & WPA_STA_WMM; - if (drv->capa.flags & WPA_DRIVER_FLAGS_CONTROL_PORT) + /* For now, disable EAPOL TX over control port in AP mode by default + * since it does not provide TX status notifications. */ + if (drv->control_port_ap && + (drv->capa.flags & WPA_DRIVER_FLAGS_CONTROL_PORT)) return nl80211_tx_control_port(bss, addr, ETH_P_EAPOL, data, data_len, !encrypt); @@ -8173,6 +8176,9 @@ static int nl80211_set_param(void *priv, const char *param) drv->capa.flags2 &= ~WPA_DRIVER_FLAGS2_CONTROL_PORT_RX; } + if (os_strstr(param, "control_port_ap=1")) + drv->control_port_ap = 1; + if (os_strstr(param, "full_ap_client_state=0")) drv->capa.flags &= ~WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE; diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h index 538d40364..19ac44a42 100644 --- a/src/drivers/driver_nl80211.h +++ b/src/drivers/driver_nl80211.h @@ -171,6 +171,7 @@ struct wpa_driver_nl80211_data { unsigned int roam_vendor_cmd_avail:1; unsigned int get_supported_akm_suites_avail:1; unsigned int add_sta_node_vendor_cmd_avail:1; + unsigned int control_port_ap:1; u64 vendor_scan_cookie; u64 remain_on_chan_cookie;