book/protocols/synit/network
Network core status and configuration
The definitions in this protocol are used by the Synit daemons responsible for detecting and responding to changes in the configuration of network devices.
Implementation. As of October 2022, this protocol is mostly implemented in - the interface monitor, - the wifi daemon, and - the scripting around network state changes. - the scripting around the wifi subsystem. - the scripting around mobile data.
Network interface presence and state
The interface
monitor daemon uses the Linux netlink protocol to monitor changes in
interface presence and state. In response to netlink messages, it
maintains an Interface assertion for each network interface
in the system.
Interface = <interface
@name string
@index int
@type InterfaceType
@administrativeState AdministrativeState
@operationalState OperationalState
@carrier CarrierState
@linkAddr string> .
The InterfaceType is synthesised by the interface
monitor daemon based on somewhat ad-hoc heuristics.
InterfaceType =
/ # `lo` and friends
=loopback
/ # `eth0`, bridges, anything that isn't loopback and isn't wireless
=normal
/ # 'wlan0' and friends
=wireless
.
The AdministrativeState of an interface describes the
state that the operator of the machine wishes the interface to be in
(according to the kernel).
AdministrativeState = =unknown / =down / =up .
The OperationalState and CarrierState taken
together, by contrast, describe the actual state of the
interface.
OperationalState =
/ =unknown
/ =down
/ @lowerLayerDown =lower-layer-down
/ =testing
/ =dormant
/ =up
.
CarrierState =
/ @noCarrier =no-carrier
/ =carrier
.
Route presence and state
The interface
monitor daemon also listens for netlink messages describing network
route presence and state changes, maintaining a Route
assertion for each route present.
Route = <route
@addressFamily AddressFamily
@destination RouteDestination
@priority int
@typeOfService int
@interfaceName RouteInterface
@gateway Gateway> .
AddressFamily = =ipv4 / =ipv6 / @other int .
RouteDestination = =default / @prefix <prefix @net string @bits int> .
RouteInterface = @name string / @none #f .
Gateway = @addr string / @none #f .
Default route presence
The network.pr
scripts respond to presence of Route records with a
default destination field by asserting a
DefaultRoute record. Applications may use the presence or
absence of a DefaultRoute record to decide whether or not
internet access is currently present.
DefaultRoute = <default-route @addressFamily AddressFamily> .
Wi-fi associations
The wifi.pr
script starts an instance of the wifi
daemon and an instance of wpa_supplicant
for each Interface of type wireless. The wifi
daemon speaks with the wpa_supplicant instance to do
network scanning as well as managing network attachments. It publishes a
WifiAssociation for each active connection to a wifi access
point.
WifiAssociation = <wifi-association @interfaceName string @ssid string @state WifiAssociationState> .
WifiAssociationState = @inProgress =in-progress / =ready .
Hotspots
In future, the software will use HotspotState assertions
to publish the presence and state of wifi hotspots hosted by the
device.
HotspotState = <hotspot-state @interfaceName string @ssid string @stationCount int> .
AP scanning
In future, the software will assert AvailableAccessPoint
with information it learns from network scanning.
AvailableAccessPoint = <available-ap @interfaceName string @ssid string> .
Network-related user settings
A number of user setting assertions control the network.
Mobile Data
Asserting MobileDataApn and
MobileDataEnabled causes the modem.pr
script to enable a cellular data link.
MobileDataApn = <mobile-data-apn @apn string> .
MobileDataEnabled = <mobile-data-enabled> .
Wifi network preferences
WifiAuthentication =
/ # No authentication necessary: open network
=open
/ # Pre-shared key (WPA2-PSK etc)
<psk @password string>
/ # Other, not-yet-implemented
@other any
.
Each wifi
daemon responds to SelectedWifiNetwork assertions for
its interface by trying to connect to the named SSID using the provided
credentials. The daemon asserts a WifiAssociation in
response.
SelectedWifiNetwork = <selected-wifi-network
@interfaceName string
@ssid string
@authentication WifiAuthentication> .
In future, user Hotspot assertions will cause setup of a
wifi hotspot, hosted by the device.
Hotspot = <hotspot
@interfaceName string
@ssid string
@authentication WifiAuthentication> .
In future, SavedWifiNetwork assertions will hold records
of previously-configured wifi connection details.
SavedWifiNetwork = <saved-wifi-network
@ssid string
@authentication WifiAuthentication
@priority double> .
Copyright © 2021–2023 Tony Garnock-Jones, CC BY 4.0
