Download raw body.
qwx(4): RSSI oscillation fix
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?
qwx(4): RSSI oscillation fix