Fuchsia Wireless Networking


Fuchsia's wireless networking stack intends to provide a compliant non-AP station implementation of IEEE Std 802.11. It supports hardware with both “full MAC” and “soft MAC” firmware, in which the MLME layer of the 802.11 spec is implemented in the firmware and the host OS, respectively.

High-level architecture

                          +------------------+        +------------------+
 Fuchsia service          | Fuchsia netstack |        | Fuchsia Wireless |
                          |                  |        | Network Service  |
                          +------------------+        +------------------+
                              ^                        ^                ^
                              |                        |                |
 fdio/FIDL              ------|------------------------|----------------|-------------------
                              |                        |                |
                              v                        |                v
                          +------------------+         |               +--------------+
                          | Fuchsia ethernet |<--------|-------------->| Fuchsia WLAN |
                          | driver           |         |               | MLME driver  |
 devmgr                   +------------------+         |               +--------------+
                                         ^             |                    ^
                                         |             |                    |
                                         v             v                    v
                                    +-------------------+              +-------------------+
                                    | Driver            |              | Driver            |
                                    | (Full MAC device) |              | (Soft MAC device) |
                                    +-------------------+              +-------------------+
                                                      ^                    ^
                                                       \                  /
 hardware bus                       --------------------\----------------/------------------
 (USB, PCI, etc)                                         \              /
                                                          v            v
                                                     | Wireless networking |
 hardware                                            | hardware            |


A Full MAC driver relies on the firmware in the wireless hardware to implement the majority of the IEEE 802.11 MLME functions.

A Soft MAC driver implements the basic building blocks of communication with the wireless hardware in order to allow the Fuchsia MLME driver to execute the IEEE 802.11 MLME functions.

The Fuchsia MLME driver is a hardware-independent layer that provides state machines for synchronization, authentication, association, and other wireless networking state. It communicates with a Soft MAC driver to manage the hardware.

WLAN service

The Fuchsia Wireless Network Service implements the IEEE 802.11 SME functions and holds state about all the wireless networks that are available in the current environment. It is the interface to the hardware (via the drivers) used by components like System UI.

Relation to the Ethernet stack

Either a Full MAC driver or the Fuchsia WLAN MLME driver will expose an Ethernet device in devmgr. This device will behave as any other Ethernet device, and will provide data packets to the rest of the system. TBD: whether to use Ethernet II frames always, or support 802.2 SNAP frames.


The Fuchsia Wireless Network Service will communicate with each hardware device using a channel to the driver, obtained via ioctl. (Eventually this will be replaced by FIDL.) Messages exchanged over this channel will encode the request/response for each action, generally following the IEEE 802.11 MLME SAP definitions.

For Soft MAC devices, the hardware driver and the generic MLME driver will communicate in-process using a DDK “protocol” for wlan devices. Primitives exposed through this interface include send, receive, and setting the radio channel.