roamguide

git clone git://archive.git.mtrnord.blog/MTRNord/roamguide.git
Log | Files | Refs | README

commit a92c5bbc4dbcb1e613c50ca9c163780bcf3a40c3
parent a88550ed41fed269d08a2ff29c6a5f01d94edfef
Author: Daniel Ehlers <danielehlers@mindeye.net>
Date:   Tue, 26 Jul 2016 20:17:07 +0200

roam: add cleanup timer

forget_time: the time after we forget a client.

Diffstat:
Mroamguide/files/etc/config/roamguide | 1+
Mroamguide/files/usr/bin/roamguide | 50+++++++++++++++++++++++---------------------------
2 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/roamguide/files/etc/config/roamguide b/roamguide/files/etc/config/roamguide @@ -7,4 +7,5 @@ config roamguide option bantime_base '500' # on the first level ban for 500ms option bantime_factor '2375' # on the second one for 2775ms, # and in the final 10000ms + option forget_time '600' # Forget about a client after 10s option enabled '0' # set to '1' to enable this profile diff --git a/roamguide/files/usr/bin/roamguide b/roamguide/files/usr/bin/roamguide @@ -9,47 +9,42 @@ wifi_kick(){ ubus call hostapd.${dev} del_client '{ "addr" : "'${mac}'", "reason" : "assoc toomany", "ban_time" : '${bantime}' }' } +count_file(){ + echo "/tmp/roam-${1}-${2}" +} + count_get(){ - local mac="$1" - if [ -e /tmp/client-${mac} ] ; then - touch /tmp/client-${mac} - cat /tmp/client-${mac} + local fn=$(count_file $@) + if [ -e "$fn" ] ; then + touch "$fn" + cat $fn else echo 0 fi } count_inc(){ - local mac="$1" - local count=$(count_get "${mac}") - count=$(expr $count + 1) - echo $count > /tmp/client-${mac} + local count=$(count_get $@) + expr $count + 1 > $(count_file $@) } count_dec(){ - local mac="$1" - local count=$(count_get "${mac}") - count=$(expr $count - 1) - if [ $count -le 0 ] ; then - count_rm "${mac}" - else - echo $count > /tmp/client-${mac} - fi + local count=$(count_get $@) + count=$(expr $count - 1) > $(count_file $@) } count_rm(){ - local mac="$1" - if [ -e /tmp/client-${mac} ] ; then - logger -t roamguide "forget ${mac}" - rm /tmp/client-${mac} + local fn=$(count_file $@) + if [ -e $fn ] ; then + logger -t roamguide "forget" $@ + rm $fn fi } count_cleanup() { - local now=$(date +%s) - for file in $(find /tmp -maxdepth 1 -name "client-*"); do - filedate=$(date +%s -r $file) - [ $(expr $now - ${filedate}) -gt 120 ] && rm $file + local device="$1" ; shift + for file in $(find /tmp -maxdepth 1 -name "roam-${1}-*" -type f ); do + [ $(expr $(date +%s) - $(date +%s -r $file)) -gt ${forget_time} ] && rm $file done } @@ -70,14 +65,16 @@ roamguide() { [ $enabled -ne 0 ] || return 0 config_get device "$s" device + config_get forget_time "$s" forget_time 600 config_get bantime_base "$s" bantime_base 500 - config_get bantime_factor "$s" bantime_factor 2300 + config_get bantime_factor "$s" bantime_factor 2375 for mac in $(client_macs "${device}") ; do tq=$(client_tq "${device}" "${mac}") level=1 config_list_foreach "$s" signal roamlevel "${tq}" "${device}" "${mac}" done + count_cleanup ${device} } roamlevel(){ @@ -88,7 +85,7 @@ roamlevel(){ if [ ${tq} -le ${roam_tq} ]; then mac_count=$(count_get "${device}" "${mac}") if [ $mac_count -lt $level ] ; then - count_inc ${mac} + count_inc ${device} ${mac} local bantime=$(expr $bantime_base + $(expr $mac_count \* $mac_count) \* $bantime_factor) logger -t roamguide "${dev}: ban ${mac} ${tq}dBm for ${bantime}ms" wifi_kick "${device}" "${mac}" "${bantime}" @@ -100,4 +97,3 @@ roamlevel(){ config_load 'roamguide' config_foreach roamguide 'roamguide' -count_cleanup