#Creo un nuovo simulator object
set ns [new Simulator]
#Apro il trace file per NAM
set nf [open queue.nam w]
$ns namtrace-all $nf
#Apro i trace files in scrittura per il monitoraggio della coda
set tf1 [open queue1.tr w]
set tf2 [open queue2.tr w]
set tf3 [open queue3.tr w]
proc record {} {
global tf2 tf3 queue3_4
set ns [Simulator instance]
set time 0.01
set lunghezza [$queue3_4 set size_]
set drops [$queue3_4 set pdrops_]
set now [$ns now]
puts $tf2 "$now $lunghezza"
puts $tf3 "$now $drops"
$ns at [expr $now+$time] "record"
}
#Definisco la procedura "finish"
proc finish {} {
global ns nf
global tf1 tf2 tf3
$ns flush-trace
#Chiudo il trace file
close $nf
close $tf1
close $tf2
close $tf3
#Eseguo NAM
exec nam queue.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
$ns duplex-link $n0 $n3 1Mb 10ms DropTail
$ns duplex-link $n1 $n3 1Mb 10ms DropTail
$ns duplex-link $n2 $n3 1Mb 10ms DropTail
$ns duplex-link $n3 $n4 1Mb 10ms DropTail
#Dimensione massima della coda in pacchetti
$ns queue-limit $n3 $n4 10
$ns trace-queue $n3 $n4 $tf1
#Oggetto QueueMonitor
set queue3_4 [$ns monitor-queue $n3 $n4 [$ns get-ns-traceall]]
#Questa riga visualizzera la coda in NAM
$ns duplex-link-op $n3 $n4 queuePos 0.5
set udp0 [new Agent/UDP]
set udp1 [new Agent/UDP]
set udp2 [new Agent/UDP]
set sink4 [new Agent/Null]
$udp0 set fid_ 0
$udp1 set fid_ 1
$udp2 set fid_ 2
$ns color 0 red
$ns color 1 blue
$ns color 2 darkgreen
$ns attach-agent $n0 $udp0
$ns attach-agent $n1 $udp1
$ns attach-agent $n2 $udp2
$ns attach-agent $n4 $sink4
$ns connect $udp0 $sink4
$ns connect $udp1 $sink4
$ns connect $udp2 $sink4
set exp0 [new Application/Traffic/Exponential]
$exp0 set packet_size_ 1000
$exp0 set burst_time_ 0.5s
$exp0 set idle_time_ 0.5s
$exp0 set rate_ 500k
$exp0 attach-agent $udp0
set exp2 [new Application/Traffic/Exponential]
$exp2 set packet_size_ 1000
$exp2 set burst_time_ 0.2s
$exp2 set idle_time_ 0.2s
$exp2 set rate_ 500k
$exp2 attach-agent $udp2
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packet_size_ 1000
$cbr1 set rate_ 500k
$cbr1 attach-agent $udp1
#Eventi:
$ns at 0.0 "record"
$ns at 0.0 "$exp0 start"
$ns at 0.0 "$cbr1 start"
$ns at 0.0 "$exp2 start"
#Chiamo la procedura "finish" e avvio la simulazione
$ns at 2.0 "finish"
$ns run