ramodel.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

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