#--------------------------------------------------------------------------------
# train.tcl
# Author: Emmanuel Lochin.
# Dates: Octobre 2006.
#--------------------------------------------------------------------------------

set ns [new Simulator]

set debug [lindex $argv 0]

if {$argc < 1} {
     puts stderr "ns train.tcl \[debug 0|1\]" 
     exit 1
}

# RED parameters
#
# Queue in packets 
Queue/RED set queue_in_bytes_ false 
Queue/RED set q_weight_ 0.0001
# minth in packets 
Queue/RED set thresh_ 100
# maxth in packets 
Queue/RED set maxthresh_ 150
# maxp = 1 / linterm 
Queue/RED set linterm_ 10
Queue/RED set summarystats_ true
Queue/RED set mean_pktsize_ 1000

Queue/RED set debug_ $debug
Queue/RED set tdebug_ 0

Queue/RED/KRED set TrainSteps_ 40000
Queue/RED/KRED set curqlen_method_ 0

set queuesize 200
set Capacity 5Mb

Queue/RED set adaptive_ 0
Queue/RED set feng_adaptive_ 0
Queue/RED set interval_ 0.0

# Create a nam trace datafile.
#set namfile [open out.nam w]
#$ns namtrace-all $namfile

#open the trace file
set tracefile1 [open out.tr w]
$ns trace-all $tracefile1

# Set up the network topology shown at the top of this file:
set core [$ns node]
set core2 [$ns node]

$ns simplex-link $core $core2 $Capacity 30ms RED/KRED
$ns simplex-link $core2 $core $Capacity 30ms DropTail

$ns queue-limit $core $core2 $queuesize
$ns queue-limit $core2 $core $queuesize

set redq [[$ns link $core $core2] queue]
set traceq [open red-queue.tr w]
$redq trace curq_
$redq trace ave_
$redq attach $traceq

# Set up x TCP connection between source and destination:

for {set i 1} {$i <= 8} {incr i} {
        set s_($i) [$ns node]
        set r_($i) [$ns node]
	$ns duplex-link $s_($i) $core 1Mb 1ms DropTail
	$ns queue-limit $s_($i) $core $queuesize
	$ns duplex-link $core2 $r_($i) 1Mb 1ms DropTail
        set tcp_($i) [$ns create-connection TCP/Newreno $s_($i) TCPSink $r_($i) 0]
        [set tcp_($i)] set window_ 10000
        $tcp_($i) set fid_ $i
        set ftp_($i) [[set tcp_($i)] attach-app FTP]
	$ns at 0 "[set ftp_($i)] start"
	$ns at 600 "[set ftp_($i)] stop"
}

proc finish {} {
   global ns namfile tracefile1 traceq
   $ns flush-trace
   #close $namfile
   close $tracefile1
   close $traceq
   set file tkred.eps
   exec grep  "a" red-queue.tr > ave.tr
   exec grep  "Q" red-queue.tr > cur.tr
   exit 0
}

$ns at 601.0 "finish"

$ns run

