left.gif (284 bytes)  up.gif (289 bytes)  right.gif (280 bytes)
Nodi

Il comando fondamentale per creare un oggetto di tipo nodo ed assegnargli un nome, ad esempio n1, è il seguente:

set n1 [$ns node]
 
 

Automaticamente viene assegnato ad ogni nodo che viene creato un diverso indirizzo. Questo indirizzo è lungo 16 bit, dei quali gli 8 bit più significativi definiscono l'identificatore di nodo, mentre gli 8 bit meno significativi servono per distinguere i vari agent che si possono porre su un nodo. Dunque è possibile creare una topologia che contiene al massimo 28 = 256 nodi. In realtà se si ha bisogno di creare una topologia più ampia è possibile espandere lo spazio degli indirizzi con il comando Node expandaddr , che va scritto prima di creare il primo nodo; in questo modo l'indirizzo di nodo diviene di 30 bit, dei quali i primi 22 bit definiscono l'identificatore di nodo, mentre gli ultimi 8 bit distinguono i vari agent che si trovano sul nodo.
 
 

Per default i nodi in ns sono costruiti per supportare simulazioni di tipo unicast. Se si desidera realizzare una simulazione di tipo multicast bisogna settare la variabile EnableMcast_ al valore 1 prima di creare i nodi, digitando il seguente comando:

Simulator set EnableMcast_ 1

Quando una simulazione è di tipo multicast il bit più significativo di ogni indirizzo indica se quell'indirizzo è di tipo multicast o unicast. Se il bit più significativo è 0, l'indirizzo è di tipo multicast, se è 1 l'indirizzo è di tipo unicast. Questo implica che, se non si espande lo spazio degli indirizzi, una simulazione di tipo multicast può essere realizzata su una tipologia di al massimo 128 nodi.
 
 

E' possibile creare un array di N+1 oggetti di tipo nodo con un ciclo for:

for { set 1 0 } { $i < N} { incr i} { set n($i) [$ns node]}
 
 

E' possibile assegnare un colore a un nodo mediante il comando color; ad esempio, se si vuole che nel nam il nodo n1 venga rappresentato come un cerchietto giallo:

$n1 color "yellow"

Per default tutti i nodi sono neri.

E' anche possibile fare in modo che nel nam un nodo venga circondato da un secondo cerchietto di un colore specificato, utilizzando il comando add-mark; ad esempio si può circondare n1 con un cerchietto verde:

$n1 add-mark "green"
 
 
 
 

Links
 
 

Due nodi possono essere connessi con un link. Ci sono link unidirezionali ("simplex-link") e link bidirezionali ("duplex-link").
 
 

La sintassi del comando per la creazione di un link unidirezionale da un nodo ad un altro è la seguente:

$ns simplex-link <node0> <node1> <bandwidht> <delay> <queue_type>

Questo comando crea un link che parte dal nodo <node0> e arriva al nodo <node1>, con banda <bandwidht> espressa in bit al secondo e ritardo <delay> espresso in secondi. Il link usa una coda di tipo <queue_type>.

Esempio:

set n0 [$ns node]

set n1 [$ns node]

$ns simplex-link n0 n1 1.5Mb 100ms DropTail
 
 

La sintassi del comando per la creazione di un link bidirezionale tra due nodi è la seguente:

$ns duplex-link <node0> <node1> <bandwidht> <delay> <queue_type>

Questo comando crea un link tra <node0> e <node1>, con banda <bandwidht> espressa in bit al secondo e ritardo <delay> espresso in secondi. Il link usa una disciplina di gestione della coda di tipo <queue_type>.

Esempio:

set n0 [$ns node]

set n1 [$ns node]

$ns duplex-link n0 n1 1.5Mb 100ms DropTail

Creare un duplex-link tra due nodi equivale a creare due simplex-link tra i due nodi nei due versi.
 
 

La banda per default è espressa in bit al secondo, ma si possono usare i suffissi k o K (esprimendo così la banda in kilobit al secondo), oppure i suffissi m o M (esprimendo la banda in megabit al secondo). Usando un suffisso finale B si indica che la banda è espressa in Bytes al secondo. Per esempio, tutte le seguenti scritture sono valide e tra loro equivalenti:
 


1.5m

1.5mb

1500k

1500kb

0.1875MB

187.5kB

1.5e6


 


Il valore di default della banda è 1.5Mbits/sec.
 
 

Il ritardo per default è espresso in secondi, ma con il suffisso m lo si può esprimere in ms, con il suffisso n lo si può esprimere in nanosecondi e con il suffisso p lo si può esprimere in picosecondi. Per esempio, tutte le seguenti scritture sono valide e tra loro equivalenti:
 


1500m

1.5

1.5e9ns

1500e9p


 


Il valore di default del ritardo è 100ms.
 
 

La disciplina di gestione della coda può essere DropTail (una semplice disciplina FIFO), SFQ (Stochastic Fair Queuing), e altre. La coda FQ (Fair Queing) non è funzionante. E' possibile stabilire un valore massimo <queue_limit> di pacchetti che potranno essere messi in coda su un link nel verso da <node0> a <node1>:

$ns queue-limit <node0> <node1> <queue_limit>
 
 

E' possibile assegnare una latenza pari a <time-interval> secondi a un link nel verso da <node0> a <node1>:

$ns delay <node0> <node1> <time-interval>
 
 

Si può assegnare a un link un costo <cost_val> di percorrenza nel verso da <node0> a <node1>:

$ns cost <node0> <node1> <cost_val>

Esempio:

$ns cost $n0 $n1 10

$ns cost $n1 $n0 5

I costi dei link vengono usati da alcuni protocolli di routing.

<cost_val> è un numero intero; per default tutti i link hanno costo pari a 1.
 
 

Si possono connettere N+1 nodi di un array in una tipologia circolare usando un ciclo for:

for { set 1 0 } { $i < N} { incr i} { $ns duplex-link $n($i) $n([expr ($i+1)%N]) <bandwidht> <delay> <queue_type>}

Con questo ciclo for ogni nodo viene connesso al successivo dell'array, tranne l'ultimo che viene connesso con il primo (per questo si usa l'operatore modulo %).
 
 

Quando si esegue uno script e automaticamente si apre la finestra del nam, spesso la topologia della rete nella finestra appare un po' scomoda e disordinata. E' possibile allora premere il bottone "re-layout" per migliorarla. Esistono inoltre alcuni comandi che possono essere inseriti nello script OTcl e che permettono di avere un certo controllo su quello che sarà il layout nella finestra del nam; in particolare questi comandi definiscono quale dovrà essere la direzione dei link:

$ns duplex-link-op <node0> <node1> orient right-down

$ns duplex-link-op <node0> <node1> orient right-up

$ns duplex-link-op <node0> <node1> orient right

$ns duplex-link-op <node0> <node1> orient left-down

$ns duplex-link-op <node0> <node1> orient left-up

$ns duplex-link-op <node0> <node1> orient left
 


left.gif (284 bytes)  up.gif (289 bytes)  right.gif (280 bytes)