#tcp1wdelack.tcl

set ns [new Simulator]

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

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

#Impostazione del protocollo di routing
$ns rtproto Session

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

#Creazione della topologia
for  {set i 0} {$i < 6} {incr i} {
set n($i) [$ns node]
}

for  {set i 0 } {$i < 6} {incr i} {
    $ns duplex-link $n($i) $n([expr ($i+1)%6]) 1Mb 100ms DropTail
}

$ns duplex-link $n(0) $n(4) 1Mb 100ms DropTail

#Costi dei link
$ns cost $n(0) $n(1) 2
$ns cost $n(1) $n(0) 2
$ns cost $n(1) $n(2) 1
$ns cost $n(2) $n(1) 1
$ns cost $n(2) $n(3) 5
$ns cost $n(3) $n(2) 5
$ns cost $n(3) $n(4) 10
$ns cost $n(4) $n(3) 10
$ns cost $n(4) $n(5) 10
$ns cost $n(5) $n(4) 10
$ns cost $n(5) $n(0) 10
$ns cost $n(0) $n(5) 10
$ns cost $n(4) $n(0) 10
$ns cost $n(0) $n(4) 10

#Il livello di trasporto
Agent/TCP set ssthresh_ 64
#Creo una connessione TCP con la procedura "create-connection" 
#tra i nodi n1 e n4 .
#Il destinatario e' un TCPSink/DelAck, quindi non dovrebbe inviare
#subito il primo ack, ma dopo 100ms. In seguito dovrebbe riscontrare
#due pacchetti con un singolo ack
set tcp14 [$ns create-connection TCP $n(1) TCPSink/DelAck $n(4) 14]
$ns color 14 red

#Pongo la finestra di controllo di flusso a 8(pacchetti).
$tcp14 set window_ 8

#Il livello di Applicazione
set ftp14 [new Application/FTP]
$ftp14 attach-agent $tcp14

#Commenti
puts "\n\n####COMMENTI####\n"
puts "0.1 :ftp14 starts\n"

#Temporizzazione della simulazione
$ns at 0.1 "$ftp14 start"
#ftp14 non dovrebbe inviare piu' di 8 pacchetti consecutivi.
$ns at 3 "finish"

$ns run