mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-03-03 06:00:43 +01:00
netdev: preserve cur_rssi_low across reassociation
Fix an issue with the recent changes to signal monitoring from commit f456501b ("station: retry roaming unless notified of a high RSSI"): 1. driver sends NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW 2. netdev->cur_rssi_low changes from FALSE to TRUE 3. netdev sends NETDEV_EVENT_RSSI_THRESHOLD_LOW to station 4. on roam reassociation, cur_rssi_low is reset to FALSE 5. station still assumes RSSI is low, periodically roams until netdev sends NETDEV_EVENT_RSSI_THRESHOLD_HIGH 6. driver sends NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH 7. netdev->cur_rssi_low doesn't change (still FALSE) 8. netdev never sends NETDEV_EVENT_RSSI_THRESHOLD_HIGH 9. station remains stuck in an infinite roaming loop The commit in question introduced the logic in (5). Previously the assumption in station was - like in netdev - that if the signal was still low, the driver would send a duplicate LOW event after reassociation. This change makes netdev follow the same new logic as station, i.e. assume the same signal state (LOW/HIGH) until told otherwise by the driver.
This commit is contained in:
parent
fda4734a1b
commit
a04b61ec77
@ -659,6 +659,7 @@ static void netdev_connect_free(struct netdev *netdev)
|
||||
netdev->in_ft = false;
|
||||
netdev->ignore_connect_event = false;
|
||||
netdev->expect_connect_failure = false;
|
||||
netdev->cur_rssi_low = false;
|
||||
|
||||
if (netdev->connect_cmd) {
|
||||
l_genl_msg_unref(netdev->connect_cmd);
|
||||
@ -2810,7 +2811,6 @@ static int netdev_connect_common(struct netdev *netdev,
|
||||
netdev->handshake = hs;
|
||||
netdev->sm = sm;
|
||||
netdev->frequency = bss->frequency;
|
||||
netdev->cur_rssi_low = false; /* Gets updated on the 1st CQM event */
|
||||
netdev->cur_rssi = bss->signal_strength / 100;
|
||||
netdev_rssi_level_init(netdev);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user