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

通讯编程

开发平台:

Visual C++

  1. #
  2. # To run all tests:  test-all-algo-routing
  3. #
  4. # To run individual tests:
  5. # ns test-suite-algo-routing.tcl Algo1
  6. # ns test-suite-algo-routing.tcl Algo2
  7. # ...
  8. #
  9. # To view a list of available tests to run with this script:
  10. # ns test-suite-mixmode.tcl
  11. #
  12. #remove-all-packet-headers       ; # removes all except common
  13. #add-packet-header Flags IP RTP TCP rtProtoDV ; # hdrs reqd for validation test
  14. # FOR UPDATING GLOBAL DEFAULTS:
  15. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  16. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  17. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  18. # This test suite is for validating the algorithmic routing support
  19. Agent/TCP set tcpTick_ 0.1
  20. # The default for tcpTick_ is being changed to reflect a changing reality.
  21. Agent/TCP set rfc2988_ false
  22. # The default for rfc2988_ is being changed to true.
  23. Agent/TCP set minrto_ 1
  24. # default changed on 10/14/2004.
  25. Agent/TCP set windowInit_ 1
  26. # The default is being changed to 2.
  27. Agent/TCP set singledup_ 0
  28. # The default is being changed to 1 in ns.
  29. Agent/TCP set useHeaders_ false
  30. # The default is being changed to useHeaders_ true.
  31. Agent/TCP set syn_ false
  32. Agent/TCP set delay_growth_ false
  33. # In preparation for changing the default values for syn_ and delay_growth_.
  34. Class TestSuite
  35. TestSuite instproc init {} {
  36. $self instvar ns_ net_ defNet_ test_ topo_ node_ testName_
  37. set ns_ [new Simulator]
  38. $ns_ use-scheduler List
  39. Node enable-module VC
  40.         $ns_ multicast
  41. $ns_ trace-all [open temp.rands w]
  42. $ns_ namtrace-all [open temp.rands.nam w]
  43. $ns_ color 1 red
  44. $ns_ color 0 blue
  45. $ns_ color 2 yellow
  46. if {$net_ == ""} {
  47. set net_ $defNet_
  48. }
  49. if ![Topology/$defNet_ info subclass Topology/$net_] {
  50. global argv0
  51. puts "$argv0: cannot run test $test_ over topology $net_"
  52. exit 1
  53. }
  54. set topo_ [new Topology/$net_ $ns_]
  55. foreach i [$topo_ array names node_] {
  56. # This would be cool, but lets try to be compatible
  57. # with test-suite.tcl as far as possible.
  58. #
  59. # $self instvar $i
  60. # set $i [$topo_ node? $i]
  61. #
  62. set node_($i) [$topo_ node? $i]
  63. }
  64. if {$net_ == $defNet_} {
  65. set testName_ "$test_"
  66. } else {
  67. set testName_ "$test_:$net_"
  68. }
  69. }
  70. TestSuite instproc finish args {
  71. $self instvar ns_
  72. $ns_ flush-trace
  73. exit 0
  74. }
  75. proc usage {} {
  76. global argv0
  77. puts stderr "usage: ns $argv0 <tests> [<topologies>]"
  78. puts stderr "Valid tests are:t[get-subclasses TestSuite Test/]"
  79. puts stderr "Valid Topologies are:t[get-subclasses SkelTopology Topology/]"
  80. exit 1
  81. }
  82. proc isProc? {cls prc} {
  83. if [catch "Object info subclass $cls/$prc" r] {
  84. global argv0
  85. puts stderr "$argv0: no such $cls: $prc"
  86. usage
  87. }
  88. }
  89. proc get-subclasses {cls pfx} {
  90. set ret ""
  91. set l [string length $pfx]
  92. set c $cls
  93. while {[llength $c] > 0} {
  94. set t [lindex $c 0]
  95. set c [lrange $c 1 end]
  96. if [string match ${pfx}* $t] {
  97. lappend ret [string range $t $l end]
  98. }
  99. eval lappend c [$t info subclass]
  100. }
  101. set ret
  102. }
  103. TestSuite proc runTest {} {
  104. global argc argv
  105. switch $argc {
  106. 1 {
  107. set test $argv
  108. isProc? Test $test
  109. set topo ""
  110. }
  111. 2 {
  112. set test [lindex $argv 0]
  113. isProc? Test $test
  114. set a [lindex $argv 1]
  115. if {$a == "QUIET"} {
  116. set topo ""
  117. } else {
  118. set topo $a
  119. isProc? Topology $topo
  120. }
  121. }
  122. default {
  123. usage
  124. }
  125. }
  126. set t [new Test/$test $topo]
  127. $t run
  128. }
  129. # Skeleton topology base class
  130. Class SkelTopology
  131. SkelTopology instproc init {} {
  132.     $self next
  133. }
  134. SkelTopology instproc node? n {
  135.     $self instvar node_
  136.     if [info exists node_($n)] {
  137. set ret $node_($n)
  138.     } else {
  139. set ret ""
  140.     }
  141.     set ret
  142. }
  143. SkelTopology instproc add-fallback-links {ns nodelist bw delay qtype args} {
  144.    $self instvar node_
  145.     set n1 [lindex $nodelist 0]
  146.     foreach n2 [lrange $nodelist 1 end] {
  147. if ![info exists node_($n2)] {
  148.     set node_($n2) [$ns node]
  149. }
  150. $ns duplex-link $node_($n1) $node_($n2) $bw $delay $qtype
  151. foreach opt $args {
  152.     set cmd [lindex $opt 0]
  153.     set val [lindex $opt 1]
  154.     if {[llength $opt] > 2} {
  155. set x1 [lindex $opt 2]
  156. set x2 [lindex $opt 3]
  157.     } else {
  158. set x1 $n1
  159. set x2 $n2
  160.     }
  161.     $ns $cmd $node_($x1) $node_($x2) $val
  162.     $ns $cmd $node_($x2) $node_($x1) $val
  163. }
  164. set n1 $n2
  165.     }
  166. }
  167. Class NodeTopology/6nodes -superclass SkelTopology
  168. NodeTopology/6nodes instproc init ns {
  169.     $self next
  170.     $self instvar node_
  171.     set node_(n0) [$ns node]
  172.     set node_(n1) [$ns node]
  173.     set node_(n2) [$ns node]
  174.     set node_(n3) [$ns node]
  175.     set node_(n4) [$ns node]
  176.     set node_(n5) [$ns node]
  177. }
  178. Class Topology/net6 -superclass NodeTopology/6nodes
  179. #
  180. # Create a simple six node topology:
  181. #
  182. #                  n0
  183. #                 /                      
  184. #               n1    n2
  185. #              /    /  
  186. #             n3   n4   n5
  187. #
  188. # All links are of 1.5Mbps bandwidth with 10ms latency
  189. #
  190. Topology/net6 instproc init ns {
  191.     $self next $ns
  192.     $self instvar node_
  193.     $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail 
  194.     $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  195.     $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail 
  196.     $ns duplex-link $node_(n1) $node_(n4) 1.5Mb 10ms DropTail 
  197.     $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  198.     $ns duplex-link $node_(n2) $node_(n5) 1.5Mb 10ms DropTail 
  199.     if {[$class info instprocs config] != ""} {
  200. $self config $ns
  201.     }
  202. }
  203. Class NodeTopology/3nodes -superclass SkelTopology
  204. NodeTopology/3nodes instproc init ns {
  205.     $self next
  206.     $self instvar node_
  207.     set node_(n0) [$ns node]
  208.     set node_(n1) [$ns node]
  209.     set node_(n2) [$ns node]
  210. }
  211. Class Topology/net3 -superclass NodeTopology/3nodes
  212. #
  213. # Create a simple six node topology:
  214. #
  215. #                  n0
  216. #                 /                      
  217. #               n1 -- n2
  218. #
  219. # All links are of 1.5Mbps bandwidth with 10ms latency
  220. #
  221. Topology/net3 instproc init ns {
  222.     $self next $ns
  223.     $self instvar node_
  224.     $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail 
  225.     $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  226.     $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail 
  227.     if {[$class info instprocs config] != ""} {
  228. $self config $ns
  229.     }
  230. }
  231. Class NodeTopology/4nodes -superclass SkelTopology
  232. NodeTopology/4nodes instproc init ns {
  233. $self next
  234. $self instvar node_
  235. set node_(n0) [$ns node]
  236. set node_(n1) [$ns node]
  237. set node_(n2) [$ns node]
  238. set node_(n3) [$ns node]
  239. }
  240. Class Topology/net4 -superclass NodeTopology/4nodes
  241. # Create a simple four node topology:
  242. #
  243. #               n3
  244. #              / 
  245. #       1.5Mb,10ms  / 1.5Mb,10ms                              
  246. #    n0 --------- n1
  247. #                    1.5Mb,10ms
  248. #              
  249. #              n2
  250. #
  251. Topology/net4 instproc init ns {
  252. $self next $ns
  253. $self instvar node_
  254. $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail
  255. $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail
  256. $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail
  257. if {[$class info instprocs config] != ""} {
  258. $self config $ns
  259. }
  260. }
  261. # Definition of test-suite tests
  262. # Testing algorithmic routing in a simple topology
  263. Class Test/VC1 -superclass TestSuite
  264. Test/VC1 instproc init net {
  265. $self instvar defNet_ test_ net_
  266. set defNet_ net3
  267. set test_ VC1
  268. set net_ $net
  269. $self next
  270. }
  271. Test/VC1 instproc run {} {
  272. $self instvar ns_ node_ testName_
  273. set grp0 [Node allocaddr]
  274.         $ns_ rtproto Algorithmic
  275.         set mproto CtrMcast
  276.         set mrthandle [$ns_ mrtproto $mproto {}]
  277.         if {$mrthandle != ""} {
  278.     $mrthandle set_c_rp $node_(n2)
  279. }
  280.         if {$mrthandle != ""} {
  281.     $ns_ at 0.3 "$mrthandle switch-treetype $grp0"
  282.         }
  283. set udp0 [new Agent/UDP]
  284. $ns_ attach-agent $node_(n1) $udp0
  285. $udp0 set dst_addr_ $grp0
  286. $udp0 set dst_port_ 0
  287. $udp0 set class_ 1
  288. set cbr0 [new Application/Traffic/CBR]
  289. $cbr0 attach-agent $udp0
  290. set rcvr0 [new Agent/LossMonitor]
  291. $ns_ attach-agent $node_(n0) $rcvr0
  292. set rcvr1 [new Agent/LossMonitor]
  293. $ns_ attach-agent $node_(n1) $rcvr1
  294. set rcvr2 [new Agent/LossMonitor]
  295. $ns_ attach-agent $node_(n2) $rcvr2
  296. $ns_ at 0.1 "$cbr0 start"
  297. $ns_ at 0.1 "$node_(n1) join-group $rcvr1 $grp0"
  298. $ns_ at 0.1 "$node_(n0) join-group $rcvr0 $grp0"
  299. $ns_ at 0.1 "$node_(n2) join-group $rcvr2 $grp0"
  300. $ns_ at 0.5 "$self finish [list $rcvr0 $rcvr1 $rcvr2]"
  301. $ns_ run
  302. }
  303. # Testing algorithmic routing with multicast in a simple topology
  304. Class Test/VC2 -superclass TestSuite
  305. Test/VC2 instproc init net {
  306. $self instvar defNet_ test_ net_
  307. set defNet_ net6
  308. set test_ VC2
  309. set net_ $net
  310. $self next
  311. }
  312. Test/VC2 instproc run {} {
  313. $self instvar ns_ node_ testName_
  314. set grp0 [Node allocaddr]
  315.         $ns_ rtproto Algorithmic
  316.         set mproto CtrMcast
  317.         set mrthandle [$ns_ mrtproto $mproto {}]
  318.         if {$mrthandle != ""} {
  319.     $mrthandle set_c_rp $node_(n2)
  320. }
  321.         if {$mrthandle != ""} {
  322.     $ns_ at 0.3 "$mrthandle switch-treetype $grp0"
  323.         }
  324. set udp0 [new Agent/UDP]
  325. $ns_ attach-agent $node_(n4) $udp0
  326. $udp0 set dst_addr_ $grp0
  327. $udp0 set dst_port_ 0
  328. $udp0 set class_ 1
  329. set cbr0 [new Application/Traffic/CBR]
  330. $cbr0 attach-agent $udp0
  331. set rcvr0 [new Agent/LossMonitor]
  332. $ns_ attach-agent $node_(n0) $rcvr0
  333. set rcvr1 [new Agent/LossMonitor]
  334. $ns_ attach-agent $node_(n1) $rcvr1
  335. set rcvr2 [new Agent/LossMonitor]
  336. $ns_ attach-agent $node_(n2) $rcvr2
  337. set rcvr3 [new Agent/LossMonitor]
  338. $ns_ attach-agent $node_(n3) $rcvr3
  339. set rcvr4 [new Agent/LossMonitor]
  340. $ns_ attach-agent $node_(n4) $rcvr4
  341. set rcvr5 [new Agent/LossMonitor]
  342. $ns_ attach-agent $node_(n5) $rcvr5
  343. $ns_ at 0.1 "$cbr0 start"
  344. $ns_ at 0.1 "$node_(n1) join-group $rcvr1 $grp0"
  345. $ns_ at 0.1 "$node_(n0) join-group $rcvr0 $grp0"
  346. $ns_ at 0.1 "$node_(n3) join-group $rcvr3 $grp0"
  347. $ns_ at 0.1 "$node_(n2) join-group $rcvr2 $grp0"
  348. $ns_ at 0.1 "$node_(n4) join-group $rcvr4 $grp0"
  349. $ns_ at 0.1 "$node_(n5) join-group $rcvr5 $grp0"
  350. $ns_ at 0.5 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3 $rcvr4 $rcvr5]"
  351. $ns_ run
  352. }
  353. Class Test/VC3 -superclass TestSuite
  354. Test/VC3 instproc init topo {
  355. $self instvar net_ defNet_ test_
  356. set net_ $topo
  357. set defNet_ net4
  358. set test_ VC3
  359. $self next
  360. }
  361. Test/VC3 instproc run {} {
  362.     $self instvar ns_ node_ testName_
  363.     set udp0 [new Agent/UDP]
  364.     $ns_ attach-agent $node_(n3) $udp0
  365.     set cbr0 [new Application/Traffic/CBR]
  366.     $cbr0 attach-agent $udp0
  367.     
  368.     set udp1 [new Agent/UDP]
  369.     $ns_ attach-agent $node_(n0) $udp1
  370.     $udp1 set class_ 1
  371.     set cbr1 [new Application/Traffic/CBR]
  372.     $cbr1 attach-agent $udp1
  373.     set null0 [new Agent/Null]
  374.     $ns_ attach-agent $node_(n0) $null0
  375.     set null1 [new Agent/Null]
  376.     $ns_ attach-agent $node_(n2) $null1
  377.     $ns_ connect $udp0 $null0
  378.     $ns_ connect $udp1 $null1
  379.     $ns_ at 1.0 "$cbr0 start"
  380.     $ns_ at 1.1 "$cbr1 start"
  381.     set tcp [new Agent/TCP]
  382.     $tcp set class_ 2
  383.     set sink [new Agent/TCPSink]
  384.     $ns_ attach-agent $node_(n0) $tcp
  385.     $ns_ attach-agent $node_(n3) $sink
  386.     $ns_ connect $tcp $sink
  387.     set ftp [new Application/FTP]
  388.     $ftp attach-agent $tcp
  389.     $ns_ at 1.2 "$ftp start"
  390.     $ns_ at 1.35 "$ns_ detach-agent $node_(n0) $tcp ; $ns_ detach-agent $node_(n3) $sink"
  391.     $ns_ at 1.5 "$self finish"
  392.     $ns_ run
  393. }
  394. TestSuite runTest