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

#queue.tcl
#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
left.gif (284 bytes) up.gif (289 bytes) right.gif (280 bytes)