open-sdr / openwifi

open-source IEEE 802.11 WiFi baseband FPGA (chip) design: driver, software
GNU Affero General Public License v3.0
3.89k stars 658 forks source link
802-11 ad9361 analog-devices csma dma fpga hardware hls ieee80211 linux mac80211 ofdm openwifi sdr software-defined-radio verilog wifi xilinx xilinx-fpga zynq

openwifi

openwifi: Linux mac80211 compatible full-stack IEEE802.11/Wi-Fi design based on SDR (Software Defined Radio).

[Download img and Quick start] [Tips for Windows users]

This repository includes Linux driver and software. openwifi-hw repository has the FPGA design. It is YOUR RESPONSIBILITY to follow your LOCAL SPECTRUM REGULATION or use CABLE to avoid potential interference over the air.

[Project document] [Application notes] [Videos] [Publications and How to Cite] [maillist]

Openwifi code has dual licenses. AGPLv3 is the opensource license. For non-opensource and advanced feature license, please contact Filip.Louagie@UGent.be. Openwifi project also leverages some 3rd party modules. It is user's duty to check and follow licenses of those modules according to the purpose/usage. You can find an example explanation from Analog Devices for this compound license conditions. [How to contribute].

Features:

Performance (best case: aggregation/AMPDU on):

Supported SDR platforms:

board_name Description Vivado license
zc706_fmcs2 Xilinx ZC706 board + FMCOMMS2/3/4 Need
zed_fmcs2 Xilinx zed board + FMCOMMS2/3/4 NO need
adrv9364z7020 ADRV9364-Z7020 + ADRV1CRR-BOB NO need
adrv9361z7035 ADRV9361-Z7035 + ADRV1CRR-BOB/FMC Need
zc702_fmcs2 Xilinx ZC702 board + FMCOMMS2/3/4 NO need
antsdr MicroPhase enhanced ADALM-PLUTO Notes NO need
e310v2 MicroPhase new antsdr Notes NO need
antsdr_e200 MicroPhase enhanced ADALM-PLUTO (smaller/cheaper) Notes NO need
sdrpi HexSDR SDR in Raspberry Pi size Notes NO need
zcu102_fmcs2 Xilinx ZCU102 board + FMCOMMS2/3/4 Need
neptunesdr Low cost Zynq 7020 + AD9361 board NO need

[Download img and Quick start] [Basic operations] [Update FPGA] [Update Driver] [Update sdrctl] [Easy Access and etc]

[Build openwifi Linux img from scratch] [Special note for 11b] [Porting guide] [Project document] [Application notes]

Download img and Quick start

Basic operations

The board actually is an Linux/Ubuntu computer which is running hostapd to offer Wi-Fi AP functionality over the Wi-Fi Network Interface (NIC). The NIC is implemented by openwifi-hw FPGA design. We use the term "On board" to indicate that the commands should be executed after ssh login to the board. "On PC" means the commands should run on PC.

Update FPGA

Since the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to always copy the latest files in the user_space directory on to the board. Then update the FPGA&Driver according to the Quick start of this app note. Following instructions are doing the same thing with extra info for environment setup.

(Check Driver and FPGA dynamic reloading app note for better understanding of updating FPGA and driver files without rebooting/power-cycle)

Update Driver

Since the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to always copy the latest files in the user_space directory on to the board. Then update the FPGA&Driver according to the Quick start of this app note. Following instructions are doing the same thing with extra info for environment setup.

(Check Driver and FPGA dynamic reloading app note for better understanding of updating FPGA and driver files without rebooting/power-cycle)

Update sdrctl

Build openwifi Linux img from scratch

Special note for 11b

Openwifi only applies OFDM as its modulation scheme and as a result, it is not backward compatible with 802.11b clients or modes of operation. This is usually the case during beacon transmission, connection establishment, and robust communication.

As a solution to this problem, openwifi can be fully controlled only if communicating with APs/clients instantiated using hostapd/wpa_supplicant userspace programs respectively.

For hostapd program, 802.11b rates can be suppressed using configuration commands (i.e. supported_rates, basic_rates) and an example configuration file is provided (i.e. hostapd-openwifi.conf). One small caveat to this one comes from fullMAC Wi-Fi cards as they must implement the NL80211_TXRATE_LEGACY NetLink handler at the device driver level.

On the other hand, the wpa_supplicant program on the client side (commercial Wi-Fi dongle/board) cannot suppress 802.11b rates out of the box in 2.4GHz band, so there will be an issue when connecting openwifi (OFDM only). A patched wpa_supplicant should be used at the client side.

sudo apt-get install libssl1.0-dev
cd openwifi/user_space; ./build_wpa_supplicant_wo11b.sh

Porting guide

This section explains the porting work by showing the differences between openwifi and Analog Devices reference design. openwifi is based on 2021_r1 of HDL Reference Designs.

License

This project is available as open source under the terms of the AGPL 3.0 Or later. However, some elements are being licensed under GPL 2-0 or later and BSD 3 license . For accurate information, please check individual files.