blob: 783b0b6dd688692196031ea79c2f9cc0a9d97d97 [file] [log] [blame] [view]
# Fuchsia Wireless Networking
## Introduction
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 |
## Drivers
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.
## Interfaces
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
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