aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rc80211_minstrel.c
diff options
context:
space:
mode:
authorJavier Cardona <javier@cozybit.com>2009-08-10 15:15:50 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-08-14 09:14:01 -0400
commit5815814bfad5b3f88ff58ab90aaf09dd69ab8da2 (patch)
tree8779b7f735fc208ca9f9375223e51e4c06bdb902 /net/mac80211/rc80211_minstrel.c
parentd403a1c66ea1fb47ae61921eac278d4154f7ca8a (diff)
mac80211: Early detection of broken mesh paths when using minstrel.
This change triggers a path discovery as soon as the link quality degrades below a certain threshold. This results in a faster path recovery time than by simply relying on the periodic path refresh mechanism to detect broken links. Signed-off-by: Javier Cardona <javier@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rc80211_minstrel.c')
-rw-r--r--net/mac80211/rc80211_minstrel.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
index 3ea9740736a5..007164919e02 100644
--- a/net/mac80211/rc80211_minstrel.c
+++ b/net/mac80211/rc80211_minstrel.c
@@ -51,6 +51,7 @@
51#include <linux/random.h> 51#include <linux/random.h>
52#include <linux/ieee80211.h> 52#include <linux/ieee80211.h>
53#include <net/mac80211.h> 53#include <net/mac80211.h>
54#include "mesh.h"
54#include "rate.h" 55#include "rate.h"
55#include "rc80211_minstrel.h" 56#include "rc80211_minstrel.h"
56 57
@@ -178,9 +179,14 @@ minstrel_tx_status(void *priv, struct ieee80211_supported_band *sband,
178 179
179 if ((i != IEEE80211_TX_MAX_RATES - 1) && (ar[i + 1].idx < 0)) { 180 if ((i != IEEE80211_TX_MAX_RATES - 1) && (ar[i + 1].idx < 0)) {
180 mi->r[ndx].success += success; 181 mi->r[ndx].success += success;
181 if (si) 182 if (si) {
182 si->fail_avg = (18050 - mi->r[ndx].probability) 183 si->fail_avg = (18050 - mi->r[ndx].probability)
183 / 180; 184 / 180;
185 WARN_ON(si->fail_avg > 100);
186 if (si->fail_avg == 100 &&
187 ieee80211_vif_is_mesh(&si->sdata->vif))
188 mesh_plink_broken(si);
189 }
184 } 190 }
185 } 191 }
186 192