Код: Выделить всё
#!/bin/sh
/usr/bin/php /netup/unlim/cbq-unlim.php
/etc/rc.d/init.d/cbq stop
/etc/rc.d/init.d/cbq compile
/etc/rc.d/init.d/cbq start
Код: Выделить всё
<?php
$mysql_server="localhost";
$mysql_login="";
$mysql_passwd="";
$dbname="UTM";
$bytes_in_mbyte = '1048576';
if(!mysql_pconnect($mysql_server, $mysql_login, $mysql_passwd))
{
echo "Error Connect to database ".$dbname."!<br>";
echo mysql_error();
exit;
}
mysql_select_db("$dbname");
?>
Код: Выделить всё
<?php
include "config.php";
$cbq_patch="/etc/sysconfig/cbq/";
$local_dev="eth0";
$inet_dev="eth2";
$speed_in=128;
$speed_out=128;
$speed_delta=10;
exec("rm ".$cbq_patch."*");
$i=1;
//1009 = id unlim tariff
$result=mysql_query("select * from users where tariff = 1009");
while ($row=mysql_fetch_array($result))
{
$i++;
$mb_in=0;
$mb_out=0;
$fname=$cbq_patch."cbq-".$i.".in";
$f_in=fopen($fname,"w");
$fname=$cbq_patch."cbq-".$i.".out";
$f_out=fopen($fname,"w");
$uuid=$row[id];
$result2=mysql_query("SELECT SUM( bytes ), t_class FROM traffic_discount_current WHERE uid = '$uuid' and t_class!=1000 GR
OUP BY t_class");
$rate_in=$speed_in;
$rate_out=$speed_out;
while ($row2=mysql_fetch_array($result2))
{
$tclass=$row2[t_class];
//тут указываются все классы вхдящего трафика
if (($tclass=="100")or($tclass=="101")or($tclass=="110")or($tclass=="201")or($tclass=="203")or($tclass=="204")or($tcl
ass=="205")or($tclass=="206")or($tclass=="207")or($tclass=="208")or($tclass=="209")or($tclass=="210")or($tclass=="211"))
$mb_in = $mb_in+round($row2[0]/$bytes_in_mbyte);
//тут указываются все классы исходящего трафика
if (($tclass=="150")or($tclass=="151")or($tclass=="160")or($tclass=="221")or($tclass=="223")or($tclass=="224")or($tcl
ass=="225")or($tclass=="226")or($tclass=="227")or($tclass=="228")or($tclass=="229")or($tclass=="230")or($tclass=="210")or($tc
lass=="231"))
$mb_out = $mb_out+round($row2[0]/$bytes_in_mbyte);
}
//правила снижения скорости входящего
if ($mb_in>1024*1) $rate_in=$speed_in-$speed_delta*1;
if ($mb_in>1024*2) $rate_in=$speed_in-$speed_delta*2;
if ($mb_in>1024*3) $rate_in=$speed_in-$speed_delta*3;
if ($mb_in>1024*4) $rate_in=$speed_in-$speed_delta*4;
if ($mb_in>1024*5) $rate_in=$speed_in-$speed_delta*5;
if ($mb_in>1024*6) $rate_in=$speed_in-$speed_delta*6;
if ($mb_in>1024*7) $rate_in=$speed_in-$speed_delta*7;
if ($mb_in>1024*8) $rate_in=$speed_in-$speed_delta*8;
//правила снижения скорости исходящего
if ($mb_out>1024*1) $rate_out=$speed_out-$speed_delta*1;
if ($mb_out>1024*2) $rate_out=$speed_out-$speed_delta*2;
if ($mb_out>1024*3) $rate_out=$speed_out-$speed_delta*3;
if ($mb_out>1024*4) $rate_out=$speed_out-$speed_delta*4;
if ($mb_out>1024*5) $rate_out=$speed_out-$speed_delta*5;
if ($mb_out>1024*6) $rate_out=$speed_out-$speed_delta*6;
if ($mb_out>1024*7) $rate_out=$speed_out-$speed_delta*7;
if ($mb_out>1024*8) $rate_out=$speed_out-$speed_delta*8;
//если в поле radius_attr хранится запись типа 160/128 то скрипт выставляет именно эту скорость для входящего/исходящего
if ($row[radius_attr]!=="")
{
$arr_rate=explode("/",$row[radius_attr]);
$rate_in=$arr_rate[0];
$rate_out=$arr_rate[1];
}
fputs ($f_in,"DEVICE=".$local_dev.",100Mbit,10Mbit\nRATE=".$rate_in."Kbit\nWEIGHT=10Kbit\nPRIO=5\n");
fputs ($f_out,"DEVICE=".$inet_dev.",100Mbit,10Mbit\nRATE=".$rate_out."Kbit\nWEIGHT=10Kbit\nPRIO=5\n");
$arr_ip=explode(" ",$row[ip]);
for($ai=0;$ai<count($arr_ip)-1;$ai++)
{
fputs ($f_in,"RULE=".$arr_ip[$ai]."\n");
fputs ($f_out,"RULE=".$arr_ip[$ai]."\n");
}
}
//создаём правило для локальной сети не ограничивающее скорость для локалки
$fname=$cbq_patch."cbq-1000.out";
$f_out=fopen($fname,"w");
fputs ($f_out,"DEVICE=".$local_dev.",100Mbit,10Mbit\nRATE=100Mbit\nWEIGHT=10Mbit\nPRIO=5
RULE=192.168.0.0/16,82.138.0.128/25
RULE=82.138.0.128/25,192.168.0.0/16
RULE=192.168.0.0/16,217.78.178.32/27
RULE=217.78.178.32/27,192.168.0.0/16
RULE=192.168.0.0/16,212.45.12.94/32
RULE=212.45.12.94/32,192.168.0.0/16\n");
?>