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

通讯编程

开发平台:

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. # XXX Strange strange:
  17. #  There is a order dependence of hierarchical routing and multicast: 
  18. #
  19. #  if you turn on hier routing BEFORE multicast, the trace result is
  20. #  different from you turn on hier routing AFTER multicast. The reason is
  21. #  that set-address-format{} checks multicast from ns-address.tcl; if it's 
  22. #  on, it sets a different address format.
  23. #
  24. #  What I don't understand is, since hier addressing format depends on
  25. #  whether mcast is on, why in the test suite test-suite-hier-routing.tcl,
  26. #  multicast is turned on AFTER hierarchical routing? Is this a bug? Should
  27. #  there be this dependence? 
  28. # This test suite is for validating hierarchical routing
  29. # To run all tests: test-all-hier-routing
  30. # to run individual test:
  31. # ns test-suite-hier-routing.tcl hier-simple
  32. # ns test-suite-hier-routing.tcl hier-cmcast
  33. # ....
  34. #
  35. # To view a list of available test to run with this script:
  36. # ns test-suite-hier-routing.tcl
  37. #
  38. # Every test uses a 10 node hierarchical topology
  39. ##remove-all-packet-headers       ; # removes all except common
  40. #add-packet-header Flags IP RTP TCP  ; # hdrs reqd for validation test
  41.  
  42. # FOR UPDATING GLOBAL DEFAULTS:
  43. Class TestSuite
  44. # Simple hierarchical routing
  45. Class Test/hier-simple -superclass TestSuite
  46. # hierarchical routing with CentralisedMcast
  47. Class Test/hier-cmcast -superclass TestSuite
  48. # session simulations using hierarchical routing
  49. Class Test/hier-session -superclass TestSuite
  50. proc usage {} {
  51. global argv0
  52. puts stderr "usage: ns $argv0 <tests> "
  53. puts "Valid Tests: hier-simple hier-cmcast hier-deDM 
  54. hier-session"
  55. exit 1
  56. }
  57. # A place holder that can be overridden
  58. TestSuite instproc init-hier-routing {} {
  59. $self instvar ns_
  60. # By default we use node-config, then we switch to HierNode to 
  61. # test backward compability
  62. $ns_ node-config -addressType hierarchical
  63. }
  64. TestSuite instproc init-simulator {} {
  65. }
  66. TestSuite instproc alloc-mcast-addr {} {
  67. }
  68. TestSuite instproc init {} {
  69. $self instvar ns_ n_ g_ testName_
  70. $self init-simulator
  71. $self init-hier-routing
  72. $self alloc-mcast-addr
  73. #setup hierarchical topology
  74. AddrParams set domain_num_ 2
  75. lappend cluster_num 2 2
  76. AddrParams set cluster_num_ $cluster_num
  77. lappend eilastlevel 2 3 2 3
  78. AddrParams set nodes_num_ $eilastlevel
  79. set naddr {0.0.0 0.0.1 0.1.0 0.1.1 0.1.2 1.0.0 1.0.1 1.1.0 
  80. 1.1.1 1.1.2}
  81. for {set i 0} {$i < 10} {incr i} {
  82. set n_($i) [$ns_ node [lindex $naddr $i]]
  83. }
  84. $ns_ duplex-link $n_(0) $n_(1) 5Mb 2ms DropTail
  85. $ns_ duplex-link $n_(1) $n_(2) 5Mb 2ms DropTail
  86. $ns_ duplex-link $n_(2) $n_(3) 5Mb 2ms DropTail
  87. $ns_ duplex-link $n_(2) $n_(4) 5Mb 2ms DropTail
  88. $ns_ duplex-link $n_(1) $n_(5) 5Mb 2ms DropTail
  89. $ns_ duplex-link $n_(5) $n_(6) 5Mb 2ms DropTail
  90. $ns_ duplex-link $n_(6) $n_(7) 5Mb 2ms DropTail
  91. $ns_ duplex-link $n_(7) $n_(8) 5Mb 2ms DropTail
  92. $ns_ duplex-link $n_(8) $n_(9) 5Mb 2ms DropTail
  93. }
  94. TestSuite instproc finish {} {
  95. $self instvar ns_
  96. global quiet
  97. $ns_ flush-trace
  98.         if { !$quiet } {
  99.                 puts "running nam..."
  100.                 exec nam temp.rands.nam &
  101.         }
  102. #puts "finishing.."
  103. exit 0
  104. }
  105. Test/hier-simple instproc init {} {
  106. $self instvar testName_ 
  107. set testName_ hier-simple
  108. $self next
  109. }
  110. Test/hier-simple instproc init-simulator {} {
  111. $self instvar ns_
  112. set ns_ [new Simulator]
  113. $ns_ trace-all [open temp.rands w]
  114. $ns_ namtrace-all [open temp.rands.nam w]
  115. }
  116. Test/hier-simple instproc run {} {
  117. $self instvar ns_ n_ 
  118. set udp0 [new Agent/UDP]
  119. $ns_ attach-agent $n_(0) $udp0
  120. set cbr0 [new Application/Traffic/CBR]
  121. $cbr0 attach-agent $udp0
  122. set udp1 [new Agent/UDP]
  123. $ns_ attach-agent $n_(2) $udp1
  124. $udp1 set class_ 1
  125. set cbr1 [new Application/Traffic/CBR]
  126. $cbr1 attach-agent $udp1
  127. set null0 [new Agent/Null]
  128. $ns_ attach-agent $n_(8) $null0
  129. set null1 [new Agent/Null]
  130. $ns_ attach-agent $n_(6) $null1
  131. $ns_ connect $udp0 $null0
  132. $ns_ connect $udp1 $null1
  133. $ns_ at 1.0 "$cbr0 start"
  134. $ns_ at 1.1 "$cbr1 start"
  135. $ns_ at 3.0 "$self finish"
  136. $ns_ run
  137. }
  138. Test/hier-cmcast instproc init {} {
  139. $self instvar ns_ testName_
  140. set testName_ hier-cmcast
  141. $self next 
  142. }
  143. Test/hier-cmcast instproc init-simulator {} {
  144. $self instvar ns_
  145. set ns_ [new Simulator]
  146. $ns_ trace-all [open temp.rands w]
  147. $ns_ namtrace-all [open temp.rands.nam w]
  148. }
  149. Test/hier-cmcast instproc alloc-mcast-addr {} {
  150. $self instvar g_ ns_
  151. # XXX If we first allocate a simulator with -multicast on, then 
  152. # turn on hierarchical routing, the result trace file is different
  153. # from we turn multicast on AFTER we turn on hierarchical routing!
  154. # The reason is that set-address-format{} in ns-address.tcl sets a 
  155. # different address format if it finds multicast is turned on. 
  156. $ns_ multicast on
  157. set g_ [Node allocaddr]
  158. }
  159. Test/hier-cmcast instproc run {} {
  160. $self instvar ns_ n_ g_
  161. set mproto CtrMcast
  162. set mrthandle [$ns_ mrtproto $mproto {}]
  163. $ns_ at 0.0 "$mrthandle switch-treetype $g_" 
  164. for {set i 1} {$i < 10} {incr i} {
  165. set rcvr($i) [new Agent/Null]
  166. $ns_ attach-agent $n_($i) $rcvr($i)
  167. $ns_ at $i "$n_($i) join-group $rcvr($i) $g_"
  168. incr i
  169. }
  170. set udp0 [new Agent/UDP]
  171. $ns_ attach-agent $n_(0) $udp0
  172. $udp0 set dst_addr_ $g_
  173. $udp0 set dst_port_ 0
  174. $udp0 set class_ 2
  175. set sender [new Application/Traffic/CBR]
  176. $sender attach-agent $udp0
  177. $ns_ at 0.0 "$sender start"
  178. $ns_ at 10.0 "$self finish"
  179. $ns_ run
  180. }
  181. #Test/hier-deDM instproc init {flag} {
  182. #   $self instvar ns_ testName_ flag_
  183. #   set testName_ hier-detailedDM
  184. #   set flag_ $flag
  185. #   $self next 
  186. #}
  187. #
  188. #Test/hier-deDM instproc run {} {
  189. #   $self instvar ns_ n_ g_
  190. #   set mproto detailedDM
  191. #   set mrthandle [$ns_ mrtproto $mproto {}]
  192. #   
  193. #   for {set i 1} {$i < 10} {incr i} {
  194. #   set rcvr($i) [new Agent/LossMonitor]
  195. #   $ns_ attach-agent $n_($i) $rcvr($i)
  196. #   $ns_ at $i "$n_($i) join-group $rcvr($i) $g_"
  197. #   incr i
  198. #   }
  199. #   set udp0 [new Agent/UDP]
  200. #   $ns_ attach-agent $n_(0) $udp0
  201. #   $udp0 set dst_ $g_
  202. #   $udp0 set class_ 2
  203. #   set sender [new Application/Traffic/CBR]
  204. #   $sender attach-agent $udp0
  205. #   $ns_ at 0.1 "$sender start"
  206. #   $ns_ at 10.0 "$self finish"
  207. #   
  208. #   $ns_ run
  209. #}
  210. Test/hier-session instproc init {} {
  211. $self instvar ns_ testName_ 
  212. set testName_ hier-session
  213. $self next 
  214. }
  215. Test/hier-session instproc init-simulator {} {
  216. $self instvar ns_ g_
  217. set ns_ [new SessionSim]
  218. set g_ [Node allocaddr]
  219. $ns_ namtrace-all [open temp.rands w]
  220. }
  221. Test/hier-session instproc run {} {
  222. $self instvar ns_ n_ g_
  223. for {set i 1} {$i < 10} {incr i} {
  224. set rcvr($i) [new Agent/LossMonitor]
  225. $ns_ attach-agent $n_($i) $rcvr($i)
  226. $ns_ at $i "$n_($i) join-group $rcvr($i) $g_"
  227. incr i
  228. }
  229. set udp0 [new Agent/UDP]
  230. $ns_ attach-agent $n_(0) $udp0
  231. $udp0 set dst_addr_ $g_
  232. $udp0 set dst_port_ 0
  233. set sender [new Application/Traffic/CBR]
  234. $sender attach-agent $udp0
  235. $ns_ create-session $n_(0) $udp0
  236. $ns_ at 0.1 "$sender start"
  237. $ns_ at 10.0 "$self finish"
  238. $ns_ run
  239. }
  240. #
  241. # Backward compatibility tests 
  242. #
  243. #  Class Test-BackCompat -superclass TestSuite
  244. #  Test-BackCompat instproc init-hier-routing {} {
  245. #   $self instvar ns_
  246. #   puts "testing backward compatibility of hierarchical routing"
  247. #   Simulator set node_factory_ HierNode
  248. #   $ns_ set-address-format hierarchical
  249. #  }
  250. #  Class Test/hier-simple-bc -superclass {Test-BackCompat Test/hier-simple}
  251. #  Class Test/hier-cmcast-bc -superclass {Test-BackCompat Test/hier-cmcast}
  252. #  Class Test/hier-session-bc -superclass {Test-BackCompat Test/hier-session}
  253. proc runtest {arg} {
  254. global quiet
  255. set quiet 0
  256. set b [llength $arg]
  257. if {$b == 1} {
  258. set test $arg
  259. } elseif {$b == 2} {
  260. set test [lindex $arg 0]
  261.     if {[lindex $arg 1] == "QUIET"} {
  262. set quiet 1
  263.     }
  264. } else {
  265. usage
  266. }
  267. set t [new Test/$test]
  268. $t run
  269. }
  270. global argv arg0
  271. runtest $argv