Linux Advanced Routing and Traffic Control list
 help / color / mirror / Atom feed
From: Konrad <kcem@tlen.pl>
To: lartc@vger.kernel.org
Subject: Re: [LARTC] Problem with marking packets...
Date: Thu, 26 May 2005 12:50:16 +0000	[thread overview]
Message-ID: <4295C608.3060007@tlen.pl> (raw)
In-Reply-To: <4293A677.2050802@tlen.pl>

[-- Attachment #1: Type: text/plain, Size: 1250 bytes --]

Andy Furniss wrote:
> If you meant eth2 rather than 3 and you are only shaping forwarded 
> traffic then you could get away without using imq.


  > So I assume the routing is working OK.
Yes... routing is working well.

>> IMQ is working in AB mode. I have src IP before nat, and dst after nat.

>> Upload traffic is going to IMQ1 here:
>> iptables -t mangle -A POSTROUTING -j IMQ --todev 1

> This rule will catch traffic headed for eth3(2) aswell.

Yep. I throw in class packets going outside my network in IMQ1.
Class packets which going inside my network I queue in IMQ0.

LAN traffic on LAN classes, Internet traffic on users classes.

> For uplink why not just shape on eth0 and eth1 directly, if you do this 
> already and want to double queue for some reason then be more specific 
> about what you send to imq dev1.
> 
> iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1
> iptables -t mangle -A POSTROUTING -o eth1 -j IMQ --todev 1

I'm including my not working HTB script.

As You see I want to classify trafic to link classes. Script is 
working... for 1 link to Internet. I want to distribute traffic to 
classes to several links, but I don't know how can I distinguish traffic 
which is going to first or second Internet link.

[-- Attachment #2: htb0.6o --]
[-- Type: text/plain, Size: 23757 bytes --]

#!/bin/bash
#
# rc.htb 0.6, (C)Lenthir 2oo4-2oo5, GNU GPL
# 2005-05-17 12:20
VER="0.6"
DAT="2005-05-17 12:20"

MAX=65535;
#######################
# Konfiguracja
#######################

##
# 1. ������cze i adresy IP
##

dev_isp="eth1 eth2 eth3"                                                #������cza ze ���wiatem zewn���trznym.
dev_ext="80.53.64.3"                                                    #IP zewn���trzne dla bramy.

ext_dwl[0]=600                                                          #Pr���dko������ ������cza. (Liczone od zera, w kolejno���ci dev_isp.)
ext_upl[0]=120
ext_dwl[1]=1980
ext_upl[1]=220
ext_dwl[2]=490
ext_upl[2]=490

int="`/etc/router/0.cfg` `/etc/router/1.cfg` `/etc/router/2.cfg`"       #Lista adres���w IP
lan_int="10.0.0.0/16"                                                   #Lista podsieci

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

##
# 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.)

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=0                                                               #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=0                                                    #maksymalna pr���dko������ kolejki nieuprzywilejowanej

# T  20 - ftp-data
# T  21 - ftp
# T  22 - ssh
# T  23 - telnet
# T  25 - SMTP
# TU 53 - DNS
# T  80 - HTTP
# T  110 - POP3
# T  143 - IMAP
# T  220 - IMAP3
# T  443 - HTTPS
# T  993 - IMAPS
# T  995 - POP3(SSL)
#  U 4569 - Tele Gadu-Gadu
# T  8074 - Gadu-Gadu
# TU 27015, 27025, 27050 - Counter-Strike

##
# 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=0                                                             #Info o tym jak wpadaj��� pakiety do kolejek LAN

#u_r2q=10                                                               #r2q
u_quantum=1500                                                          #quantum

TC="/sbin/tc"                                                           #���cie���ka do tc
MODPROBE="/sbin/modprobe"                                               #���cie���ka do modprobe
RMMOD="/sbin/rmmod"                                                     #���cie���ka do rmmod
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 $dev_ext
do
        if [ `echo $ipki | grep $srvip` != $ipki ]; then
                zew="$zew $srvip"
        fi
done

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

echo ""
if [[ $ile -ge $MAX ]]
        then
        echo "Maksymalna ilo������ 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

if [ `lsmod | grep "imq" | cut -d" " -f1` != "imq" ]; then
        $MODPROBE imq numdev=2 &> /dev/null
fi

echo " Ilo������ komputer���w: $ile"
echo "%===================================================================%"

# Download
echo " Ustawianie kolejki downloadu."

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

isp=0; v=1
for device in $dev_isp
do

# Obliczenia
tmp=$(echo "scale=3; ${ext_dwl[$isp]}%$ile" | bc)
min=$(echo "scale=3; ${ext_dwl[$isp]}/$ile" | bc)
pri_min=$(echo "scale=3; $min/2+$min%2" | bc)
sec_min=$(echo "scale=3; $min/2" | bc)
max=${ext_dwl[$isp]}

echo " ������cze: $((isp+1)). $device"
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 " Nieprzydzielone: $tmp kbit/s"
echo " "

qu0=`printf "%x\n" $v`
$TC class add dev imq0 parent 1:0 classid 1:$qu0 htb rate ${ext_dwl[$isp]}kbit ceil ${ext_dwl[$isp]}kbit
let "v=v+1"
for usr in $zew
        do
        qu1=`printf "%x\n" $v`
        qu2=`printf "%x\n" $((v+1))`
        qu3=`printf "%x\n" $((v+2))`
        
        $TC class add dev imq0 parent 1:$qu0 classid 1:$qu1 htb rate ${min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev imq0 parent 1:$qu1 classid 1:$qu2 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:$qu1 classid 1:$qu3 htb rate ${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq0 parent 1:$qu1 classid 1:$qu3 htb rate ${sec_min}kbit ceil ${npriv_d}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq0 parent 1:$qu2 sfq
        $TC qdisc add dev imq0 parent 1:$qu3 sfq
        $TC filter add dev imq0 protocol ip parent 1:0 pref 5 u32 match ip dst $usr flowid 1:$qu1
        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:$qu2
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 6 0xff match ip sport $prt 0xffff flowid 1:$qu2
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 6 0xff match ip dport $prt 0xffff flowid 1:$qu2
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 17 0xff match ip sport $prt 0xffff flowid 1:$qu2
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 17 0xff match ip dport $prt 0xffff flowid 1:$qu2
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 1 0xff flowid 1:$qu2
                 fi
        $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 7 u32 match ip dst $usr flowid 1:$qu3
        let "v=v+3"
        done

for usr in $int
        do
        qu1=`printf "%x\n" $v`
        qu2=`printf "%x\n" $((v+1))`
        qu3=`printf "%x\n" $((v+2))`
        
        $TC class add dev imq0 parent 1:$qu0 classid 1:$qu1 htb rate ${min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev imq0 parent 1:$qu1 classid 1:$qu2 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:$qu1 classid 1:$qu3 htb rate ${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq0 parent 1:$qu1 classid 1:$qu3 htb rate ${sec_min}kbit ceil ${npriv_d}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq0 parent 1:$qu2 sfq
        $TC qdisc add dev imq0 parent 1:$qu3 sfq
        $TC filter add dev imq0 protocol ip parent 1:0 pref 5 u32 match ip dst $usr flowid 1:$qu1
        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:$qu2
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 6 0xff match ip sport $prt 0xffff flowid 1:$qu2
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 17 0xff match ip sport $prt 0xffff flowid 1:$qu2
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 6 u32 match ip protocol 1 0xff flowid 1:$qu2
                 fi
        $TC filter add dev imq0 protocol ip parent 1:$qu1 pref 7 u32 match ip dst $usr flowid 1:$qu3
        let "v=v+3"
        done
done

# Upload dla podsieci, download dla serwera
if [ $lan_debug -eq 1 ]; then
echo -e "P���tla\t���r���d���o\t\t\tCel"
fi
if [ $srv_ldwl -ne 0 ]; then
        qu1=`printf "%x\n" $v`

        $TC class add dev imq0 parent 1:0 classid 1:$qu1 htb rate ${srv_ldwl}Mbit ceil ${srv_ldwl}Mbit quantum $u_quantum
        $TC qdisc add dev imq0 parent 1:$qu1 sfq
        i=0
        for ntr in $lan_int
                do
                for pri in ${ext[$i]}
                        do
                        for sec in $dev_ext
                                do
                                if [ $lan_debug -eq 1 ]; then echo -e "  1\t$pri\t\t$sec"; fi
                                $TC filter add dev imq0 protocol ip parent 1:0 pref 3 u32 match ip src $pri match ip dst $sec flowid 1:$qu1
                                done
                        done
                for sec in $dev_ext
                        do
                        if [ $lan_debug -eq 1 ]; then echo -e "  2\t$ntr\t\t$sec"; fi
                        $TC filter add dev imq0 protocol ip parent 1:0 pref 3 u32 match ip src $ntr match ip dst $sec flowid 1:$qu1
                        done
                let "i=i+1"
                done
	let "v=v+1"
fi
i=0
for ntr in $lan_int
        do
        qu1=`printf "%x\n" $v`

        $TC class add dev imq0 parent 1:0 classid 1:$qu1 htb rate ${int_upl[$i]}Mbit ceil ${int_upl[$i]}Mbit quantum $u_quantum
        $TC qdisc add dev imq0 parent 1:$qu1 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:$qu1
                        done
                done
        for sec in $dev_ext
                do
                if [ $lan_debug -eq 1 ]; then echo -e "  4\t$ntr\t\t$sec"; fi
                $TC filter add dev imq0 protocol ip parent 1:0 pref 4 u32 match ip src $ntr match ip dst $sec flowid 1:$qu1
                done
        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:$qu1
                done
	let "v=v+1"
        let "i=i+1"
        done
if [ $lan_debug -eq 1 ]; then echo " "; fi

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

# Upload
echo " Ustawianie kolejki uploadu."

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

isp=0; v=1
for device in $dev_isp
do

# Obliczenia
tmp=$(echo "scale=3; ${ext_upl[$isp]}%$ile" | bc)
min=$(echo "scale=3; ${ext_upl[$isp]}/$ile" | bc)
pri_min=$(echo "scale=3; $min/2+$min%2" | bc)
sec_min=$(echo "scale=3; $min/2" | bc)
max=${ext_upl[$isp]}

if [ $isp -ne 0 ]; then echo " "; fi
echo " ������cze: $((isp+1)). $device"
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 " Nieprzydzielone: $tmp kbit/s"

qu0=`printf "%x\n" $v`
$TC class add dev imq1 parent 2:0 classid 2:$qu0 htb rate ${ext_upl[$isp]}kbit ceil ${ext_upl[$isp]}kbit
let "v=v+1"
for usr in $zew
        do
        qu1=`printf "%x\n" $v`
        qu2=`printf "%x\n" $((v+1))`
        qu3=`printf "%x\n" $((v+2))`
        
        $TC class add dev imq1 parent 2:$qu0 classid 2:$qu1 htb rate ${min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev imq1 parent 2:$qu1 classid 2:$qu2 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:$qu1 classid 2:$qu3 htb rate ${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq1 parent 2:$qu1 classid 2:$qu3 htb rate ${sec_min}kbit ceil ${npriv_u}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq1 parent 2:$qu2 sfq
        $TC qdisc add dev imq1 parent 2:$qu3 sfq
        $TC filter add dev imq1 protocol ip parent 2:0 pref 5 u32 match ip src $usr flowid 2:$qu1
        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:$qu2
        fi
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 6 0xff match ip dport $prt 0xffff flowid 2:$qu2
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 6 0xff match ip sport $prt 0xffff flowid 2:$qu2
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 17 0xff match ip dport $prt 0xffff flowid 2:$qu2
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 17 0xff match ip sport $prt 0xffff flowid 2:$qu2
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 1 0xff flowid 2:$qu2
                 fi
	$TC filter add dev imq1 protocol ip parent 2:$qu1 pref 7 u32 match ip src $usr flowid 2:$qu3
        let "v=v+3"
        done

for usr in $int
        do
        qu1=`printf "%x\n" $v`
        qu2=`printf "%x\n" $((v+1))`
        qu3=`printf "%x\n" $((v+2))`
        
        $TC class add dev imq1 parent 2:$qu0 classid 2:$qu1 htb rate ${min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev imq1 parent 2:$qu1 classid 2:$qu2 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:$qu1 classid 2:$qu3 htb rate ${sec_min}kbit ceil ${max}kbit prio 2 quantum $u_quantum
        else
                $TC class add dev imq1 parent 2:$qu1 classid 2:$qu3 htb rate ${sec_min}kbit ceil ${npriv_u}kbit prio 2 quantum $u_quantum
        fi
        $TC qdisc add dev imq1 parent 2:$qu2 sfq
        $TC qdisc add dev imq1 parent 2:$qu3 sfq
        $TC filter add dev imq1 protocol ip parent 2:0 pref 5 u32 match ip src $usr flowid 2:$qu1
        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:$qu2
        fi
	for prt in $porty_tcp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 6 0xff match ip dport $prt 0xffff flowid 2:$qu2
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 17 0xff match ip dport $prt 0xffff flowid 2:$qu2
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 6 u32 match ip protocol 1 0xff flowid 2:$qu2
                 fi
        $TC filter add dev imq1 protocol ip parent 2:$qu1 pref 7 u32 match ip src $usr flowid 2:$qu3
	let "v=v+3"
        done
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
        qu1=`printf "%x\n" $v`

        $TC class add dev imq1 parent 2:0 classid 2:$qu1 htb rate ${srv_lupl}Mbit ceil ${srv_lupl}Mbit quantum $u_quantum
        $TC qdisc add dev imq1 parent 2:$qu1 sfq
        i=0
        for ntr in $lan_int
                do
                for pri in ${ext[$i]}
                        do
                        for sec in $dev_ext
                                do
                                if [ $lan_debug -eq 1 ]; then echo -e "  1\t$pri\t\t$pri"; fi
                                $TC filter add dev imq1 protocol ip parent 2:0 pref 3 u32 match ip src $sec match ip dst $pri flowid 2:$qu1
                                done
                        done
                for sec in $dev_ext
                        do
                        if [ $lan_debug -eq 1 ]; then echo -e "  2\t$sec\t\t$ntr"; fi
                        $TC filter add dev imq1 protocol ip parent 2:0 pref 3 u32 match ip src $sec match ip dst $ntr flowid 2:$qu1
                        done
                let "i=i+1"
                done
	let "v=v+1"
fi
if [ $sqd_spd -ne 0 ] && [ $p_squid != "" ]; then
        qu1=`printf "%x\n" $v`
        
        $TC class add dev imq1 parent 2:0 classid 2:$qu1 htb rate ${sqd_spd}Mbit ceil ${sqd_spd}Mbit quantum $u_quantum
        $TC qdisc add dev imq1 parent 2:$qu1 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:$qu1
	done
	let "v=v+1"
fi
i=0
for ntr in $lan_int
        do
        qu1=`printf "%x\n" $v`

        $TC class add dev imq1 parent 2:0 classid 2:$qu1 htb rate ${int_dwl[$i]}Mbit ceil ${int_dwl[$i]}Mbit quantum $u_quantum
        $TC qdisc add dev imq1 parent 2:$qu1 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:$qu1
                        done
                done
        for sec in $dev_ext
                do
                if [ $lan_debug -eq 1 ]; then echo -e "  4\t$sec\t\t$ntr"; fi
                $TC filter add dev imq1 protocol ip parent 2:0 pref 4 u32 match ip src $sec match ip dst $ntr flowid 2:$qu1
                done
        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:$qu1
                done
        let "v=v+1"
        let "i=i+1"
        done
echo "%===================================================================%"
echo " "

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

}
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

[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

  parent reply	other threads:[~2005-05-26 12:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-24 22:11 [LARTC] Problem with marking packets Konrad
2005-05-26  8:39 ` Konrad
2005-05-26 10:18 ` Andy Furniss
2005-05-26 12:50 ` Konrad [this message]
2005-05-26 19:20 ` Andy Furniss
2005-05-26 23:19 ` Konrad
2005-05-30 15:29 ` Andy Furniss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4295C608.3060007@tlen.pl \
    --to=kcem@tlen.pl \
    --cc=lartc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox