#tcp_anello.tcl

set ns [new Simulator]

#Il simulatore usera' un routing dinamico
$ns rtproto DV

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

set tr1 [open tcp_anello.tr w]
$ns trace-all $tr1

proc finish {} {
        global ns nf tr1
        $ns flush-trace
        close $nf
        close $tr1
        exec nam tcp_anello.nam &
        exit 0
}

#Creo un array di sette nodi
for {set i 0} {$i < 7} {incr i} {
        set n($i) [$ns node]
}


#Con questo ciclo for creo ogni nodo con il successivo dell'array; 
#l'ultimo nodo viene collegato al primo (infatti % e' l'operatore modulo)
for {set i 0} {$i < 7} {incr i} {
        $ns duplex-link $n($i) $n([expr ($i+1)%7]) 1Mb 10ms DropTail
}

set tcp0 [new Agent/TCP]
$ns attach-agent $n(0) $tcp0
$tcp0 set packetSize_ 500
set ftp0 [new Application/FTP]
$ftp0 attach-agent $tcp0

set sink0 [new Agent/TCPSink]
$ns attach-agent $n(3) $sink0

$ns connect $tcp0 $sink0 

#Definisco gli istanti di inizio e fine trasmissione e anche 
#gli istanti di rottura e ripristino del link tra n(1) e n(2)
$ns at 0.5 "$ftp0 start"
$ns rtmodel-at 1.0 down $n(1) $n(2)
$ns rtmodel-at 2.0 up $n(1) $n(2)
$ns at 4.5 "$ftp0 stop"

$ns at 5.0 "finish"

$ns run