mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-03 20:54:32 +02:00
Merge branch 'bugfix/wpa_eap_v1_connect_issue_v5.3' into 'release/v5.3'
Adjusted authentication mode for wpa-eap version 1 and add some fixes for wpa_supplicant(release/v5.3) See merge request espressif/esp-idf!40700
This commit is contained in:
@@ -949,7 +949,7 @@ ieee80211_getcapinfo = 0x40002130;
|
||||
/* sta_recv_sa_query_resp = 0x40002144; */
|
||||
ieee80211_set_max_rate = 0x4000214c;
|
||||
ic_set_sta = 0x40002150;
|
||||
ieee80211_parse_wpa = 0x40002158;
|
||||
/* ieee80211_parse_wpa = 0x40002158; */
|
||||
ieee80211_add_assoc_req_ies = 0x40002160;
|
||||
ieee80211_add_probe_req_ies = 0x40002164;
|
||||
/* Data (.data, .bss, .rodata) */
|
||||
|
@@ -70,7 +70,7 @@ typedef struct {
|
||||
* @brief Wi-Fi authmode type
|
||||
* Strength of authmodes
|
||||
* Personal Networks : OPEN < WEP < WPA_PSK < OWE < WPA2_PSK = WPA_WPA2_PSK < WAPI_PSK < WPA3_PSK = WPA2_WPA3_PSK = DPP
|
||||
* Enterprise Networks : WIFI_AUTH_WPA2_ENTERPRISE < WIFI_AUTH_WPA3_ENT_192
|
||||
* Enterprise Networks : WIFI_AUTH_WPA_ENTERPRISE < WIFI_AUTH_WPA2_ENTERPRISE < WIFI_AUTH_WPA3_ENT_192
|
||||
*/
|
||||
typedef enum {
|
||||
WIFI_AUTH_OPEN = 0, /**< Authenticate mode : open */
|
||||
@@ -78,8 +78,8 @@ typedef enum {
|
||||
WIFI_AUTH_WPA_PSK, /**< Authenticate mode : WPA_PSK */
|
||||
WIFI_AUTH_WPA2_PSK, /**< Authenticate mode : WPA2_PSK */
|
||||
WIFI_AUTH_WPA_WPA2_PSK, /**< Authenticate mode : WPA_WPA2_PSK */
|
||||
WIFI_AUTH_ENTERPRISE, /**< Authenticate mode : Wi-Fi EAP security */
|
||||
WIFI_AUTH_WPA2_ENTERPRISE = WIFI_AUTH_ENTERPRISE, /**< Authenticate mode : Wi-Fi EAP security */
|
||||
WIFI_AUTH_ENTERPRISE, /**< Authenticate mode : Wi-Fi EAP security, treated the same as WIFI_AUTH_WPA2_ENTERPRISE */
|
||||
WIFI_AUTH_WPA2_ENTERPRISE = WIFI_AUTH_ENTERPRISE, /**< Authenticate mode : WPA2-Enterprise security */
|
||||
WIFI_AUTH_WPA3_PSK, /**< Authenticate mode : WPA3_PSK */
|
||||
WIFI_AUTH_WPA2_WPA3_PSK, /**< Authenticate mode : WPA2_WPA3_PSK */
|
||||
WIFI_AUTH_WAPI_PSK, /**< Authenticate mode : WAPI_PSK */
|
||||
@@ -88,6 +88,9 @@ typedef enum {
|
||||
WIFI_AUTH_WPA3_EXT_PSK, /**< This authentication mode will yield same result as WIFI_AUTH_WPA3_PSK and not recommended to be used. It will be deprecated in future, please use WIFI_AUTH_WPA3_PSK instead. */
|
||||
WIFI_AUTH_WPA3_EXT_PSK_MIXED_MODE, /**< This authentication mode will yield same result as WIFI_AUTH_WPA3_PSK and not recommended to be used. It will be deprecated in future, please use WIFI_AUTH_WPA3_PSK instead.*/
|
||||
WIFI_AUTH_DPP, /**< Authenticate mode : DPP */
|
||||
WIFI_AUTH_DUMMY1,
|
||||
WIFI_AUTH_DUMMY2,
|
||||
WIFI_AUTH_WPA_ENTERPRISE, /**< Authenticate mode : WPA-Enterprise security */
|
||||
WIFI_AUTH_MAX
|
||||
} wifi_auth_mode_t;
|
||||
|
||||
|
Submodule components/esp_wifi/lib updated: 43d691cfeb...8229aaf13c
@@ -60,6 +60,7 @@ static struct eap_sm *gEapSm = NULL;
|
||||
|
||||
static int eap_peer_sm_init(void);
|
||||
static void eap_peer_sm_deinit(void);
|
||||
static void eap_start_eapol(void *ctx, void *data);
|
||||
|
||||
static int eap_sm_rx_eapol_internal(u8 *src_addr, u8 *buf, u32 len, uint8_t *bssid);
|
||||
static int wpa2_start_eapol_internal(void);
|
||||
@@ -529,6 +530,10 @@ static int eap_sm_rx_eapol_internal(u8 *src_addr, u8 *buf, u32 len, uint8_t *bss
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
if (!sm->eap_process_started) {
|
||||
sm->eap_process_started = true;
|
||||
eloop_cancel_timeout(eap_start_eapol, NULL, NULL);
|
||||
}
|
||||
if (len < sizeof(*hdr) + sizeof(*ehdr)) {
|
||||
wpa_printf(MSG_DEBUG, "WPA: EAPOL frame too short to be a WPA "
|
||||
"EAPOL-Key (len %lu, expecting at least %lu)",
|
||||
@@ -612,15 +617,28 @@ _out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int wpa2_start_eapol(void)
|
||||
static void eap_start_eapol(void *ctx, void *data)
|
||||
{
|
||||
#ifdef USE_WPA2_TASK
|
||||
return wpa2_post(SIG_WPA2_START, 0);
|
||||
wpa2_post(SIG_WPA2_START, 0);
|
||||
#else
|
||||
return wpa2_start_eapol_internal();
|
||||
wpa2_start_eapol_internal();
|
||||
#endif
|
||||
}
|
||||
|
||||
static int eap_start_eapol_timer(void)
|
||||
{
|
||||
/*
|
||||
* Do not send EAPOL-Start immediately since in most cases,
|
||||
* Authenticator is going to start authentication immediately
|
||||
* after association and an extra EAPOL-Start is just going to
|
||||
* delay authentication. Use a short timeout to send the first
|
||||
* EAPOL-Start if Authenticator does not start authentication.
|
||||
*/
|
||||
eloop_register_timeout(2, 0, eap_start_eapol, NULL, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wpa2_start_eapol_internal(void)
|
||||
{
|
||||
struct eap_sm *sm = gEapSm;
|
||||
@@ -739,6 +757,7 @@ static int eap_peer_sm_init(void)
|
||||
wpa_printf(MSG_INFO, "wifi_task prio:%d, stack:%d", WPA2_TASK_PRIORITY, WPA2_TASK_STACK_SIZE);
|
||||
#endif
|
||||
sm->workaround = 1;
|
||||
sm->eap_process_started = false;
|
||||
return ESP_OK;
|
||||
|
||||
_err:
|
||||
@@ -806,7 +825,7 @@ static esp_err_t esp_client_enable_fn(void *arg)
|
||||
}
|
||||
|
||||
wpa2_cb->wpa2_sm_rx_eapol = wpa2_ent_rx_eapol;
|
||||
wpa2_cb->wpa2_start = wpa2_start_eapol;
|
||||
wpa2_cb->wpa2_start = eap_start_eapol_timer;
|
||||
wpa2_cb->wpa2_init = eap_peer_sm_init;
|
||||
wpa2_cb->wpa2_deinit = eap_peer_sm_deinit;
|
||||
|
||||
|
@@ -311,6 +311,7 @@ struct eap_sm {
|
||||
size_t eapKeyDataLen;
|
||||
struct wpabuf *lastRespData;
|
||||
const struct eap_method *m;
|
||||
bool eap_process_started;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
|
@@ -2271,7 +2271,7 @@ void wpa_set_profile(u32 wpa_proto, u8 auth_mode)
|
||||
struct wpa_sm *sm = &gWpaSm;
|
||||
|
||||
sm->proto = wpa_proto;
|
||||
if (auth_mode == WPA2_AUTH_ENT) {
|
||||
if (auth_mode == WPA2_AUTH_ENT || (auth_mode == WPA_AUTH_UNSPEC)) {
|
||||
sm->key_mgmt = WPA_KEY_MGMT_IEEE8021X; /* for wpa2 enterprise */
|
||||
} else if (auth_mode == WPA2_AUTH_ENT_SHA256) {
|
||||
sm->key_mgmt = WPA_KEY_MGMT_IEEE8021X_SHA256; /* for wpa2 enterprise sha256 */
|
||||
|
Reference in New Issue
Block a user