当前位置:  技术问答>linux和unix

hostapd中的一部分代码,实在看不懂了,

    来源: 互联网  发布时间:2016-09-30

    本文导语:  最近做802.1x,从hostapd中开始研究的,现在有些监听的代码,看不懂了,已经看了一周多了。没有什么进展,希望各位能给些帮助。 先贴一部分代码,然后附上完整代码包 static void eapol_sm_step_run(struct eapol_state_machine...

最近做802.1x,从hostapd中开始研究的,现在有些监听的代码,看不懂了,已经看了一周多了。没有什么进展,希望各位能给些帮助。
先贴一部分代码,然后附上完整代码包
static void eapol_sm_step_run(struct eapol_state_machine *sm)
{
struct eapol_authenticator *eapol = sm->eapol;
u8 addr[ETH_ALEN];
unsigned int prev_auth_pae, prev_be_auth, prev_reauth_timer,
prev_auth_key_tx, prev_key_rx, prev_ctrl_dir;
int max_steps = 100;

os_memcpy(addr, sm->addr, ETH_ALEN);

/*
 * Allow EAPOL state machines to run as long as there are state
 * changes, but exit and return here through event loop if more than
 * 100 steps is needed as a precaution against infinite loops inside
 * eloop callback.
 */
restart:
prev_auth_pae = sm->auth_pae_state;
prev_be_auth = sm->be_auth_state;
prev_reauth_timer = sm->reauth_timer_state;
prev_auth_key_tx = sm->auth_key_tx_state;
prev_key_rx = sm->key_rx_state;
prev_ctrl_dir = sm->ctrl_dir_state;

SM_STEP_RUN(AUTH_PAE);
if (sm->initializing || eapol_sm_sta_entry_alive(eapol, addr))
SM_STEP_RUN(BE_AUTH);
if (sm->initializing || eapol_sm_sta_entry_alive(eapol, addr))
SM_STEP_RUN(REAUTH_TIMER);
if (sm->initializing || eapol_sm_sta_entry_alive(eapol, addr))
SM_STEP_RUN(AUTH_KEY_TX);
if (sm->initializing || eapol_sm_sta_entry_alive(eapol, addr))
SM_STEP_RUN(KEY_RX);
if (sm->initializing || eapol_sm_sta_entry_alive(eapol, addr))
SM_STEP_RUN(CTRL_DIR);

if (prev_auth_pae != sm->auth_pae_state ||
    prev_be_auth != sm->be_auth_state ||
    prev_reauth_timer != sm->reauth_timer_state ||
    prev_auth_key_tx != sm->auth_key_tx_state ||
    prev_key_rx != sm->key_rx_state ||
    prev_ctrl_dir != sm->ctrl_dir_state) {
if (--max_steps > 0)
goto restart;
/* Re-run from eloop timeout */
eapol_auth_step(sm);
return;
}

if (eapol_sm_sta_entry_alive(eapol, addr) && sm->eap) {
if (eap_server_sm_step(sm->eap)) {
if (--max_steps > 0)
goto restart;
/* Re-run from eloop timeout */
eapol_auth_step(sm);
return;
}

/* TODO: find a better location for this */
if (sm->eap_if->aaaEapResp) {
sm->eap_if->aaaEapResp = FALSE;
if (sm->eap_if->aaaEapRespData == NULL) {
wpa_printf(MSG_DEBUG, "EAPOL: aaaEapResp set, "
   "but no aaaEapRespData available");
return;
}
sm->eapol->cb.aaa_send(
sm->hapd, sm->sta,
wpabuf_head(sm->eap_if->aaaEapRespData),
wpabuf_len(sm->eap_if->aaaEapRespData));
}
}

if (eapol_sm_sta_entry_alive(eapol, addr))
wpa_auth_sm_notify(sm->sta->wpa_sm);
}

这似乎没有办法上传代码包,
把代码的地址贴上吧。
http://hostap.epitest.fi/releases/hostapd-0.6.10.tar.gz

|
从注释看是在这里运行EAPOL状态机,建议你先了解一下EAPOL状态机。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 无线接入点身份认证 hostapd
  • hostapd交叉编译出错,请高手指点


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3