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

通讯编程

开发平台:

Visual C++

  1. #!../../../../ns
  2. #source ../../../lan/ns-lan.tcl
  3. source ../../../ex/asym/util.tcl
  4. # set up simulation
  5. set ns [new Simulator]
  6. set n0 [$ns node]
  7. set n1 [$ns node]
  8. set n2 [$ns node]
  9. set n3 [$ns node]
  10. set f [open out.tr w]
  11. $ns trace-all $f
  12. set tcptrace [open tcp.tr w] 
  13. set sinktrace [open sink.tr w]
  14. set redtrace [open red.tr w]
  15. set graph 0
  16. set connGraphFlag("") 0
  17. set maxdelack 25
  18. set maxburst 3
  19. set upwin 0
  20. set tcpTick 0.1
  21. set ackSize 40
  22. set rbw 28.8Kb
  23. set rqsize 10
  24. set qsize 10
  25. set rgw "DropTail"
  26. set nonfifo 0 
  27. set acksfirst false
  28. set filteracks false
  29. set replace_head false
  30. set midtime 0
  31. proc printUsage {} {
  32. puts "Usage: "
  33. exit
  34. }
  35. proc finish {ns traceall tcptrace graph connGraphFlag midtime} {
  36. upvar $connGraphFlag graphFlag 
  37. $ns flush-trace
  38. close $traceall
  39. flush $tcptrace
  40. close $tcptrace
  41. plotgraph $graph $graphFlag $midtime
  42. exit 0
  43. }
  44. # read user options and act accordingly
  45. set count 0
  46. while {$count < $argc} {
  47. set arg [lindex $argv $count]
  48. incr count 2
  49. switch -exact '$arg' {
  50. '-graph' {
  51. set graph 1
  52. incr count -1
  53. continue
  54. }
  55. '-mda' {
  56. set maxdelack [lindex $argv [expr $count-1]]
  57. continue
  58. }
  59. '-acksz' {
  60. set ackSize [lindex $argv [expr $count-1]]
  61. continue
  62. }
  63. '-mb' {
  64. set maxburst [lindex $argv [expr $count-1]]
  65. continue
  66. }
  67. '-upwin' {
  68. set upwin [lindex $argv [expr $count-1]]
  69. continue
  70. }
  71. '-tk' {
  72. set tcpTick [lindex $argv [expr $count-1]]
  73. continue
  74. }
  75. '-rbw' {
  76. set rbw [lindex $argv [expr $count-1]]
  77. continue
  78. }
  79. '-rq' {
  80. set rqsize [lindex $argv [expr $count-1]]
  81. continue
  82. }
  83. '-q' {
  84. set qsize [lindex $argv [expr $count-1]]
  85. Queue set limit_ $qsize 
  86. continue
  87. }
  88. '-nonfifo' {
  89. set nonfifo 1
  90. incr count -1
  91. continue
  92. }
  93. '-noecn' {
  94. Agent/TCP set disable_ecn_ 1
  95. incr count -1
  96. continue
  97. }
  98. '-red' {
  99. set rgw "RED"
  100. incr count -1
  101. continue
  102. }
  103. '-acksfirst' {
  104. set acksfirst true
  105. incr count -1
  106. continue
  107. }
  108. '-filteracks' {
  109. set filteracks true
  110. incr count -1
  111. continue
  112. }
  113. '-replace_head' {
  114. set replace_head true
  115. incr count -1
  116. continue
  117. }
  118. '-mid' {
  119. set midtime [lindex $argv [expr $count-1]]
  120. continue
  121. }
  122. default {
  123. incr count -2
  124. }
  125. switch -exact '$arg' {
  126. '-dn' {
  127. set direction "down"
  128. }
  129. '-up' {
  130. set direction "up"
  131. }
  132. default {
  133. puts "arg $arg"
  134. printUsage
  135. exit
  136. }
  137. }
  138. incr count 1
  139. set arg [lindex $argv $count]
  140. switch -exact '$arg' {
  141. '-asym' {
  142. set type "asym"
  143. }
  144. '-asymsrc' {
  145. set type "asymsrc"
  146. }
  147. '-reno' {
  148. set type "reno"
  149. }
  150. default {
  151. puts "arg $arg"
  152. printUsage
  153. exit
  154. }
  155. }
  156. incr count 1
  157. set arg [lindex $argv $count]
  158. set startTime $arg
  159. incr count 1
  160. set connGraph 0 
  161. set arg [lindex $argv $count]
  162. if { $arg == "-graph" } {
  163. set connGraph 1
  164. incr count 1
  165. }
  166. if { $direction == "down" } {
  167. set src $n0
  168. set dst $n3
  169. } elseif { $direction == "up" } {
  170. set src $n3
  171. set dst $n0
  172. } else {
  173. }
  174. if { $type == "asym" } {
  175. set tcp [createTcpSource "TCP/Reno/Asym" $maxburst $tcpTick]
  176. set sink [createTcpSink "TCPSink/Asym" $sinktrace $ackSize $maxdelack]
  177. } elseif { $type == "asymsrc" } {
  178. set tcp [createTcpSource "TCP/Reno/Asym" $maxburst $tcpTick]
  179. set sink [createTcpSink "TCPSink" $sinktrace $ackSize]
  180. } elseif { $type == "reno" } {
  181. set tcp [createTcpSource "TCP/Reno" $tcpTick]
  182. set sink [createTcpSink "TCPSink" $sinktrace $ackSize]
  183. }
  184. if { $direction == "up" && $upwin != 0 } {
  185. $tcp set window_ $upwin
  186. }
  187. set ftp [createFtp $ns $src $tcp $dst $sink]
  188. setupTcpTracing $tcp $tcptrace
  189. setupGraphing $tcp $connGraph connGraphFlag
  190. $ns at $startTime "$ftp start" 
  191. }
  192. # topology
  193. #
  194. #      10Mb, 1ms       10Mb, 5ms       10Mb, 1ms
  195. #  n0 ------------ n1 ------------ n2 ------------ n3
  196. #                     28.8Kb, 50ms 
  197. #
  198. $ns duplex-link $n0 $n1 10Mb 1ms DropTail
  199. $ns simplex-link $n1 $n2 10Mb 5ms DropTail
  200. $ns simplex-link $n2 $n1 $rbw 50ms $rgw
  201. $ns duplex-link $n2 $n3 10Mb 1ms DropTail
  202. # configure reverse bottleneck queue
  203. configQueue $ns $n2 $n1 $rgw $redtrace $rqsize $nonfifo $acksfirst $filteracks $replace_head
  204. # end simulation
  205. $ns at 30.0 "finish $ns $f $tcptrace $graph connGraphFlag $midtime"
  206. $ns run