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

通讯编程

开发平台:

Visual C++

  1. #set stopTime 120
  2. set stopTime 10
  3. set ns [new Simulator]
  4. if {[llength $argv] > 0} {
  5. set num_ftps [lindex $argv 0]
  6. } else {
  7. set num_ftps 1
  8. }
  9. #set num_ftps [lindex $argv 0]
  10. if {[llength $argv] > 1} {
  11. set num_webs [lindex $argv 1]
  12. } else {
  13. set num_webs 0
  14. }
  15. if {[llength $argv] > 2} {
  16. set bottleneck [lindex $argv 2]
  17. } else {
  18. set bottleneck 1.5Mb
  19. }
  20. #set random_seed  [lindex $argv 3]
  21. set random_seed 0
  22. set rtt 100ms
  23. # ------- config info is all above this line ----------
  24. set rtt [$ns delay_parse $rtt]
  25. set bw [$ns bw_parse $bottleneck]
  26. if {$bw <= 128000} {
  27. set psize 552
  28. } else {
  29. set psize 1500
  30. }
  31. set bdp [expr round($bw*$rtt/(8*$psize))]
  32. if {$bdp < 5} {
  33. set bdp 5
  34. }
  35. # allow lots of nodes (more than 128)
  36. #$ns set-address-format expanded
  37. Trace set show_tcphdr_ 1
  38. set startTime 0.0
  39. #TCP parameters
  40. Agent/TCP set window_ [expr $bdp*4]
  41. set win_size 1
  42. Agent/TCP set windowInit_ $win_size
  43. set segsize [expr $psize-40]
  44. set segperack 2
  45. set delack 0.4
  46. set lastsample 0
  47. set client_addr 0
  48. set no_of_inlines 3
  49. #set filesize [expr $stopTime*$bw/8/2]
  50. set filesize 10000000000
  51. #buffersizes
  52. set buffersize [expr $bdp*2]
  53. set buffersize1 [expr $bdp*2]
  54. #thresholds
  55. set minthresh [expr round(0.3*$bdp)]
  56. set maxthresh [expr round($minthresh + 1.0*$bdp)]
  57. set sampling_interval [expr $psize*8/$bw]
  58. # set sampling_interval 0.007
  59. set si_per_rtt [expr $rtt/$sampling_interval]
  60. for {set ptwo 2} {$ptwo < $si_per_rtt} {set ptwo [expr $ptwo*2]} { }
  61. set QWT [expr 1./$ptwo]
  62. puts "minthresh $minthresh  maxthresh $maxthresh  QWT $QWT  sample $sampling_interval"
  63. #set Flow_id 1
  64. ns-random $random_seed;
  65. puts $random_seed;
  66. #ns-random 0
  67. proc build_topology { ns which } {
  68. global bw rtt bdp buffersize buffersize1 maxthresh minthresh QWT 
  69.        sampling_interval
  70. # congested link
  71. global n0 n1
  72. set n0 [$ns node]
  73. set n1 [$ns node]
  74. set bdelay [expr $rtt/2. - [$ns delay_parse 25ms]]
  75.         # $ns duplex-link $n0 $n1 $bw $bdelay RED/New
  76.         $ns duplex-link $n0 $n1 $bw $bdelay RED
  77. $ns duplex-link-op $n0 $n1 orient right
  78. $ns duplex-link-op $n1 $n0 queuePos 0.5
  79. $ns queue-limit $n0 $n1 $buffersize
  80. $ns queue-limit $n1 $n0 $buffersize
  81. set li_10 [[$ns link $n1 $n0] queue]
  82. $li_10 set maxthresh_ $maxthresh
  83. $li_10 set thresh_ $minthresh
  84. $li_10 set q_weight_ $QWT
  85. # $li_10 sampling_interval $sampling_interval
  86. # $li_10 cancel_thresh 0
  87. # $li_10 drop_interval $buffersize
  88. # $li_10 set queue-in-bytes_ true
  89. # $li_10 set bytes_ true
  90. # $li_10 set mean_pktsize_ 1500
  91. set li_01 [[$ns link $n0 $n1] queue]
  92. $li_01 set maxthresh_ $maxthresh
  93. $li_01 set thresh_ $minthresh
  94. $li_01 set q_weight_ $QWT
  95. # $li_01 set queue-in-bytes_ true
  96. # $li_01 set bytes_ true
  97. # $li_01 set mean_pktsize_ 1500
  98. global num_ftps num_webs
  99. set n [expr $num_ftps+$num_webs]
  100. for {set k 1} {$k <= $n} {incr k 1} {
  101.     # clients
  102.     set j [expr ($k+1)]
  103.     set dly [expr ($k)]
  104.     set dly 1
  105.     global n$j
  106.     set n$j [$ns node]
  107.     set linkbw [expr $bw*10]
  108.     $ns duplex-link [set n$j] $n0 $linkbw ${dly}ms DropTail
  109.     $ns queue-limit [set n$j] $n0 $buffersize1
  110.     $ns queue-limit $n0 [set n$j] $buffersize1
  111.     set angle [expr $n>1? 0.75+($k-1)*.5/($n-1) : 1]
  112.     $ns duplex-link-op $n0 [set n$j] orient $angle
  113.     # servers
  114.     set j [expr $k+$n+1]
  115.     global n$j
  116.     set n$j [$ns node]
  117.     $ns duplex-link $n1 [set n$j] $linkbw  25ms  DropTail
  118.     $ns queue-limit $n1 [set n$j] $buffersize1
  119.     $ns queue-limit [set n$j] $n1 $buffersize1
  120.     set angle [expr $n>1? fmod(2.25-($k-1)*.5/($n-1), 2) : 0]
  121.     $ns duplex-link-op $n1 [set n$j] orient $angle
  122. }
  123. }
  124. proc build_ftpclient {cnd snd sftp startTime timeToStop Flow_id} {
  125.     
  126.     global ns
  127.     global stopTime
  128.     set cli [get_ftpclient]
  129.     set ctcp [get_fulltcp]
  130.     $ctcp attach-application $cli
  131.     #set cli [$ctcp attach-app FTP]
  132.     $ctcp set fid_ $Flow_id
  133.     $cli tcp $ctcp
  134.     $ns attach-agent $cnd $ctcp
  135.     set stcp [get_fulltcp]
  136.     $stcp attach-application $sftp
  137.     $stcp set fid_ $Flow_id
  138.     $ns attach-agent $snd $stcp
  139.     $ns connect $ctcp $stcp
  140.     #$ctcp set dst_ [$stcp set addr_]
  141.     $stcp listen
  142.     $ns at $startTime "$cli start"
  143.     $ns at $timeToStop "$cli stop"
  144.     global ftplist
  145.     global ftplist
  146.     set ftplist($ctcp) $stcp
  147.     return $cli
  148. }
  149. proc get_ftpclient {} {
  150.     global client_addr
  151.     set cli [new Agent/BayTcpApp/FtpClient]
  152.     #set cli [new Agent/TcpApp/FtpClient]
  153.     $cli set addr_ [incr client_addr]
  154.     return $cli
  155. }
  156. proc get_fulltcp {} {
  157.     global segperack segsize delack
  158.     set atcp [new Agent/TCP/BayFullTcp]
  159.     #set atcp [new Agent/TCP/FullTcp]
  160.     $atcp set segsperack_ $segperack
  161.     $atcp set segsize_ $segsize
  162.     $atcp set interval_ $delack
  163.     return $atcp
  164. }
  165.     
  166. proc uniform {a b} {
  167. expr $a + (($b- $a) * ([ns-random]*1.0/0x7fffffff))
  168. }
  169. proc finish {} {
  170.         global ns PERL
  171. $ns halt
  172.         $ns flush-trace
  173.     set wrap [expr 90 * 1000 + 40]
  174.     set file BayFullTCP
  175.     exec $PERL ../../bin/set_flow_id -s bay-out.tr | 
  176.     $PERL ../../bin/getrc -e -s 1 -d 0 | 
  177.     $PERL ../../bin/raw2xg -v -s 0.01 -m $wrap -t $file > temp.rands
  178.     exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  179.         exit 0
  180. }
  181. $ns trace-all [open bay-out.tr w]
  182. $ns namtrace-all [open bay-out.nam w]
  183. $ns color 2 blue
  184. $ns color 3 red
  185. $ns color 4 yellow
  186. $ns color 5 green
  187. #build_topology $ns RED/New
  188. build_topology $ns RED
  189. set fname f${num_ftps}w${num_webs}b${bottleneck}.tr
  190. #set fname /dev/fd/1
  191. $ns trace-queue $n1 $n0 [open $fname w]
  192. set nn [expr $num_ftps+$num_webs]
  193. for {set k 1} {$k <= $num_ftps} {incr k 1} {
  194.     set j [expr $k+1]
  195.     set i [expr $j+$nn]
  196.     set sftp [new Agent/BayTcpApp/FtpServer]
  197.     #set sftp [new Agent/TcpApp/FtpServer]
  198.     $sftp file_size $filesize
  199.     build_ftpclient [set n$j] [set n$i]  $sftp 
  200.      [expr ($k-1)*[uniform 0.0 2.0]] 225 $j
  201. }
  202. $ns at [expr $stopTime ] "finish"
  203. $ns run
  204. exit 0