1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
##
set seed 0
set packetsize 245
set nn 300 ;# number of nodes
set cnn [expr $nn -2 ] ;# number of clients
set plottime 15000.0
ns-random $seed
##user start time from a poisson distribution
set starttime(2) 0
#set tmp [new RandomVariable/Exponential] ;# Poisson process
#$tmp set avg_ 5.4674 ;# average arrival interval
#artificially syncronize flow start time
#every flow starts at multiple of 1.8s
set tmp [new RandomVariable/Empirical]
$tmp loadCDF userintercdf1
for {set i 3} {$i < $nn} {incr i} {
set p [$tmp value]
set i1 [expr $i - 1 ]
set starttime($i) [expr $starttime($i1) + $p ]
}
##number of sequential flow per user
set rv0 [new RandomVariable/Empirical]
$rv0 loadCDF sflowcdf
##flow duration
set rv1 [new RandomVariable/Empirical]
$rv1 loadCDF flowdurcdf
for {set i 2} {$i < $nn} {incr i} {
set q [$rv0 value]
set sflow($i) [expr int($q) ]
puts "node $i has $sflow($i) flow "
set p [$rv1 value]
set dur($i) [expr $p * 60 ]
puts "node $i duration : $dur($i)"
}
for {set i 2} {$i < $nn} {incr i} {
set flowstoptime($i) [expr $starttime($i) + $dur($i) ]
}
set ns [new Simulator]
for {set i 0} {$i < $nn} {incr i} {
set n($i) [$ns node]
}
set f [open /usr/RAtrace/newout.tr w]
$ns trace-all $f
$ns duplex-link $n(0) $n(1) 1.5Mb 10ms DropTail
for {set j 2} {$j < $nn} {incr j} {
$ns duplex-link $n(0) $n($j) 10Mb 5ms DropTail
}
set rv2 [new RandomVariable/Empirical]
$rv2 loadCDF ontimecdf
set rv3 [new RandomVariable/Empirical]
$rv3 loadCDF fratecdf
for {set i 2} {$i < $nn} {incr i} {
set s($i) [new Agent/UDP]
$ns attach-agent $n(1) $s($i)
set null($i) [new Agent/Null]
$ns attach-agent $n($i) $null($i)
$ns connect $s($i) $null($i)
set realaudio($i) [new Application/Traffic/RealAudio]
$realaudio($i) set packetSize_ $packetsize
$realaudio($i) set burst_time_ 0.05ms
$realaudio($i) set idle_time_ 1800ms
set flow_rate [$rv3 value]
set r [ format "%fk" $flow_rate ]
puts "node $i flow rate $r"
$realaudio($i) set rate_ $r
$realaudio($i) attach-agent $s($i)
}
for {set i 2} {$i < $nn} {incr i} {
$ns at $starttime($i) "$realaudio($i) start"
$ns at $flowstoptime($i) "$realaudio($i) stop"
puts "node $i starttime $starttime($i)"
puts "node $i stoptime $flowstoptime($i)"
##schedule for next flow
for {set h 2} {$h <= $sflow($i)} {incr h} {
set starttime($i) [expr $flowstoptime($i) + 0.001 ]
set p [$rv1 value]
set dur($i) [expr $p * 60 ]
puts "node $i duration : $dur($i)"
set flowstoptime($i) [expr $starttime($i) + $dur($i) ]
set realaudio($i) [new Application/Traffic/RealAudio]
$realaudio($i) set packetSize_ $packetsize
$realaudio($i) set burst_time_ 0.05ms
$realaudio($i) set idle_time_ 1800ms
set flow_rate [$rv3 value]
set r [ format "%fk" $flow_rate ]
puts "node $i flow rate $r"
$realaudio($i) set rate_ $r
$realaudio($i) attach-agent $s($i)
}
}
$ns at $plottime "close $f"
$ns at $plottime "finish tg"
proc finish file {
#exec rm -f out.time.tr
#
#
exec awk {
{
if (($1 == "+") && ($3 == 1) ) \
print $2, $10
}
} /usr/RAtrace/newout.tr > RA.time.tr
}
$ns run
exit 0
|