Dans ce paragraphe nous allons donner les bases du langage Tcl, les principes de l'OTcl et les explications sur le mcanisme qui permet un programme C d'utiliser un interprteur Tcl. Pour crire un programme en NS-2 on peut utiliser un diteur de texte de notre choix (vim, emacs, joe, . . .). NS-2 est bas sur le langage TCL. On doit donc donner une extension .tcl nos fichiers. Quand on a crit un programme simu.tcl, on peut faire partir la simulation en tapant ns simu.tcl. Si notre simulation gnre des traces, on peut les regarder laide dun diteur de texte. Si notre simulation gnre un fichier nom.nam, on peut louvrir en tapant nam nom.nam.
Tcl est un langage de commande comme le shell UNIX mais qui sert contrler les applications. Son nom signifie Tool Command Language. Tcl offre des structures de programmation telles que les boucles, les procdures ou les notions de variables. Il y a deux principales faons de se servir de Tcl: comme un langage autonome interprt ou comme une interface applicative d'un programme classique crit en C ou C++. En pratique, l'interprteur Tcl se prsente sous la forme d'une bibliothque de procdures C qui peut tre facilement incorpore dans une application. Cette application peut alors utiliser les fonctions standards du langage Tcl mais galement ajouter des commandes l'interprteur.
Type et structures de contrle du langage (O)Tcl
- La fin de ligne est le dlimiteur d'instructions - le seul type de donnes est le type chane de caractres (ou liste de chanes) - Les commentaires commencent par # et finissent la fin de ligne - La valeur d'une variable a est $a - Le tableau suivant dcrit les principales instructions.
Cration d'un scnario Pour dcrire un rseau et son trafic, il faut dfinir dans l'ordre : 1. la topologie du rseau : les noeuds et les arcs 2. la couche transport (UDP, TCP, ...) entre des pairs de noeuds 3. la couche application qui va fournir les donnes 4. des temporisateurs prcisant les instants auxquels les transferts vont dmarrer La couche rseau correspond IP et est gre par ns-2. Dans un fichier otcl, on commence par crer un simulateur Simulator Network 2 NS-2 NS-2 TRAN Alexandre & LAYOUNI Majid Session 2009 Page 2 sur 5
set ns [new Simulator]
Pour conserver l'historique de la simulation (notamment pour la visualiser avec nam), on peut indiquer les deux fichiers vers lesquels seront dirigs les deux historiques : set f [open out.tr w] $ns trace-all $f set nf [open out.nam w] $ns namtrace-all $nf f et nf sont des descripteurs de fichier pralablement ouverts.
Topologie Ensuite, on cre les noeuds du rseau, puis les liens qui les relient avec leur dbit et leur latence, et la politique de rejet des paquets en trop (ici DropTail mais il y en a d'autres). On peut aussi prciser le nombre limite de paquets dans la file d'attente. set n1 [$ns node] set n2 [$ns node] $ns duplex-link $n1 $n2 1Mb 250ms DropTail $ns queue-limit $n1 $n2 100
Transport Il faut crer les agents de transport, les attacher aux noeuds et les connecter entre eux. Parmi les agents disponibles, on trouve Agent/Null, Agent/UDP, Agent/TCP et Agent/TCPSink. Le code est par exemple: set udp [new Agent/UDP] # cre une source UDP set trappe [new Agent/Null] # cre un puits d'information $ns attach-agent $n1 $udp # attache la source un noeud $ns attach-agent $n2 $trappe # attache la destination un autre $ns connect $udp $trappe # associe la paire origine/destination
Noter qu'il n'est pas ncessaire de spcifier quelle est la route suivie par les paquets d'une paire d'agents : c'est le simulateur qui calcule les routes les plus courtes. Pour un trafic TCP, il faut un metteur et un puits : set tcp [new Agent/TCP] $tcp set fid_ 1 ;# Color it's packages red
set sink [new Agent/TCPSink] NS-2 TRAN Alexandre & LAYOUNI Majid Session 2009 Page 3 sur 5
Application Enfin, on cre les sources de trafic, c'est--dire des applications. Ici, nous n'allons considrer que deux types d'application : CBR (Constant Bit Rate) et FTP. Tous ont comme attributs packetSize_ (taille des paquets, qui sera constante) et rate_ (dbit en octets/s). Classe (<A>=Application) description paramtres <A>/Traffic/CBR source dbit constant interval_ intervalle entre paquets <A>/FTP mule une application FTP maxpkts_ nombre max de paquets Il faut enfin attacher l'application l'agent de transport : set app [new Application/Traffic/CBR] $app attach-agent $udp
Pour dmarrer et arrter une source src, on a : $src start et $src stop
Temporisateurs Il est possible de programmer des vnements qui seront excuts des dates prcises de la simulation. Par exemple: $ns at 1.0 "$truc start" # dmarre l'application $truc t=1.0 $ns at 5.0 "$truc stop" # l'arrte t=5.0 $ns at 10.0 "finish" # invoque la procdure finish t=10.0
Typiquement, la fin de la simulation se fera par l'invocation d'une procdure charge du traitement final des statistiques. Exemple: proc finish { } { NS-2 TRAN Alexandre & LAYOUNI Majid Session 2009 Page 4 sur 5
global ns f nf stat puts "C'est fini" close $f # fermeture du fichier de trace (s'il y a) close $nf # fermeture du fichier de trace animation puts "Dbit = $stat(debit)" # impression d'une statistique }
Test : Nous avons gnrs un programme en .tcl (test-suite-simple.tcl) qui nous a permis dobserver les performances via xgraph .
Voici quelques exemples de programme par dfauts que nous avons pus tester :
- /home/vanet/Bureau/ns-allinone-2.31/ns-2.31/tcl/ex# ns simple-dyn.tcl cest une dmonstration illustrant un problme de communication et de rcupration ne prvoyant pas de routage dynamique. xgraphe NS-2 TRAN Alexandre & LAYOUNI Majid Session 2009 Page 5 sur 5
- /home/vanet/Bureau/ns-allinone-2.31/ns-2.31/tcl/ex# ns simple-rtg.tcl cest une dmonstration de routage dynamique.
- /home/vanet/Bureau/ns-allinone-2.31/ns-2.31/tcl/ex# ns simple-eqp1.tcl cest une demonstration du cout du chemin sur une topologie dynamique.
Ici on voit bien la gnration du fichier .nam notre simulation gnre des traces, on peut les regarder laide dun diteur de texte. Indique si le lien est dsactiv (down) ou active (up)