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

#codaSFQ.tcl
#Questo esempio fa vedere che i tempi di attesa in coda (disciplina SFQ) per i
#pacchetti telnet (flusso di colore blu) sono inferiori a quelli di ftp (flusso
#rosso). Infatti i pacchetti telnet sono piu' piccoli di quelli ftp e quindi 
#in una coda di questo tipo hanno una certa precedenza.
 
set ns [new Simulator]

$ns color 1 Blue
$ns color 2 Red

set nf [open codaSFQ.nam w]
$ns namtrace-all $nf

#Apro i trace files in scrittura per il monitoraggio della coda
set tf1 [open sfq1.tr w]
set tf2 [open sfq2.tr w]
set tf3 [open sfq3.tr w]

proc record {} {
	global tf2 tf3 queue2_3
	set ns [Simulator instance]
	set time 0.01
	set lunghezza [$queue2_3 set size_]
	set drops [$queue2_3 set pdrops_]
	set now [$ns now]
	puts $tf2 "$now $lunghezza"
	puts $tf3 "$now $drops"
	$ns at [expr $now+$time] "record"
}

proc finish {} {
        global ns nf
	global tf1 tf2 tf3
        $ns flush-trace
        close $nf
	close $tf1
	close $tf2
	close $tf3
        exec nam codaSFQ.nam &
        exit 0
}

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

$ns duplex-link $n0 $n2 1Mb 1ms SFQ 
$ns duplex-link $n1 $n2 1Mb 1ms SFQ
$ns duplex-link $n3 $n2 1Mb 1ms SFQ

$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right

#monitoraggio della coda tra n2 e n3 
$ns duplex-link-op $n2 $n3 queuePos 0.5

#tracing del link tra n2 e n3
$ns trace-queue $n2 $n3 $tf1

#oggetto QueueMonitor
set queue2_3 [$ns monitor-queue $n2 $n3 [$ns get-ns-traceall]]

#Creo una sorgente TCP e la attacco al nodo n0
set src0 [new Agent/TCP]
$ns attach-agent $n0 $src0
$src0 set fid_ 1

#Creo una sorgente TCP e la attacco al nodo n1
set src1 [new Agent/TCP]
$ns attach-agent $n1 $src1
$src1 set fid_ 2

#Creo due destinatari TCP e li attacco al nodo n3
set snk0 [new Agent/TCPSink]
$snk0 set packetSize_ 40
$ns attach-agent $n3 $snk0
set snk1 [new Agent/TCPSink]
$snk1 set packetSize_ 40
$ns attach-agent $n3 $snk1

$ns connect $src0 $snk0
$ns connect $src1 $snk1

#Creo un'applicazione telnet, la attacco a src0 e le assegno il colore blu
set tel0 [new Application/Telnet]
$tel0 attach-agent $src0

#Creo un'applicazione ftp, la attacco a src1 e le assegno il colore rosso
set ftp1 [new Application/FTP]
$ftp1 attach-agent $src1

$ns at 0.0 "record"
$ns at 0.0 "$tel0 start"
$ns at 0.0 "$ftp1 start"
$ns at 5.0 "$tel0 stop"
$ns at 5.0 "$ftp1 stop"
$ns at 5.0 "finish"

$ns run

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