Index | Thread | Search

From:
Greg Steuck <gnezdo@openbsd.org>
Subject:
qwx(4): RSSI oscillation fix
To:
tech@openbsd.org, stsp@openbsd.org
Date:
Wed, 28 Jan 2026 23:11:16 -0800

Download raw body.

Thread
Hi,

qwx(4) only extracts RSSI from management frames (qwx_mgmt_rx_event), 
not data frames (qwx_dp_rx_h_rate is TODO). This causes ifconfig to 
oscillate between 0dBm (after data frames) and actual values (after 
beacons) on a certain school network.

ieee80211_inputm() unconditionally updates ni_rssi from rxi_rssi at 
line 427, overwriting good beacon RSSI with 0 from data frames.

Fix: skip update when rxi_rssi == 0 (invalid for WiFi, precedent exists 
at line 2023).

diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index be6bf54f576..1e108c440e8 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -424,7 +424,13 @@ ieee80211_inputm(struct ifnet *ifp, struct mbuf *m, struct ieee80211_node *ni,
 		*orxseq = nrxseq;
 	}
 	if (ic->ic_state > IEEE80211_S_SCAN) {
-		ni->ni_rssi = rxi->rxi_rssi;
+		/*
+		 * Only update RSSI if driver provided a valid value.
+		 */
+		if (rxi->rxi_rssi != 0)
+			ni->ni_rssi = rxi->rxi_rssi;
 		ni->ni_rstamp = rxi->rxi_tstamp;
 		ni->ni_inact = 0;

Tested on qwx0, eliminates oscillation. 0dBm impossible for WiFi signals,
safe sentinel.

ok?