Skip to content

Wi-Fi 4 and Wi-Fi 6 Features

The open-source openwifi release implements 802.11a/g plus a single-stream, 20 MHz subset of 802.11n (Wi-Fi 4). The release does not implement Wi-Fi 5 (802.11ac). Wi-Fi 6 (802.11ax) exists only as a commercial offering.

The Architecture page covers the same feature set from the design side, with the throughput derivation and diagrams. This page covers how you use it. If Wi-Fi itself is new to you, start with the primer below. If you know 802.11, skip straight to the timeline.

A short 802.11 primer

This section is for people who know RF and digital modulation but haven't worked with Wi-Fi as a standard. It's the minimum background the rest of the page assumes. Individual terms are in the Glossary.

The standard and its names. Wi-Fi is IEEE 802.11 plus a series of amendments named with letters (a, b, g, n, ac, ax). Each amendment layers new capabilities on the existing ones, and devices stay backward compatible with older peers on the same channel. The Wi-Fi Alliance introduced the generation numbers Wi-Fi 4, 5, and 6 as marketing labels in 2018. 802.11n is Wi-Fi 4, 802.11ac is Wi-Fi 5, and 802.11ax is Wi-Fi 6. Nothing was ever officially called Wi-Fi 1 through 3. Channels live in the 2.4 GHz and 5 GHz bands (Wi-Fi 6E later added 6 GHz).

The PHY, in RF terms. A standard channel is 20 MHz wide and carries OFDM with a 64-point FFT, so subcarriers sit 312.5 kHz apart. Legacy 802.11a/g fills 48 subcarriers with data and 4 with pilots. Each OFDM symbol lasts 4 µs, made of 3.2 µs of useful symbol and a 0.8 µs guard interval. The guard interval is a cyclic prefix that absorbs multipath delay spread.4 Subcarriers carry BPSK up to 64-QAM, protected by a rate 1/2 convolutional code that puncturing thins out to rates 2/3, 3/4, and 5/6. The fraction is the share of transmitted bits that carry information, so 5/6 has the least redundancy. The receiver decodes the code with a Viterbi decoder, which in openwifi is a Xilinx IP core. Each modulation-plus-code-rate combination has an index called the MCS. The transmitter picks the rate again for every frame, based on which frames get through. On openwifi, Linux's minstrel_ht rate-control algorithm does this, and you can pin the rate manually when you need repeatability.

One shared channel, half duplex, no scheduler. Every station transmits and receives on the same frequency and never both at once. Access is contention based (CSMA/CA). A station listens until the channel is idle, waits a random backoff, and transmits. It then waits for the receiver's acknowledgement. The ACK must start within a fixed short gap (SIFS, 10 or 16 µs depending on band). A software MAC cannot meet a deadline this short, so openwifi runs this logic in the FPGA. This means that every frame pays a fixed cost of preamble, backoff, and ACK, and real throughput lands well below the PHY rate. Features that spread that cost over more data, such as aggregation, often gain more than a faster PHY rate does.

From OFDM to OFDMA. Every generation up to and including Wi-Fi 5 uses OFDM as a single-user scheme. The station that wins contention gets every subcarrier in the channel for the whole frame, so stations share the medium in time only. OFDMA, introduced by Wi-Fi 6, shares it in frequency as well. The subcarriers of one channel are grouped into resource units (RUs), and the access point assigns RUs to different stations within the same transmission. In a 20 MHz channel, an RU spans 26, 52, 106, or 242 tones. This allows anything from one user on the full channel to nine users in parallel, each on a slice about 2 MHz wide.4 Downlink OFDMA is one long frame carrying data for several receivers at once. Uplink OFDMA is harder. The AP invites specific stations with a trigger frame, and their transmissions must arrive at the AP aligned. Every station therefore has to pre-correct its timing and carrier frequency tightly enough to stay orthogonal to its neighbors in the same FFT. OFDMA targets efficiency more than peak speed. A short packet no longer pays a full contention cycle for a 20 MHz channel it barely fills. The AP can then schedule a crowded channel instead of leaving it purely to contention.

OFDM (through Wi-Fi 5) frequency (20 MHz) time STA A contention STA B contention STA C OFDMA (Wi-Fi 6) time STA A · 106-tone RU 26 STA B · 52-tone RU STA C · 52-tone RU STA D · 242-tone RU (whole channel)
Left: through Wi-Fi 5, every transmission occupies the whole channel and stations take turns through contention. Right: Wi-Fi 6 OFDMA assigns resource units to several stations within one transmission, and a single station can still get the full channel.

Features must be negotiated. Stations advertise what they support in capability fields inside management frames (beacons, probe responses, association frames). A feature is only used on a link when both ends advertise it. Some features exist in openwifi's FPGA but stay unused until you tell the driver to advertise them. Short guard interval is the main example.

Where openwifi sits in the Wi-Fi timeline

Generation Standard Status in openwifi (open source)
pre-Wi-Fi 4 802.11a and 802.11g Supported (legacy OFDM, 6–54 Mbps)1
pre-Wi-Fi 4 802.11b Not supported. openwifi is OFDM-only, see About 802.11b
Wi-Fi 4 802.11n Supported: single spatial stream, 20 MHz, MCS 0–7 (this page)1
Wi-Fi 5 802.11ac Not implemented (see below)
Wi-Fi 6 802.11ax Commercial only, via openwifi.tech1

Narrower channels (2 MHz and 10 MHz)

The upstream README lists 2 MHz for 802.11ah-style sub-GHz work and 10 MHz for 802.11p vehicular work. These are adaptation targets for the 20 MHz design, not complete implementations of either standard. See Adapting the design for 10 MHz or 2 MHz channels for the FPGA, RF, driver, and timing changes. Frequency tuning changes the center frequency only.

Why there's no Wi-Fi 5

Wi-Fi 5 gets its speed from 80 and 160 MHz channels, up to eight spatial streams, and MU-MIMO, all in the 5 GHz band only. A 20 MHz single-stream design can use none of that. The only 11ac feature that would apply is 256-QAM, which gives roughly 87 Mbps at 20 MHz single-stream versus 72 Mbps for 11n.4

Wi-Fi 6 is different. It reworks the OFDM numerology and adds OFDMA, which subdivides a single 20 MHz channel between users. Those features matter even at 20 MHz with a single stream. Of the two generations, only Wi-Fi 6 offers much that this hardware can use. Going from 11n straight to 11ax therefore skips almost nothing openwifi could have used.

Wi-Fi 4 (802.11n) in the open-source release

802.11n's formal name for its feature set is HT, high throughput, and that label appears everywhere in practice. Driver logs mark 802.11n frames ht1 and legacy 11a/g frames ht0. Tools take -m n or "HT" flags, and capability fields are called "HT capabilities." The amendment added five PHY improvements and frame aggregation at the MAC:

802.11n feature What it does In openwifi? How you control it
52 data subcarriers (up from 48) ~8% more throughput per symbol ✅ yes Automatic for every HT frame
5/6 convolutional coding Higher top code rate (was 3/4) ✅ yes Automatic at MCS 7
400 ns short guard interval ~11% shorter symbols ✅ yes, not advertised by default test_mode bit 1, rate override +16, or inject_80211 -i 1 (details below)
A-MPDU frame aggregation Amortizes contention and preamble overhead over many frames ⚠️ experimental ./wgd.sh 1 (details below)
A-MSDU frame aggregation The other aggregation flavor ❌ no –
MIMO (up to 4 streams) Multiplies throughput by the stream count ❌ no –
40 MHz bandwidth Doubles the channel ❌ no –

With everything supported switched on, the theoretical PHY ceiling is 72.2 Mbps (MCS 7 with short GI). The step-by-step derivation is on the Architecture page. Measured throughput reaches 40 to 50 Mbps TCP and about 50 Mbps UDP with aggregation on.1

The HT rate table

openwifi supports all eight single-stream MCS indices at 20 MHz:4

MCS Modulation Code rate Rate (800 ns GI) Rate (400 ns short GI)
0 BPSK 1/2 6.5 Mbps 7.2 Mbps
1 QPSK 1/2 13 Mbps 14.4 Mbps
2 QPSK 3/4 19.5 Mbps 21.7 Mbps
3 16-QAM 1/2 26 Mbps 28.9 Mbps
4 16-QAM 3/4 39 Mbps 43.3 Mbps
5 64-QAM 2/3 52 Mbps 57.8 Mbps
6 64-QAM 3/4 58.5 Mbps 65 Mbps
7 64-QAM 5/6 65 Mbps 72.2 Mbps

Each step up the table packs more bits per subcarrier or trims coding redundancy, so it needs more SNR. You can see the cost directly in openwifi's published sensitivity figures: −92 dBm at MCS 0 versus −73 dBm at MCS 7 (see Specifications).

By default Linux's minstrel_ht rate control walks this table automatically based on link quality. You only need to intervene for experiments (see forcing an MCS).

What a frame looks like on the air

Everything above (MCS, guard interval, aggregation) is a property of one PPDU, the complete PHY frame that openwifi's FPGA puts on the air. A PPDU is a PHY preamble followed by a Data field. Before sending it, the transmitter wins the channel through DIFS-plus-backoff contention. After a fixed SIFS gap, the receiver answers. The figure below walks down through those three levels.

Every generation keeps the same legacy preamble (L-STF, L-LTF, L-SIG, about 20 µs) so that any nearby 802.11a/g device can still detect the frame and defer. 802.11n adds about 8 µs of HT training on top, and 802.11ax about 16 µs of HE training. The preamble, the SIFS, and the acknowledgement are paid once per PPDU, however much data it carries. Packing many MPDUs into one Data field as an A-MPDU (bottom row) therefore saves a lot of airtime.

A single openwifi transmission, end to end channel access → PPDU → acknowledgement (segment widths are illustrative, not to scale) DIFS + backoff PPDU (preamble + Data field) SIFS Block ACK PPDU structure: the legacy preamble stays, each generation adds training shared legacy preamble (~20 µs) 11a/g 11n 11ax L-STF L-LTF L-SIG Data field L-STF L-LTF L-SIG HT-SIG HT-STF HT-LTF Data field L-STF L-LTF L-SIG RL-SIG HE-SIG-A HE-STF HE-LTF Data field Inside the Data field: an A-MPDU of many MPDU subframes MPDU 1 MPDU 2 MPDU 3 MPDU 4 ⋯ MPDU delim. MAC header Frame body (LLC / IP / payload) FCS 4 B ≈ 30 B variable length 4 B
The same transmission at three zoom levels. Top: the PPDU wins the channel after DIFS + backoff and is acknowledged one SIFS later. Middle: the three generations shown share the legacy preamble (L-STF, L-LTF, L-SIG) for backward compatibility. 802.11n then adds HT training, and 802.11ax adds RL-SIG, HE-SIG-A, and HE training before the Data field. openwifi's open release implements the 11a/g and 11n rows. Bottom: with A-MPDU on, that Data field holds many MPDU subframes under one preamble, each made of a delimiter, MAC header, frame body, and FCS. A single Block ACK acknowledges them all, so one corrupted subframe costs one retransmission instead of the whole aggregate.

Turning on A-MPDU aggregation

Aggregation gives the largest practical throughput gain. At tens of Mbps the fixed per-frame cost (preamble, SIFS, ACK, backoff) starts to dominate, and A-MPDU packs many MPDUs into one transmission so that cost is paid once. Acknowledgement is amortized the same way. The receiver answers the whole aggregate with a single block ACK that flags any subframes needing retransmission, instead of sending one ACK per frame.4 openwifi's published iperf numbers were measured with aggregation on.1

A-MPDU vs A-MSDU aggregation

A-MPDU keeps a header and CRC per subframe, so one corrupted subframe costs one retransmission, not the whole aggregate. Figure from the openwifi 802.11n app note.

It's off by default. Enable it when loading the driver:

cd openwifi
./wgd.sh 1        # test_mode=1, bit 0 = A-MPDU aggregation

The 1 becomes the test_mode module parameter of sdr.ko. With bit 0 set, the driver advertises A-MPDU support in its HT capabilities, with aggregates up to 8 kB and a 2 µs minimum MPDU spacing. It also handles mac80211's aggregation callbacks.3 Both ends of the link negotiate the rest through the normal 802.11 block-ack setup.

Experimental

Aggregation is documented as experimental.2 Try it first when you want more throughput, and turn it off first when you are investigating instability.

Short guard interval

802.11n's short GI halves the guard interval from 800 to 400 ns, trading multipath margin for about 11% more throughput.4 That trade is usually safe on short, clean links (a lab bench, a cabled setup) and riskier in reflective environments.

800 ns normal vs 400 ns short guard interval

The same OFDM symbols with the normal 800 ns and the short 400 ns guard interval. Figure from the openwifi 802.11n app note.

openwifi's PHY handles 400 ns short-GI frames in both directions. Short GI is what lifts MCS 7 from 65 to 72.2 Mbps. However, the driver only advertises short-GI support to peers when test_mode bit 1 is set. The code comment says short GI "seems to bring unnecessary stability issue." By default, a negotiated link therefore runs with the normal 800 ns GI and tops out at 65 Mbps.3

./wgd.sh 2        # advertise short GI only
./wgd.sh 3        # bits 0+1: aggregation AND short GI

The written documentation only describes bit 0. Bit 1 comes straight from the driver source (test_mode&2 in sdr.c), so treat it as a code-level switch that may move.3

You can also use short GI without any capability negotiation:

  • Pin the TX rate with short GI: add 16 to the HT rate override value (next section).
  • Inject short-GI frames in monitor mode with inject_80211 -i 1 (see packet injection).

On receive, openwifi decodes whatever GI the frame uses and reports it in the driver's RX log line (the sgi field, below).

Forcing an MCS by hand

For controlled experiments you usually want a fixed rate instead of minstrel_ht:

./sdrctl dev sdr0 set reg drv_tx 1 11      # pin HT TX to MCS 7 (65 Mbps)
./sdrctl dev sdr0 set reg drv_tx 1 27      # same but short GI (11 + 16 = 72.2 Mbps)
./sdrctl dev sdr0 set reg drv_tx 1 0       # back to auto

Values 4 through 11 select MCS 0 through 7. Register 0 does the same for legacy (non-HT) rates. The full table is in the sdrctl register reference.

In monitor mode, inject_80211 -m n -r <0..7> selects the MCS per injected frame instead.

Checking what is on the air

The quickest way to see whether HT, aggregation, and short GI are in use is the driver's RX print in dmesg. Enable it with the dmesg print control (see Troubleshooting → driver dmesg logging). A received frame then logs a line like this:

sdr,sdr openwifi_rx: 270B ht1aggr1/0 sgi1 650M FC0088 ...
  • ht1 means an 802.11n (HT) frame, ht0 a legacy 11a/g frame
  • aggr1/0 means the frame came from an A-MPDU (second digit marks the last subframe)
  • sgi1 means short guard interval
  • 650M is the rate, here 65 Mbps = MCS 72

A capture with tcpdump on a monitor interface shows the same information in the radiotap header. This is per-frame metadata that the driver attaches to captures, such as the rate or MCS, the guard interval, and the signal strength. It is easier to use for offline analysis.

Limitations to plan around

  • One spatial stream, 20 MHz, always. The 72.2 Mbps ceiling is a hard PHY limit of the open-source design. The two antennas on a board are separate TX and RX paths for isolation, not MIMO.
  • Throughput in practice is about 50 Mbps, well below the 72.2 Mbps PHY rate. Preambles, ACKs, and contention take their share even with aggregation.1
  • Short GI is off by default at the capability level, so a default link peaks at 65 Mbps PHY rate.
  • A-MSDU is absent and A-MPDU is experimental, so a commercial peer that relies on aggressive aggregation defaults reaches a higher rate than an openwifi link.
  • No 802.11b compatibility. In the 2.4 GHz band, legacy clients and management-frame fallbacks cause problems. See About 802.11b.

Wi-Fi 6 (802.11ax)

Status

Wi-Fi 6 is not in the open-source release. The README lists "802.11ax and more advanced features" under the commercial offering at openwifi.tech, which provides subscriptions on top of the AGPLv3 baseline (academic discounts are available).1

The open driver's register map already reserves slots for VHT (11ac) and HE (11ax) rate overrides, both marked not implemented.2 The open code is the platform that Wi-Fi 6 work builds on. It does not include the Wi-Fi 6 PHY.

What Wi-Fi 6 would add on this hardware

The feature-set names describe the intent. 802.11n's feature set is called HT, high throughput, and it made a single link faster. The 802.11ax feature set, HE (high efficiency), aims instead at busy channels with many stations, small packets, and latency-sensitive traffic. Unlike Wi-Fi 5, its features don't depend on wide channels or many antennas, so they remain meaningful on this hardware. At 20 MHz with a single stream, the two generations compare like this:4

Wi-Fi 4 (802.11n) Wi-Fi 6 (802.11ax)
Subcarrier spacing 312.5 kHz 78.125 kHz
OFDM symbol 3.2 µs + 0.4 or 0.8 µs GI 12.8 µs + 0.8, 1.6, or 3.2 µs GI
Data subcarriers (20 MHz) 52 234
Top modulation 64-QAM (MCS 7) 1024-QAM (MCS 11)
FEC Punctured convolutional (BCC) LDPC at the higher rates
Max PHY rate 72.2 Mbps (short GI) 143.4 Mbps (0.8 µs GI)
Channel sharing Time only (CSMA/CA) Time and frequency (OFDMA resource units)
Multi-user None at one stream Downlink and uplink OFDMA (plus MU-MIMO with more antennas)
Power saving Legacy power save Target Wake Time (TWT): sleep on a negotiated schedule
Overlapping networks Defer to any detected frame BSS coloring: ignore sufficiently weak frames from other networks

What the rows mean in practice:

  • The denser numerology is the enabler. Subcarriers sit 4x closer and symbols run 4x longer within the same 20 MHz. This allows the channel to be divided into RUs, since a 26-tone RU still has enough subcarriers to be useful. The longer guard intervals also tolerate outdoor delay spreads that would break an 800 ns GI.
  • 1024-QAM and LDPC roughly double the single-stream ceiling, but only at SNRs a clean short link can deliver. The efficiency features matter in more situations than the speed ones.
  • OFDMA changes the access model as well as the rate (see the primer for how RUs and trigger frames work). Scheduled uplink access allows latency control that pure CSMA/CA cannot give. It is also the feature that openwifi's Wi-Fi 6 research focuses on.
  • TWT and BSS coloring target dense deployments: battery devices that wake on a schedule instead of contending, and neighboring networks that overlap without freezing each other.
One 20 MHz channel, four ways to slice it One station takes the whole channel: 242-tone RU Two stations (the middle 26-tone RU can serve a third): 106-tone RU 26 106-tone RU Four stations (plus the 26-tone center): 52-tone RU 52-tone RU 26 52-tone RU 52-tone RU Nine stations, each on roughly 2 MHz: 26 26 26 26 26 26 26 26 26
The defined resource-unit splits of a 20 MHz channel. Sizes can be mixed within one transmission (say, one 106-tone RU plus two 52-tone RUs), the usable tone count differs slightly between splits because of null tones, and the AP can redraw the layout for every transmission.

Wi-Fi 6E's new spectrum (5.925 to 7.125 GHz) is mostly out of reach, because the AD9361 front end tops out at 6 GHz.

openwifi in Wi-Fi 6 research

Although the open release stops at Wi-Fi 4, openwifi is the base of published Wi-Fi 6 work. This includes experimental OFDMA and cross-technology interference studies, and an ACM WiNTECH 2025 best paper on coordinated OFDMA. See selected publications and the full publications list.

If you need Wi-Fi 6 today

The open release can approximate many Wi-Fi 6 scheduling experiments through programmable MAC controls. Every MAC timing parameter, CCA threshold, and queue is configurable (see sdrctl & Runtime Control and Research Features). Check those controls before deciding whether you need the 11ax PHY. For the commercial version and subscription tiers, contact the team through openwifi.tech.

Sources


  1. openwifi README.md: the feature list (802.11a/g/n, 20 MHz, aggregation via ./wgd.sh 1, measured performance) and the statement about 802.11ax at openwifi.tech. ↩↩↩↩↩↩↩

  2. openwifi doc/README.md: the test_mode definition (bit 0 = A-MPDU) and the drv_tx rate-override registers, including the unimplemented VHT and HE slots and the +16 short-GI encoding. It also gives the RX print format (ht, aggr, and sgi fields). ↩↩↩

  3. openwifi driver/sdr.c: HT capability setup (IEEE80211_HT_CAP_SGI_20 gated on test_mode&2 with the stability comment, A-MPDU parameters gated on test_mode&1, MCS 0 to 7 in mcs.rx_mask) and openwifi_ampdu_action(). ↩↩↩

  4. IEEE 802.11: values that follow from the standard (the HT MCS table, 11ac/11ax feature sets and rates), not from openwifi-specific measurements. ↩↩↩↩↩↩↩