From 2b8197d0dcebdfa743073f1bc0f6c778685ff530 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 27 Jun 2023 14:05:04 +0200 Subject: [PATCH 1/2] docs: add device internal documentation Add documentation about the implementation of NMDevice. --- docs/internal/device-state-machine.drawio | 95 +++++++ docs/internal/device-state-machine.png | Bin 0 -> 51500 bytes docs/internal/device.md | 322 ++++++++++++++++++++++ 3 files changed, 417 insertions(+) create mode 100644 docs/internal/device-state-machine.drawio create mode 100644 docs/internal/device-state-machine.png create mode 100644 docs/internal/device.md diff --git a/docs/internal/device-state-machine.drawio b/docs/internal/device-state-machine.drawio new file mode 100644 index 0000000000..bc2bbdf46e --- /dev/null +++ b/docs/internal/device-state-machine.drawio @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/internal/device-state-machine.png b/docs/internal/device-state-machine.png new file mode 100644 index 0000000000000000000000000000000000000000..35eca6c4cd0702ac44be56c9c9cb10fb5621665d GIT binary patch literal 51500 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 literal 0 HcmV?d00001 diff --git a/docs/internal/device.md b/docs/internal/device.md new file mode 100644 index 0000000000..0042fdc55b --- /dev/null +++ b/docs/internal/device.md @@ -0,0 +1,322 @@ +Devices +======= + +What is a device +---------------- + +In NetworkManager, a device represents an object that allows some sort +of network configuration; it can be a regular Linux network interface +(physical as Ethernet or Wi-Fi; or virtual as a bridge or a VLAN), but +it can also be an entity that does not have a link object in the +kernel; examples of the latter kind are modems and OVS bridges/ports. + +NetworkManager automatically creates device objects at runtime based +on the device found on the system. It also creates special devices, +called *unrealized* devices that represent potential devices, +e.g. that don't exist yet but will exist when a given connection gets +activated. See the section "Unrealized devices" for more details. + +Each device has several properties; the most important are: + + - `iface`: the name of the interface. + + - `ifindex`: for devices backed by a kernel link, this is the kernel + interface index. + + - `ip_ifindex`: some devices have multiple kernel link associated. In + such case, `ifindex` is the index of the base link, while + `ip_ifindex` is the index of the link on which IP configuration + should be made. For example when activating a PPPoE connection, the + device has `ifindex` referring to the Ethernet link and + `ip_ifindex` to the PPP one. + + - `state`: the current state of the device in the device state + machine, see the next sections. + + - `l3cfg`: the L3Cfg instance takes care of configuring IP on one + ifindex. + +The device object also is exposed on D-Bus, with properties, methods +and signals, see the `interface_info_device` structure. + +Activation +---------- + +To configure a device, NetworkManager needs to activate a connection +profile on it. This happens for two reasons: + - it was requested by the user via the `ActivateConnection()` and + `AddAndActivateConnection()` API methods, which are handled by + functions `impl_manager_activate_connection()` and + `impl_manager_add_and_activate_connection()`; + - it is the result of an internal decision; in this case the + activation is handled by `nm_manager_activate_connection()`; the + reason can be: + - the connection profile is activated automatically (for example, + at startup) because it is configured to auto-connect; + - the connection profile is being activated as a dependency of + another profile; for example: + - a port profile (e.g. bridge port) always depends on the + corresponding controller profile (e.g. bridge); + - a controller profile can be configured to automatically + activate port profiles; + - during a checkpoint rollback; + - etc. + +The activation starts by first creating a `NMActiveConnection` +object. This is a abstract type used to track the state of the +activation on a specific device; it has two implementations: +`NMActRequest` for regular devices and `NMVpnConnection` for VPNs. + +Two important fields of an active connection object are: + + - the *settings-connection*: this is a pointer to the connection + being activated; it points to the connection in `NMSettings` and + always reflects the latest changes in the profile; + + - the *applied-connection*: similar to the *settings-connection*, but + this is a copy of the original *settings-connection* done at the + time the activation started. During the current activation, the + properties to configure are always read from this applied + connection because they shouldn't change even if the profile is + modified. + +Unrealized devices +------------------ + +We said that to start an activation we need a profile and a +device. What happens if the device doesn't already exist because it is +a virtual one (such as a bridge or a vlan)? + +This problem is currently solved in NetworkManager by having a special +kind of devices, *unrealized* devices. Those are 'potential' devices, +that don't exist in kernel; they are created to represent the device +for each virtual profile. Technically speaking, a device is unrealized +when the `real` flag is set to zero in the device private struct. + +When NetworkManager decides to activate a virtual profile, the +corresponding device gets realized by calling +`nm_device_create_and_realize()` and then the activation proceeds as +for physical devices. + +Object hierarchy +---------------- + +In the NetworkManager code a device is a `NMDevice` object, which has +several subclasses; each subclass represents a specific kind of device +(`NMDeviceEthernet`, `NMDeviceWifi`, `NMDeviceBridge`, etc.), and can +reimplement properties and methods of the superclass to customize the +behavior (see `struct _NMDeviceClass`). + +To show how this is used in practice, let's look at function +`nm_device_is_available()`, which indicates whether a device is ready +to be activated. The function calls the virtual method `is_available()`: + +```C +gboolean +nm_device_is_available(NMDevice *self, NMDeviceCheckDevAvailableFlags flags) +{ + ... + return NM_DEVICE_GET_CLASS(self)->is_available(self, flags); +} +``` + +`NMDevice` has a generic implementation of that method which performs +generic checks: + +```C +static gboolean +is_available(NMDevice *self, NMDeviceCheckDevAvailableFlags flags) +{ + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + + if (priv->carrier || priv->ignore_carrier) + return TRUE; + ... + + return FALSE; +} +``` + +A Ethernet device needs additional checks and so it reimplements the +method to check that the MAC address is already set: + +```C +static gboolean +is_available(NMDevice *device, NMDeviceCheckDevAvailableFlags flags) +{ + if (!NM_DEVICE_CLASS(nm_device_ethernet_parent_class) + ->is_available(device, flags)) + return FALSE; + + return !!nm_device_get_initial_hw_address(device); +} +``` + +Note how the function first chains up by calling the `NMDevice` +implementation and then it performs an additional check. This pattern +is heavily used in NetworkManager. + +Device states +------------- + +Each device behaves according to a state machine that looks like this: + +![Device state machine](device-state-machine.png "Device state machine") + +While the implementation of the state machine is done in different +functions in `nm-device.c`, the core part is in `_set_state_full()`. + +The states are: + + * UNMANAGED: this is the initial state and means that the device is + not managed by NetworkManager. The unmanaged state is tracked via a + bitmap of flags, and the device stays in this state while at least + one flag is set. See the section "Unmanaged flags" below for more + details. Once all unmanaged flags are cleared, the device is ready + to become UNAVAILABLE. The state transition is done in function + `_set_unmanaged_flags()`, which changes the states to UNMANAGED or + UNAVAILABLE depending on the value of the flags. Note that even if + it's not displayed in the diagram, the UNMANAGED state can be + reached by virtually every other state when a unmanaged flag + becomes set. + + * UNAVAILABLE: the device is managed by NetworkManager, but is not + available for use. Reasons may include the wireless switched off, + missing firmware, no ethernet carrier, missing supplicant or modem + manager, etc. When a device becomes available, it can transition to + DISCONNECTED; this decision is taken in various places by + scheduling a check via `nm_device_queue_recheck_available()`. + + * DISCONNECTED: the device can be activated, but is currently + idle and not connected to a network. When entering this state from + a state that belongs to the activation sequence or from + FAILED/DEACTIVATING, a cleanup of previous configuration is + done. If there is an activation queued, it's started; otherwise, + `NMPolicy` reacts to the state change and calls + `nm_policy_device_recheck_auto_activate_schedule()` to check if + there a connection that can be auto-activated on the device. + + * PREPARE: this is the first state of an activation; in this + state some initial operation are performed, such as changing the + MAC address, setting physical link properties, and anything else + required to connect to the requested network. + + This state is entered via + `nm_device_activate_schedule_stage1_device_prepare()`. When + finished, `nm_device_activate_schedule_stage2_device_config()` is + used to transition to the CONFIG state. Those functions are + re-entrant, in the sense that when a device is in a given state and + needs that an operation completes (or a condition becomes true), it + can wait and then invoke the same function again; in that way it + re-enters the same state, where all the conditions are evaluated + again and if possible the device will transition to the next state. + + * CONFIG: the device is connecting to the requested network. + This may include operations like associating with the Wi-Fi AP, + dialing the modem, connecting to the remote Bluetooth device, etc. + + * NEED_AUTH: the device requires more information to continue + connecting to the requested network. This includes secrets like + WiFi passphrases, login passwords, PIN codes, etc. + + * IP_CONFIG: this state is entered via + `nm_device_activate_schedule_stage3_ip_config()`, and is where IP + addresses and routes are assigned to the device. Function + `_dev_ip_state_check()` checks that the configuration is terminated + according the connection configuration; if so, it moves the device + to state IP_CHECK. + + * IP_CHECK: in this state, NetworkManager waits that the gateway + can be pinged successfully if the property + `connection.gateway-ping-timeout` is set. By default this step is a + no op since the property is unset. After the optional ping, the + dispatcher `pre-up` event is emitted, and the device goes to + SECONDARIES. + + * SECONDARIES: connections have a `connection.secondaries` property + that specifies a list of UUID of connections of type VPN that can + be activated automatically when the connection goes up. If there + are any secondaries, they are activated in this stage; note that + since this operation involves other devices, it is done in + `NMPolicy`, upon the emission of the state change signal handled in + `nm-policy.c:device_state_changed()`. After any secondaries are + activated, the devices transitions to state ACTIVATED. + + * ACTIVATED: the device has a network connection. Upon entering this + state the device emits the `up` dispatcher event. The device + remains is this state until the connection is deactivated or until + it fails. + + * DEACTIVATING: a disconnection from the current network + connection was requested, and the device is cleaning up resources + used for that connection. In this state the `pre-down` dispatcher + event is emitted. When finished, the devices goes again to + DISCONNECTED and the `down` dispatch event is fired. + + * FAILED: the device failed to connect to the requested network + and is cleaning up the connection request. This state can be + reached from any state belonging to the activation. When the + cleanup is done, the device goes to DISCONNECTED. If the device was + previously activated, the `down` dispatcher event is emitted. + +Unmanaged devices +----------------- + +Each device has a mask of flags representing reasons why the device is +unmanaged; when at least of of those flags is set, the device goes to +state UNMANAGED. When all flags are cleared, the device moves to state +UNAVAILABLE. The unmanaged flags are currently: + + - SLEEPING: the system is suspended, or networking is disabled + + - QUITTING: NetworkManager is shutting down. + + - PLATFORM_INIT: NetworkManager is waiting for udev to announce + the device. Note that NetworkManager can't touch the device until + then because udev might perform operations on it (such as renaming + or changing the MAC). Unrealized devices (see later) have this + flag set. + + - USER_EXPLICIT: when unmanaged by explicit user decision + (e.g. via a D-Bus command). + + - USER_SETTINGS: when unmanaged by user decision via the + settings plugin (for example `keyfile.unmanaged-devices` or + ifcfg-rh's `NM_CONTROLLED=no`). Although this is + user-configuration it cannot be overruled and is + authoritative. That is because users may depend on dropping a + ifcfg-rh file to ensure the device is unmanaged. + + - USER_CONF: when unmanaged by user decision via the + NetworkManager.conf ("unmanaged" in the [device] + section). Contrary to USER_SETTINGS, this can be overwritten via + D-Bus. + + - BY_DEFAULT: this flag is no longer used. + + - USER_UDEV: unmanaged via a udev rule. + + - EXTERNAL_DOWN: unmanaged because the interface was not created by + NetworkManager and is currently down. + +Note that the unmanaged flags are tracked via two variables +`unmanaged_mask` and `unmanaged_flags`; in this way each flag is in +practice a tri-state variable with possible values TRUE (unmanaged), +FALSE (managed) and UNSET. + +External devices and sys-iface-state +------------------------------------ + +Even if a device is managed, that doesn't mean that NetworkManager is +actively configuring it. When a device is created externally (for +example via `ip link`) and has an IP configuration, NetworkManager +creates a in-memory connection representing the configuration +parameters on the interface such as IP addresses, routes, DNS, etc.; +the connection appears as active but NetworkManager doesn't actually +touch the interface. The external status is tracked in the +`sys-iface-state` member, which can have the following values: + + - EXTERNAL: the interface is not touched by NM. + - ASSUME: this value is deprecated; it used to mean that NM should manage the device without fully reconfiguring it. Now, the interface is either managed on external. + - MANAGED: the interface is fully managed. + - REMOVED: the link was removed externally. From 7aeadee8b17c17781bf785efcb5449f72570325f Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 27 Jun 2023 14:05:42 +0200 Subject: [PATCH 2/2] docs: add daemon internal documentation Add documentation about the implementation of the daemon. --- docs/internal/daemon.drawio | 253 ++++++++++++++++++++++++++++++++++++ docs/internal/daemon.md | 169 ++++++++++++++++++++++++ docs/internal/daemon.png | Bin 0 -> 134343 bytes 3 files changed, 422 insertions(+) create mode 100644 docs/internal/daemon.drawio create mode 100644 docs/internal/daemon.md create mode 100644 docs/internal/daemon.png diff --git a/docs/internal/daemon.drawio b/docs/internal/daemon.drawio new file mode 100644 index 0000000000..1acb77dafa --- /dev/null +++ b/docs/internal/daemon.drawio @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/internal/daemon.md b/docs/internal/daemon.md new file mode 100644 index 0000000000..b563dcddc6 --- /dev/null +++ b/docs/internal/daemon.md @@ -0,0 +1,169 @@ +NetworkManager daemon +===================== + +The following diagram describes the main components of the +NetworkManager daemon. Note that each component is in most cases a +GObject and the names always start with the "NM" prefix, which has +been omitted for clarity. + +![](daemon.png "") + +## Manager + +The main responsibilities of the manager are: + +- initialize all known device factories. A device factory contains the + logic detect new devices of a certain type and create the + corresponding object; + +- maintain a list of devices created by the factories; + +- maintain a list of active connections; + +- expose on D-Bus properties, methods and signal on the + `/org/freedesktop/NetworkManager` + [object](../../introspection/org.freedesktop.NetworkManager.xml). + +## Policy + +This object implements some policy decisions that involve multiple +connection profiles, such as: + + - it determines what is the best (with lowest metric) active + connection with default route for IPv4 and IPv6; + + - it updates the DNS configuration in the DNS manager, also according + to what connection has the best default route; + + - it handles the activation of secondary connections when a + connection goes up (see property `connection.secondaries` in + `man nm-settings`); + + - it collects IPv6 prefix delegations from active connections, to + distribute them on connections using IPv6 shared mode; + +## Settings + +This object handles connection profiles; each profile is represented +as a *SettingsConnection* object and is persisted to disk using one of +the existing *SettingsPlugin*s such as keyfile, ifcfg-rh or +ifupdown. + +It also controls *SecretAgent*s; an agent is an external service that +registers to NetworkManager as capable of handling requests for new +secrets. For example, when a Wi-Fi connection is activated and the +password is missing or wrong, NetworkManager asks all registered +agents for the missing secrets and then continues with +activation. Examples of tools that register as agents are: nmcli, +nmtui, GNOME shell, the GTK nm-applet and the KDE network applet. + +## Devices and device factories + +As mentioned before, NetworkManager instantiates device factories to +discover and create new devices. Those factories are internal to the +daemon or provided by a device plugin; a plugin is a dynamic library +(shared object) that is loaded at runtime. NetworkManager uses plugins +for optional functionality that depend on external software. In this +way, it is possible to install a minimal version of NetworkManager +with a limited set of dependencies. As there is no stable API/ABI for +those plugins, they must be built together with the daemonq and +maintained as part of NetworkManager. + +Currently the following device types are provided by plugins: + + - Wi-Fi (depends on wpa_supplicant) + - OVS (depends on openswitch) + - PPP (depends on pppd) + - Bluetooth (depends on bluez) + - team (depends on teamd) + +When a device is activated, it relies on other objects: + + - *L3cfg*: controls the IP configuration (address, routes, etc) on a + given ifindex, and also does IPv4 ACD (address conflict detection, + also know as DAD - duplicate address detection); + - *DhcpClient*: performs DHCPv4 and DHCPv6 on the interface; the + object has different implementations; + - *NDisc*: implements IPv6 SLAAC (stateless address + autoconfiguration, RFC 4861 and 4862); it supports acting both as + a host or a router for shared IPv6 mode; + - *LldpListener*: when the profile enables + [LLDP](https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol) + via the `connection.lldp` property, this object sets up a socket + to listen for neighbors; + - *FirewalldManager*: talks with [firewalld](https://firewalld.org/) + to set the interface in the zone specified by the + `connection.zone` property; + - *BondManager*: used to configure bond devices in a special mode + (balance-slb) that requires the creation of nftables rules; + +For more information about the implementation of devices, see [this +document](./device.md). + +## Platform + +*Platform* communicates with kernel to query and update the +configuration of network interfaces; it uses netlink and implements +the crafting and parsing of netlink message by itself without relying +on external libraries such as libnl. + +Platform has two subclasses, *PlatformLinux* and a *PlatformFake*. The +former is the one that contain the actual implementation while the +latter is only used for unit testing. + +Note how the platform object has an incoming dotted arrow in the +diagram, to represent that the object is used by several other +objects. + +As mentioned, the purposes of platform are: + + - perform operations such as adding or removing links, addresses, + routes, routing rules and other kernel entities + + - allow querying the current state of the kernel configuration. To do + so, platform listens to kernel notifications and parses them to + build a cache of `NMPObject`s that is always up to date. + +NMPObject and its subtypes are also used through the core to represent +information about addresses, routes, etc. Thus the cache of NMPlatform +contains the currently configured objects in the netlink API, while +other NMPObject instances are used for other tracking purposes. + +For these purposes platform uses two sockets, one with protocol +NETLINK_ROUTE for regular operations about links, addresses, routes, +etc. and a NETLINK_GENERIC socket to configure Wireguard and MPTCP. + +## Other objects + +The diagram shows other objects on the right side: + + - *DnsManager*: merges all the DNS data received by multiple + interfaces and updates the system configuration. Besides directly + writing `/etc/resolv.conf`, it supports updating + `systemd-resolved` and `dnsmasq` via plugins. + + - *HostnameManager*: implements reading and updating the system + hostname; by default it tries to do that by talking to + [systemd-hostnamed](https://www.freedesktop.org/wiki/Software/systemd/hostnamed/) + via D-Bus; in case it's not available, the hostname manager falls + back to reading and writing `/etc/hostname` directly. + + - *RfkillManager*: enumerates RFKill devices and controls their status. See also + the [related page](https://networkmanager.dev/docs/rfkill/) on the website. + + - *AuthManager*: is used to authenticate the API requests received by + the daemon. The authentication is done via + [Polkit](https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html) + + - *DbusManager*: creates a connection to the system D-Bus instance + and allows exporting objects + + - *SleepMonitor*: gets notifications for sleep and wake events by + registering to the available subsystem provided by the distro such + as systemd-logind, upower or ConsoleKit. + + - *SessionMonitor*: tracks which users have an active session by + using systemd-logind, elogind or ConsoleKit. + + - *Dispatcher*: takes care of spawning dispatcher scripts by talking + to the `nm-dispatcher` service via D-Bus. diff --git a/docs/internal/daemon.png b/docs/internal/daemon.png new file mode 100644 index 0000000000000000000000000000000000000000..454c2ebc6e15e83d08926d883c7e1b8cb750c4fa GIT binary patch literal 134343 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 z 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