#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