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

 лошо няма.
и така условията който покрива са следните.
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
 
 | 
 '>
'>