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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1998 University of Southern California.
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. # This test suite is for monitoring TCP variable trace
  17. # To run all tests: test-all-monitor
  18. # to run individual test:
  19. # ns test-suite-monitor.tcl tcp
  20. # ns test-suite-monitor.tcl tcp-monitor
  21. #
  22. # To view a list of available test to run with this script:
  23. # ns test-suite-monitor.tcl
  24. #
  25. # Each of the tests uses 6 nodes 
  26. #remove-all-packet-headers       ; # removes all except common
  27. #add-packet-header Flags IP TCP  ; # hdrs reqd for validation test
  28.  
  29. # FOR UPDATING GLOBAL DEFAULTS:
  30. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  31. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  32. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  33. Agent/TCP set syn_ false
  34. Agent/TCP set delay_growth_ false
  35. # In preparation for changing the default values for syn_ and delay_growth_.
  36. Agent/TCP set tcpTick_ 0.1
  37. # The default for tcpTick_ is being changed to reflect a changing reality.
  38. Agent/TCP set rfc2988_ false
  39. # The default for rfc2988_ is being changed to true.
  40. # FOR UPDATING GLOBAL DEFAULTS:
  41. Agent/TCP set minrto_ 1
  42. # default changed on 10/14/2004.
  43. Agent/TCP set useHeaders_ false
  44. # The default is being changed to useHeaders_ true.
  45. Agent/TCP set windowInit_ 1
  46. # The default is being changed to 2.
  47. Agent/TCP set singledup_ 0
  48. # The default is being changed to 1
  49. Class TestSuite
  50. Class Test/tcp -superclass TestSuite
  51. # Simple tcp without monitoring
  52. Class Test/tcp-monitor -superclass TestSuite
  53. # Simple tcp with monitoring (nam_tracevar_)
  54. proc usage {} {
  55. global argv0
  56. puts stderr "usage: ns $argv0 <tests> "
  57. puts "Valid <tests> : tcp tcp-monitor"
  58. exit 1
  59. }
  60. TestSuite instproc init {} {
  61.     $self instvar ns_ n_
  62.     set ns_ [new Simulator]
  63.     $ns_ namtrace-all [open temp.rands w]
  64.     foreach i " 0 1 2 3 4 5" {
  65. set n_($i) [$ns_ node]
  66.     }
  67.     $ns_ duplex-link $n_(0) $n_(2) 1Mb 20ms DropTail
  68.     $ns_ duplex-link $n_(1) $n_(2) 1Mb 20ms DropTail
  69.     $ns_ duplex-link $n_(2) $n_(3) 0.5Mb 20ms DropTail
  70.     $ns_ duplex-link $n_(3) $n_(4) 1Mb 20ms DropTail
  71.     $ns_ duplex-link $n_(3) $n_(5) 1Mb 20ms DropTail
  72.     $ns_ duplex-link-op $n_(0) $n_(2) orient right-down
  73.     $ns_ duplex-link-op $n_(1) $n_(2) orient right-up
  74.     $ns_ duplex-link-op $n_(2) $n_(3) orient right
  75.     $ns_ duplex-link-op $n_(3) $n_(4) orient right-up
  76.     $ns_ duplex-link-op $n_(3) $n_(5) orient right-down
  77.     $ns_ duplex-link-op $n_(2) $n_(3) queuePos 0.5
  78. }
  79. TestSuite instproc finish {} {
  80. $self instvar ns_
  81. global quiet
  82. $ns_ flush-trace
  83.         if { !$quiet } {
  84.                 puts "running nam..."
  85.                 exec nam temp.rands &
  86.         }
  87. exit 0
  88. }
  89. Test/tcp instproc init {flag} {
  90. $self instvar ns_ testName_ flag_
  91. set testName_ tcp
  92. set flag_ $flag
  93. $self next
  94. }
  95. Test/tcp instproc run {} {
  96. $self instvar ns_ n_ 
  97.         $ns_ queue-limit $n_(2) $n_(3) 20
  98.         ### TCP between n_(0) & n_(4)
  99.         Agent/TCP set maxcwnd_ 8
  100.         set tcp0 [new Agent/TCP]
  101.         $ns_ attach-agent $n_(0) $tcp0
  102.         set sink0 [new Agent/TCPSink]
  103.         $ns_ attach-agent $n_(4) $sink0
  104.         $ns_ connect $tcp0 $sink0
  105.         set ftp0 [new Application/FTP]
  106.         $ftp0 attach-agent $tcp0
  107.         ### CBR traffic between n_(1) & n_(5)
  108.         set udp0 [new Agent/UDP]
  109.         $ns_ attach-agent $n_(1) $udp0
  110.         set cbr0 [new Application/Traffic/CBR]
  111.         $cbr0 set packetSize_ 500
  112.         $cbr0 set interval_ 0.01
  113.         $cbr0 attach-agent $udp0
  114.         set null0 [new Agent/Null]
  115.         $ns_ attach-agent $n_(5) $null0
  116.         $ns_ connect $udp0 $null0
  117.         ### setup operation
  118.         $ns_ at 0.1 "$cbr0 start"
  119.         $ns_ at 1.1 "$cbr0 stop"
  120.         $ns_ at 0.2 "$ftp0 start"
  121.         $ns_ at 1.1 "$ftp0 stop"
  122.         $ns_ at 1.2 "$self finish"
  123.         $ns_ run
  124. }
  125. Test/tcp-monitor instproc init {flag} {
  126. $self instvar ns_ testName_ flag_
  127. set testName_ tcp-monitor
  128. set flag_ $flag
  129. $self next 
  130. }
  131. Test/tcp-monitor instproc run {} {
  132. $self instvar ns_ n_
  133.         $ns_ queue-limit $n_(2) $n_(3) 20
  134.         ### TCP between n_(0) & n_(4)
  135.         Agent/TCP set nam_tracevar_ true
  136.         Agent/TCP set maxcwnd_ 8
  137.         set tcp0 [new Agent/TCP]
  138.         $ns_ attach-agent $n_(0) $tcp0
  139.         set sink0 [new Agent/TCPSink]
  140.         $ns_ attach-agent $n_(4) $sink0
  141.         $ns_ connect $tcp0 $sink0
  142.         $ns_ add-agent-trace $tcp0 tcp
  143.         $ns_ monitor-agent-trace $tcp0
  144.         $tcp0 tracevar cwnd_
  145.         $tcp0 tracevar ssthresh_
  146.         set ftp0 [new Application/FTP]
  147.         $ftp0 attach-agent $tcp0
  148.         ### CBR traffic between n_(1) & n_(5)
  149.         set udp0 [new Agent/UDP]
  150.         $ns_ attach-agent $n_(1) $udp0
  151.         set cbr0 [new Application/Traffic/CBR]
  152.         $cbr0 set packetSize_ 500
  153.         $cbr0 set interval_ 0.01
  154.         $cbr0 attach-agent $udp0
  155.         set null0 [new Agent/Null]
  156.         $ns_ attach-agent $n_(5) $null0
  157.         $ns_ connect $udp0 $null0
  158.         ### setup operation
  159.         $ns_ at 0.1 "$cbr0 start"
  160.         $ns_ at 1.1 "$cbr0 stop"
  161.         $ns_ at 0.2 "$ftp0 start"
  162.         $ns_ at 1.1 "$ftp0 stop"
  163.         $ns_ at 1.2 "$self finish"
  164.         $ns_ run
  165. }
  166. proc runtest {arg} {
  167. global quiet
  168. set quiet 0
  169. set b [llength $arg]
  170. if {$b == 1} {
  171. set test $arg
  172. } elseif {$b == 2} {
  173. set test [lindex $arg 0]
  174.     if {[lindex $arg 1] == "QUIET"} {
  175. set quiet 1
  176.     }
  177. } else {
  178. usage
  179. }
  180. switch $test {
  181.                 tcp -
  182.                 tcp-monitor {
  183. set t [new Test/$test 1]
  184. }
  185. default {
  186. stderr "Unknown test $test"
  187. exit 1
  188. }
  189. }
  190. $t run
  191. }
  192. global argv arg0
  193. runtest $argv