Slackware - шейпер и stargazer

Ответить
Аватара пользователя
Trinux

Slackware - шейпер и stargazer

Сообщение Trinux »

Все привет! такая проблемка. Есть значит биллинг stargazer при авторизации срабатывает скрипт OnConnect который пишет правила для фаяра, которые пускают юзера в инет, там же есть строки для шейпинга канала. так вот когда юзер отключается срабатывает скрипт OnDiscconect он убирает правила для фаяра и собственно для шейпера.





Так вот суть в том что при отключении клиента правила tc не всегда отрабатываются и остаются висеть, что делает невозможным смену скорости клиенту.



вот кусок скрипта для скорости при коннекте



#Cut speed

tarif=`/etc/stargazer/tarif.php $2`

$IPTABLES -t filter -A FORWARD -s $IP -j QUEUE

$IPTABLES -t filter -A FORWARD -d $IP -j QUEUE

prioid="${ID}0"



if [ "$tarif" = "64" ]; then

speed=64

elif [ "$tarif" = "128" ]; then

speed=128

elif [ "$tarif" = "256" ]; then

speed=256

elif [ "$tarif" = "1024" ]; then

speed=1024

elif [ "$tarif" = "512" ]; then

speed=512

else

speed=0

fi



if [ $speed != 0 ]; then

echo $1 $2 $prioid $speed $tarif `date +"%Y/%m/%d-%T"` >> /var/log/speed

/sbin/tc class add dev $eth_local parent 1:1 classid 1:${prioid} htb rate $speed'kbit' burst 20k

/sbin/tc filter add dev $eth_local parent 1: protocol ip prio ${prioid} u32 match ip dst $IP flowid 1:${prioid}



fi

echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/connect.log



Он отрабатывает все красиво.... а вот при отключении что-то не так...









вот кусок из скрипта OnDisconnect.



#disable cut spped

$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null

done

$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null

done



tc filter del dev eth3 pref ${prioid}

while [ $? -eq 0 ]

do

tc filter del dev eth3 pref ${prioid}

done

tc class del dev eth3 classid 1:${prioid}

while [ $? -eq 0 ]

do

tc class del dev eth3 classid 1:${prioid}

done

echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/disconnect.log







Буду признателен за помощь.

в чем может быть неполадка? может что-то в порядке его отрабатывания не так.... может что-то напутал я...
Ответить

Вернуться в «Общий по Linux»