mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-08-20 05:45:53 +03:00
140 lines
5.8 KiB
Diff
140 lines
5.8 KiB
Diff
|
Index: madwifi-trunk-r3314/net80211/ieee80211.c
|
||
|
===================================================================
|
||
|
--- madwifi-trunk-r3314.orig/net80211/ieee80211.c 2008-04-21 05:22:20.000000000 +0200
|
||
|
+++ madwifi-trunk-r3314/net80211/ieee80211.c 2008-04-21 05:23:46.000000000 +0200
|
||
|
@@ -333,7 +333,9 @@
|
||
|
IEEE80211_MS_TO_TU(IEEE80211_BMISSTHRESH_DEFAULT_MS),
|
||
|
ic->ic_lintval), ic->ic_lintval);
|
||
|
}
|
||
|
-
|
||
|
+ ic->ic_protmode_timeout = IEEE80211_PROTMODE_TIMEOUT;
|
||
|
+ ic->ic_protmode_rssi = IEEE80211_PROTMODE_RSSITHR;
|
||
|
+
|
||
|
IEEE80211_LOCK_INIT(ic, "ieee80211com");
|
||
|
IEEE80211_VAPS_LOCK_INIT(ic, "ieee80211com_vaps");
|
||
|
TAILQ_INIT(&ic->ic_vaps);
|
||
|
Index: madwifi-trunk-r3314/net80211/ieee80211_input.c
|
||
|
===================================================================
|
||
|
--- madwifi-trunk-r3314.orig/net80211/ieee80211_input.c 2008-04-21 05:22:32.000000000 +0200
|
||
|
+++ madwifi-trunk-r3314/net80211/ieee80211_input.c 2008-04-21 05:23:46.000000000 +0200
|
||
|
@@ -3412,16 +3412,32 @@
|
||
|
IEEE80211_IS_CHAN_ANYG(ic->ic_curchan)) {
|
||
|
|
||
|
/* Assume no ERP IE == 11b AP */
|
||
|
- if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
|
||
|
- !(ic->ic_flags & IEEE80211_F_USEPROT)) {
|
||
|
+ if ((!has_erp || (has_erp &&
|
||
|
+ (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
|
||
|
+ (rssi > ic->ic_protmode_rssi)) {
|
||
|
struct ieee80211vap *tmpvap;
|
||
|
|
||
|
- ic->ic_flags |= IEEE80211_F_USEPROT;
|
||
|
- TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
|
||
|
- tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
|
||
|
+ if (!(ic->ic_flags & IEEE80211_F_USEPROT)) {
|
||
|
+ ic->ic_flags |= IEEE80211_F_USEPROT;
|
||
|
+ TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
|
||
|
+ tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
|
||
|
+ }
|
||
|
}
|
||
|
+ ic->ic_protmode_lasttrig = jiffies;
|
||
|
}
|
||
|
}
|
||
|
+ if ((ic->ic_flags & IEEE80211_F_USEPROT) &&
|
||
|
+ (ic->ic_protmode_lasttrig + ic->ic_protmode_timeout * HZ <
|
||
|
+ jiffies)) {
|
||
|
+ struct ieee80211vap *tmpvap;
|
||
|
+
|
||
|
+ /* expire protection mode */
|
||
|
+ ic->ic_flags &= ~IEEE80211_F_USEPROT;
|
||
|
+ TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
|
||
|
+ tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
|
||
|
/*
|
||
|
* If scanning, just pass information to the scan module.
|
||
|
Index: madwifi-trunk-r3314/net80211/ieee80211_ioctl.h
|
||
|
===================================================================
|
||
|
--- madwifi-trunk-r3314.orig/net80211/ieee80211_ioctl.h 2008-04-21 05:22:20.000000000 +0200
|
||
|
+++ madwifi-trunk-r3314/net80211/ieee80211_ioctl.h 2008-04-21 05:23:46.000000000 +0200
|
||
|
@@ -643,6 +643,8 @@
|
||
|
IEEE80211_PARAM_BEACON_MISS_THRESH_MS = 74, /* Beacon miss threshold (in ms) */
|
||
|
IEEE80211_PARAM_MAXRATE = 75, /* Maximum rate (by table index) */
|
||
|
IEEE80211_PARAM_MINRATE = 76, /* Maximum rate (by table index) */
|
||
|
+ IEEE80211_PARAM_PROTMODE_RSSI = 77, /* RSSI Threshold for enabling protection mode */
|
||
|
+ IEEE80211_PARAM_PROTMODE_TIMEOUT = 78, /* Timeout for expiring protection mode */
|
||
|
};
|
||
|
|
||
|
#define SIOCG80211STATS (SIOCDEVPRIVATE+2)
|
||
|
Index: madwifi-trunk-r3314/net80211/ieee80211_var.h
|
||
|
===================================================================
|
||
|
--- madwifi-trunk-r3314.orig/net80211/ieee80211_var.h 2008-04-21 05:22:20.000000000 +0200
|
||
|
+++ madwifi-trunk-r3314/net80211/ieee80211_var.h 2008-04-21 05:41:45.000000000 +0200
|
||
|
@@ -128,6 +128,9 @@
|
||
|
|
||
|
#define IEEE80211_APPIE_MAX 1024
|
||
|
|
||
|
+#define IEEE80211_PROTMODE_RSSITHR 15 /* default rssi threshold for protection mode trigger */
|
||
|
+#define IEEE80211_PROTMODE_TIMEOUT 30 /* timeout for keeping protection mode alive */
|
||
|
+
|
||
|
#define IEEE80211_PWRCONSTRAINT_VAL(ic) \
|
||
|
(((ic)->ic_bsschan->ic_maxregpower > (ic)->ic_curchanmaxpwr) ? \
|
||
|
(ic)->ic_bsschan->ic_maxregpower - (ic)->ic_curchanmaxpwr : 0)
|
||
|
@@ -324,6 +327,9 @@
|
||
|
u_int16_t ic_newtxpowlimit; /* tx power limit to change to (in 0.5 dBm) */
|
||
|
u_int16_t ic_uapsdmaxtriggers; /* max triggers that could arrive */
|
||
|
u_int8_t ic_coverageclass; /* coverage class */
|
||
|
+ u_int8_t ic_protmode_rssi; /* rssi threshold for protection mode */
|
||
|
+ u_int64_t ic_protmode_lasttrig; /* last trigger for protection mode */
|
||
|
+ u_int16_t ic_protmode_timeout; /* protection mode timeout */
|
||
|
|
||
|
/* Channel state:
|
||
|
*
|
||
|
Index: madwifi-trunk-r3314/net80211/ieee80211_wireless.c
|
||
|
===================================================================
|
||
|
--- madwifi-trunk-r3314.orig/net80211/ieee80211_wireless.c 2008-04-21 05:22:20.000000000 +0200
|
||
|
+++ madwifi-trunk-r3314/net80211/ieee80211_wireless.c 2008-04-21 05:23:46.000000000 +0200
|
||
|
@@ -2312,6 +2312,12 @@
|
||
|
IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan))
|
||
|
retv = ENETRESET;
|
||
|
break;
|
||
|
+ case IEEE80211_PARAM_PROTMODE_TIMEOUT:
|
||
|
+ ic->ic_protmode_timeout = value;
|
||
|
+ break;
|
||
|
+ case IEEE80211_PARAM_PROTMODE_RSSI:
|
||
|
+ ic->ic_protmode_rssi = value;
|
||
|
+ break;
|
||
|
case IEEE80211_PARAM_MCASTCIPHER:
|
||
|
if ((vap->iv_caps & cipher2cap(value)) == 0 &&
|
||
|
!ieee80211_crypto_available(vap, value))
|
||
|
@@ -2955,6 +2961,12 @@
|
||
|
case IEEE80211_PARAM_PROTMODE:
|
||
|
param[0] = ic->ic_protmode;
|
||
|
break;
|
||
|
+ case IEEE80211_PARAM_PROTMODE_TIMEOUT:
|
||
|
+ param[0] = ic->ic_protmode_timeout;
|
||
|
+ break;
|
||
|
+ case IEEE80211_PARAM_PROTMODE_RSSI:
|
||
|
+ param[0] = ic->ic_protmode_rssi;
|
||
|
+ break;
|
||
|
case IEEE80211_PARAM_MCASTCIPHER:
|
||
|
param[0] = rsn->rsn_mcastcipher;
|
||
|
break;
|
||
|
@@ -5346,6 +5358,14 @@
|
||
|
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "protmode" },
|
||
|
{ IEEE80211_PARAM_PROTMODE,
|
||
|
0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_protmode" },
|
||
|
+ { IEEE80211_PARAM_PROTMODE_RSSI,
|
||
|
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "protrssi" },
|
||
|
+ { IEEE80211_PARAM_PROTMODE_RSSI,
|
||
|
+ 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_protrssi" },
|
||
|
+ { IEEE80211_PARAM_PROTMODE_TIMEOUT,
|
||
|
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "prottime" },
|
||
|
+ { IEEE80211_PARAM_PROTMODE_TIMEOUT,
|
||
|
+ 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_prottime" },
|
||
|
{ IEEE80211_PARAM_MCASTCIPHER,
|
||
|
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "mcastcipher" },
|
||
|
{ IEEE80211_PARAM_MCASTCIPHER,
|