-
Notifications
You must be signed in to change notification settings - Fork 11
Design
The architecture has 3 logical component layers: the controller (client), the controlee (server), and the API linking them. The API type system is fixed as protocol buffers, which work well to enable cross-platform interoperability between controller and controlee, however, do not offer much functionality beyond data interchange. Hence the use of NetRemote API protobuf types are strictly limited to marshaling data between the client and server and adapted to a shared, neutral type system at the earliest possible opportunity within the API implementation. The business logic for the APIs is implemented in a core library using the neurtal type system that the API layer consumes and adapts to its needs.
Two core libraries, wifi-core and wifi-apmanager define neutral types, interfaces, and common code to implement the business logic required by the Wi-Fi portions of the API layer. Publicly exposed types in this library are prefixed with Ieee80211. The wifi-core-adapter-dot11 library adapts between the neutral Ieee80211* types and the API Dot11* types.
Three (3) primary interfaces are exposed:
-
IAccessPoint: describes an access point and its properties. This provides an immutable view of an access point. -
IAccessPointController: enables control and interaction with an access point. This allows mutating an access point. -
IAccessPointDiscoveryAgentOperations: enables monitoringIAccessPointinstance presence.
These are designed to be implemented on a per-OS basis and are combined in the AccessPointManager class, which provides a view of IAccessPoint instances known to the system.
The wifi-core library functionality is primarily implemented on Linux with the WPA hostapd daemon via its external control interface using a UNIX domain socket. The wpa-controller library enables interacting with the hostapd daemon via the IHostapd interface and is consumed by the Linux implementations IAccessPoint (AccessPointLinux), IAccessPointController (AccessPointControllerLinux), and IAccessPointDiscoveryOperations (AccessPointDiscoveryOperationsNetlink) and adapts between the Ieee80211* neutral types and WPA/hostapd specific types using a thin adaption layer.
