OpenBSD Journal

Call for testing: Improved 802.11g AP compatibility check

Contributed by Peter N. M. Hansteen on from the Puffy gaping at APs dept.

The WiFI 802.11 standards are a gnarly lot, and checking for compatibility of the various sub-specifications has been known to drive even seasoned OpenBSD developers to the brink of distraction.

Now Stefan Sperling (stsp@) is airing a possible improvement in compatibility checks via a message to tech@ titled "fix net80211 802.11g compatibility check", saying

List:       openbsd-tech
Subject:    fix net80211 802.11g compatibility check
From:       Stefan Sperling <stsp () stsp ! name>
Date:       2025-07-31 10:26:18

I have a WIP fix for qwx which relies on ieee80211_iserp_sta() to
detect whether an AP supports 802.11g, rather than 802.11b only.

And I encountered an access point which qwx could not connect to when
my WIP fix is applied.
This AP allows 11g clients but blocks 11b clients by not announcing
support for 11b rates in its beacons.

ieee80211_iserp_sta() is supposed to detect whether a peer supports ERP/11g.
Yet it will return false for APs which do not announce support for any
of the 11b (pre-11g) data rates in their beacons.

This code seems to be based on the last sentence in this paragraph from
 the 802.11 standard (I am from quoting from the 2012 / 11n version):

  18. Extended Rate PHY (ERP) specification

  [...]

  18.1.2 Introduction

  The ERP builds on the payload data rates of 1 and 2 Mb/s, as described
  in Clause 15, that use DSSS modulation and builds on the payload data
  rates of 1, 2, 5.5, and 11 Mb/s, as described in Clause 16, that use
  DSSS and CCK.

  The ERP draws from Clause 17 to provide additional payload data rates
  of 6, 9, 12, 18, 24, 36, 48, and 54 Mb/s. Of these rates, transmission
  and reception capability for 1, 2, 5.5, 6, 11, 12, and 24 Mb/s data
  rates is mandatory.

To summarize:

ERP rates are the OFDM rates: 6, 9, 12, 18, 24, 36, 48, and 54 Mb/s.
These rates were introduced with 11g. The mandatory ones are: 6, 12, and 24.

The CCK rates are 1, 2, 5.5, and 11. These were already present in 11b.
They are not relevant when checking for EP/11g support. The mandatory
ones are 1, 2, and 5. Current APs may choose to disable support even
for the mandatory ones, which makes ieee80211_iserp_sta() return false
even though the AP supports ERP/11g.

Fix below. ok?

(Rate arrays in beacons and in our code represent data rates in units
of 512Kb/s. Divide by 2 to get Mbit/s: 12 -> 6, 24 -> 12, 48 -> 24)

(Clause 18 used to be called Clause 19 in earlier standard revisions.)

M  sys/net80211/ieee80211_node.c  |  7+  3-

1 file changed, 7 insertions(+), 3 deletions(-)

and the rest of the message contains the diff -- against a fairly fresh -current -- for testing by those who are able and willing.

If you are able to test and provide useful feedback, your input will be appreciated!


Credits

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 deadly.org 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.]