Contributed by tj on from the spatial-beamforming dept.
This diff adds an initial implementation of 802.11n. It is functional but mostly adds foundations to build future work on top of. It completes the little bits of 11n code added by damien@ years ago. It supports all non-optional 11n features for STA (client) operation.
It adds 11n support only for the iwm(4) driver. Support for more drivers will be added later. - Add a new '11n' mode with all the ifmedia goo that goes with it. This is straightforward because the ifmedia word was extended to 64 bits back in September during the l2k15 hackathon in preparation for 11n. - Add a concept of MCS (modulation coding scheme) alongside the "rates" used in 11a/b/g. My initial plan was to extend the ieee80211_rateset structure until I noticed this struct is copied out verbatim into frames during 11a/b/g operation. So changing its size is not an option and I'm adding MCS as a new concept which exists only in 11n mode. The mandatory MCS 0-7 are supported, providing a maximum theoretical data rate of 65Mbit/s. - Add more 11n related state to various data structures, most notably ieee80211_node and ieee80211com. - Add support for block ack agreements and receiving A-MPDUs and A-MSDUs. This mostly builds on code which damien@ added years ago. I'm very happy he left a complete implementation for me to find. Sending A-MPDUs is left for later (the sender has to initiate block ack, and since we don't our 11n peers won't care, so no problem). The 11n standard adds a lot of new features, most of which are optional. The optional 11n features which this diff does not add support for include: - MIMO (MCS 8 and above) - Short guard interval aka SGI (improves throughput) - 40 MHz wide channels I've been testing against OpenWRT and Fritzbox APs based on the ath10k chipset. Testing against all sorts of APs is much appreciated. Apart from 11n operation I've been testing 11a/b/g operation as well. Everything seems to work. The diff has survived a full 'make release' + install cycle on amd64. Most development and testing was done on i386. To test this diff, apply it to /usr/src/sys, compile a new kernel and reboot into it. Then install the new if_media.h header and recompile ifconfig: doas install -m 444 -o root -g bin /usr/src/sys/net/if_media.h /usr/include/net/ cd /usr/src/sbin/ifconfig make obj make depend make doas make install `ifconfig iwm0 media' should show an additional line advertising 11n support: media autoselect mode 11n While associated to an 11n AP, `ifconfig iwm0' should indicate the MCS being used for transmissions, e.g.: media: IEEE802.11 autoselect (HT-MCS7 mode 11n) This work is being supported by genua gmbh which allows me to spend the necessary time to keep working on 11n and do my best at building this feature together with the OpenBSD community.
The patch for Stefan's work can be found on the archives, and should be committed to CVS soon. If you have the hardware, test reports would be appreciated.
(Comments are closed)