1ce8e2a718d7b18f2c3963f036275e6b8852033e
[openwrt/svn-archive/archive.git] / package / madwifi / patches-r3776 / 327-rssi_disconnect.patch
1 Add an optional threshold for low-rssi disconnection. This can be useful
2 when letting wpa_supplicant control roaming.
3
4 Signed-off-by: Felix Fietkau <nbd@openwrt.org>
5
6 Index: madwifi-trunk-r3776/net80211/ieee80211_ioctl.h
7 ===================================================================
8 --- madwifi-trunk-r3776.orig/net80211/ieee80211_ioctl.h 2008-07-17 04:03:30.000000000 +0200
9 +++ madwifi-trunk-r3776/net80211/ieee80211_ioctl.h 2008-07-17 04:07:29.000000000 +0200
10 @@ -656,6 +656,8 @@
11 IEEE80211_PARAM_PROTMODE_RSSI = 85, /* RSSI Threshold for enabling protection mode */
12 IEEE80211_PARAM_PROTMODE_TIMEOUT = 86, /* Timeout for expiring protection mode */
13 IEEE80211_PARAM_BGSCAN_THRESH = 87, /* bg scan rssi threshold */
14 + IEEE80211_PARAM_RSSI_DIS_THR = 88, /* rssi threshold for disconnection */
15 + IEEE80211_PARAM_RSSI_DIS_COUNT = 89, /* counter for rssi threshold */
16 };
17
18 #define SIOCG80211STATS (SIOCDEVPRIVATE+2)
19 Index: madwifi-trunk-r3776/net80211/ieee80211_wireless.c
20 ===================================================================
21 --- madwifi-trunk-r3776.orig/net80211/ieee80211_wireless.c 2008-07-17 04:03:07.000000000 +0200
22 +++ madwifi-trunk-r3776/net80211/ieee80211_wireless.c 2008-07-17 04:07:56.000000000 +0200
23 @@ -2832,6 +2832,12 @@
24 case IEEE80211_PARAM_ROAM_RATE_11G:
25 vap->iv_roam.rate11g = value;
26 break;
27 + case IEEE80211_PARAM_RSSI_DIS_THR:
28 + vap->iv_rssi_dis_thr = value;
29 + break;
30 + case IEEE80211_PARAM_RSSI_DIS_COUNT:
31 + vap->iv_rssi_dis_max = value;
32 + break;
33 case IEEE80211_PARAM_UAPSDINFO:
34 if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
35 if (ic->ic_caps & IEEE80211_C_UAPSD) {
36 @@ -3220,6 +3226,12 @@
37 case IEEE80211_PARAM_ROAM_RATE_11G:
38 param[0] = vap->iv_roam.rate11g;
39 break;
40 + case IEEE80211_PARAM_RSSI_DIS_THR:
41 + param[0] = vap->iv_rssi_dis_thr;
42 + break;
43 + case IEEE80211_PARAM_RSSI_DIS_COUNT:
44 + param[0] = vap->iv_rssi_dis_max;
45 + break;
46 case IEEE80211_PARAM_UAPSDINFO:
47 if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
48 if (IEEE80211_VAP_UAPSD_ENABLED(vap))
49 @@ -5770,6 +5782,14 @@
50 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rate11g_x2" },
51 { IEEE80211_PARAM_ROAM_RATE_11G,
52 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rate11g_x2" },
53 + { IEEE80211_PARAM_RSSI_DIS_THR,
54 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rssi_disthr" },
55 + { IEEE80211_PARAM_RSSI_DIS_THR,
56 + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rssi_disthr" },
57 + { IEEE80211_PARAM_RSSI_DIS_COUNT,
58 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rssi_discnt" },
59 + { IEEE80211_PARAM_RSSI_DIS_COUNT,
60 + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rssi_discnt" },
61 { IEEE80211_PARAM_UAPSDINFO,
62 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "uapsd" },
63 { IEEE80211_PARAM_UAPSDINFO,
64 Index: madwifi-trunk-r3776/net80211/ieee80211_input.c
65 ===================================================================
66 --- madwifi-trunk-r3776.orig/net80211/ieee80211_input.c 2008-07-17 04:07:08.000000000 +0200
67 +++ madwifi-trunk-r3776/net80211/ieee80211_input.c 2008-07-17 04:09:03.000000000 +0200
68 @@ -3234,6 +3234,17 @@
69
70 /* When rssi is low, start doing bgscans more frequently to allow
71 * the supplicant to make a better switching decision */
72 + if ((vap->iv_rssi_dis_thr > 0) && (vap->iv_rssi_dis_max > 0)) {
73 + if ((rssi > 0) && (rssi < vap->iv_rssi_dis_thr)) {
74 + if (++vap->iv_rssi_dis_trig > vap->iv_rssi_dis_max) {
75 + vap->iv_rssi_dis_trig = 0;
76 + ieee80211_node_leave(ni);
77 + return 0;
78 + }
79 + } else {
80 + vap->iv_rssi_dis_trig = 0;
81 + }
82 + }
83 if ((rssi < vap->iv_bgscanthr) &&
84 (!vap->iv_bgscanthr_next ||
85 !time_before(jiffies, vap->iv_bgscanthr_next)) &&
86 Index: madwifi-trunk-r3776/net80211/ieee80211_var.h
87 ===================================================================
88 --- madwifi-trunk-r3776.orig/net80211/ieee80211_var.h 2008-07-17 04:07:08.000000000 +0200
89 +++ madwifi-trunk-r3776/net80211/ieee80211_var.h 2008-07-17 04:07:10.000000000 +0200
90 @@ -233,6 +233,9 @@
91 u_int iv_bgscanintvl; /* bg scan min interval */
92 u_int iv_bgscanthr; /* bg scan rssi threshold */
93 u_int iv_bgscantrintvl; /* bg scan trigger interval */
94 + u_int iv_rssi_dis_thr; /* rssi disassoc threshold */
95 + u_int iv_rssi_dis_max; /* max beacons below disconnect threshold */
96 + u_int iv_rssi_dis_trig; /* rssi disassoc trigger count */
97 unsigned long iv_bgscanthr_next; /* last trigger for bgscan */
98 u_int iv_scanvalid; /* scan cache valid threshold */
99 struct ieee80211_roam iv_roam; /* sta-mode roaming state */