backports的層次
引言
Linux 無線驅動的開源項目backports的分析。
介紹
整個驅動代碼分成兩個結構。80211通用的功能提取出來做成通用層,這一部分叫做soft mac。而一些與芯片處理相關的部分代碼放在各個芯片目錄下,這部分是芯片的特定mac層。
一般而言 mac驅動有兩個方面,一是數據轉發,二是管理。我們把這兩個方面,分別叫作數據層面和管理層面,或是數據面與管理面。
soft mac層的三個層次
soft mac 層就是/net/mac80211部分代碼,它向上完成了與linux kernel的對接,並使用linux 的genl方式,爲用戶層程序訪問配置無線驅動提供了接口。單就管理面而言有四個模塊。如下圖:
nl80211層
這一層的代碼在/net/wireless/nl80211.c。這是用戶程序調用相關的系統調用在內核的入口。
處理各種不同的命令。它向下會調用cfg80211層。
linux爲配置有線接口定義了一些ioctl的命令字,由於無線接口的可配置項遠遠比有線接口的可配置多很多。ioctl命令字空間也有限,所以爲無線接口的管理面定義了
使用netlink 的genl全新的接口,叫做nl80211。
cfg80211層
這一層負責管理層面的工作。不關心數據轉發的業務。
驅動掃描到一個物理芯片時,此芯片(代碼中叫wiphy)會註冊到cfg80211層。cfg80211層就組織好所有無線接口,以及他們的屬性。它可以處理的業務有:
無線虛接口相關,如channel,創建無線虛接口;加密密鑰管理等。
過程管理相關,station的過程管理部分(掃描,上下線)
還有一部分與linux相關的,如輸出sysfs;註冊ethtool等。
cfg80211_rdev_list 全局變量,用於組織和管理wiphy。注意這可不是一個無線的虛擬接口。
mac80211層
這一層既負責管理層面,也要負責數據層面。
這一層主要關心的是無線虛擬接口,station等。而無線的虛擬接口
會把所有的無線虛擬接口組織管理起來。
在管理層面上,wiphy會向cfg80211註冊時會把mac80211_config_ops作爲自己的config_ops。這樣管理層會通過mac80211層。通過這一層再下發到芯片層。
數據層面的處理主要是rx和tx兩方面。
因爲linux 的bridge只處理以太報文;所以此層會完成這種幀的轉換;在接收時此層完成把無線數據幀(802.11)轉成以太數據(802.3),並交給linux的網絡協議棧處理。發送的過程與之相反。