Napisanie tego kosztowało mnie duuużo wysiłku... ale się opłaciło.

Jak ktoś jest zainteresowany wcześniejszymi wersjami to też mam.
Dostępny tylko na grupie... prosiłbym o nierozprzestrzenianie.

Stronka się pojawi niebawem. Może w wakacje znajdę czas, żeby zrobić.

Oto skrypcik.

IMQ w jądrze (2.6) ustawić w tryb AB.
w /usr/src/linux/net/sched/sch_htb.c zmienić HTB_HYSTERESIS z 1 na 0
w /usr/src/linux/net/sched/sch_sfq.c zmienić SFQ_DEPTH z 128 na 16

Zrekompilować jądro. Spatchować iptables i squida... i gotowe :)

Patche znajdziesz tu:
IMQ - www.linuximq.net
SQUID - http://sed.pl/~mrk/qos/

Zielonym z BASHa tłumaczę, że pliki z IP u mnie po wykonaniu wyrzucają listę adresów IP.
(w środku zapewne będzie echo i jakaś pętelka:P)
Jak to zrobić... zapytajcie na grupie, albo sami ruszcie głową...

Uwagi i nowe pomsły mile widziane.

Wersja 0.6 jest pod kilka łącz. Numeruje też kolejki w systemie szesnastkowym. Planuję jeszcze zrobić tak, żeby kilka kompów jednego usera (który nie chce mieć drożej, a chce mieć na wszystkich kompach net) mogło pracować na jednej jego kolejce.

Może BOSS pozwoli mi upublicznić i prowadzić ten projekt :P

--
Podziękowania dla Linio za jego kurs HTB.
Od tego się zaczęło: linio.terramail.pl/htb.pdf
A było to w październiku A.D. 2003 :P Także naprawde dużo roboty:)

Pozdro,
Lenthir
#!/bin/bash
#
# rc.htb 0.5.5, (C)Lenthir 2oo4-2oo5, GNU GPL
# 2005-04-24 23:14
VER="0.5.5"
DAT="2005-04-24 21:24"

MAX=3330
#######################
# Konfiguracja
#######################

##
# 1. Łącze i adresy IP
##

ext_dwl=1980                                                            
#Prędkość łącza
ext_upl=220

int="`/etc/router/0.cfg` `/etc/router/1.cfg` `/etc/router/2.cfg`"       #Lista 
adresów IP
lan_int="192.168.0.0/24 192.168.1.0/24 192.168.2.0/24"                  #Lista 
podsieci

ext[0]="80.53.64.2"                                                     
#Zewnetrzne adresy IP w podsieciach. (Liczone od zera, w kolejności lan_int)
ext[1]=""
ext[2]=""

srv_ext="80.53.64.3"                                                    #IP 
zewnętrzne bramy

##
# 2. Przepustowość łącz, serwer proxy
##

int_dwl[0]=2; int_upl[0]=2                                              
#Prędkość transferu między podsieciami. (Liczone od zera, w kolejności lan_int)
int_dwl[1]=2; int_upl[1]=2
int_dwl[2]=2; int_upl[2]=2

srv_ldwl=5; srv_lupl=5                                                  
#Prędkość LAN serwera (0 = taka jak maksymalna LAN)

p_squid="8080"                                                          #port 
w3cache ("" = brak serwera w3cache)
sqd_spd=85                                                              
#prędkość uploadu ze squida (0 = z prędkością transferu serwera)

##
# 3. Porty priorytetowe, ograniczenie kolejki nieuprzywilejowanej
##

porty_tcp="21 22 23 25 53 80 110 143 220 443 993 995 27015"             
#uprzywilejowane porty tcp
porty_udp="53 4569"                                                     
#uprzywilejowane porty udp
npriv_d=0; npriv_u=8                                                    
#maksymalna prędkość kolejki nieuprzywilejowanej

##
# 4. Wykrywanie problemów, inne opcje
##

pping=1                                                                 #0 - 
ping w kolejce normalnej / 1 - ping w kolejce priorytetowej

net_debug=0                                                             #Info o 
tym jak wpadają pakiety do kolejek dla użytkowników
lan_debug=1                                                             #Info o 
tym jak wpadają pakiety do kolejek LAN

#u_r2q=10                                                               #r2q
u_quantum=1500                                                          #quantum

TC="/sbin/tc"                                                           
#ścieżka do tc
IP="/sbin/ip"                                                           
#ścieżka do ip
IPTABLES="/usr/local/sbin/iptables"                                     
#ścieżka do iptables
firewall="/etc/init.d/rc.iptables restart"                              #jak 
zrestartować firewall

#######################

#Sprawdza czy wszystkie srv_ext są też w ext, jesli nie dopisuje
i=0;
for l in $lan_int
do
zew="$zew ${ext[$i]}"
let "i=$i+1"
done

ipki="$zew $int"
for srvip in $srv_ext
do
if [[ `echo $ipki | grep $srvip` != $ipki ]]; then
zew="$zew $srvip"
fi
done

ile_int=`echo ${int}|awk '{print NF}'`
ile_ext=`echo ${zew}|awk '{print NF}'`
ile=$(echo "$ile_int + $ile_ext" | bc)

if [[ $ile -ge $MAX ]]
        then
        echo "Niedopuszczalnie dużo komputerów!"
        exit 1
        fi


stop()
{
$TC qdisc del root dev imq0 2> /dev/null
$TC qdisc del root dev imq1 2> /dev/null
$IP link set imq0 down
$IP link set imq1 down
}

start()
{ stop

# download
tmp=$(echo "scale=3; $ext_dwl%$ile" | bc)
min=$(echo "scale=3; $ext_dwl/$ile" | bc)
pri_min=$(echo "scale=3; $min/2+$min%2" | bc)
sec_min=$(echo "scale=3; $min/2" | bc)
max=$ext_dwl

echo " Ilość komputerów: $ile"
echo "%===================================================================%"
echo " Ustawianie kolejki downloadu."
echo " Minimalny download: $min kbit/s"
echo " Maksymalny download: $max kbit/s"
echo " Kolejka: -priorytetowa: $pri_min kbit/s  -normalna: $sec_min kbit/s"
echo " Niewykorzystane: $tmp kbit/s"

if [[ $u_r2q == "" ]]; then
$TC qdisc add dev imq0 root handle 1:0 htb
else
$TC qdisc add dev imq0 root handle 1:0 htb r2q $u_r2q
fi

$TC class add dev imq0 parent 1:0 classid 1:1 htb rate ${ext_dwl}kbit ceil 
${ext_dwl}kbit
j=2
for usr in $zew
        do
        $TC class add dev imq0 parent 1:1 classid 1:$j htb rate ${min}kbit ceil 
${max}kbit quantum $u_quantum
        $TC class add dev imq0 parent 1:$j classid 1:$(($j+1)) htb rate 
${pri_min}kbit ceil ${max}kbit prio 1 quantum $u_quantum
        if [ $npriv_d -eq 0 ]; then
                $TC class add dev imq0 parent 1:$j classid 1:$(($j+2)) htb rate 
${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq0 parent 1:$j classid 1:$(($j+2)) htb rate 
${sec_min}kbit ceil ${npriv_d}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq0 parent 1:$(($j+1)) sfq
        $TC qdisc add dev imq0 parent 1:$(($j+2)) sfq
        $TC filter add dev imq0 protocol ip parent 1:0 pref 5 u32 match ip dst 
$usr flowid 1:$j
        if [[ $p_squid != "" ]]; then
        $TC filter add dev imq0 protocol ip parent 1:0 pref 1 u32 match ip dst 
$usr match ip sport $p_squid 0xffff match ip tos 8 0xff flowid 1:$(($j+1))
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 6 0xff match ip sport $prt 0xffff flowid 1:$(($j+1))
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 6 0xff match ip dport $prt 0xffff flowid 1:$(($j+1))
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 17 0xff match ip sport $prt 0xffff flowid 1:$(($j+1))
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 17 0xff match ip dport $prt 0xffff flowid 1:$(($j+1))
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 1 0xff flowid 1:$(($j+1))
                 fi
        $TC filter add dev imq0 protocol ip parent 1:$j pref 7 u32 match ip dst 
$usr flowid 1:$((j+2))
        let "j=j+3"
        done

for usr in $int
        do
        $TC class add dev imq0 parent 1:1 classid 1:$j htb rate ${min}kbit ceil 
${max}kbit quantum $u_quantum
        $TC class add dev imq0 parent 1:$j classid 1:$(($j+1)) htb rate 
${pri_min}kbit ceil ${max}kbit prio 1 quantum $u_quantum
        if [ $npriv_d -eq 0 ]; then
                $TC class add dev imq0 parent 1:$j classid 1:$(($j+2)) htb rate 
${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq0 parent 1:$j classid 1:$(($j+2)) htb rate 
${sec_min}kbit ceil ${npriv_d}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq0 parent 1:$(($j+1)) sfq
        $TC qdisc add dev imq0 parent 1:$(($j+2)) sfq
        $TC filter add dev imq0 protocol ip parent 1:0 pref 5 u32 match ip dst 
$usr flowid 1:$j
        if [[ $p_squid != "" ]]; then
        $TC filter add dev imq0 protocol ip parent 1:0 pref 1 u32 match ip dst 
$usr match ip sport $p_squid 0xffff match ip tos 8 0xff flowid 1:$(($j+1))
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 6 0xff match ip sport $prt 0xffff flowid 1:$(($j+1))
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 17 0xff match ip sport $prt 0xffff flowid 1:$(($j+1))
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq0 protocol ip parent 1:$j pref 6 u32 
match ip protocol 1 0xff flowid 1:$(($j+1))
                 fi
        $TC filter add dev imq0 protocol ip parent 1:$j pref 7 u32 match ip dst 
$usr flowid 1:$((j+2))
        let "j=j+3"
        done

#Upload dla podsieci, download dla serwera
if [ $lan_debug -eq 1 ]; then
echo " "
echo -e "Pętla\tŹródło\t\t\tCel"
fi
if [ $srv_ldwl -ne 0 ]; then
        $TC class add dev imq0 parent 1:0 classid 1:$j htb rate ${srv_ldwl}Mbit 
ceil ${srv_ldwl}Mbit quantum $u_quantum
        $TC qdisc add dev imq0 parent 1:$j sfq
        i=0
        for ntr in $lan_int
                do
                for pri in ${ext[$i]}
                        do
                        if [ $lan_debug -eq 1 ]; then echo -e "  
1\t$pri\t\t$srv_ext"; fi
                        $TC filter add dev imq0 protocol ip parent 1:0 pref 3 
u32 match ip src $pri match ip dst $srv_ext flowid 1:$j
                        done
                if [ $lan_debug -eq 1 ]; then echo -e "  2\t$ntr\t\t$srv_ext"; 
fi
                $TC filter add dev imq0 protocol ip parent 1:0 pref 3 u32 match 
ip src $ntr match ip dst $srv_ext flowid 1:$j
                let "i=i+1"
                done
        let "j=j+1"
fi
i=0
for ntr in $lan_int
        do
        $TC class add dev imq0 parent 1:0 classid 1:$j htb rate 
${int_upl[$i]}Mbit ceil ${int_upl[$i]}Mbit quantum $u_quantum
        $TC qdisc add dev imq0 parent 1:$j sfq
        for pri in ${ext[$i]}
                do
                for sec in ${zew/${ext[$i]}/}
                        do
                        if [ $lan_debug -eq 1 ]; then echo -e "  
3\t$pri\t\t$sec"; fi
                        $TC filter add dev imq0 protocol ip parent 1:0 pref 4 
u32 match ip src $pri match ip dst $sec flowid 1:$j
                        done
                done
        if [ $lan_debug -eq 1 ]; then echo -e "  4\t$ntr\t\t$srv_ext"; fi
        $TC filter add dev imq0 protocol ip parent 1:0 pref 4 u32 match ip src 
$ntr match ip dst $srv_ext flowid 1:$j
        for ipek in $lan_int ${zew/$srv_ext/}
                do
                if [ $lan_debug -eq 1 ]; then echo -e "  3\t$ntr\t\t$ipek"; fi
                $TC filter add dev imq0 protocol ip parent 1:0 pref 4 u32 match 
ip src $ntr match ip dst $ipek flowid 1:$j
                done
        let "j=j+1"
        let "i=i+1"
        done

$IPTABLES -t mangle -A PREROUTING -j IMQ --todev 0
$IP link set imq0 up

echo " "

# upload
tmp=$(echo "scale=3; $ext_upl%$ile" | bc)
min=$(echo "scale=3; $ext_upl/$ile" | bc)
pri_min=$(echo "scale=3; $min/2+$min%2" | bc)
sec_min=$(echo "scale=3; $min/2" | bc)
max=$ext_upl

echo " Ustawianie kolejki uploadu."
echo " Maksymalny upload: $max kbit/s"
echo " Minimalny upload userów: $min kbit/s"
echo " Kolejka: -priorytetowa: $pri_min kbit/s  -normalna: $sec_min kbit/s"
echo " Niewykorzystane: $tmp kbit/s"
echo "%===================================================================%"

if [[ $u_r2q == "" ]]; then
$TC qdisc add dev imq1 root handle 2:0 htb
else
$TC qdisc add dev imq1 root handle 2:0 htb r2q $u_r2q
fi

$TC class add dev imq1 parent 2:0 classid 2:1 htb rate ${ext_upl}kbit ceil 
${ext_upl}kbit

j=2
for usr in $zew
        do
        $TC class add dev imq1 parent 2:1 classid 2:$j htb rate ${min}kbit ceil 
${max}kbit quantum $u_quantum
        $TC class add dev imq1 parent 2:$j classid 2:$(($j+1)) htb rate 
${pri_min}kbit ceil ${max}kbit prio 1 quantum $u_quantum
        if [ $npriv_u -eq 0 ]; then
                $TC class add dev imq1 parent 2:$j classid 2:$(($j+2)) htb rate 
${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq1 parent 2:$j classid 2:$(($j+2)) htb rate 
${sec_min}kbit ceil ${npriv_u}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq1 parent 2:$(($j+1)) sfq
        $TC qdisc add dev imq1 parent 2:$(($j+2)) sfq
        $TC filter add dev imq1 protocol ip parent 2:0 pref 5 u32 match ip src 
$usr flowid 2:$j
        if [[ $p_squid != "" ]]; then
        $TC filter add dev imq1 protocol ip parent 2:0 pref 1 u32 match ip src 
$usr match ip dport $p_squid 0xffff flowid 2:$(($j+1))
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 6 0xff match ip dport $prt 0xffff flowid 2:$(($j+1))
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 6 0xff match ip sport $prt 0xffff flowid 2:$(($j+1))
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 17 0xff match ip dport $prt 0xffff flowid 2:$(($j+1))
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 17 0xff match ip sport $prt 0xffff flowid 2:$(($j+1))
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 1 0xff flowid 2:$(($j+1))
                 fi
        $TC filter add dev imq1 protocol ip parent 2:$j pref 7 u32 match ip src 
$usr flowid 2:$((j+2))
        let "j=j+3"
        done

for usr in $int
        do
        $TC class add dev imq1 parent 2:1 classid 2:$j htb rate ${min}kbit ceil 
${max}kbit quantum $u_quantum
        $TC class add dev imq1 parent 2:$j classid 2:$(($j+1)) htb rate 
${pri_min}kbit ceil ${max}kbit prio 1 quantum $u_quantum
        if [ $npriv_u -eq 0 ]; then
        $TC class add dev imq1 parent 2:$j classid 2:$(($j+2)) htb rate 
${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
        $TC class add dev imq1 parent 2:$j classid 2:$(($j+2)) htb rate 
${sec_min}kbit ceil ${npriv_u}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq1 parent 2:$(($j+1)) sfq
        $TC qdisc add dev imq1 parent 2:$(($j+2)) sfq
        $TC filter add dev imq1 protocol ip parent 2:0 pref 5 u32 match ip src 
$usr flowid 2:$j
        if [[ $p_squid != "" ]]; then
        $TC filter add dev imq1 protocol ip parent 2:0 pref 1 u32 match ip src 
$usr match ip dport $p_squid 0xffff flowid 2:$(($j+1))
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 6 0xff match ip dport $prt 0xffff flowid 2:$(($j+1))
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 17 0xff match ip dport $prt 0xffff flowid 2:$(($j+1))
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq1 protocol ip parent 2:$j pref 6 u32 
match ip protocol 1 0xff flowid 2:$(($j+1))
                 fi
        $TC filter add dev imq1 protocol ip parent 2:$j pref 7 u32 match ip src 
$usr flowid 2:$((j+2))
        let "j=j+3"
        done

#Download dla podsieci, upload dla serwera
if [ $lan_debug -eq 1 ]; then
echo " "
echo -e "Pętla\tŹródło\t\t\tCel"
fi
if [ $srv_lupl -ne 0 ]; then
        $TC class add dev imq1 parent 2:0 classid 2:$j htb rate ${srv_lupl}Mbit 
ceil ${srv_lupl}Mbit quantum $u_quantum
        $TC qdisc add dev imq1 parent 2:$j sfq
        i=0
        for ntr in $lan_int
                do
                for pri in ${ext[$i]}
                        do
                        if [ $lan_debug -eq 1 ]; then echo -e "  
1\t$srv_ext\t\t$pri"; fi
                        $TC filter add dev imq1 protocol ip parent 2:0 pref 3 
u32 match ip src $srv_ext match ip dst $pri flowid 2:$j
                        done
                if [ $lan_debug -eq 1 ]; then echo -e "  2\t$srv_ext\t\t$ntr"; 
fi
                $TC filter add dev imq1 protocol ip parent 2:0 pref 3 u32 match 
ip src $srv_ext match ip dst $ntr flowid 2:$j
                let "i=i+1"
                done
        let "j=j+1"
fi
if [ $sqd_spd -ne 0 ] && [ $p_squid != "" ]; then
        $TC class add dev imq1 parent 2:0 classid 2:$j htb rate ${sqd_spd}Mbit 
ceil ${sqd_spd}Mbit quantum $u_quantum
        $TC qdisc add dev imq1 parent 2:$j sfq
        for ipek in $lan_int ${zew/$srv_ext/}
        do
                if [ $lan_debug -eq 1 ]; then echo -e " 
HIT\t$srv_ext:$p_squid\t\t$ipek"; fi
                $TC filter add dev imq1 protocol ip parent 2:0 pref 2 u32 match 
ip dst $ipek match ip sport $p_squid 0xffff flowid 2:$j
        done
        let "j=j+1"
fi
i=0
for ntr in $lan_int
         do
         $TC class add dev imq1 parent 2:0 classid 2:$j htb rate 
${int_dwl[$i]}Mbit ceil ${int_dwl[$i]}Mbit quantum $u_quantum
         $TC qdisc add dev imq1 parent 2:$j sfq
         for pri in ${ext[$i]}
                 do
                 for sec in ${zew/${ext[$i]}/}
                         do
                         if [ $lan_debug -eq 1 ]; then echo -e "  
3\t$sec\t\t$pri"; fi
                         $TC filter add dev imq1 protocol ip parent 2:0 pref 4 
u32 match ip src $sec match ip dst $pri flowid 2:$j
                         done
                 done
         if [ $lan_debug -eq 1 ]; then echo -e "  4\t$srv_ext\t\t$ntr"; fi
         $TC filter add dev imq1 protocol ip parent 2:0 pref 4 u32 match ip src 
$srv_ext match ip dst $ntr flowid 2:$j
         for ipek in $lan_int ${zew/$srv_ext/}
                 do
                 if [ $lan_debug -eq 1 ]; then echo -e "  5\t$ipek\t\t$ntr"; fi
                 $TC filter add dev imq1 protocol ip parent 2:0 pref 4 u32 
match ip src $ipek match ip dst $ntr flowid 2:$j
                 done
         let "j=j+1"
         let "i=i+1"
         done

$IPTABLES -t mangle -A POSTROUTING -j IMQ --todev 1
$IP link set imq1 up

echo " "

}
echo "rc.htb $VER, (C)Lenthir 2oo4-2oo5, GNU GPL"
echo "$DAT"
case "$1" in
    'start')
      echo "Uruchamianie kolejkowania..."
      start
      echo "Gotowe."
      exit 0
      ;;
    'stop')
      echo -n "Zatrzymywanie kolejkowania..."
      stop
      echo " wykonano."
      ;;
    'restart')
      echo "Restartowanie kolejkowania..."
      $firewall
      start
      echo "Gotowe."
      ;;
    'status')
      echo "Klasy na interfejsie imq0!"
      echo "%====================================%"
      $TC class show dev imq0 | grep root
      $TC class show dev imq0 | grep -v root | sort | nl
      echo "Klasy na interfejsie imq1!"
      echo "%====================================%"
      $TC class show dev imq1 | grep root
      $TC class show dev imq1 | grep -v root | sort | nl
      ;;
    'stat')
      if [[ "$2" == "" ]]; then
        echo "Script need second argument - adress IP"
        exit 1
      elif [[ "$2" == "lan" ]]; then
      j=2
        for usr in $zew
                do
                let "j=j+3"
                done
        for usr in $int
                do
                let "j=j+3"
                done
      i=0;pri=$j;sec=$j;trs="echo \"Transfer w LAN\""
        if [ $srv_ldwl -ne 0 ] || [ $srv_lupl -ne 0 ]; then trs="$trs && echo 
\"Serwer:\""; fi
        if [ $srv_ldwl -ne 0 ]; then
        trs="$trs && tc -s class show dev imq0 | grep -A 3 \"htb 1:$pri \""
        let "pri=pri+1"
        fi
        if [ $srv_lupl -ne 0 ]; then
        trs="$trs && tc -s class show dev imq1 | grep -A 3 \"htb 2:$sec \""
        let "sec=sec+1"
        fi
        if [ $sqd_spd -ne 0 ] && [ $p_squid != "" ]; then
        trs="$trs && echo \"Squid HIT:\" && tc -s class show dev imq1 | grep -A 
3 \"htb 2:$sec \""
        let "sec=sec+1"
        fi
        for uvs in $lan_int
                do
                trs="$trs && echo \"Lan[$i]:\" && tc -s class show dev imq0 | 
grep -A 3 \"htb 1:$pri \" && tc -s class show dev imq1 | grep -A 3 \"htb 2:$sec 
\""
                let "pri=pri+1"
                let "sec=sec+1"
                let "i=i+1"
                done
        watch -d -n 1 "$trs"
      else
      j=2
        for usr in $zew
                do
                if [[ "$2" == "$usr" ]]; then
                        watch -d -n 1 "echo \"Download: \" && tc -s class show 
dev imq0 | grep -A 3 \"htb 1:$j \" && tc -s class show dev imq0 | grep -A 3 
\"1:$(($j+1)) \" && tc -s class show dev imq0 | grep -A 3 \"1:$(($j+2)) \" && 
echo && echo \"Upload: \" && tc -s class show dev imq1 | grep -A 3 \"htb 2:$j 
\" && tc -s class show dev imq1 | grep -A 3 \"2:$(($j+1)) \" && tc -s class 
show dev imq1 | grep -A 3 \"2:$(($j+2)) \""
                        echo "Zakończono."
                        exit 0
                fi
                let "j=j+3"
                done
        for usr in $int
                do
                if [[ "$2" == "$usr" ]]; then
                        watch -d -n 1 "echo \"Download: \" && tc -s class show 
dev imq0 | grep -A 3 \"htb 1:$j \" && tc -s class show dev imq0 | grep -A 3 
\"1:$(($j+1)) \" && tc -s class show dev imq0 | grep -A 3 \"1:$(($j+2)) \" && 
echo && echo \"Upload: \" && tc -s class show dev imq1 | grep -A 3 \"htb 2:$j 
\" && tc -s class show dev imq1 | grep -A 3 \"2:$(($j+1)) \" && tc -s class 
show dev imq1 | grep -A 3 \"2:$(($j+2)) \""
                        echo "Zakończono."
                        exit 0
                fi
                let "j=j+3"
                done
      fi
      ;;
    *)
      echo
      echo "Użycie: rc.htb start|stop|restart|status"
      echo "rc.htb stat <lan|adress IP>"
      exit 1
      ;;
esac

Odpowiedź listem elektroniczym