#PARAMETERS

#simulation parameters
set simtime 1000
puts " "
puts "simulation time = $simtime seconds"
puts " "


#access link parameters
set abw 10Mb
set adel 0.10
set aqsize 1000

#bottleneck link parameters
set bnbw 2000000
set bndel 0.005
set bnqsize 100

#TCP parameters
set maxwnd 1000

#TCP/UDP parameters
set mpktsize 500

#create random number generator
set rng [new RNG]
$rng seed predef 2

#SIMULATOR OBJECT
set nssim [new Simulator]




#TOPOLOGY

#create 4 nodes
set na1 [$nssim node]
set na2 [$nssim node]
set nb1 [$nssim node]
set nb2 [$nssim node]


#create duplex links between nodes
$nssim duplex-link $na1 $nb1 $abw $adel DropTail
$nssim duplex-link $na2 $nb1 $abw $adel DropTail
$nssim duplex-link $nb1 $nb2 $bnbw $bndel DropTail


#set queue sizes
$nssim queue-limit $na1 $nb1 $aqsize
$nssim queue-limit $na2 $nb1 $aqsize
$nssim queue-limit $nb1 $nb2 $bnqsize



#SOURCES AND SINKS

set imax 7
set imax2 13

for {set i 1} {$i < $imax} {incr i} {
    set tcp($i) [$nssim create-connection TCP $na1 TCPSink $nb2 $i]
    set ftp($i) [new Application/FTP]
$ftp($i) attach-agent $tcp($i)
$tcp($i) set packetSize_ $mpktsize
$tcp($i) set window_ $maxwnd
}

for {set i $imax} {$i < $imax2} {incr i} {
    set tcp($i) [$nssim create-connection TCP $na2 TCPSink $nb2 $i]
    set ftp($i) [new Application/FTP]
$ftp($i) attach-agent $tcp($i)
$tcp($i) set packetSize_ $mpktsize
$tcp($i) set window_ $maxwnd
}



#TRACING AND MONITORING



#set monitoring
set fmon [$nssim makeflowmon Fid]
$nssim attach-fmon [$nssim link $nb1 $nb2] $fmon

proc flowstats {} {
    global fmon imax2
    set fclassifier [$fmon classifier]
    for {set i 1} {$i < $imax2} {incr i} {
    set flow($i) [$fclassifier lookup auto 0 0 $i]
    set parrtcp($i) [$flow($i) set parrivals_]
    set pdropstcp($i) [$flow($i) set pdrops_]
    puts "TCP $i: $parrtcp($i) $pdropstcp($i)"
    }    
puts " "
set parr [$fmon set parrivals_]
    set pdrops [$fmon set pdrops_]
    puts "All: $parr $pdrops"
set parrl1 [expr $parrtcp(1)+$parrtcp(2)+$parrtcp(3)+$parrtcp(4)+$parrtcp(5)+$parrtcp(6)]
set pdropsl1 [expr $pdropstcp(1)+$pdropstcp(2)+$pdropstcp(3)+$pdropstcp(4)+$pdropstcp(5)+$pdropstcp(6)]
puts "link 1: $parrl1 $pdropsl1"
set parrl2 [expr $parrtcp(7)+$parrtcp(8)+$parrtcp(9)+$parrtcp(10)+$parrtcp(11)+$parrtcp(12)]
set pdropsl2 [expr $pdropstcp(7)+$pdropstcp(8)+$pdropstcp(9)+$pdropstcp(10)+$pdropstcp(11)+$pdropstcp(12)]
puts "link 2: $parrl2 $pdropsl2"
}




#set tracing



#RUNNING SIMULATION

#schedule events for ns2
for {set i 1} {$i < $imax} {incr i} {
    $nssim at [expr $i*0.094] "$ftp($i) start"
}
for {set i $imax} {$i < $imax2} {incr i} {
    $nssim at [expr ($i-5.5)*0.094] "$ftp($i) start"
}
$nssim at $simtime "flowstats"
$nssim at $simtime "$nssim halt"

#run and end the simulation
$nssim run





exit 0
