отдавна имам забъркано едно скриптче... за шейпър.
написнано е на пхп за конзола.
понеже съм се изчерпал идейно, а и понеже не му разбирам тънкостите, реших да го споделя с всички вас.
ако някой има желание да каже кое и как може да се направи по добре.
или направо да ми каже че съм идиот...

лошо няма.
и така условията който покрива са следните.
1. поради условията роутера е с 1 интерфейс.
2. за това се маркира трафика с иптаблес за изходящия трафик.
3. знам че доставчика ми маркира с тос на бордър гейтуейя пакетите . за пииринг с 2 за другия трафик с 4
4. ай-пи адресите са на писани в файл всеки на ред след него скорост в битове. след това има още един архаичен параметъ който вече не изолвам
5. може и да има и 5 ама не се сещам сега.
ще се радвам да обсядя с всеки предимства и недостатци и възможности за подобрение което включва и самото пренаписване на скрипта на нещо различно от пхп
ето и чудото:
Примерен код |
#!/usr/bin/php -q <?php `/sbin/tc qdisc del dev eth0 root`; `/sbin/tc qdisc add dev eth0 root handle 1 htb default 2 r2q 3`;
#peering `/sbin/tc class add dev eth0 parent 1: classid 1:5 htb rate 1800Kbit prio 2`; #internet `/sbin/tc class add dev eth0 parent 1: classid 1:6 htb rate 4700Kbit prio 2`;
#upload ALL `/sbin/tc class add dev eth0 parent 1: classid 1:7 htb rate 2000Kbit`; for($i=2;$i<501;$i++){ $y=100+$i; echo "upload: $y\r"; `/sbin/tc class add dev eth0 parent 1: classid 1:$y htb rate 128Kbit`; `/sbin/tc qdisc add dev eth0 parent 1:$y handle $y sfq perturb 10`; `/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 200 handle $i fw classid 1:$y`; } #upload # ICMP also goes into low latency class 1:5 (for measurements). #`/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:5`;
$f=file("htbinit.conf"); $num=1000; while(list($key,$val)=each($f)){ list($ipaddress,$rate,$connection_type)=explode(" ",$val); $connection_type=trim($connection_type); $night_coef=$argv[1]; if($night_coef<1) $night_coef=1; $rate_int=trim($rate); #skorost internatinal $over_int=($rate_int*6*$night_coef); #ne pri svoboden intern $rate_peer=($rate_int); #skorost peer $over_peer=($rate_peer*4*$night_coef); #narastvane pri svoboden peer $rate_int=$rate_int."Kbit"; $rate_peer=$rate_peer."Kbit"; $over_int=$over_int."Kbit"; $over_peer=$over_peer."Kbit"; #NEW IDIEAAAAAA $rate_int="6Kbit"; $rate_peer="12Kbit"; #################### echo "download: $num\r"; `/sbin/tc class add dev eth0 parent 1:5 classid 1:$num htb rate $rate_int ceil $over_int quantum 2000`; echo "$num rate $rate_peer ceil $over_peer\n"; `/sbin/tc qdisc add dev eth0 parent 1:$num handle $num sfq perturb 10`; `/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip tos 0x02 0xff match ip dst $ipaddress classid 1:$num`; $num++; `/sbin/tc class add dev eth0 parent 1:6 classid 1:$num htb rate $rate_peer ceil $over_peer quantum 2000`; echo "$num rate $rate_int ceil $over_int\n"; `/sbin/tc qdisc add dev eth0 parent 1:$num handle $num sfq perturb 10`; `/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip tos 0x04 0xff match ip dst $ipaddress classid 1:$num`; echo "download: $num\r"; $num++; } echo "\n"; ?>
|
а htbinit.conf съдържа ето това:
Примерен код |
192.168.1.2 2048 s 192.168.1.3 128 s 192.168.1.4 128 w 192.168.1.5 128 s 192.168.1.6 128 s 192.168.1.7 128 w 192.168.1.8 256 s 192.168.1.9 128 s 192.168.1.10 64 w 192.168.1.11 64 s 192.168.1.12 64 s 192.168.1.13 64 s 192.168.1.14 64 w
|
'>