Salut,

Cu cateva saptamani in urma, intrebam pe lista daca stie cineva un tool, 
care sa stie mai multe nivele de imbrincare decat htb-tools si alte 
facilitati. Neprimind un raspuns concret, m-am apucat sambata sa scriu 
un tool care sa-mi indeplineasca cerintele.

Ce stie sa faca?
Fisierul/fisierele de configuratie sunt in format xml, cu DTD 
validation. Suporta pana la 10240 clase per nivel imbrincare. Nr. de 
nivele: 2^32 / 10240. Tot 10240 filtre per clasa. Din pacate, nu stie 
hashes (e prea mult pentru 2 zile de munca continua). In schimb stie de 
filtre u32 si filtre fw. Se poate opta pentru a configura ambele 
interfete odata (chiar cu valori diferite, in acelasi fisier), sau 
pentru o singura interfata pe fisier de configurare, precum multe 
altele.

Un exemplu:

Fisierul de configurare test.xml:
moya:~/work/xml-HTB$ cat samples/test.xml 
<?xml version="1.0"?>

<!--
   This is a sample file for HTB
-->

<!DOCTYPE htb SYSTEM "../etc/c-xml-HTB.dtd">

<htb
  if="eth0"
  outif="eth1"
>

<class
  name="main"
  rate="512kbit"
  ceil="1024kbit"
>

<class
  name="400M"
  rate="128kbit"
  ceil="512kbit"
  outrate="64kbit"
  outceil="128kbit"
>

<leaf/>

<filter type="u32" dst="192.168.0.0/24"/>
<filter type="u32" src="10.1.1.1/32"/>
<filter type="fw" mark="0x02"/>
</class>

</class>

<default/>
</htb>

Se face validarea prin DTD, generand errors in cazul in care 
utilizatorul a gresit sintaxe, nume de atribute, etc...

Rezultatul dupa rulare:

moya:~/work/xml-HTB$ ./test.sh 
# HTB for interfaces
# in (OUR side): eth0, out (PROVIDER side): eth1

DEV="eth0"
OUTDEV="eth1"


# add class, name: main
$TC add dev $DEV parent 0x01:0000 classid 0x01:0x0001 htb rate 512kbit 
ceil 1024kbit prio 1 quantum 1536
$TC add dev $OUTDEV parent 0x01:0000 classid 0x01:0x0001 htb rate 
512kbit ceil 1024kbit prio 1 quantum 1536

# add class, name: 400M
$TC add dev $DEV parent 0x01:0001 classid 0x01:0x2801 htb rate 128kbit 
ceil 512kbit prio 1 quantum 1536
$TC add dev $OUTDEV parent 0x01:0001 classid 0x01:0x2801 htb rate 64kbit 
ceil 128kbit prio 1 quantum 1536
$TC qdisc add dev $DEV parent 0x01:0x2801 handle 0x2801:0x00 sfq perturb 
5
$TC qdisc add dev $OUTDEV parent 0x01:0x2801 handle 0x2801:0x00 sfq 
perturb 5

$TC filter add dev $DEV protocol ip parent 0x01:0x00 prio 1 u32 \
    match ip dst 192.168.0.0/24 flowid 0x01:0x2801
$TC filter add dev $OUTDEV protocol ip parent 0x01:0x00 prio 1 u32 \
    match ip src 192.168.0.0/24 flowid 0x01:0x2801
$TC filter add dev $DEV protocol ip parent 0x01:0x00 prio 1 u32 \
    match ip src 10.1.1.1/32 flowid 0x01:0x2801
$TC filter add dev $OUTDEV protocol ip parent 0x01:0x00 prio 1 u32 \
    match ip dst 10.1.1.1/32 flowid 0x01:0x2801
$TC filter add dev $DEV protocol ip parent 0x01:0x00 prio 1 fw \
    handle 0x02 flowid 0x01:0xbffff238

# add default class
$TC class add dev $DEV parent 0x01:0x00 classid 0x01:0xffff htb rate 
8kbit ceil 8kbit quantum 1536
$TC class add dev $OUTDEV parent 0x01:0x00 classid 0x01:0xffff htb rate 
8kbit ceil 8kbit quantum 1536

Mai sunt ceva lipsuri in scriptul generat, dar la ora asta nu le mai 
corectez, mai e si maine o zi.

As vrea sa stiu, pentru cine e interesat de el, daca aveti instalat 
libxml1 (el e proiectat pe libxml2) pentru ca sunt membrii de structuri 
care difera ca denumire (doar 1-2 membrii in 1-2 structuri), exista si 
niste wrappers pentru ei in libxml2 si sa stiu daca folosesc cu 
wrappers, sau ramane pentru libxml2+.

libxml1/libxml2 este o librarie de este folosita in GNOME si in KDE, dar 
este standalone, nu depinde de GNOME si nici de KDE, in Slackware vine 
by default, deci nu ar trebui sa existe probleme in sensul asta in alte 
distributii.

Unde mi-ati recomanda sa upload proiectul? sourceforge.net, AFAIK, e 
slow si aglomerat, exista vreo alternativa mai buna? Deocamdata e pe 
CVS pe sistemul meu de la munca.

De asemenea, sub ce licenta, mi-ati recomanda, sa-l release?

Multumesc,
-- 
  Claudiu Cismaru

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


Raspunde prin e-mail lui