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

通讯编程

开发平台:

Visual C++

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