Merge branch 'bugfix/wpa_sm_cleanup' into 'master'

esp_wifi: Remove unnecessary function pointers from wpa_sm_init

See merge request espressif/esp-idf!19833
This commit is contained in:
Jiang Jiang Jian 2022-11-04 16:45:42 +08:00
commit 6fb6bdf6dd
4 changed files with 18 additions and 46 deletions

View File

@ -124,8 +124,7 @@ void wpa_neg_complete(void)
bool wpa_attach(void) bool wpa_attach(void)
{ {
bool ret = true; bool ret = true;
ret = wpa_sm_init(NULL, wpa_sendto_wrapper, ret = wpa_sm_init();
wpa_config_assoc_ie, wpa_install_key, wpa_get_key, wpa_deauthenticate, wpa_neg_complete);
if(ret) { if(ret) {
ret = (esp_wifi_register_tx_cb_internal(eapol_txcb, WIFI_TXCB_EAPOL_ID) == ESP_OK); ret = (esp_wifi_register_tx_cb_internal(eapol_txcb, WIFI_TXCB_EAPOL_ID) == ESP_OK);
} }

View File

@ -107,11 +107,10 @@ void wpa_sm_free_eapol(u8 *buffer)
void wpa_sm_deauthenticate(struct wpa_sm *sm, u8 reason_code) void wpa_sm_deauthenticate(struct wpa_sm *sm, u8 reason_code)
{ {
/*only need send deauth frame when associated*/ /*only need send deauth frame when associated*/
if (WPA_SM_STATE(sm) >= WPA_ASSOCIATED) { if (WPA_SM_STATE(sm) >= WPA_ASSOCIATED) {
pmksa_cache_clear_current(sm); pmksa_cache_clear_current(sm);
sm->wpa_deauthenticate(reason_code); wpa_deauthenticate(reason_code);
} }
} }

View File

@ -818,7 +818,7 @@ void wpa_supplicant_key_neg_complete(struct wpa_sm *sm,
wpa_sm_cancel_auth_timeout(sm); wpa_sm_cancel_auth_timeout(sm);
wpa_sm_set_state(WPA_COMPLETED); wpa_sm_set_state(WPA_COMPLETED);
sm->wpa_neg_complete(); wpa_neg_complete();
if (secure) { if (secure) {
wpa_sm_mlme_setprotection( wpa_sm_mlme_setprotection(
@ -2192,26 +2192,14 @@ void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm)
} }
bool wpa_sm_init(void)
#ifdef ESP_SUPPLICANT
bool wpa_sm_init(char * payload, WPA_SEND_FUNC snd_func,
WPA_SET_ASSOC_IE set_assoc_ie_func, WPA_INSTALL_KEY ppinstallkey, WPA_GET_KEY ppgetkey, WPA_DEAUTH_FUNC wpa_deauth,
WPA_NEG_COMPLETE wpa_neg_complete)
{ {
struct wpa_sm *sm = &gWpaSm; struct wpa_sm *sm = &gWpaSm;
u16 spp_attrubute = 0; u16 spp_attrubute = 0;
os_memset(sm, 0, sizeof(struct wpa_sm));
sm->eapol_version = DEFAULT_EAPOL_VERSION; /* DEFAULT_EAPOL_VERSION */ sm->eapol_version = DEFAULT_EAPOL_VERSION; /* DEFAULT_EAPOL_VERSION */
sm->sendto = snd_func;
sm->config_assoc_ie = set_assoc_ie_func;
sm->install_ppkey = ppinstallkey;
sm->get_ppkey = ppgetkey;
sm->wpa_deauthenticate = wpa_deauth;
sm->wpa_neg_complete = wpa_neg_complete;
sm->key_install = false;
sm->ap_rsnxe = NULL;
sm->assoc_rsnxe = NULL;
spp_attrubute = esp_wifi_get_spp_attrubute_internal(WIFI_IF_STA); spp_attrubute = esp_wifi_get_spp_attrubute_internal(WIFI_IF_STA);
sm->spp_sup.capable = ((spp_attrubute & WPA_CAPABILITY_SPP_CAPABLE) ? SPP_AMSDU_CAP_ENABLE : SPP_AMSDU_CAP_DISABLE); sm->spp_sup.capable = ((spp_attrubute & WPA_CAPABILITY_SPP_CAPABLE) ? SPP_AMSDU_CAP_ENABLE : SPP_AMSDU_CAP_DISABLE);
@ -2242,6 +2230,7 @@ void wpa_sm_deinit(void)
} }
#ifdef ESP_SUPPLICANT
void wpa_set_profile(u32 wpa_proto, u8 auth_mode) void wpa_set_profile(u32 wpa_proto, u8 auth_mode)
{ {
struct wpa_sm *sm = &gWpaSm; struct wpa_sm *sm = &gWpaSm;
@ -2468,7 +2457,7 @@ set_assoc_ie(u8 * assoc_buf)
else else
sm->assoc_wpa_ie_len = ASSOC_IE_LEN - 2; sm->assoc_wpa_ie_len = ASSOC_IE_LEN - 2;
sm->config_assoc_ie(sm->proto, assoc_buf, sm->assoc_wpa_ie_len); wpa_config_assoc_ie(sm->proto, assoc_buf, sm->assoc_wpa_ie_len);
} }
int wpa_sm_set_key(struct install_key *key_sm, enum wpa_alg alg, int wpa_sm_set_key(struct install_key *key_sm, enum wpa_alg alg,
@ -2492,15 +2481,14 @@ int wpa_sm_set_key(struct install_key *key_sm, enum wpa_alg alg,
key_sm->set_tx = set_tx; key_sm->set_tx = set_tx;
memcpy(key_sm->key, key, key_len); memcpy(key_sm->key, key, key_len);
sm->install_ppkey(alg, addr, key_idx, set_tx, seq, seq_len, key, key_len, key_flag); wpa_install_key(alg, addr, key_idx, set_tx, seq, seq_len, key, key_len, key_flag);
return 0; return 0;
} }
static int static int
wpa_sm_get_key(uint8_t *ifx, int *alg, u8 *addr, int *key_idx, u8 *key, size_t key_len, enum key_flag key_flag) wpa_sm_get_key(uint8_t *ifx, int *alg, u8 *addr, int *key_idx, u8 *key, size_t key_len, enum key_flag key_flag)
{ {
struct wpa_sm *sm = &gWpaSm; return wpa_get_key(ifx, alg, addr, key_idx, key, key_len, key_flag);
return sm->get_ppkey(ifx, alg, addr, key_idx, key, key_len, key_flag);
} }
void wpa_supplicant_clr_countermeasures(u16 *pisunicast) void wpa_supplicant_clr_countermeasures(u16 *pisunicast)

View File

@ -76,14 +76,6 @@ struct wpa_sm {
struct install_key install_gtk; struct install_key install_gtk;
int mic_errors_seen; /* Michael MIC errors with the current PTK */ int mic_errors_seen; /* Michael MIC errors with the current PTK */
void (* sendto) (void *buffer, uint16_t len);
void (*config_assoc_ie) (u8 proto, u8 *assoc_buf, u32 assoc_wpa_ie_len);
void (*install_ppkey) (enum wpa_alg alg, u8 *addr, int key_idx, int set_tx,
u8 *seq, unsigned int seq_len, u8 *key, unsigned int key_len, enum key_flag key_flag);
int (*get_ppkey) (uint8_t *ifx, int *alg, uint8_t *addr, int *key_idx,
uint8_t *key, size_t key_len, enum key_flag key_flag);
void (*wpa_deauthenticate)(u8 reason_code);
void (*wpa_neg_complete)(void);
struct wpa_gtk_data gd; //used for calllback save param struct wpa_gtk_data gd; //used for calllback save param
u16 key_info; //used for txcallback param u16 key_info; //used for txcallback param
u16 txcb_flags; u16 txcb_flags;
@ -165,8 +157,6 @@ struct wpa_sm {
*/ */
typedef void (* WPA_SEND_FUNC)(void *buffer, u16 len);
int wpa_sm_update_ft_ies(struct wpa_sm *sm, const u8 *md, int wpa_sm_update_ft_ies(struct wpa_sm *sm, const u8 *md,
const u8 *ies, size_t ies_len, bool auth_ie); const u8 *ies, size_t ies_len, bool auth_ie);
@ -183,24 +173,20 @@ static inline int wpa_sm_mark_authenticated(struct wpa_sm *sm,
return 0; return 0;
} }
typedef void (* WPA_SET_ASSOC_IE)(u8 proto, u8 *assoc_buf, u32 assoc_wpa_ie_len); void wpa_config_assoc_ie(u8 proto, u8 *assoc_buf, u32 assoc_wpa_ie_len);
typedef void (*WPA_INSTALL_KEY) (enum wpa_alg alg, u8 *addr, int key_idx, int set_tx, void wpa_install_key(enum wpa_alg alg, u8 *addr, int key_idx, int set_tx,
u8 *seq, size_t seq_len, u8 *key, size_t key_len, enum key_flag key_flag); u8 *seq, size_t seq_len, u8 *key, size_t key_len, enum key_flag key_flag);
typedef int (*WPA_GET_KEY) (u8 *ifx, int *alg, u8 *addt, int *keyidx, u8 *key, size_t key_len, enum key_flag key_flag); int wpa_get_key(uint8_t *ifx, int *alg, u8 *addr, int *key_idx,
u8 *key, size_t key_len, enum key_flag key_flag);
typedef void (*WPA_DEAUTH_FUNC)(u8 reason_code); void wpa_deauthenticate(u8 reason_code);
typedef void (*WPA_NEG_COMPLETE)(void); void wpa_neg_complete(void);
bool wpa_sm_init(char * payload, WPA_SEND_FUNC snd_func, \ bool wpa_sm_init(void);
WPA_SET_ASSOC_IE set_assoc_ie_func, \
WPA_INSTALL_KEY ppinstallkey, \
WPA_GET_KEY ppgetkey, \
WPA_DEAUTH_FUNC wpa_deauth, \
WPA_NEG_COMPLETE wpa_neg_complete);
void wpa_sm_deinit(void); void wpa_sm_deinit(void);