wpas状态机迁移代码通读

状态机迁移通过定义“通用宏”实现
代码路径

wpa_supplicant-2.10/src/utils/state_machine.h
1.状态转换
    SM_STEP(machine) 
    ----》SM_STEP_RUN(machine)
    wpas调用“SM_STEP_RUN”,通过“通用宏”调用状态迁移实现函数SM_STEP()

2.进入某个状态后EA
    SM_STATE(machine, state)
    ---->SM_ENTER(machine, state) 
    ---->SM_ENTER_GLOBAL(machine, state) utc直接进入
    wpas调用SM_ENTER或SM_ENTER_GLOBAL,通过通用宏进入EA实现函数SM_STATE

3.进入某个状态后打印
    SM_ENTRY(machine, state)

状态机使用到的参数都声明在sm结构体中

struct eapol_sm ------ EAPOL状态机的状态类型、变量、处理函数
struct eap_sm ------EAP状态机的状态类型和处理函数
在eap_i.h中还有些EAP变量

举例:关联流程状态切换

wpa_supplicant_event_assoc
-----》eapol_sm_notify_portEnabled(wpa_s->eapol, true);
       -----》eapol_sm_step(sm)
                -----》进入状态机的联动,循环处理各个状态机的状态变换,直到4个状态机稳定
                -----〉SM_STEP_RUN(SUPP_PAE) ----》 SM_STEP(SUPP_PAE)进入PAE状态机
                -----〉SM_STEP_RUN(KEY_RX) ----》 SM_STEP(KEY_RX)进入key状态机
                -----〉SM_STEP_RUN(SUPP_BE) -----》 SM_STEP(SUPP_BE)进入BE状态机
                -----〉eap_peer_sm_step(sm->eap) 返回零EAP状态无变化
                 

日志会打印“EAPOL: SUPP BE entering state IDLE"等状态转换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值