Differences

This shows you the differences between two versions of the page.

Link to this comparison view

saisp:labs:11:contents:09 [2014/05/18 14:00]
mihai.carabas created
saisp:labs:11:contents:09 [2016/05/23 17:35] (current)
alexandru.carp [09. [BONUS - 10p] tcng (traffic control next generation)]
Line 1: Line 1:
-==== 09. [BONUS] HTB u32 hashing tables ​====+==== 09. [BONUS - 10p] tcng (traffic control next generation) ​====
  
-Generarea de mână a filtrelor folosind ​''​hash tables''​ este anevoioasă și NU se recomandă. Vom folosi ​un program Cdisponibil [[http://​vcalinus.gemenii.ro/​prefixtree.c||aici]].+Utilitarul ​''​tc'' ​oferă un control foarte bun asupra parametrilor QoS. Dar, din păcate, sintaxa ​este foarte complexă, greu de reținut ​și puțin lizibilă. ''​tcng''​ este un utilitar cu o sintaxă mult mai expresivăasemănătoare limbajului CFolosind aceasta sintaxă, el poate genera comenzile ''​tc''​ echivalente.
  
-Descărcați și compilați programul ​''​prefixtree'':<​code ​bash+Pe stația ''​gateway''​ descărcați și instalați utilitarul ​''​tcng'':<​code>​ 
-root@gateway:​~#​ wget http://vcalinus.gemenii.ro/prefixtree.c +root@gateway:​~#​ wget http://archive.debian.org/debian/​pool/​main/​t/​tcng/​tcng_10b-3_amd64.deb 
-root@gateway:​~# ​make prefixtree +root@gateway:​~# ​dpkg -i tcng_10b-3_amd64.deb 
-cc     ​prefixtree.c ​  -o prefixtree +</​code>​
-root@gateway:​~# ​./prefixtree +
-IPv4 u32 hash filter generator - (C) 2006 Calin Velea+
  
-Syntaxprefixtree ​{prefix.in} ​{u32filters.out{interface} {src/dst[batch]+Un fișier ''​tcng''​ are următoarea sintaxă simplificată:<code bash> 
 +dev INTERFATA 
 +{ 
 +     QDISC () 
 +     { 
 +          class ( ACTIUNE ) FILTRU ; 
 +          class ( ACTIUNE ) FILTRU ; 
 +          ​... 
 +          class ( ACTIUNE ) FILTRU ; 
 +      ​} 
 +}
 </​code>​ </​code>​
-Vom scrie fișierul ''​prefix.in''​ care trebuie să conțină pe câte o linie adresa IP pentru care vrem să ne genereze filtrele și ''​classid''​-ul asociat. 
  
-Modificați scriptul ​de la exercițiul ​[[saisp:​labs:​11:​contents:​07|]] astfel încât să introducă perechea ​''​adresaIP:​classid''​ în fișierul ​''​prefix.in'' ​în loc să adauge filtrul asociatAdăugați și masca adresei IP (''​/32''​)+Ne propunem să creăm un fișier ''​tcng'',​ echivalent configurațiilor HTB de la [[saisp:​labs:​11:​contents:​05|]]
-<solution -hidden+  * Creati un fisier numit ''​eth0_htb.tc''​. 
-<file bash htbht.sh>​ +  * Specificați interfața ''​eth0''​ în câmpul ''​dev''​. 
-tc qdisc del dev eth0 root +  * Specificați ​''​QDISC''​-ul ''​htb''​. 
-tc qdisc add dev eth0 root handle 1: htb +  * Pentru fiecare clasă, specificați acțiunea ''​rate xMbps'',​ unde ''​x''​ este lățimea de bandă corespunzătoare. 
-tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 128k+  * Pentru fiecare clasă, specificați filtrul în formatul ​''​udp_port == ABCD''​, respectiv ''​tcp_port == ABCD'',​ unde ''​ABCD''​ este portul corespunzător
 +<code
 +dev eth0 
 +
 + htb () 
 +
 + class rate 1Mbps ) if udp_dport == 8000 ;  
 + class ( rate 40Mbps ) if udp_dport == 6000 ; 
 + class ( rate 5Mbps ) if tcp_dport == 21 ; 
 + class ( rate 3Mbps ) if tcp_dport == 80 ;  
 +
 +
 +</​code>​
  
-> prefix.in +Rulați ''​tcng''​ pentru a obține comenzile echivalente ''​tc'':<​code bash> 
- +tcng eth0_htb.tc
-classid=2 +
-for j in $(seq 0 15); +
-do +
-    for in $(seq 1 254); +
-    do +
-        classid=$(($classid + 1)) +
-        tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k +
-        echo 10.0.$j.$i/​32 $classid >> prefix.in +
-    done +
-done +
- +
-classid=$(($classid + 1)) +
-tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k +
-echo 192.168.1.1/​32 $classid >> prefix.in +
- +
-classid=$(($classid + 1)) +
-tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k +
-echo 192.168.1.2/​32 $classid >> prefix.in +
-</​file>​ +
-</​solution>​ +
- +
-Rulăm comanda ​''​prefixtree'' ​pe fișierul generat:<code bash> +
-root@gateway:​~# ​./prefixtree prefix.in filters.out eth0 dst +
-lines parsed: 4066 +
-total hashtables: 4+
 </​code>​ </​code>​
-Observați conținutul fișierului ​''​filters.out''​. Aplicăm filtrele ​generate:<code bash> +Inspectați comenzile ​''​tc''​ generate ​șobservați asemănările ​cu comenzile introduse manual.
-root@gateway:​~#​ chmod +x filters.out +
-root@gateway:​~#​ ./​filters.out +
-</​code>​ +
- +
-Testațdin nou folosind ''​iperf''​. Obervați faptul că stația ''​gateway'',​ cea care face limitările, nu mai intră în load (thread-urile kernel ''​ksoftirqd''​ nu CPU usage foarte mic).+
saisp/labs/11/contents/09.1400410859.txt.gz · Last modified: 2014/05/18 14:00 by mihai.carabas
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0