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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1995 The Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. # This product includes software developed by the Computer Systems
  16. # Engineering Group at Lawrence Berkeley Laboratory.
  17. # 4. Neither the name of the University nor of the Laboratory may be used
  18. #    to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. # ns-random 0
  33. remove-all-packet-headers       ; # removes all except common
  34. add-packet-header Flags IP TCP  ; # hdrs reqd for validation
  35. # FOR UPDATING GLOBAL DEFAULTS:
  36. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  37. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  38. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  39. Agent/TCP set tcpTick_ 0.1
  40. # The default for tcpTick_ is being changed to reflect a changing reality.
  41. Agent/TCP set rfc2988_ false
  42. # The default for rfc2988_ is being changed to true.
  43. Class TestSuite
  44. TestSuite instproc init {} {
  45. $self instvar ns_ net_ defNet_ test_ topo_ node_ testName_
  46. set ns_ [new Simulator]
  47. # trace-all is only used in more extensive test suites
  48. # $ns_ trace-all [open all.tr w]
  49. if {$net_ == ""} {
  50. set net_ $defNet_
  51. }
  52. if ![Topology/$defNet_ info subclass Topology/$net_] {
  53. global argv0
  54. puts "$argv0: cannot run test $test_ over topology $net_"
  55. exit 1
  56. }
  57. set topo_ [new Topology/$net_ $ns_]
  58. foreach i [$topo_ array names node_] {
  59. # This would be cool, but lets try to be compatible
  60. # with test-suite.tcl as far as possible.
  61. #
  62. # $self instvar $i
  63. # set $i [$topo_ node? $i]
  64. #
  65. set node_($i) [$topo_ node? $i]
  66. }
  67. if {$net_ == $defNet_} {
  68. set testName_ "$test_"
  69. } else {
  70. set testName_ "$test_:$net_"
  71. }
  72. }
  73. proc usage {} {
  74. global argv0
  75. puts stderr "usage: ns $argv0 <tests> [<topologies>]"
  76. puts stderr "Valid tests are:t[get-subclasses TestSuite Test/]"
  77. puts stderr "Valid Topologies are:t[get-subclasses SkelTopology Topology/]"
  78. exit 1
  79. }
  80. proc isProc? {cls prc} {
  81. if [catch "Object info subclass $cls/$prc" r] {
  82. global argv0
  83. puts stderr "$argv0: no such $cls: $prc"
  84. usage
  85. }
  86. }
  87. proc get-subclasses {cls pfx} {
  88. set ret ""
  89. set l [string length $pfx]
  90. set c $cls
  91. while {[llength $c] > 0} {
  92. set t [lindex $c 0]
  93. set c [lrange $c 1 end]
  94. if [string match ${pfx}* $t] {
  95. lappend ret [string range $t $l end]
  96. }
  97. eval lappend c [$t info subclass]
  98. }
  99. set ret
  100. }
  101. TestSuite proc runTest {} {
  102. global argc argv quiet
  103. set quiet false
  104. switch $argc {
  105. 1 {
  106. set test $argv
  107. isProc? Test $test
  108. set topo ""
  109. }
  110. 2 {
  111. set test [lindex $argv 0]
  112. isProc? Test $test
  113. set topo [lindex $argv 1]
  114. if {$topo == "QUIET"} {
  115. set quiet true
  116. set topo ""
  117. } else {
  118. isProc? Topology $topo
  119. }
  120. }
  121. 3 {
  122. set test [lindex $argv 0]
  123. isProc? Test $test
  124. set topo [lindex $argv 1]
  125. isProc? Topology $topo
  126. set extra [lindex $argv 2]
  127. if {$extra == "QUIET"} {
  128. set quiet true
  129. }
  130. }
  131. default {
  132. usage
  133. }
  134. }
  135. set t [new Test/$test $topo]
  136. $t run
  137. }
  138. # Skeleton topology base class
  139. Class SkelTopology
  140. SkelTopology instproc init {} {
  141.     $self next
  142. }
  143. SkelTopology instproc node? n {
  144.     $self instvar node_
  145.     if [info exists node_($n)] {
  146. set ret $node_($n)
  147.     } else {
  148. set ret ""
  149.     }
  150.     set ret
  151. }
  152. Class NodeTopology/4nodes -superclass SkelTopology
  153. NodeTopology/4nodes instproc init ns {
  154.     $self next
  155.     $self instvar node_
  156.     set node_(s1) [$ns node]
  157.     set node_(k1) [$ns node]
  158. }
  159. #
  160. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 100ms bottleneck.
  161. # Queue-limit on bottleneck is 6 packets.
  162. #
  163. Class Topology/net0 -superclass NodeTopology/4nodes
  164. Topology/net0 instproc init ns {
  165.     $self next $ns
  166.     $self instvar node_
  167.     $ns duplex-link $node_(s1) $node_(k1) 10000Mb 20ms DropTail
  168.     if {[$class info instprocs config] != ""} {
  169. $self config $ns
  170.     }
  171. }
  172. # Definition of test-suite tests
  173. TestSuite instproc print64 { qmon } {
  174. set f [open temp.rands w]
  175. puts $f "This test is checking for problems with int64 counters."
  176. close $f
  177.    if {[ns-hasint64] ==  1} {
  178. set bdep [$qmon set bdepartures_]
  179. puts "This test is checking for problems with int64 counters."
  180.   puts "Byte departures in different data formats:"
  181. puts "Qmon set bdepartures_, or bdep: $bdep"
  182.         puts "ns-add64 bdep 0:                [ns-add64 $bdep 0]"
  183.   set bdepDbl [ns-int64todbl $bdep]
  184.    puts "ns-int64todbl bdep:             $bdepDbl"
  185.   puts "ns-int64todbl bdep + 0:         [expr $bdepDbl + 0]"
  186. puts "These will give the wrong answer:" 
  187.   puts "bdep + 0:                       [expr $bdep + 0]"
  188.   puts "bdep * 1:                       [expr $bdep * 1]"
  189.   } else {
  190. puts "This machine doesn't use int64 counters."
  191. }
  192. }
  193. Class Test/stats64 -superclass TestSuite
  194. Test/stats64 instproc init topo {
  195. $self instvar net_ defNet_ test_
  196. set net_ $topo
  197. set defNet_ net0
  198. Queue/DropTail set summarystats_ true
  199. set test_ stats64
  200. $self next
  201. }
  202. Test/stats64 instproc run {} {
  203. $self instvar ns_ node_ testName_ 
  204. Agent/TCP set packetSize_ 2000
  205. set stoptime 75.1
  206. set printtime [expr $stoptime - 0.1]
  207. set slink [$ns_ link $node_(s1) $node_(k1)]; # link to collect stats on
  208. # set fmon [$ns_ makeflowmon Fid]
  209. # $ns_ attach-fmon $slink $fmon
  210. set qmon [$ns_ monitor-queue $node_(s1) $node_(k1) ""]
  211. set tcp0 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  212. $tcp0 set window_ 1000
  213. set ftp0 [$tcp0 attach-app FTP]
  214. $ns_ at 0.0 "$ftp0 start"
  215. $ns_ at $printtime "$self print64 $qmon"
  216. $ns_ at $stoptime "exit 0"
  217. # call finish, make an output file.
  218. $ns_ run
  219. }
  220. TestSuite runTest
  221. ### Local Variables:
  222. ### mode: tcl
  223. ### tcl-indent-level: 8
  224. ### tcl-default-application: ns
  225. ### End: