]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Disable EAPOL TX over control port in AP mode by default
authorJouni Malinen <j@w1.fi>
Sun, 19 Apr 2020 12:43:41 +0000 (15:43 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 19 Apr 2020 13:50:56 +0000 (16:50 +0300)
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 <j@w1.fi>
src/drivers/driver_nl80211.c
src/drivers/driver_nl80211.h

index c72dda381a8b5ce5784ae08ec2ccfa8ffd153a21..0ffb14dc7529f3896500c4d02c0c86aadfb2001d 100644 (file)
@@ -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;
 
index 538d40364b34605edb3aef9d1fa997b3702592b8..19ac44a426088ba18594a9b69514dc1367d460f4 100644 (file)
@@ -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;