This article compares systemd networkd vs NetworkManager vs ConnMan, three Linux network managers widely used in embedded environments. We’ll look at their architecture, performance and suitability for different use cases, to help you choose the best option for your embedded Linux project.
1. ConnMan
Architecture of ConnMann
ConnMan is a lightweight, modular (plugin-based) Linux network manager designed primarily for embedded Linux systems. It offers a minimal resource footprint with native DHCP and NTP support.
Using ConnMan Linux network manager
- Command line: connmanctl
ConnMan can be used with the connmanctl command-line interface to configure the system network. If no argument is given, connmanctl starts an interactive shell. - D-Bus API
ConnMan’s D-Bus API is an interface for managing network connections programmatically. It allows applications to interact with the ConnMan daemon to configure, monitor, and control network services (Wi-Fi, Ethernet, Bluetooth…). - Configuration files
ConnMan reads configuration files (.config) from /var/lib/connman/ directory by default. These configuration files are simple text files, and there is usually one file for each network supplied.
Adding ConnMan in an embedded Linux distribution: example with Yocto
- Add ConnMan packages
Yocto provides a straightforward way to include ConnMan in an embedded Linux image by only including the ConnMan packages in the image recipe: connman (for ConnMan daemon) and connman-client (for connmanctl CLI tool). - Enable the ConnMan service
ConnMan service can be started at boot by setting SYSTEMD_AUTO_ENABLE of connman package to “enable”.
2. NetworkManager
Architecture of NetworkManager
NetworkManager is a powerful and flexible network management service designed to simplify network configuration on Linux.
While it is commonly used on desktop systems, it is also effective for embedded devices that require advanced networking features.
However, its higher resource usage might not be ideal for extremely constrained environments.
Using NetworkManager
- Command line: nmcli
NetworkManager provides nmcli command-line interface. It can be used by both users and scripts to control the NetworkManager. - D-Bus API
The D-Bus API provides a comprehensive mechanism through which software applications can programmatically communicate with and manipulate NetworkManager, enabling seamless integration and control over its networking functionalities. - Configuration files
The primary configuration file for NetworkManager is located at /etc/NetworkManager/NetworkManager.conf, serving as a central point for customizing how NetworkManager operates. This file is structured with sections containing key-value pairs, allowing users to adjust different facets of NetworkManager’s functionality. The default location of the configuration file be altered by specifying certain NetworkManager arguments.
Adding NetworkManager in a Linux system built with Yocto
- Add NetworkManager packages
Include the ‘networkmanager’ package. This ensures that NetworkManger daemon and nmcli tools are part of the final image. - Enable the NetworkManager service
Ensure NetworkManager starts at boot by setting SYSTEMD_AUTO_ENABLE of networkmanager to “enable”. - Optional: customize Default Configuration
The default configuration can be set at buidl time in /etc/NetworkManager/NetworkManager.conf file.
3. Systemd Networkd
Architecture of systemd-networkd
Systemd networkd is a simple and lightweight tool for managing networks built into the systemd. It’s made for servers, embedded gadgets, and headless devices, offering a basic but strong way to handle networking.
Using Systemd Networkd
- Command line: networkctl
It is a handy way to check and manage network settings with systemd-networkd. It is used to check network interfaces status and control them directly. - Configuration files
Network configuration with systemd-networkd is defined through configuration files (.network) stored in /etc/systemd/network/. They are text files with a simple format (INI key=value) to specify things like static IPs or DHCP, offering a reliable method to lock in network behavior without needing to run commands every time.
Adding systemd-networkd in a Yocto Linux distro
systemd-networkd is included in systemd, so it is already installed as a systemd configuration.
- Include custom configuration files
Add a custom recipe to provide default network configurations in the Yocto image, under /etc/systemd/network/.
So, which Linux network manager should you use: systemd networkd vs NetworkManager vs ConnMan?
Each network manager (systemd networkd vs networkmanager vs connman) offers unique advantages and is suited for different use cases in embedded Linux systems.
- ConnMan is a lightweight and modular solution, ideal for IoT devices and consumer electronics where low resource usage and Wi-Fi support are priorities.
- NetworkManager is feature-rich, making it a strong choice for industrial and automotive embedded systems that require Wi-Fi roaming, VPNs, and enterprise networking features. However, it has a higher memory footprint than the other options.
- systemd-networkd is the most lightweight and tightly integrated solution, perfect for headless embedded systems, servers, and devices with static networking needs.




