Add EAPOL authenticator event callback
This avoids direct calls to WPA authenticator from eapol_sm.c.
This commit is contained in:
parent
c02d52b405
commit
382942004f
3 changed files with 27 additions and 3 deletions
|
@ -18,7 +18,6 @@
|
||||||
#include "eapol_sm.h"
|
#include "eapol_sm.h"
|
||||||
#include "eloop.h"
|
#include "eloop.h"
|
||||||
#include "common/eapol_common.h"
|
#include "common/eapol_common.h"
|
||||||
#include "wpa.h"
|
|
||||||
#include "sta_info.h"
|
#include "sta_info.h"
|
||||||
#include "eap_server/eap.h"
|
#include "eap_server/eap.h"
|
||||||
#include "state_machine.h"
|
#include "state_machine.h"
|
||||||
|
@ -611,7 +610,8 @@ SM_STATE(REAUTH_TIMER, REAUTHENTICATE)
|
||||||
SM_ENTRY_MA(REAUTH_TIMER, REAUTHENTICATE, reauth_timer);
|
SM_ENTRY_MA(REAUTH_TIMER, REAUTHENTICATE, reauth_timer);
|
||||||
|
|
||||||
sm->reAuthenticate = TRUE;
|
sm->reAuthenticate = TRUE;
|
||||||
wpa_auth_sm_event(sm->sta->wpa_sm, WPA_REAUTH_EAPOL);
|
sm->eapol->cb.eapol_event(sm->hapd, sm->sta,
|
||||||
|
EAPOL_AUTH_REAUTHENTICATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -935,7 +935,8 @@ restart:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eapol_sm_sta_entry_alive(eapol, addr))
|
if (eapol_sm_sta_entry_alive(eapol, addr))
|
||||||
wpa_auth_sm_notify(sm->sta->wpa_sm);
|
sm->eapol->cb.eapol_event(sm->hapd, sm->sta,
|
||||||
|
EAPOL_AUTH_SM_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,11 @@ typedef enum {
|
||||||
EAPOL_LOGGER_DEBUG, EAPOL_LOGGER_INFO, EAPOL_LOGGER_WARNING
|
EAPOL_LOGGER_DEBUG, EAPOL_LOGGER_INFO, EAPOL_LOGGER_WARNING
|
||||||
} eapol_logger_level;
|
} eapol_logger_level;
|
||||||
|
|
||||||
|
enum eapol_event {
|
||||||
|
EAPOL_AUTH_SM_CHANGE,
|
||||||
|
EAPOL_AUTH_REAUTHENTICATE
|
||||||
|
};
|
||||||
|
|
||||||
struct eapol_auth_cb {
|
struct eapol_auth_cb {
|
||||||
void (*eapol_send)(void *ctx, void *sta_ctx, u8 type, const u8 *data,
|
void (*eapol_send)(void *ctx, void *sta_ctx, u8 type, const u8 *data,
|
||||||
size_t datalen);
|
size_t datalen);
|
||||||
|
@ -77,6 +82,7 @@ struct eapol_auth_cb {
|
||||||
void (*set_port_authorized)(void *ctx, void *sta_ctx, int authorized);
|
void (*set_port_authorized)(void *ctx, void *sta_ctx, int authorized);
|
||||||
void (*abort_auth)(void *ctx, void *sta_ctx);
|
void (*abort_auth)(void *ctx, void *sta_ctx);
|
||||||
void (*tx_key)(void *ctx, void *sta_ctx);
|
void (*tx_key)(void *ctx, void *sta_ctx);
|
||||||
|
void (*eapol_event)(void *ctx, void *sta_ctx, enum eapol_event type);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1642,6 +1642,22 @@ static void _ieee802_1x_tx_key(void *ctx, void *sta_ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void ieee802_1x_eapol_event(void *ctx, void *sta_ctx,
|
||||||
|
enum eapol_event type)
|
||||||
|
{
|
||||||
|
/* struct hostapd_data *hapd = ctx; */
|
||||||
|
struct sta_info *sta = sta_ctx;
|
||||||
|
switch (type) {
|
||||||
|
case EAPOL_AUTH_SM_CHANGE:
|
||||||
|
wpa_auth_sm_notify(sta->wpa_sm);
|
||||||
|
break;
|
||||||
|
case EAPOL_AUTH_REAUTHENTICATE:
|
||||||
|
wpa_auth_sm_event(sta->wpa_sm, WPA_REAUTH_EAPOL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int ieee802_1x_init(struct hostapd_data *hapd)
|
int ieee802_1x_init(struct hostapd_data *hapd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1679,6 +1695,7 @@ int ieee802_1x_init(struct hostapd_data *hapd)
|
||||||
cb.set_port_authorized = ieee802_1x_set_port_authorized;
|
cb.set_port_authorized = ieee802_1x_set_port_authorized;
|
||||||
cb.abort_auth = _ieee802_1x_abort_auth;
|
cb.abort_auth = _ieee802_1x_abort_auth;
|
||||||
cb.tx_key = _ieee802_1x_tx_key;
|
cb.tx_key = _ieee802_1x_tx_key;
|
||||||
|
cb.eapol_event = ieee802_1x_eapol_event;
|
||||||
|
|
||||||
hapd->eapol_auth = eapol_auth_init(&conf, &cb);
|
hapd->eapol_auth = eapol_auth_init(&conf, &cb);
|
||||||
if (hapd->eapol_auth == NULL)
|
if (hapd->eapol_auth == NULL)
|
||||||
|
|
Loading…
Reference in a new issue