придётся костылить
Простой скрипт, который перебирает клиентов, у которых в базе "турбо" и отдаёт на выполнение такому:
В доке на модуль есть:
#!/bin/bash
. /etc/boot/incl.sh
IP=$1
DNL=$2
UPL=$3
let "DNL1=$DNL*1000000"
let "UPL1=$UPL*1000000"
echo "@+$IP $DNL1" > $users_down
echo "@+$IP $UPL1" > $users_up
А раньше приходилось вычислять хеш, что оказалось нетривиальной задачей, дня три кодил и то до конца был не уверен, что работало правильно.
Сравните с этим:
#!/bin/bash
. /etc/boot/incl.sh
RULE=$1
LOGIN=$2
let mark=${LOGIN}+1000
let mark2=${LOGIN}+1000
ip=$3
mask=$4
DNL=$5
UPL=$6
DNL_CEIL=$7
UPL_CEIL=$8
SEG=`echo $ip | awk -F. '{ print $3 }'`
IP2=`echo $ip | awk -F. '{ print $4 }'`
SEGhex=`printf %x $SEG`
IP2hex=`printf %x $IP2`
case $RULE in
-A)
### ADD NEW RULE ###
if [ ! -f /ramdisk/shaper/${LOGIN} ]
then
$tc class add dev $INTIF parent 1:1 classid 1:$mark htb rate ${DNL}mbit ceil ${DNL_CEIL}mbit quantum 3000
$tc qdisc add dev $INTIF parent 1:$mark handle $mark: sfq perturb 10
$tc filter add dev $INTIF parent 1: protocol ip prio 5 u32 ht ${SEGhex}:${IP2hex}: match ip dst $ip flowid 1:$mark
$tc class add dev $EXTIF parent 1:1 classid 1:$mark2 htb rate ${UPL}mbit ceil ${UPL_CEIL}mbit quantum 3000
$tc qdisc add dev $EXTIF parent 1:$mark2 handle $mark2: sfq perturb 10
$tc filter add dev $EXTIF parent 1: protocol ip prio 5 u32 ht ${SEGhex}:${IP2hex}: match ip src $ip flowid 1:$mark2
echo "$DNL $UPL" > /ramdisk/shaper/${LOGIN}
fi
;;
-D)
### DELETE RULE ###
if [ -f /ramdisk/shaper/${LOGIN} ]
then
for h in `$tc filter show dev $INTIF | grep ":$mark" | cut -d" " -f10`;
do
$tc filter del dev $INTIF parent 1: protocol ip prio 5 handle $h u32
done
$tc qdisc del dev $INTIF parent 1:$mark handle $mark: sfq perturb 10
$tc class del dev $INTIF parent 1:1 classid 1:$mark htb rate ${DNL}mbit ceil ${DNL_CEIL}mbit quantum 3000
for h in `$tc filter show dev $EXTIF | grep ":$mark2" | cut -d" " -f10`;
do
$tc filter del dev $EXTIF parent 1: protocol ip prio 5 handle $h u32
done
$tc qdisc del dev $EXTIF parent 1:$mark2 handle $mark2: sfq perturb 10
$tc class del dev $EXTIF parent 1:1 classid 1:$mark2 htb rate ${UPL}mbit ceil ${UPL_CEIL}mbit quantum 3000
/bin/rm -f /ramdisk/shaper/${LOGIN}
fi
;;
*)
echo "Usage: `basename $0` -A|-D RULEID UIP UBITS DOWNLOAD UPLOAD DOWNLOAD_CEIL UPLOAD_CEIL"
exit 64
;;
esac
Знаю, что у tc есть replace, но мне так проще. Так эта конструкция у меня отрабатывала минут 12, счас минуту.