Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: qwx(4): RSSI oscillation fix
To:
Greg Steuck <gnezdo@openbsd.org>
Cc:
tech@openbsd.org
Date:
Thu, 29 Jan 2026 11:50:14 +0100

Download raw body.

Thread
On Wed, Jan 28, 2026 at 11:11:16PM -0800, Greg Steuck wrote:
> 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?

Thanks Greg. Makes sense to me. ok stsp@