madwifi: fix noderef and state machine issues in the currently unused ap-to-ap wds...
[openwrt/openwrt.git] / package / madwifi / patches / 362-rssithr.patch
index 137e64ad524fee35889e5d95ba061ea42c9cb737..7e178e13ad26e061d65761f8e61040bc37da4ef1 100644 (file)
@@ -5,7 +5,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 
 --- a/net80211/ieee80211_ioctl.h
 +++ b/net80211/ieee80211_ioctl.h
-@@ -647,6 +647,8 @@
+@@ -647,6 +647,8 @@ enum {
        IEEE80211_PARAM_PROTMODE_RSSI           = 77,   /* RSSI Threshold for enabling protection mode */
        IEEE80211_PARAM_PROTMODE_TIMEOUT        = 78,   /* Timeout for expiring protection mode */
        IEEE80211_PARAM_BGSCAN_THRESH           = 79,   /* bg scan rssi threshold */
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
  #define       SIOCG80211STATS                 (SIOCDEVPRIVATE+2)
 --- a/net80211/ieee80211_wireless.c
 +++ b/net80211/ieee80211_wireless.c
-@@ -2798,6 +2798,12 @@
+@@ -2799,6 +2799,12 @@ ieee80211_ioctl_setparam(struct net_devi
        case IEEE80211_PARAM_ROAM_RATE_11G:
                vap->iv_roam.rate11b = value;
                break;
@@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        case IEEE80211_PARAM_UAPSDINFO:
                if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
                        if (ic->ic_caps & IEEE80211_C_UAPSD) {
-@@ -3183,6 +3189,12 @@
+@@ -3184,6 +3190,12 @@ ieee80211_ioctl_getparam(struct net_devi
        case IEEE80211_PARAM_ROAM_RATE_11G:
                param[0] = vap->iv_roam.rate11b;
                break;
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        case IEEE80211_PARAM_UAPSDINFO:
                if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
                        if (IEEE80211_VAP_UAPSD_ENABLED(vap))
-@@ -5732,6 +5744,14 @@
+@@ -5733,6 +5745,14 @@ static const struct iw_priv_args ieee802
          IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rate11g" },
        { IEEE80211_PARAM_ROAM_RATE_11G,
          0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rate11g" },
@@ -59,10 +59,11 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        { IEEE80211_PARAM_UAPSDINFO,
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3263,6 +3263,17 @@
+@@ -3261,6 +3261,19 @@ ieee80211_recv_mgmt(struct ieee80211vap 
+                       memcpy(ni->ni_tstamp.data, scan.tstamp,
+                               sizeof(ni->ni_tstamp));
  
-                       /* When rssi is low, start doing bgscans more frequently to allow
-                        * the supplicant to make a better switching decision */
++                      /* when rssi falls below the disconnection threshold, drop the connection */
 +                      if ((vap->iv_rssi_dis_thr > 0) && (vap->iv_rssi_dis_max > 0)) {
 +                              if ((rssi > 0) && (rssi < vap->iv_rssi_dis_thr)) {
 +                                      if (++vap->iv_rssi_dis_trig > vap->iv_rssi_dis_max) {
@@ -74,12 +75,13 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 +                                      vap->iv_rssi_dis_trig = 0;
 +                              }
 +                      }
-                       if ((rssi < vap->iv_bgscanthr) &&
-                                       (!vap->iv_bgscanthr_next ||
-                                               !time_before(jiffies, vap->iv_bgscanthr_next)) &&
++
+                       /* When rssi is low, start doing bgscans more frequently to allow
+                        * the supplicant to make a better switching decision */
+                       if (!(ic->ic_flags & IEEE80211_F_SCAN) && (rssi < vap->iv_bgscanthr) &&
 --- a/net80211/ieee80211_var.h
 +++ b/net80211/ieee80211_var.h
-@@ -223,6 +223,9 @@
+@@ -223,6 +223,9 @@ struct ieee80211vap {
        u_int iv_bgscanintvl;                           /* bg scan min interval */
        u_int iv_bgscanthr;                                     /* bg scan rssi threshold */
        u_int iv_bgscantrintvl;                         /* bg scan trigger interval */
@@ -87,5 +89,5 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 +      u_int iv_rssi_dis_max;                          /* max beacons below disconnect threshold */
 +      u_int iv_rssi_dis_trig;                         /* rssi disassoc trigger count */
        unsigned long iv_bgscanthr_next;                /* last trigger for bgscan */
+       unsigned long iv_lastconnect;   /* time of last connect attempt */
        u_int iv_scanvalid;                             /* scan cache valid threshold */
-       struct ieee80211_roam iv_roam;                  /* sta-mode roaming state */