Links and notes as I learn wireless device driver development.
Links to all subpages are in the upper right corner of this website.
Adrian Chadd suggested looking at the following features (roughly in that order):
Adrian Chadd suggested I should spoke to ivadasz (Imre Vadász) from DragonFly BSD. I gained a lot of valuable insights:
iwn (not iwm).iwlwifi driver.iwm needs fixing in how it interacts with the net80211 state machine (for associating/disassociating with access points and so on)iwm thanks to Stefan Sperling (stsp at OpenBSD). OpenBSD-current should have MIMO support although it hasn't been tested by Imre personally.iwm and iwn:iwm is a driver for Intel WiFi hardware starting from AC7260 and AC3160. At the moment the code in DragonFly BSD and FreeBSD only has support for 11a, 11b and 11g modes.iwn is a driver for older Intel WiFi hardwareiwm and iwn counterparts in Linux. Imre said:
In Linux the code corresponding to iwm and iwn lives in drivers/net/wireless/intel/iwlwifi. There is various common code there, and in the pcie subdirectory. And basically the dvm subdirectory contains code exclusive to hardware supported by iwn, and stuff corresponding to iwm lives in the mvm subdirectory.
You'll need to load iwm manually during installation. In regular boot after installing, the iwm driver module should be loaded automatically. Since iwm needs to load the firmware quite early during attachment, it doesn't work properly when loading the module in the bootloader or adding it to the kernel configuration to statically link it; One would need to load the correct firmware module as well from the loader.
sys/dev/netif/iwm
sys/net80211 sys/dev/pci
I am not sure about sys/dev/pci. It seems like I've not found the proper directories yet.
According to the iwm(4) manpage from OpenBSD-current:
The iwm driver does not support any of the 802.11ac capabilities offered by the adapters. Support for 802.11n 40MHz channels and Tx aggregation is not yet implemented. Additional work is required in ieee80211(9) before those features can be supported.
Kyua is designed for userland applications. It might come handy if I can trigger userland behaviour
Adrian uses iperf.
Getting iperf to do UDP quickly:
# Example for getting 100Mbit of UDP for 30 seconds. # Server side: iperf -s -u -i 1 # Client side: iperf -s -u -i 1 -t 300 -b 100m <ip address>
Useful for testing Wi-Fi:
indicates that I've not read it yet (and most often just scanned through)
Special thanks to