aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Greear <greearb@candelatech.com>2012-04-06 08:47:29 (GMT)
committerJouni Malinen <j@w1.fi>2012-04-06 08:47:29 (GMT)
commitce28e2795ad6a416731c3c57df310168a5c32537 (patch)
treef7f3fa4d545922908389754d19b610ff9da4b4e5
parentf05b6b18bb54c6c3e5b5b2c224ec0933c6005262 (diff)
downloadhostap-ce28e2795ad6a416731c3c57df310168a5c32537.zip
hostap-ce28e2795ad6a416731c3c57df310168a5c32537.tar.gz
hostap-ce28e2795ad6a416731c3c57df310168a5c32537.tar.bz2
AP: Add fuzz to idle-timer calculations
This should keep us from getting into a state where we bounce large numbers of stations all at once. Spreading out the bounce should cause less stress on the network as the idle stations won't all be trying to reconnect at once. Signed-hostap: Ben Greear <greearb@candelatech.com>
-rw-r--r--src/ap/sta_info.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c
index d8b5621..068bba5 100644
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
@@ -284,6 +284,12 @@ void ap_handle_timer(void *eloop_ctx, void *timeout_ctx)
(sta->timeout_next == STA_NULLFUNC ||
sta->timeout_next == STA_DISASSOC)) {
int inactive_sec;
+ /*
+ * Add random value to timeout so that we don't end up bouncing
+ * all stations at the same time if we have lots of associated
+ * stations that are idle (but keep re-associating).
+ */
+ int fuzz = os_random() % 20;
inactive_sec = hostapd_drv_get_inact_sec(hapd, sta->addr);
if (inactive_sec == -1) {
wpa_msg(hapd->msg_ctx, MSG_DEBUG,
@@ -295,7 +301,7 @@ void ap_handle_timer(void *eloop_ctx, void *timeout_ctx)
* Anyway, try again after the next inactivity timeout,
* but do not disconnect the station now.
*/
- next_time = hapd->conf->ap_max_inactivity;
+ next_time = hapd->conf->ap_max_inactivity + fuzz;
} else if (inactive_sec < hapd->conf->ap_max_inactivity &&
sta->flags & WLAN_STA_ASSOC) {
/* station activity detected; reset timeout state */
@@ -303,7 +309,7 @@ void ap_handle_timer(void *eloop_ctx, void *timeout_ctx)
"Station " MACSTR " has been active %is ago",
MAC2STR(sta->addr), inactive_sec);
sta->timeout_next = STA_NULLFUNC;
- next_time = hapd->conf->ap_max_inactivity -
+ next_time = hapd->conf->ap_max_inactivity + fuzz -
inactive_sec;
} else {
wpa_msg(hapd->msg_ctx, MSG_DEBUG,