https://github.com/suhteevah/wifi-nostd
no_std Intel WiFi driver (AX201/AX200) with WPA2 in Rust
https://github.com/suhteevah/wifi-nostd
bare-metal driver embedded networking no-std operating-system osdev rust wifi wpa2
Last synced: 14 days ago
JSON representation
no_std Intel WiFi driver (AX201/AX200) with WPA2 in Rust
- Host: GitHub
- URL: https://github.com/suhteevah/wifi-nostd
- Owner: suhteevah
- License: apache-2.0
- Created: 2026-04-03T13:26:57.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2026-06-08T09:27:04.000Z (20 days ago)
- Last Synced: 2026-06-08T11:19:38.177Z (20 days ago)
- Topics: bare-metal, driver, embedded, networking, no-std, operating-system, osdev, rust, wifi, wpa2
- Language: Rust
- Size: 58.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# wifi-nostd
`no_std` Intel WiFi driver for bare-metal Rust — an iwlwifi equivalent.
Supports Intel AX201, AX200, AX210, and AC 9260 families. These are PCIe devices
that share the same command/response transport (TFD/RXQ rings) and require firmware
microcode loaded into device SRAM before any 802.11 operations.
## Features
- PCI device detection (vendor 0x8086, device ID matching)
- Firmware `.ucode` parsing and BSM upload
- Active/passive WiFi scanning with signal strength
- WPA2-PSK: PBKDF2-SHA1 key derivation, 4-way EAPOL handshake
- AES-128-CCMP encryption/decryption (pure Rust, no_std)
- IEEE 802.11 frame parsing and construction (beacon, auth, assoc, QoS data)
- TFD/RXQ DMA descriptor ring management
## Architecture
```text
WifiController (driver.rs) -- high-level API: scan, connect, disconnect
|
WPA2 handshake (wpa.rs) -- 4-way handshake, PBKDF2-SHA1, AES-CCMP
|
Scanning (scan.rs) -- active/passive scan, SSID matching
|
Commands (commands.rs) -- NVM access, PHY config, scan cmd, assoc
|
TX/RX queues (tx_rx.rs) -- TFD ring (transmit), RXQ (receive)
|
Firmware loader (firmware.rs) -- microcode upload to device SRAM
|
PCI detection (pci.rs) -- vendor 0x8086, device ID matching
|
802.11 frames (ieee80211.rs) -- beacon, probe, auth, assoc, data, QoS
```
## Usage
```rust,ignore
use wifi_nostd::driver::WifiController;
let mut wifi = unsafe { WifiController::init(bar0_base, irq_line, phys_mem_offset)? };
wifi.load_firmware(fw_data)?;
let networks = wifi.scan_networks()?;
for net in &networks {
log::info!("SSID={} signal={}dBm", net.ssid, net.signal_dbm);
}
wifi.connect("MyNetwork", "hunter2")?;
```
## Firmware Requirement
Intel WiFi hardware is inert without firmware. Place the appropriate `.ucode` file
on your storage medium. See `WifiVariant::firmware_name()` for expected filenames.
Firmware images are available from the
[linux-firmware](https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git) repository.
## License
Licensed under either of
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))
- MIT License ([LICENSE-MIT](LICENSE-MIT))
at your option.