Skip to content

Open-source Wi-Fi on SDR

openwifi Wiki

A reorganized, plain-language guide to openwifi: a free and open-source, Linux mac80211-compatible, full-stack IEEE 802.11 (Wi-Fi) implementation that runs on SDR hardware built around Xilinx Zynq SoCs, typically paired with the Analog Devices AD9361 RF front end.

Unlike a commercial Wi-Fi chip, every layer of openwifi is open and modifiable: the OFDM PHY and the real-time low MAC (CSMA/CA) run in FPGA fabric, the driver is a standard Linux SoftMAC driver, and everything above that is the ordinary Linux wireless stack (hostapd, wpa_supplicant, iw, Wireshark, and the rest).

Spectrum regulation notice

Transmitting over the air is regulated everywhere. It is your responsibility to comply with your local spectrum regulations. When in doubt, use coaxial cable with attenuators, or a shielded chamber, instead of antennas.

What openwifi can do

  • 802.11a/g/n operation at 20 MHz bandwidth, with the RF front end tunable from 70 MHz to 6 GHz (2 MHz mode for 802.11ah-style sub-GHz work and 10 MHz for 802.11p vehicular experiments are also possible).
  • All the usual roles: Access Point, client (station), ad-hoc, and monitor mode, all driven by the standard Linux tools.
  • A real-time low MAC in FPGA: DCF (CSMA/CA) meeting 802.11 SIFS timing (10 µs in 2.4 GHz, 16 µs in 5 GHz), hardware ACK generation, retransmission, RTS/CTS, and NAV (all configurable or defeatable for experiments).
  • Research features that a commercial chip does not provide: per-packet CSI extraction, raw IQ capture with dozens of trigger conditions, packet injection and fuzzing, a CSI fuzzer for privacy research, full-duplex self-reception ("Wi-Fi as radar"), and time-sliced FPGA transmit queues for network slicing.
  • Throughput in its best configuration (802.11n with A-MPDU aggregation): 40–50 Mbps TCP and ~50 Mbps UDP in iperf.
  • RF quality: EVM around −38 dB, and receiver sensitivity around −92 dBm at MCS0 / −73 dBm at MCS7 (measured with FMCOMMS2 at 2.4 GHz).

Not in the open-source release

MIMO and 40 MHz bandwidth are not supported in the open-source release. 802.11ax and other advanced features are part of the commercial offering at openwifi.tech.

The repositories

The project is split across four repositories, because the driver and the FPGA design use different toolchains. The Repositories guide explains why, and where to look for what you need to change.

Repository Contents
openwifi Linux kernel driver, user-space tools (sdrctl, capture scripts, demo scripts), SD-card boot files, documentation
openwifi-hw FPGA design: the openwifi IP cores plus board-level Vivado projects
openwifi-hw-img Prebuilt FPGA bitstreams per board, so you can skip hours of synthesis
openofdm (dot11zynq branch, forked from jhshi/openofdm) The 802.11 OFDM receiver that openwifi's openofdm_rx IP is based on

Where to go next

New to the project? Follow these five in order. They take you from "what is this" to bringing up your own board.

  • 1. The Repositories


    The four repos, why the project is split, and where to look for anything.

    The Repositories

  • 2. Getting Started


    The hardware you need, flashing the SD card, and bringing up your first openwifi AP.

    Getting Started

  • 3. Architecture Overview


    How the FPGA, driver, and Linux stack fit together. Required reading before touching code.

    Architecture Overview

  • 4. Supported Boards


    The board matrix, per-board hardware notes, and the GPIO/LED debug map.

    Supported Boards

  • 5. Operating Modes


    AP, client, ad-hoc, monitor, and packet injection walkthroughs.

    Operating Modes

Explore by area. Each card jumps into a part of the project. The sidebar lists every page within that area.

  • Using openwifi


    Run openwifi as an AP, client, ad-hoc, or monitor, and control it at runtime with sdrctl: TX power, rates, gain, CCA, ACK behavior, and frequency.

    Operating Modes

  • Developing


    Rebuild the driver, work on the FPGA IP cores, build SD images, and port openwifi to a new board.

    Software Development Workflow

  • Research features


    Per-packet CSI, raw IQ capture, CSI radar and fuzzer, loopback testing, and the counters and statistics.

    Research Features

  • Application notes


    An index of the application notes, with figures and links into the relevant wiki sections.

    Application Notes

  • Help & support


    Troubleshooting by symptom, the glossary, the FAQ and resources, and how to contribute.

    Troubleshooting

License and attribution

openwifi is dual-licensed: AGPLv3 for the open-source release, with commercial licensing available via openwifi.tech. The project incorporates third-party components (Analog Devices HDL, Xilinx IP such as the Viterbi decoder, the openofdm receiver) with their own license terms, so verify each component's license for your intended use. openwifi was created at Ghent University / imec (Xianjun Jiao, Wei Liu, Michael Mehari, and contributors) with funding from the EU H2020 ORCA project and NLnet/NGI Zero.

The pages here rewrite and restructure the documentation that lives in the openwifi repositories. The code and the repos are always the source of truth. If the wiki and the repos disagree, trust the repos, and please fix the wiki.