commit 400949ff31562fea336925e05ea296e77f137307
parent d366f5d8d5ee7abf48004df365a81302b1929983
Author: Daniel Ehlers <danielehlers@mindeye.net>
Date: Tue, 26 Jul 2016 16:33:41 +0200
uci/roamguide: Adapt uci configuration, extend controlable parameters.
Also change the bantime calculation to a polynomial funtion.
Diffstat:
1 file changed, 36 insertions(+), 27 deletions(-)
diff --git a/roamguide/files/roamguide b/roamguide/files/roamguide
@@ -2,17 +2,10 @@
. /lib/functions.sh
-dev=${1:-client0}
-signal="-60 -77 -85"
-kickmax=2
-
wifi_kick(){
- local dev="$1"
- local mac="$2"
- local tq="$3"
- local num="$4"
- local bantime=$(expr 2000 + $num \* 3000)
- logger -t roamguide "${dev}: ban(${num}) ${mac} ${tq}dBm for ${bantime}ms"
+ local dev="$1" ; shift
+ local mac="$1" ; shift
+ local bantime="$1" ; shift
ubus call hostapd.${dev} del_client '{ "addr" : "'${mac}'", "reason" : "assoc toomany", "ban_time" : '${bantime}' }'
}
@@ -31,7 +24,6 @@ count_inc(){
local count=$(count_get "${mac}")
count=$(expr $count + 1)
echo $count > /tmp/client-${mac}
- echo $count
}
count_dec(){
@@ -72,23 +64,40 @@ client_tq() {
iw dev "${dev}" station get "${mac}" | grep "signal avg" | xargs | cut -d' ' -f 3
}
+roamguide() {
+ local s="$1"
+ config_get_bool enabled "$s" 'enabled' 0
+ [ $enabled -ne 0 ] || return 0
-for mac in $(client_macs "${dev}") ; do
- tq=$(client_tq "${dev}" "${mac}")
- level=1
- hit=0
- for roam_tq in $signal; do
- if [ ${tq} -le ${roam_tq} ]; then
- mac_count=$(count_get "${mac}")
- if [ $mac_count -lt $level ] ; then
- count_inc ${mac}
- wifi_kick "${dev}" "${mac}" "${tq}" "${mac_count}"
- fi
- hit=1
- break
- fi
- level=$(expr $level + 1)
+ config_get device "$s" device
+ config_get bantime_base "$s" bantime_base 500
+ config_get bantime_factor "$s" bantime_factor 2300
+
+ for mac in $(client_macs "${device}") ; do
+ tq=$(client_tq "${device}" "${mac}")
+ level=1
+ config_list_foreach "$s" signal roamlevel "${tq}" "${device}" "${mac}"
done
-done
+}
+
+roamlevel(){
+ local roam_tq="$1" ; shift
+ local tq="$1" ; shift
+ local device="$1" ; shift
+ local mac="$1" ; shift
+ if [ ${tq} -le ${roam_tq} ]; then
+ mac_count=$(count_get "${device}" "${mac}")
+ if [ $mac_count -lt $level ] ; then
+ count_inc ${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}"
+ break
+ fi
+ fi
+ level=$(expr $level + 1)
+}
+config_load 'roamguide'
+config_foreach roamguide 'roamguide'
count_cleanup