Linux内核wifi驱动程序如何确定何时连接丢失?

时间:2013-07-25 01:21:50

标签: wifi linux-device-driver

我的理解是当前的WiFi驱动程序使用速率控制算法来选择一小组预定值内的数据速率以通过WiFi介质发送分组。为此目的存在不同的算法。但是,当WiFi驱动程序决定连接丢失并将连接全部关闭时,此过程如何工作?我应该在开源WiFi驱动程序中阅读哪部分代码,例如MadWiFi等等?

2 个答案:

答案 0 :(得分:2)

在Linux中运行的硬件的WiFi驱动程序与WiFi芯片通信,后者也运行相当复杂的固件。驱动程序和固件之间的接口是特定于硬件的。在某些硬件中,连接丢失事件的检测完全由固件完成,驱动程序仅获得“断开连接”事件,而在其他硬件中,驱动程序也参与其中。

无论是谁通常会发生断线连接

  • 从AP接收DEAUTH帧
  • 检测到太多丢失的信标。信标是由AO周期性发送的WiFi帧(对于大多数AP,每~100ms)。如果你离AP太远或者AP刚刚断电,你就会停止在空中看到信标,通常你会发出信号断开或试图漫游到另一个AP。
  • 数据包Tx上的故障太多(即,因为流量过大而未接收到ACK帧) 这通常表明你离AP太远了。可能是你可以“听到”AP,但它已经听不到你了。在这种情况下,发出断开信号也是有意义的。

例如,您可以查看Linux内核drivers/net/wireless/ti/wlcore/events.c中的TI wifi驱动程序和函数wlcore_event_beacon_loss()

答案 1 :(得分:0)

在Cfg80211架构中,假设我们是站点模式。

驱动程序调用内核API cfg80211_send_disassoc()如果我们收到deassoc / deauth frame.t此函数将通知相应的应用程序(例如wpa_supplicant)断开事件。

另一方面,当我们决定与AP断开连接时,应用程序(ex wpa_supplicant)可以调用linux内核API cfg80211_disconnected(),它将触发相应的驱动程序ioctl函数来完成断开连接任务。