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"等状态转换

猜你喜欢

转载自blog.csdn.net/htt789/article/details/129032229
今日推荐