# run simulations for Vertical Handovers paper
Agent/TCP set window_ 50
set send_size 30000000
set tcp_snd TCP/Sack1
set tcp_rcv TCPSink/Sack1/DelAck
set end_time 70
set ho_time 30
set tcp_send_size 0
set tfrc_send_size 0
set qm DropTail
DelayLink set avoidReordering_ true

proc finish {} {
    global ns tf
    $ns flush-trace
    close $tf
    exit 0
}

# M A I N
exec mkdir -p out
source tmp.tcl

set ns [new Simulator]
set rnd [new RNG]

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

set lp [$ns node]
set ms [$ns node]
set bs [$ns node]
set is [$ns node]

set trx $is	;#bs or is
set rcv $lp	;#ms or lp

Agent/TFRC set SndrType_ 1
set tfrcs [$ns create-connection-list TFRC $trx TFRCSink $rcv 0]
set tfrc1 [lindex $tfrcs 0]
set tfrc1_rcv [lindex $tfrcs 1]

set tcp1 [$ns create-connection $tcp_snd $trx $tcp_rcv $rcv 0]
set ftp_tcp [[set tcp1] attach-app FTP]

Queue/RED set thresh_ 0
Queue/RED set maxthresh_ 0
Queue/RED set q_weight_ -1
Queue/RED set linterm_ 10

$ns duplex-link $bs $ms $line_rate $prop_delay $qm
$ns duplex-link $lp $ms 3Mbps 10ms DropTail 
$ns duplex-link $bs $is 3Mbps 50ms DropTail
#$ns duplex-link $bs $is2 3Mbps 50ms DropTail

set queue_dl [[$ns link $bs $ms] queue]
set queue_ul [[$ns link $ms $bs] queue]

$ns queue-limit $bs $ms $buf_size
$ns queue-limit $ms $bs $buf_size

if {$tcp_send_size > 0} {
	$ns after 0.01 "$ftp_tcp send $tcp_send_size"
}
if {$tfrc_send_size > 0} {
	$ns after 0.01 "$tfrc1 advanceby $tfrc_send_size"
}

$ns after $ho_time "$ns bandwidth $bs $ms $line_rate_after_ho"
$ns after $ho_time "$ns delay $bs $ms $prop_delay_after_ho"
$ns after $ho_time "$ns queue-limit $bs $ms $buf_size_after_ho; $queue_dl shrink-queue"

$ns after $ho_time "$ns bandwidth $ms $bs $line_rate_after_ho"
$ns after $ho_time "$ns delay $ms $bs $prop_delay_after_ho"
$ns after $ho_time "$ns queue-limit $ms $bs $buf_size_after_ho; $queue_ul shrink-queue"

if {[info exists ho_hint]} {
  $ns after $ho_time "$tfrc1_rcv ho $line_rate_after_ho"
  $tfrc1 ho
}

$ns after $end_time "finish"
$ns run

