Is anyone running this already? OK?

On Mon, Oct 07, 2019 at 04:41:37PM +0200, Stefan Sperling wrote:
> 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 */
> 

Reply via email to