高通 无线驱动(wireless driver) 状态机详解

由于公司希望让产品提高无线状态下连接速度,因此就需要修改状态机。去除一些不必要的耗时操作,所以最近主要研究了下高通的wireless的驱动STATION mode 部分。 

好了,下面进入正题。

众所周知。 client 和 hostap 关联需要四个步骤(假设采用open 方式,no psk加密)。

1.  wlan 管理帧交互流程

1. host端定期向空气中发出beacon帧。 clent端scan各个信道的beacon,并发送probe request 的广播探测帧(即原mac 地址是client本身,目的mac地址是ff:ff:ff:ff:ff:ff).

  注:如果这时在上层例如Andorid手机界面。手动指定一个SSID去连接。这时发送的probe request原和目的mac地址不变,但是         会带有host端 ssid的信息。

2. host 收到client端的probe request帧, 检查一下ssid是host 本身。 Host就会发送 probe response帧给client.

3. client 收到host 端的probe response帧。就会给host端发送auth帧。(注意:这个auth帧是80211的auth帧,与wpa,wep加密无关)

4.  host端收到client的auth帧。如果验证t通过,会给client返回一个auth帧。

5. client端收到host端返回的auth帧。 就会给host端发送assoc request帧。

6.  host收到client的assoc request帧,会给client返回assoc response帧。

7. client收到 host的assoc response帧。表明一次管理帧的关联成功。

这时。如果是OPEN模式。client端就会发送DHCP向 host端拿IP了。

 如果是psk机密模式,client端还需要进行一个4次握手的psk数据帧过程。本文就不详细说了。以后有机会再专门介绍一下psk的模式。

2.  qca 状态机的流程。

当station 模式的vap 建立起来之后:

在   os/linux/src/osif_umac.c 中 

             osif_vap_init会调用 wlan_connection_sm_start, 去启动cllient模式的状态机。

 这里要明确一下,根据我的了解,qca 状态机分为两部分,一部分叫connection,另一部分叫assoc。分别位于

 umac/sme/ieee80211_connection_sm.c

 umac/sme/ieee80211_assoc_sm.c    两个文件中。

下面继续跟踪connection 状态机。

connection的状态机主要分为:

INIT(IEEE80211_CONNECTION_STATE_INIT)--->SCAN(IEEE80211_CONNECTION_STATE_SCAN)

--->CONNECTIING(IEEE80211_CONNECTION_STATE_CONNECTING)

--> CONNECTED(IEEE80211_CONNECTION_STATE_CONNECTED)

其中在 CONNECTING 状态部分,qca 会调用 accos 状态机: assoc状态机分为“ASSOC INIT”  "ASSOC JOIN" "ASSOC  AUTH" "ASSOC ASSOC" "ASSOC RUN". 

当 ASSOC RUN状态启动成功.会退出assoc状态机,来到connection 状态机的 CONNECTED状态。至此状态机run成功。

接下来CLIENT 可以个host进行数据帧交互了。

3. 根据状态机优化代码

由于公司的产品host端 和 CLIENT端都有。因此我们就可以针对自己的产品进行流程上的优化。

猜你喜欢

转载自blog.csdn.net/fuxy3/article/details/81143446