Message-ID: <45113B6D.8010803@zoomnet.ro>
Date: Wed, 20 Sep 2006 16:00:29 +0300
From: Alexandru Dragoi <alex@zoomnet.ro>
User-Agent: Thunderbird 1.5.0.5 (X11/20060728)
MIME-Version: 1.0
To: =?windows-1252?Q?=3F=3F=3F=3F=3F_=3F=3F=3F=3F=3F?= <safin.timur@gmail.com>
Subject: Re: [LARTC] how to setup massive traffic shaping? (2 class B nets)
References: <a460eff50609190442o46c1ef9ye4a911e33c97e4cf@mail.gmail.com>	
	<4510F46A.5040304@zoomnet.ro>	
	<a460eff50609200449oda482d6teeec44fbe04cbf2e@mail.gmail.com>	
	<45112E03.7030209@zoomnet.ro>
	<a460eff50609200550t1931a959p2d3430a067b46c84@mail.gmail.com>
In-Reply-To: <a460eff50609200550t1931a959p2d3430a067b46c84@mail.gmail.com>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit

????? ????? wrote:
> Hello, Alexandru
> I just adopt your script for B class net
> is it correct?
>
> tc qdisc add dev eth0 root handle 1: htb
> tc class add dev eth0 parent 1: classid 1:f000 htb rate 620mbit
>
>
> tc filter add dev eth0 parent 1: protocol ip prio 5 handle 0: u32 
> divisor 256
> tc filter add dev eth0 parent 1: prio 5 u32 ht 800:: match ip dst
> 172.26.0.0/16 hashkey mask 0x0000ff00 at 16 link 0:
>
>
>
> for i in `seq 0 255` ; do
> div=`printf "%x" $i`
> let j=$i+1
> tc filter add dev eth0 parent 1: protocol ip prio 5 handle $j: u32 
> divisor 256
> tc filter add dev eth0 parent 1: prio 5 u32 ht 0:$div: match ip dst
> 172.26.$i.0/24 hashkey mask 0x000000ff at 16 link $j:
>
> for q in `seq 0 255` ; do
> d=`printf "%x" $q`
> clsid=$[$i*256+$q]
> tc class add dev eth0 parent 1:f000 classid 1:$clsid htb rate 64kbit
> tc filter add dev eth0 parent 1: prio 5 u32 ht $j:$d match ip dst
> 172.26.$i.$q flowid 1:$clsid
> done
> done
>
>
>
> 2006/9/20, Alexandru Dragoi <alex@zoomnet.ro>:
>> ????? ????? wrote:
>> > Hello!
>> > yes, I no about 65000 rules and just add third interface to server. )
>> > what about
>> > tc filter add dev imq0 parent 1: prio 5 u32 ht 800:: match ip dst
>> > 172.22.0.0/17 hashkey mask 0x00007f00 at 16 link 0: ?
>> > shouldnt hashkey mask be 0x00007fff instead of 0x00007f00 ?
>> > and if it should be 0x00007f00 how do you calculate it?
>> >
>> >
>> > 2006/9/20, Alexandru Dragoi <alex@zoomnet.ro>:
>> >> ????? ????? wrote:
>> >> > Hello
>> >> > I have 2 class-B networks (172.22.0.0/16 and 172.23.0.0/16, over 
>> 130k
>> >> > of ip's) and need to setup
>> >> > traffic tbf shapers with 64kb/s for each ip from 172.22.0.0/16 and
>> >> > 128kb/s for each ip from 172.23.0.0/16
>> >> > just read lartc and don't understand how to use u32 for decreasing
>> >> > number of rules and hashing
>> >> > _______________________________________________
>> >> > LARTC mailing list
>> >> > LARTC@mailman.ds9a.nl
>> >> > http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
>> >> First you need imq. This because you can't have more than 65536 
>> classes.
>> >> Having 8 imqs you will be able to use 4 for download and 4 for 
>> upload.
>> >> However You will tell us if the machine will support everything 
>> :). So
>> >> you will divide the big class /15 into 4 classes /17
>> >>
>> >> iptables -t mangle -A POSTROUTING -o $clients_eth -d 172.22.0.0/17 -j
>> >> IMQ --todev 0
>> >>
>> >> and:
>> >>
>> >> tc qdisc add dev imq0 root handle 1: htb #Or whatever you use
>> >> tc class add dev imq0 parent 1: classid 1:f000 htb rate 620mbit #or
>> >> whatever ...
>> >>
>> >>
>> >> tc filter add dev imq0 parent 1: protocol ip prio 5 handle 0: u32
>> >> divisor 128
>> >> tc filter add dev imq0 parent 1: prio 5 u32 ht 800:: match ip dst
>> >> 172.22.0.0/17 hashkey mask 0x00007f00 at 16 link 0:
>> >>
>> >> for i in seq `0 127` ; do
>> >> div=`printf "%x" $i`
>> >> let j=$i+1
>> >> tc filter add dev imq0 parent 1: prio 5 u32 ht 0:$div: match ip dst
>> >> 172.22.$i.0/24 hashkey mask 0x000000ff at 16 link $j:
>> >> for q in seq `0 255`; do
>> >> d=`printf "%x" $q`
>> >> clsid=$[$i*256+$q]
>> >> tc class add dev imq0 parent 1: classid 1:$clsid htb rate 128kbit
>> >> tc filter add dev imq0 parent 1: prio 5 u32 ht $j:$d match ip dst
>> >> 172.22.$i.$q flowid 1:$clsid
>> >> done
>> >> done
>> >>
>> >> I hope i'm not missing something. For 172.22.128.0/17, instead of
>> >> 172.22.$i you will have 172.22.$[$i+128]
>> >> On other imq of course. For upload you just change dst with src, 
>> and "at
>> >> 16" into "at 12"
>> >>
>> >>
>> >> I'm really curious how it will work :D and how much it will take to
>> >> run it.
>> >>
>> >>
>> >>
>> Also, before:
>>
>> tc filter add dev imq0 parent 1: prio 5 u32 ht 0:$div: match ip dst
>> 172.22.$i.0/24 hashkey mask 0x000000ff at 16 link $j:
>>
>> Add line:
>>
>> tc filter add dev imq0 parent 1: protocol ip prio 5 handle $j: u32
>> divisor 256
>>
>> Now, you need both download and upload, so maybe upload goes via a
>> single card. Also the maximum number of divisor is 256, so a mask should
>> have only 8 bits set to 1. And 0x00007f00 will match only the last 7
>> bits on 3rd number on an ip address. So ip 172.22.45.2 will go,
>> considering the hashkey mask, to entry (45 & 0x7f), then represented in
>> hex, which is 0x23. The & means bitwise and, just how hashkey algoritm
>> works. Applying the that mask to ip 172.22.173.8 will also generate
>> 0x23. More about these you have to do some binary operations. Means you
>> will run the for loop for i in `seq 128 255`.
>>

If you skip 172.26.240.0 (i is 240, j is 0). It is eaxctly classid 
0xf000 :D Now, you can also try it on a different machine for testing, 
as i may try it too. I guess you are familiar with HTB, i use 620mbit 
because I believe you may have a stm4 connection. If it is gigabit you 
can raise it. The script seems correct.

