All other programs on the system interact with NetworkManager over dbus, sending messages and receiving replies via the NetworkManager dbus API. This provides a flexible interface to user programs, without having to rely upon binary linking and deal with issues of binary compatibility.
dbus provides security services and has been developed with a focus on security, and NetworkManager attempts builds on that base by isolating the network-controlling parts of the architecture from user-space programs, mainly through the facilities dbus provides.
Hardware: the physical network devices in your computer, like Ethernet and 802.11 cards and the software drivers that control then
dbus: the message-bus service that allows all the components to communicate, providing security through isolation and aggressive message checking
NetworkManager: the root level daemon which interacts directly with hardware and drivers to enable/disable the network devices, and to find and negotiate network connections
HAL: the root level daemon that manages and provides information about hardware and events to other applications on the system
User Preferences daemon: A user-space daemon is required to feed NetworkManager a list of approved wireless access points, i.e. ones which the user has explicitly opted to associate with. Since this is user-specific, it must be a per-user preference and stored in user settings. The user preferences daemon (called NetworkManagerInfo) communicates with NetworkManager using dbus over the
User-Space Applications: Programs such as the Wireless Applet or web browsers that require knowledge of the network's state, but run with the privileges of the local user
The current state of Linux network drivers is not good; many cards and drivers don't support basic things like link-checking via netlink sockets and wireless scanning. While most modern hardware is supported, older Ethernet hardware without link-checking won't work with NetworkManager, because NetworkManager can't find out its link status. There are also work-arounds to deal with non-scanning wireless cards, but these cards (like Orinoco/WaveLAN cards) offer limited functionality due to driver limitations. NetworkManager uses a mix of HAL properties and direct hardware queries of cards to determine their link status and current properties, and relies solely on direct hardware control to adjust the network state.
Hotplug events and link status changes are routed through HAL, which notifies NetworkManager of the changes. HAL also stores the list of currently available network hardware, which is read by NetworkManager on startup.
The main root daemon controls the network state and publishes that information over the system message bus, provided by dbus. With a list of current hardware, NetworkManager determines the "best" network device to use in response to network changes like insertion/removal of devices, new wireless networks, docking/undocking of a laptop, etc. NetworkManager also stores various properties on each network device, like link status, HAL UDI, IP address, and visible wireless networks which are available to user applications via dbus method calls.
NetworkManager is distributed under the GNU General Public License v.2, and is Copyright (C) 2004 by Red Hat, Inc. and others