OpenBSD Journal

Initial 802.11n wireless support for iwm(4)

Contributed by tj on from the spatial-beamforming dept.

Stefan Sperling (stsp@) writes in to the tech@ list with a great announcement for WiFi users:

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
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)


Copyright © - Daniel Hartmeier. All rights reserved. Articles and comments are copyright their respective authors, submission implies license to publish on this web site. Contents of the archive prior to as well as images and HTML templates were copied from the fabulous original with Jose's and Jim's kind permission. This journal runs as CGI with httpd(8) on OpenBSD, the source code is BSD licensed. undeadly \Un*dead"ly\, a. Not subject to death; immortal. [Obs.]