0

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

4

2 回答 2

2

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

无论谁做了什么,通常都会发生断开连接,原因是

  • 从 AP 接收到 DEAUTH 帧
  • 检测到太多丢失的信标。信标是 AO 定期发送的 WiFi 帧(对于大多数 AP,每 ~100 毫秒)。如果您离 AP 太远或 AP 刚刚关闭,您将无法看到空中的信标,通常您会发出断开信号或尝试漫游到不同的 AP。
  • 数据包发送失败太多(即没有接收到太多流量的 ACK 帧) 这通常表明您离 AP 太远了。可能是您可以“听到” AP,但它已经听不到您的声音了。在这种情况下,发出断开信号也是有意义的。

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

于 2013-07-31T21:07:04.490 回答
0

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

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

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

于 2015-11-29T14:54:59.360 回答