• Non ci sono risultati.

Estensioni da apportare a RSVP-TE

3.3 Network Simulator

3.4.1 Script di esempio per il modulo MNS

Nel seguente script di esempio vengono presentate le principali funzioni del modulo per la simulazione di reti MPLS:

set ns [new Simulator] set na [open test-lsp.tr w] $ns trace-all $na

set nf [open test-lsp.nam w] $ns namtrace-all $nf proc finish {} { global ns na nf $ns flush-trace close $na close $nf exit 0 }

# make nodes & MPLSnodes set Node0 [$ns node] set Node1 [$ns node] set LSR2 [$ns mpls-node] set LSR3 [$ns mpls-node] set LSR4 [$ns mpls-node] set LSR5 [$ns mpls-node] set LSR6 [$ns mpls-node] set LSR7 [$ns mpls-node] set LSR8 [$ns mpls-node] set Node9 [$ns node] set Node10 [$ns node] # make links

$ns duplex-link $Node0 $LSR2 1Mb 10ms DropTail $ns duplex-link $Node1 $LSR2 1Mb 10ms DropTail

$ns duplex-link $LSR3 $LSR4 1Mb 10ms DropTail $ns duplex-link $LSR4 $LSR8 1Mb 10ms DropTail $ns duplex-link $LSR2 $LSR5 1Mb 10ms DropTail $ns duplex-link $LSR5 $LSR6 1Mb 10ms DropTail $ns duplex-link $LSR5 $LSR4 1Mb 10ms DropTail $ns duplex-link $LSR6 $LSR7 1Mb 10ms DropTail $ns duplex-link $LSR6 $LSR8 1Mb 10ms DropTail $ns duplex-link $LSR7 $LSR8 1Mb 10ms DropTail $ns duplex-link $LSR7 $Node9 1Mb 10ms DropTail $ns duplex-link $LSR8 $Node10 1Mb 10ms DropTail

# configure ldp agents on all mpls nodes $ns configure-ldp-on-all-mpls-nodes

# set ldp-message colors

$ns ldp-request-color blue $ns ldp-mapping-color red $ns ldp-withdraw-color magenta $ns ldp-release-color orange $ns ldp-notification-color yellow # set ldp events $ns enable-control-driven #$ns enable-data-driven #$ns enable-on-demand #$ns enable-ordered-control # trace mpls packets #$LSR1 trace-mpls #$LSR2 trace-mpls

# create traffic generators

set Src0 [new Application/Traffic/CBR] $Src0 set packetSize_ 500

set Src1 [new Application/Traffic/CBR] $Src1 set packetSize_ 500

$Src1 set interval_ 0.010 # create UDP agents set Udp0 [new Agent/UDP] set Udp1 [new Agent/UDP] $Src0 attach-agent $Udp0 $Src1 attach-agent $Udp1 $ns attach-agent $Node0 $Udp0 $ns attach-agent $Node1 $Udp1 set Dst0 [new Agent/Null] $ns attach-agent $Node9 $Dst0 set Dst1 [new Agent/Null] $ns attach-agent $Node10 $Dst1 $ns connect $Udp0 $Dst0 $ns connect $Udp1 $Dst1 $ns at 0.1 "$Src0 start" $ns at 0.1 "$Src1 start" # set MPLS modules

for {set i 2} {$i < 9} {incr i} { set a LSR$i

set m [eval $$a get-module "MPLS"] eval set LSRmpls$i $m

}

# set simulation events

$ns at 0.2 "$LSRmpls7 send-ldp-withdraw-msg 9" $ns at 0.2 "$LSRmpls8 send-ldp-withdraw-msg 10" $ns at 0.3 "$LSRmpls2 aggregate-flows 9 6 "

$ns at 0.5 "$LSRmpls6 send-ldp-withdraw-msg 6" $ns at 0.7 "$Src1 stop" $ns at 0.7 "$LSRmpls2 setup-erlsp 7 5_4_8_6_7 1100" $ns at 0.9 "$LSRmpls2 bind-flow-erlsp 9 -1 1100" $ns at 1.1 "$LSRmpls2 send-crldp-release-msg 1100" $ns at 1.2 "$LSRmpls4 setup-erlsp 8 4_5_6_8 3500" $ns at 1.4 "$LSRmpls2 setup-erlsp 7 2_3_4_L3500_7 3600" $ns at 1.6 "$LSRmpls2 bind-flow-erlsp 9 -1 3600" $ns at 1.7 "$LSRmpls2 pft-dump" $ns at 1.7 "$LSRmpls2 erb-dump" $ns at 1.7 "$LSRmpls2 lib-dump" $ns at 1.7 "$LSRmpls4 pft-dump" $ns at 1.7 "$LSRmpls4 erb-dump" $ns at 1.7 "$LSRmpls4 lib-dump" $ns at 1.8 "$LSRmpls7 send-crldp-withdraw-msg 3600" $ns at 1.9 "$LSRmpls8 send-crldp-withdraw-msg 3500" $ns at 2.0 "$Src0 stop" $ns at 3.0 "finish" $ns run

I nodi MPLS, a differenza dei nodi visti nell’esempio precedente, vengono creati tramite il comando:

set node [$ns mpls-node]

Il nodo così creato è in grado di gestire le funzionalità MPLS, le quali tuttavia, per essere abilitate, necessitano di altri comandi. La seguente serie

di comandi costituisce un ciclo che abilità le funzionalità MPLS su ogni nodo creato:

for {set i 2} {$i < 9} {incr i} { set a LSR$i

set m [eval $$a get-module "MPLS"] eval set LSRmpls$i $m

}

Il seguente comando permette invece di configurare un agente CR-LDP su ogni nodo della rete:

$ns configure-ldp-on-all-mpls-nodes

Occorre quindi specificare la modalità di funzionamento scelta per la simulazione:

$ns enable-control-driven

In questo caso è scelto di simulare la modalità control-driven.

Segue poi il seguente set di comandi, utilizzato per creare in uscita dei particolari file di trace, specifici per i pacchetti MPLS:

$node trace-mpls

Per quanto riguarda la topologia e la creazione di oggetti ed agenti non vi sono altre differenze significative rispetto alla versione base di NS2. La

Figura 3-5 Topologia di esempio per MNS

Non appena parte la simulazione, gli agent CR-LDP, caricati sui nodi MPLS, si scambiano i pacchetti necessari per la distribuzione delle label e per la costruzione delle tabelle viste in precedenza; in tal modo, non appena le sorgenti src0 e src1 iniziano a trasmettere, i pacchetti verranno inoltrati nella rete utilizzando lo switching di livello 2.

All’istante 1.0s i nodi 7 e 8 inviano dei messaggi di “withdraw” per il rilascio delle label per i flussi destinati verso i nodi 9 e 10 rispettivamente:

$ns at 1.0 "$LSRmpls7 send-ldp-withdraw-msg 9” $ns at 1.0 "$LSRmpls8 send-ldp-withdraw-msg 10”

Tali pacchetti si muovono lungo l’LSP fino all’ingress node, in direzione opposta rispetto a quella del traffico, in modo tale da cancellare l’associazione tra il flusso di traffico stesso e gli LSP utilizzati fino ad ora. All’istante 3s i due flussi vengono aggregati in uno solo fino al nodo 6 tramite i seguenti comandi:

$ns at 3.0 “$LSRmpls2 aggregate-flows 10 6”

Ciò implica che ad essi venga associata la stessa label per il tratto di LSP comune.

L’aggregazione dei flussi viene cancellata all’istante 3.5s tramite un messaggio di withdraw.

All’istante 5.0s, invece, viene creato un LSP con percorso esplicito dall’ingress node (LSR2) fino all’egress node (LSR7), attraverso i nodi 5_4_8_6_7 e caratterizzato da ID 1100:

$ns at 3.5 "$LSRmpls6 send-ldp-withdraw-msg 6” $ns at 7.0 "$LSRmpls2 setup-erlsp 7 5_4_8_6_7 1100" $ns at 7.2 “$LSRmpls2 bind-flow-erlsp 9 -1 1100” $ns at 8.0 "$LSRmpls2 send-crldp-release-msg 1100"

Figura 3-5 Creazione di un LSP esplicito

Tramite il comando bind-flow-erlsp si associa il flusso all’LSP sopraccitato, mentre all’istante 8.0s tale LSP viene rilasciato.

All’istante 10.0s viene creato un LSP con allocazione della banda e gestione delle priorità:

$ns at 10.0 "$LSRmpls2 setup-crlsp 7 2_3_4_7 3600 1M 400 200 7 3"

Tale comando permette di instaurare un LSP con la possibilità di riservare una certa quantità di banda (1Mbps), fissare un valore di setup priority (7), una holding priority (3), la dimensione dei pacchetti (200byte) e la dimensione del buffer (400byte).

Riportiamo infine il set di comandi utilizzato per la stampa su schermo delle tabelle utilizzate dai nodi MPLS:

$ns at 11.0 “$LSRmpls2 pft-dump” $ns at 11.0 “$LSRmpls2 erb-dump” $ns at 11.0 “$LSRmpls2 lib-dump”

Documenti correlati