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

通讯编程

开发平台:

Visual C++

  1. # configure RED parameters
  2. Queue/RED set setbit_ true
  3. Queue/RED set drop-tail_ false
  4. Queue/RED set fracthresh_ true
  5. Queue/RED set fracminthresh_ 0.15
  6. Queue/RED set fracmaxthresh_ 0.6
  7. Queue/RED set q_weight_ 0.01
  8. Queue/RED set wait_ false
  9. Queue/RED set linterm_ 10
  10. #Queue/RED set linterm_ 5
  11. Queue set interleave_ false
  12. Queue set acksfirst_ false
  13. Queue set filteracks_ false
  14. Queue set replace_head_ false
  15. Queue set ackfromfront_ false
  16. Queue set priority_drop_ false
  17. Queue set random_drop_ false
  18. Agent/TCP set disable_ecn_ 0
  19. Agent/TCP set restart_bugfix_ true
  20. Agent/TCP/Fack set ss-div4 0
  21. Agent/TCP/Fack set rampdown 0
  22. proc plotgraph {graph connGraphFlag midtime { qtraceflag false } } {
  23. global env
  24. upvar $connGraphFlag graphFlag
  25. exec gawk --lint -f ../../../ex/asym/tcp-trace.awk tcp-raw.tr
  26. exec gawk --lint -f ../../../ex/asym/seq.awk out.tr
  27. exec gawk --lint -v mid=$midtime -f ../../../ex/asym/tcp.awk tcp.tr
  28. exec gawk --lint -f ../../../ex/asym/tcp-burst.awk tcp.tr
  29. if { $qtraceflag } {
  30. exec gawk --lint -f ../../../ex/asym/queue.awk q.tr
  31. }
  32. set if [open index.out r]
  33. while {[gets $if i] >= 0} {
  34. if {$graph || $graphFlag($i)} {
  35. set seqfile [format "seq-%s.out" $i]
  36. set ackfile [format "ack-%s.out" $i]
  37. set cwndfile [format "cwnd-%s.out" $i]
  38. set ssthreshfile [format "ssthresh-%s.out" $i]
  39. set srttfile [format "srtt-%s.out" $i]
  40. set rttvarfile [format "rttvar-%s.out" $i]
  41. exec xgraph -display $env(DISPLAY) -bb -tk -m -x time -y seqno $seqfile $ackfile &
  42. exec xgraph -display $env(DISPLAY) -bb -tk -m -x time -y window $cwndfile &
  43. }
  44. }
  45. close $if
  46. if { $qtraceflag } {
  47. set qif [open qindex.out r]
  48. while {[gets $qif i] >= 0} {
  49. exec xgraph -display $env(DISPLAY) -bb -tk -m -x time -y "# packets" $i &
  50. }
  51. close $qif
  52. }
  53. }
  54. proc monitor_queue {ns n0 n1 queuetrace sampleInterval} {
  55. set id0 [$n0 id]
  56. set id1 [$n1 id]
  57. set l01 [$ns set link_($id0:$id1)]
  58. $ns monitor-queue $n0 $n1 $queuetrace $sampleInterval
  59. $l01 set qBytesEstimate_ 0
  60. $ns at [$ns now] "$l01 queue-sample-timeout"
  61. }
  62. proc trace_queue {ns n0 n1 queuetrace} {
  63. set id0 [$n0 id]
  64. set id1 [$n1 id]
  65. set l01 [$ns set link_($id0:$id1)]
  66. $ns monitor-queue $n0 $n1 $queuetrace
  67. $ns at [$ns now] "$l01 start-tracing"
  68. }
  69. proc createTcpSource { type { maxburst 0 } { tcpTick 0.1 } { window 100 } } {
  70. set tcp0 [new Agent/$type]
  71. puts "$type $maxburst"
  72. $tcp0 set class_ 1
  73. $tcp0 set maxburst_ $maxburst
  74. $tcp0 set tcpTick_ $tcpTick
  75. $tcp0 set window_ $window
  76. $tcp0 set maxcwnd_ $window
  77. $tcp0 set ecn_ 1
  78. $tcp0 set g_ 0.125
  79. return $tcp0
  80. proc setupTcpTracing { tcp0 tcptrace } {
  81. $tcp0 attach $tcptrace
  82. $tcp0 trace "t_seqno_" 
  83. $tcp0 trace "rtt_" 
  84. $tcp0 trace "srtt_" 
  85. $tcp0 trace "rttvar_" 
  86. $tcp0 trace "backoff_" 
  87. $tcp0 trace "dupacks_" 
  88. $tcp0 trace "ack_" 
  89. $tcp0 trace "cwnd_"
  90. $tcp0 trace "ssthresh_" 
  91. $tcp0 trace "maxseq_" 
  92. $tcp0 trace "exact_srtt_"
  93. }
  94. proc setupGraphing { tcp connGraph connGraphFlag} {
  95. upvar $connGraphFlag graphFlag
  96. set saddr [expr [$tcp set addr_]/256]
  97. set sport [expr [$tcp set addr_]%256]
  98. set daddr [expr [$tcp set dst_]/256]
  99. set dport [expr [$tcp set dst_]%256]
  100. set conn [format "%d,%d-%d,%d" $saddr $sport $daddr $dport]
  101. set graphFlag($conn) $connGraph
  102. }
  103. proc createTcpSink { type sinktrace { ackSize 40 } { maxdelack 25 } } {
  104. set sink0 [new Agent/$type]
  105. $sink0 set packetSize_ $ackSize
  106. if {[string first "Asym" $type] != -1} { 
  107. $sink0 set maxdelack_ $maxdelack
  108. }
  109. $sink0 attach $sinktrace
  110. return $sink0
  111. }
  112. proc createFtp { ns n0 tcp0 n1 sink0 } {
  113. puts "creating ftp $n0 $n1"
  114. $ns attach-agent $n0 $tcp0
  115. $ns attach-agent $n1 $sink0
  116. $ns connect $tcp0 $sink0
  117. set ftp0 [new Source/FTP]
  118. $ftp0 set agent_ $tcp0
  119. return $ftp0
  120. }
  121. proc configQueue { ns n0 n1 type qtrace rtrace { size -1 } { nonfifo 0 } { acksfirst false } { filteracks false } { replace_head false } { priority_drop false } { random_drop false } { reconsacks false } } { 
  122. if { $size >= 0 } {
  123. $ns queue-limit $n0 $n1 $size
  124. }
  125. set id0 [$n0 id]
  126. set id1 [$n1 id]
  127. set l01 [$ns set link_($id0:$id1)]
  128. set q01 [$l01 set queue_]
  129. if {$nonfifo} {
  130. set spq [new PacketQueue/Semantic]
  131. $spq set acksfirst_ $acksfirst
  132. puts "filteracks $filteracks reconsacks $reconsacks"
  133. $spq set filteracks_ $filteracks
  134. $spq set replace_head_ $replace_head
  135. $spq set priority_drop_ $priority_drop
  136. puts "rand $random_drop"
  137. $spq set random_drop_ $random_drop
  138. if { $reconsacks == "true"} {
  139. set recons [new AckReconsControllerClass]
  140. # Set queue_ of controller.  This is 
  141. # used by the individual reconstructors
  142. $recons set queue_ $q01
  143. $spq set reconsAcks_ 1
  144. $spq ackrecons $recons
  145. }
  146. $q01 packetqueue-attach $spq
  147. }
  148. if {[string first "RED" $type] != -1} {
  149. configREDQueue $ns $n0 $n1 [$q01 set q_weight_] 1
  150. }
  151. # $q01 trace $trace
  152. if { $qtrace != 0 } {
  153. trace_queue $ns $n0 $n1 $qtrace
  154. }
  155. $q01 reset
  156. }
  157. proc configREDQueue { ns n0 n1 { q_weight -1 } { fracthresh 0 } { fracminthresh 0.4 } { fracmaxthresh 0.8} } {
  158. puts "Configuring reverse RED gateway"
  159. set id0 [$n0 id]
  160. set id1 [$n1 id]
  161. set l01 [$ns set link_($id0:$id1)]
  162. set q01 [$l01 set queue_]
  163. if {$q_weight >= 0} {
  164. $q01 set q_weight_ $q_weight
  165. }
  166. if { $fracthresh } {
  167. set lim [$q01 set limit_]
  168. $q01 set thresh_ [expr $fracminthresh*$lim]
  169. $q01 set maxthresh_ [expr $fracmaxthresh*$lim]
  170. }
  171. $q01 set setbit_ true
  172. }