3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-22 21:22:37 +01:00

eapol: Add eapol_sm_set_event_func

This commit is contained in:
Denis Kenzior 2016-09-13 13:30:54 -05:00
parent 1b72fe9713
commit 9fde037b8f
2 changed files with 25 additions and 2 deletions

View File

@ -723,6 +723,7 @@ struct eapol_sm {
uint8_t snonce[32]; uint8_t snonce[32];
uint8_t anonce[32]; uint8_t anonce[32];
uint8_t ptk[64]; uint8_t ptk[64];
eapol_sm_event_func_t event_func;
void *user_data; void *user_data;
struct l_timeout *timeout; struct l_timeout *timeout;
bool have_snonce:1; bool have_snonce:1;
@ -863,6 +864,11 @@ void eapol_sm_set_user_data(struct eapol_sm *sm, void *user_data)
sm->user_data = user_data; sm->user_data = user_data;
} }
void eapol_sm_set_event_func(struct eapol_sm *sm, eapol_sm_event_func_t func)
{
sm->event_func = func;
}
uint32_t eapol_sm_get_pairwise_cipher(struct eapol_sm *sm) uint32_t eapol_sm_get_pairwise_cipher(struct eapol_sm *sm)
{ {
return sm->pairwise_cipher; return sm->pairwise_cipher;
@ -1575,6 +1581,17 @@ static void eapol_eap_results_cb(const uint8_t *msk_data, size_t msk_len,
eapol_sm_set_pmk(sm, msk_data); eapol_sm_set_pmk(sm, msk_data);
} }
static void eapol_eap_event_cb(unsigned int event,
const void *event_data, void *user_data)
{
struct eapol_sm *sm = user_data;
if (!sm->event_func)
return;
sm->event_func(event, event_data, sm->user_data);
}
void eapol_sm_set_8021x_config(struct eapol_sm *sm, struct l_settings *settings) void eapol_sm_set_8021x_config(struct eapol_sm *sm, struct l_settings *settings)
{ {
sm->eap = eap_new(eapol_eap_msg_cb, eapol_eap_complete_cb, sm); sm->eap = eap_new(eapol_eap_msg_cb, eapol_eap_complete_cb, sm);
@ -1582,9 +1599,11 @@ void eapol_sm_set_8021x_config(struct eapol_sm *sm, struct l_settings *settings)
if (!sm->eap) if (!sm->eap)
return; return;
eap_set_key_material_func(sm->eap, eapol_eap_results_cb); if (!eap_load_settings(sm->eap, settings, "EAP-"))
return;
eap_load_settings(sm->eap, settings, "EAP-"); eap_set_key_material_func(sm->eap, eapol_eap_results_cb);
eap_set_event_func(sm->eap, eapol_eap_event_cb);
} }
static void eapol_rx_packet(struct eapol_sm *sm, static void eapol_rx_packet(struct eapol_sm *sm,

View File

@ -125,6 +125,9 @@ typedef void (*eapol_rekey_offload_func_t)(uint32_t ifindex,
const uint8_t *kck, const uint8_t *kck,
uint64_t replay_counter, uint64_t replay_counter,
void *user_data); void *user_data);
typedef void (*eapol_sm_event_func_t)(unsigned int event,
const void *event_data,
void *user_data);
bool eapol_calculate_mic(const uint8_t *kck, const struct eapol_key *frame, bool eapol_calculate_mic(const uint8_t *kck, const struct eapol_key *frame,
uint8_t *mic); uint8_t *mic);
@ -197,6 +200,7 @@ void eapol_sm_set_ap_wpa(struct eapol_sm *sm, const uint8_t *wpa_ie,
bool eapol_sm_set_own_wpa(struct eapol_sm *sm, const uint8_t *wpa_ie, bool eapol_sm_set_own_wpa(struct eapol_sm *sm, const uint8_t *wpa_ie,
size_t len); size_t len);
void eapol_sm_set_user_data(struct eapol_sm *sm, void *user_data); void eapol_sm_set_user_data(struct eapol_sm *sm, void *user_data);
void eapol_sm_set_event_func(struct eapol_sm *sm, eapol_sm_event_func_t func);
uint32_t eapol_sm_get_pairwise_cipher(struct eapol_sm *sm); uint32_t eapol_sm_get_pairwise_cipher(struct eapol_sm *sm);
uint32_t eapol_sm_get_group_cipher(struct eapol_sm *sm); uint32_t eapol_sm_get_group_cipher(struct eapol_sm *sm);