How nl80211 library & cfg80211 work?
Solution 1
To be able to control wireless drivers from userspace, some IPC communication processes between kernel and userspace are used.
- At first
ioctl
with vendor dependent APIs was used. - In 1996, Jean Tourrilhes creates wireless extensions (WE or WEXT).
The Wireless Extension (WE) is a generic API allowing a driver to expose to the user space configuration and statistics specific to common Wireless LANs.
-
In 2006, John Linville creates mac80211 and Johannes Berg creates cfg80211 and nl80211. Together it is intended to replace wireless extensions.
+-------------+ | | | Userspace | | | +-------------+ ^ - - - | - - - - | nl80211 v +-------------+ | | | cfg80211 | | | +-------------+ +-------------+ | | | mac80211 | | driver | | | +-------------+
An important point is that nl80211/cfg80211/mac80211 no longer use ioctl, they use netlink.
So, tools like iw, hostapd or the wpa_supplicant use some netlink libraries (like libnl or libnl-tiny) and the netlink interface public header which is of course nl80211.h.
There is not so much documentations, but I advise you to read the libnl documentation and then the iw source code (because iw use libnl).
Solution 2
A slightly more detailed picture of how nl80211
and cfg80211
work with other parts of the system (user space
, kernel
, and hardware
).
-
nl80211
is the interface between user space software (iw
,wpa_supplicant
, etc.) and the kernel (cfg80211
andmac80211
kernel modules, and specific drivers). - The WiFi drivers and hardware could be Full-MAC or Soft-MAC (see Wireless_network_interface_controller).
-
cfg80211_ops
is a set of operations that Full-MAC drivers andmac80211
module register tocfg80211
module. -
ieee80211_ops
is a set of operations that Soft-MAC drivers register tomac80211
module.
Solution 3
See my reply to How to learn the structure of Linux wireless drivers (mac80211)?
In wpa_supplicant
, you can follow the code in src/drivers/driver_nl80211.c
. This is a wpa_supplicant driver (not a kernel driver but an abstraction used in wpa_supplicant
code) which uses libnl
to communicate with the kernel cfg80211
module. When wpa_supplicant
issues a scan for example then wpa_driver_nl80211_scan
gets called. It builds the netlink
message with a command called NL80211_CMD_TRIGGER_SCAN
and with all the parameters required for the scan.
Solution 4
I've created a basic code flow diagram for the wireless stack in linux,
all the way from wpa_supplicant > cfg80211 > mac80211 > ath9k_htc.
The code has been traced for linux kernel 5.4.31.
Here is the link.
Related videos on Youtube
Rafal
Updated on July 09, 2022Comments
-
Rafal almost 2 years
I want to learn about how
nl80211
andcfg80211
works in detail. Function flow, hownl80211
interact with network tools likewpa_supplicant
,iw
.Plz suggest me some useful links or books to refer.
-
sigjuice about 7 yearsThis question is off-topic. See help center
-
-
Rafal over 10 yearsnl80211 act as an interface between userspace and kernel space.....i m having difficulty in understanding at what point control flow goes from user space to kernel space
-
jmlemetayer over 10 yearsHave you read this. Netlink can be compared to a socket between the kernel and the user space. So the user can use it in a request-response way (e.g
iw dev wlan0 link
) and/or in an event way (e.giw dev wlan0 event
). -
Rafal over 10 yearsthanks for the link but i have gone through that page.....for interaction between user n kernel space a socket is created...but when it comes to tracing the code i m not able to trace it from user space to kernel space....if anybody can help plz reply soon
-
jmlemetayer over 10 yearsYou can search in the linux-wireless mailing list or even try asking them. If you got a response, please post it, I'm very interested in and I don't have enough time to do it now!
-
infoclogged about 7 yearslspci -k | grep -A 3 -i "network" returns me "Kernel driver in use: iwlwifi". Then modinfo iwlwifi | grep depends returns me "cfg80211". But how can I check about nl80211 and mac80211. Also, how do I know if the driver supports AP mode or not?
-
Miscreant about 5 years^ Link is dead, here's an archived version: web.archive.org/web/20160316163624/http://…
-
Itachi Tensie almost 4 yearsWow, it is awesome. Which software did you use to create this diagram?
-
Akshdeep Singh almost 4 years@ItachiTensie I didn't use any software, I just made it with Google Drawings...