-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thu, 4 Dec 2003, Cristian Sava wrote:

> Salutare la toata lumea !
Hi

> Ideea este ca ce am creat eu in perl este greoi pentru ca nu
> reconfigureaza numai setarile unui anumit client/clienti ci reporneste
> setarile pentru toti clientii, si astfel la un nr. mare de clienti
> dureaza prea mult repornirea la cele x minute. Programul este relativ
> inteligent si cu multi parametri de configurare utili dar nu este
> fezabil pentru mai mult de 100-200 clienti.

Exista cel putin o solutie pt asta (daca problema principala din cate am
inteles eu este ca in timpul cat dureaza reinitializarea garantarilor 
clientii raman fara garantari si ai un burst de trafic pt cei cu garantari 
mici si packet loss pt cei cu banda mare). Una din solutii (pur userland) 
este sa folosesti 2 tree-uri htb. Creezi un htb in root, apoi 2 clase, 
ambele poti sa le pui de capacitate maxima 100mbit, apoi asocieti un qdisc 
htb la fiecare din aceste clase si apoi iti construiesti tree-ul tau de 
clase care inainte il puneai pe root, acum il pui pe unul din aceste 2 
qdisc-uri. Cand faci reinitializarea garantarilor, te apuci si 
construiesti tree-ul nou in qdisc-ul nefolosit curent si dupa ce termini 
faci switch de la un tree la celalalt modificand (cu tc filter change) 
filtrul de la baza care inainte trimintea spre celalalt tree.

Da, am uitat sa zic , pe langa cele 2 tree-uri trebuie sa ai un filtru pus 
pe root care sa trimita catre unul din tree-uri, apoi celelalte filtre 
care fac clasificarea efectiva se pun asociate qdisc-ului respectiv.

Un exemplu:

/sbin/tc qdisc del dev eth0 root


/sbin/tc qdisc add dev eth0 root handle a0: htb default 100
/sbin/tc class add dev eth0 parent a0: classid a0:a01 htb rate 100Mbit

# clasa default aici teoretic nu ar trebui sa se clasifice nimic
/sbin/tc class add dev eth0 parent a0:a01 classid a0:100 htb rate 16kbps

/sbin/tc class add dev eth0 parent a0:a01 classid a0:a10 htb rate 100Mbit
/sbin/tc class add dev eth0 parent a0:a01 classid a0:a20 htb rate 100Mbit

# filtrul de baza, initial trimite catre primul tree si anume a0:a10
/sbin/tc filter add dev eth0 parent a0: pref 1000 protocol ip handle 800::900 u32 
match ip dst 0/0 flowid a0:a10


Apoi pe fiecare din a0:a10 si a0:a20 pui cate un qdisc htb, pui clase 
acolo avand parent acel qdisc si filtre avand parent acel qdisc

Sper ca te-ai prins :)

BUGS: imediat dupa ce faci switch-ul cu tc change pe filtrul default de la 
un tree la celalalt vezi ca clientii vor prinde un mic burst  deoarece 
statisticile de burst ale lor sunt in tree-ul vechi, in cel nou au 0 si 
deci prind putin viteza dar fata de problema ta dinainte asta e complet 
neglijabila

atentie ca dupa ce faci tc change sa astepti niste secunde inainte sa 
stergi qdisc-ul de pe tree-ul vechi (asta daca il stergi) ca sa se 
"curete"" packetele din cozile din tree-ul vechi si nu sa le distrugi (ai 
avea packet loss altfel).

PS: alta solutie ar fi kernel level

- -- 
Mihai RUSU                                    Email: [EMAIL PROTECTED]
GPG : http://dizzy.roedu.net/dizzy-gpg.txt    WWW: http://dizzy.roedu.net
                       "Linux is obsolete" -- AST
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQE/zxFMPZzOzrZY/1QRAo7xAKCpRM9ICUomDAXUjaryPEaWKs6BuACg3AXm
m7mtkQBrLyxKMOvairtdnXI=
=xMPN
-----END PGP SIGNATURE-----

--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui