Frequent background scans are known to cause packet loss with some types of APs (e.g. old Apple APs and some Android phones).
There is already a heuristic to make bgscans less frequent if we keep choosing the same AP. However, the current backoff interval keeps increasing in tiny steps of 500ms, so problems caused by background scans remain noticable for some time after association to a problematic AP. This diff increases the hgscan backoff timer such that the interval keeps doubling each time we choose the same AP again. I hope this will help in situations where a single AP is used and frequent bgscans are causing trouble. diff e17574f85785da4fa4073c8b9a00d8d738f3298f c6d97512c3c477464b2407c31d85add72ed1df9f blob - 313d7249f09646a2eeabc21e9e760c9debcdf790 blob + dde43eda321beaa949255c143b249339c39f027c --- sys/net80211/ieee80211_node.c +++ sys/net80211/ieee80211_node.c @@ -1421,8 +1421,12 @@ ieee80211_end_scan(struct ifnet *ifp) * and make background scans less frequent. */ if (selbs == curbs) { - if (ic->ic_bgscan_fail < IEEE80211_BGSCAN_FAIL_MAX) - ic->ic_bgscan_fail++; + if (ic->ic_bgscan_fail < IEEE80211_BGSCAN_FAIL_MAX) { + if (ic->ic_bgscan_fail <= 0) + ic->ic_bgscan_fail = 1; + else + ic->ic_bgscan_fail *= 2; + } ic->ic_flags &= ~IEEE80211_F_BGSCAN; return; } blob - 0f2072288232ac276c2979b799b03c37e0ca8032 blob + b475001b14ddb11c5c1713d072358ef2b9e2736d --- sys/net80211/ieee80211_var.h +++ sys/net80211/ieee80211_var.h @@ -62,7 +62,7 @@ #define IEEE80211_RSSI_THRES_RATIO_2GHZ 60 /* in percent */ #define IEEE80211_RSSI_THRES_RATIO_5GHZ 50 /* in percent */ -#define IEEE80211_BGSCAN_FAIL_MAX 360 /* units of 500 msec */ +#define IEEE80211_BGSCAN_FAIL_MAX 512 /* units of 500 msec */ enum ieee80211_phytype { IEEE80211_T_DS, /* direct sequence spread spectrum */