nl80211


一開始, linux wireless driver 是採用 wext,
這套是 HP 實驗室 軟體工程師 Jean Tourrilhes 所開發
採用 Linux ioctl 的方式來實現.
而在 Linux 2.6.18 時, 成為 kernel 的一部分

wext API 版本到 V22 後就不再更新, 取而代之的是 NL80211
nl80211 取代 wext 的原因是, nl80211 所使用的 netlink 技術,
比 ioctl  更具有優勢.

ioctl 的缺點是, 不適合傳輸大量數據. 發起端必須是 user 端.
如果 kernel 主動要傳輸訊息給 user, 會相當麻煩. user 端必須不斷地去 polling.

netlink 使用 socket API 方式來溝通, 基於 RFC3549,
支援雙向通訊, 可以解決上述的問題.
- netlink 採用自己獨立的地址來編碼  struct sockaddr_nl
- 每個通過 netlink 發出的消息, 都必須附帶一個消息頭 - struct nlmsghdr

而 libnl 就是在 user mode 下幫助開發 netlink 的函式庫.



如這個 用 nl80211 做 scan 的範例

https://github.com/neojou/nl80211/blob/master/test_scan/src/test_scan_nl80211.c

後續.




留言

熱門文章