Description
When NetworkManager uses IWD as the WiFi backend, the WiFi network detail panel shows an incorrect speed of 65 Mbps instead of the actual negotiated link rate.
Root Cause
In core/internal/server/network/networkmanager_wifi.go, the speed is read from AccessPoint.MaxBitrate:
maxBitrate, _ := ap.GetPropertyMaxBitrate()
Rate: maxBitrate / 1000,
With IWD backend, org.freedesktop.NetworkManager.AccessPoint.MaxBitrate returns the AP's base rate (65 Mbps), not the actual link speed.
However, org.freedesktop.NetworkManager.Device.Wireless.Bitrate correctly reports the real negotiated rate.
Evidence
# Wrong value (used by DMS)
$ busctl get-property org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager/AccessPoint/1 \
org.freedesktop.NetworkManager.AccessPoint MaxBitrate
u 65000 # 65 Mbps ❌
# Correct value (not used by DMS)
$ busctl get-property org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager/Devices/3 \
org.freedesktop.NetworkManager.Device.Wireless Bitrate
u 1152800 # 1152 Mbps ✅
# IWD also reports correct values
$ iwctl station wlan0 show
TxBitrate: 864600 Kbit/s
RxBitrate: 576400 Kbit/s
Suggested Fix
For the currently connected network, use Device.Wireless.Bitrate instead of (or in addition to) AccessPoint.MaxBitrate.
Environment
- OS: Arch Linux (kernel 6.19.11-zen1-1-zen)
- WiFi card: Qualcomm WCN7850 (FastConnect 7800), driver: ath12k
- Network stack: NetworkManager + IWD backend
- DMS version: latest from
dms-shell-niri-git
Description
When NetworkManager uses IWD as the WiFi backend, the WiFi network detail panel shows an incorrect speed of 65 Mbps instead of the actual negotiated link rate.
Root Cause
In
core/internal/server/network/networkmanager_wifi.go, the speed is read fromAccessPoint.MaxBitrate:With IWD backend,
org.freedesktop.NetworkManager.AccessPoint.MaxBitratereturns the AP's base rate (65 Mbps), not the actual link speed.However,
org.freedesktop.NetworkManager.Device.Wireless.Bitratecorrectly reports the real negotiated rate.Evidence
Suggested Fix
For the currently connected network, use
Device.Wireless.Bitrateinstead of (or in addition to)AccessPoint.MaxBitrate.Environment
dms-shell-niri-git