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"
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