How does NetworkManager get external devices?
Using Debian 12.2 with KDE Plasma 5.27.5
nmcli device acquire the information about the external devices
# nmcli device console output DEVICE TYPE STATE CONNECTION eno1 ethernet connected Wired_eno1 lo loopback connected (externally) lo docker0 bridge connected (externally) docker0 virbr0 bridge connected (externally) virbr0 enp5s0 ethernet unavailable --
For completeness, the content of ` is:
cat `/etc/network/interfaces # console output source /etc/network/interfaces.d/* auto lo iface lo inet loopback ls -l /etc/NetworkManager/system-connections/ # console output -rw------- 1 root root 322 Nov 15 09:15 Forti_VPN -rw------- 1 root root 210 Nov 14 21:48 Wired_eno1
Reading Get started with NetworkManager on Linux. I learn that NetworkManager uses the information from D-Bus to initialize each NIC
The udev daemon creates an entry for each network interface card (NIC) installed in the system in the network rules file. D-Bus signals the presence of a new network device—wired or wireless—to NetworkManager. NetworkManager then listens to the traffic on the D-Bus and responds by creating a configuration for this new device. Such a configuration is, by default, stored only in RAM and is not permanent. It must be created every time the computer is booted.
But where does
udev get the info about the network devices, physical like
enp5s0 or virtual like
For the sake of learning, what are the manual steps or commands that I could run to query
udev for info about the network devices discovered by NetworkManager?
The kernel generates an udev event for the addition, change or removal of any device, including network devices. Since
udev monitors these events, it will become aware of all network devices as soon as the applicable driver detects the hardware.
To query udev for network devices, you cannot use
udevadm info -q all -n <device node>, because network devices don’t have device nodes. But you can query them by using the sysfs path:
udevadm info -q all -p /sys/class/net/<interface name>
udevadm info -q all -a -p /sys/class/net/<interface name>
The former command will tell you all the possible names for the network interface using the new Predictable Network Interface Names scheme, with the various
ID_NET_NAME_* environment variables.
The latter command will list all udev attributes for the network interface device and all its parents (if applicable), which may be useful if you need to write a custom udev rule, e.g. to assign a name for a network interface based on some unusual attribute.