set flows [lindex $argv 0]
set queue [lindex $argv 1]
set rate [lindex $argv 2]
set ecn [lindex $argv 3]
set increase [lindex $argv 4]
set decrease [lindex $argv 5]
set stoptime [lindex $argv 6]
puts "flows:$flows queue:$queue rate:$rate ecn:$ecn increase:$increase decrease:$decrease"

proc stop {tracefile} {
    close $tracefile
    exit
}

proc printall { fmon } {
    puts "aggregate per-link total_drops [$fmon set pdrops_]"
    puts "aggregate per-link total_packets [$fmon set pdepartures_]"
}       

set ns [new Simulator]
set tracefile [open all.12.tr w]
#$ns trace-all $tracefile

set node_(r1) [$ns node]
set node_(r2) [$ns node]
Queue/RED set gentle_ true
Queue/RED set setbit_ false
Agent/TCP set ecn_ 0
if {$ecn==1} {
  Queue/RED set setbit_ true
  Agent/TCP set ecn_ 1
}

$ns duplex-link $node_(r1) $node_(r2) [set rate]Mb 20ms $queue
source queueSize.tcl
setQueueSize $rate $queue $node_(r1) $node_(r2)
$ns trace-queue $node_(r1) $node_(r2) $tracefile

set slink [$ns link $node_(r1) $node_(r2)]; # link to collect stats on
set fmon [$ns makeflowmon Fid] 
$ns attach-fmon $slink $fmon

# Set up TCP connection
for {set i 0} {$i < $flows} {incr i} {
    set node_(s$i) [$ns node]
    set node_(k$i) [$ns node]
    $ns duplex-link $node_(s$i) $node_(r1) 100Mb 2ms DropTail
    $ns duplex-link $node_(k$i) $node_(r2) 100Mb [expr $i/3]ms DropTail
    set aimd$i [$ns create-connection TCP/Sack1 $node_(s$i) TCPSink/Sack1 $node_(k$i) 0]
    [set aimd$i] set window_ 10000
    [set aimd$i] set increase_num_ $increase
    [set aimd$i] set decrease_num_ $decrease
    [set aimd$i] set packetSize_ 999
    set ftp2$i [[set aimd$i] attach-app FTP]
    set sec [expr $i/10]
    set frac [expr $i%10]
    set starttime $sec.$frac
    $ns at $starttime "[set ftp2$i] start"
    $ns at $stoptime "[set ftp2$i] stop"
    set node_(ts$i) [$ns node]
    set node_(tk$i) [$ns node]
    $ns duplex-link $node_(ts$i) $node_(r1) 100Mb 2ms DropTail
    $ns duplex-link $node_(tk$i) $node_(r2) 100Mb [expr $i/3]ms DropTail
    set tcp$i [$ns create-connection TCP/Sack1 $node_(ts$i) TCPSink/Sack1 $node_(tk$i) 0]
    [set tcp$i] set window_ 10000
    [set tcp$i] set packetSize_ 1000
    [set tcp$i] set increase_num_ 1.0
    [set tcp$i] set decrease_num_ 0.5
    set ftp$i [[set tcp$i] attach-app FTP]
    $ns at $starttime "[set ftp$i] start"
    $ns at $stoptime "[set ftp$i] stop"
}
set randomflows 4
if {$randomflows > $flows} {
    set randomflows $flows
}
for {set i 0} {$i < $randomflows} {incr i} {
    set tcp$i [$ns create-connection TCP/Sack1 $node_(k$i) TCPSink/Sack1 $node_(s$i) 1]
    [set tcp$i] set window_ 20
    set ftp$i [[set tcp$i] attach-app FTP]
    $ns at $i "[set ftp$i] start"
    $ns at $stoptime "[set ftp$i] stop"
}

$ns at $stoptime "printall $fmon; stop $tracefile"

$ns run
