接入点使用 softMAC 还是 hardMAC?

Rav*_*avi 5 wireless linux-device-driver linux-kernel

我试图了解无线在 linux 中的工作。我从 wpa_supplicant、hostapd 应用程序开始,借助它们的文档和源代码。了解了以下流程和基本功能:

  1. wpa_supplicant,nl80211(驱动接口)
  2. libnl 库(使用 netlink 协议在用户空间和内核之间进行套接字通信)
  3. cfg80211(内核接口用于在用户空间的nl80211实现的帮助下从用户空间与驱动程序通信),mac80211(软件媒体访问控制层)
  4. 驱动程序(可加载驱动程序,例如:ath6kl - atheros 驱动程序)。

我理解了上述软件流程,在我的探索中,我了解到为了为开发人员提供自由,MAC 层是在软件中实现的(流行的实现 mac80211)。

在所有情况下都是这样吗?如果是这样,softMAC 和 hardMAC 的优缺点是什么?内核中的 cfg80211 接口是否直接与驱动程序通信?谁以及如何与 mac80211 进行通信?

提前致谢。

har*_*mic 5

术语“SoftMAC”是指无线网络接口设备 (WNIC),它没有在硬件中实现 MAC 层,而是期望驱动程序实现 MAC 层。

“HardMAC”(也称为“FullMAC”)描述了在硬件中实现 MAC 层的 WNIC。

SoftMAC的优点是:

  • 可能降低硬件成本
  • 可以通过仅更新驱动程序升级到更新的标准
  • 可以通过仅更新驱动程序来纠正 MAC 实施中的错误

另一个优点(至少在 Linux 内核中)是,用于不同类型 WNIC 的许多不同驱动程序都可以共享内核本身提供的相同 MAC 实现。

尽管有这些优点,但并非所有 WNIC 都使用 SoftMAC。HardMAC 的主要优势在于,由于 MAC 功能是在硬件中实现的,因此它们对 CPU 负载的贡献较小。

mac80211是 Linux 内核中用于实现 SoftMAC 驱动程序的框架。它实现了 cfg80211 回调,否则必须由驱动程序本身实现,并且还实现了 MAC 层功能。因此,它介于 cfg80211 和 SoftMAC 驱动程序之间。

HardMAC 驱动程序必须完全自己实现 cfg80211 接口。