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

通讯编程

开发平台:

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-mixmode
  5. #
  6. # To run individual tests:
  7. # ns test-suite-mixmode.tcl Mixmode1
  8. # ns test-suite-mixmode.tcl Mixmode2
  9. # ...
  10. #
  11. # To view a list of available tests to run with this script:
  12. # ns test-suite-mixmode.tcl
  13. #
  14. #remove-all-packet-headers       ; # removes all except common
  15. #add-packet-header Flags IP RTP TCP  ; # hdrs reqd for validation test
  16.  
  17. # FOR UPDATING GLOBAL DEFAULTS:
  18. Class TestSuite
  19. TestSuite instproc init {} {
  20. $self instvar ns_ net_ defNet_ test_ topo_ node_ testName_
  21. set ns_ [new SessionSim]
  22. #$ns_ use-scheduler List
  23.         $ns_ multicast
  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.     $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail
  176.     $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail
  177.     $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail
  178.     if {[$class info instprocs config] != ""} {
  179. $self config $ns
  180.     }
  181. }
  182. Class NodeTopology/6nodes -superclass SkelTopology
  183. NodeTopology/6nodes instproc init ns {
  184.     $self next
  185.     $self instvar node_
  186.     set node_(n0) [$ns node]
  187.     set node_(n1) [$ns node]
  188.     set node_(n2) [$ns node]
  189.     set node_(n3) [$ns node]
  190.     set node_(n4) [$ns node]
  191.     set node_(n5) [$ns node]
  192. }
  193. Class Topology/net6 -superclass NodeTopology/6nodes
  194. #
  195. # Create a simple six node topology:
  196. #
  197. #                  n0
  198. #                 /                      
  199. #               n1    n2
  200. #              /    /  
  201. #             n3   n4   n5
  202. #
  203. # All links are of 1.5Mbps bandwidth with 10ms latency
  204. #
  205. Topology/net6 instproc init ns {
  206.     $self next $ns
  207.     $self instvar node_
  208.     $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail 
  209.     $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  210.     $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail 
  211.     $ns duplex-link $node_(n1) $node_(n4) 1.5Mb 10ms DropTail 
  212.     $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  213.     $ns duplex-link $node_(n2) $node_(n5) 1.5Mb 10ms DropTail 
  214.     if {[$class info instprocs config] != ""} {
  215. $self config $ns
  216.     }
  217. }
  218. Class NodeTopology/10nodes -superclass SkelTopology
  219. NodeTopology/10nodes instproc init ns {
  220.     $self next
  221.     $self instvar node_
  222.     set node_(n0) [$ns node]
  223.     set node_(n1) [$ns node]
  224.     set node_(n2) [$ns node]
  225.     set node_(n3) [$ns node]
  226.     set node_(n4) [$ns node]
  227.     set node_(n5) [$ns node]
  228.     set node_(n6) [$ns node]
  229.     set node_(n7) [$ns node]
  230.     set node_(n8) [$ns node]
  231.     set node_(n9) [$ns node]
  232. }
  233. Class Topology/net10 -superclass NodeTopology/10nodes
  234. #
  235. # Create a simple ten node topology:
  236. #
  237. #                  n0
  238. #               +---+-+
  239. #              n1     n2
  240. #            +--+-+   |
  241. #           n3    n4  n5
  242. #          +-+-+  |   |
  243. #         n6  n7  n8  n9
  244. #
  245. #
  246. # All links are of 1.5Mbps bandwidth with 10ms latency
  247. #
  248. Topology/net10 instproc init ns {
  249.     $self next $ns
  250.     $self instvar node_
  251.     $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail 
  252.     $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  253.     $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail 
  254.     $ns duplex-link $node_(n1) $node_(n4) 1.5Mb 10ms DropTail 
  255.     $ns duplex-link $node_(n2) $node_(n5) 1.5Mb 10ms DropTail 
  256.     $ns duplex-link $node_(n3) $node_(n6) 1.5Mb 10ms DropTail
  257.     $ns duplex-link $node_(n3) $node_(n7) 1.5Mb 10ms DropTail
  258.     $ns duplex-link $node_(n4) $node_(n8) 1.5Mb 10ms DropTail
  259.     $ns duplex-link $node_(n5) $node_(n9) 1.5Mb 10ms DropTail
  260.     if {[$class info instprocs config] != ""} {
  261. $self config $ns
  262.     }
  263. }
  264. # Definition of test-suite tests
  265. # Testing group join for mix-mode sim in a simple topology
  266. Class Test/Mixmode1 -superclass TestSuite
  267. Test/Mixmode1 instproc init net {
  268. $self instvar defNet_ test_ net_
  269. set defNet_ net4
  270. set test_ Mixmode1
  271. set net_ $net
  272. $self next
  273. }
  274. Test/Mixmode1 instproc run {} {
  275. $self instvar ns_ node_ testName_
  276. $ns_ detailed-duplex-link $node_(n0) $node_(n1)
  277. set grp0 [Node allocaddr]
  278.         set mproto CtrMcast
  279.         set mrthandle [$ns_ mrtproto $mproto {}]
  280.         if {$mrthandle != ""} {
  281.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  282.         }
  283. set udp0 [new Agent/UDP]
  284. $ns_ attach-agent $node_(n2) $udp0
  285. $udp0 set dst_addr_ $grp0
  286. $udp0 set dst_port_ 0
  287. set cbr0 [new Application/Traffic/CBR]
  288. $cbr0 attach-agent $udp0
  289. $ns_ create-session $node_(n2) $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. set rcvr3 [new Agent/LossMonitor]
  297. $ns_ attach-agent $node_(n3) $rcvr3
  298. $ns_ at 0.3 "$cbr0 start"
  299. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  300. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  301. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  302. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  303. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  304. $ns_ run
  305. }
  306. Class Test/Mixmode2 -superclass TestSuite
  307. Test/Mixmode2 instproc init net {
  308. $self instvar defNet_ test_ net_
  309. set defNet_ net4
  310. set test_ Mixmode2
  311. set net_ $net
  312. $self next
  313. }
  314. Test/Mixmode2 instproc run {} {
  315. $self instvar ns_ node_ testName_
  316. $ns_ detailed-duplex-link $node_(n1) $node_(n2)
  317. set grp0 [Node allocaddr]
  318.         set mproto CtrMcast
  319.         set mrthandle [$ns_ mrtproto $mproto {}]
  320.         if {$mrthandle != ""} {
  321.     $ns_ at 0.01 "$mrthandle switch-treetype 0x8001"
  322.         }
  323. set udp0 [new Agent/UDP]
  324. $ns_ attach-agent $node_(n2) $udp0
  325. $udp0 set dst_addr_ $grp0
  326. $udp0 set dst_port_ 0
  327. set cbr0 [new Application/Traffic/CBR]
  328. $cbr0 attach-agent $udp0
  329. $ns_ create-session $node_(n2) $udp0
  330. set rcvr0 [new Agent/LossMonitor]
  331. $ns_ attach-agent $node_(n0) $rcvr0
  332. set rcvr1 [new Agent/LossMonitor]
  333. $ns_ attach-agent $node_(n1) $rcvr1
  334. set rcvr2 [new Agent/LossMonitor]
  335. $ns_ attach-agent $node_(n2) $rcvr2
  336. set rcvr3 [new Agent/LossMonitor]
  337. $ns_ attach-agent $node_(n3) $rcvr3
  338. $ns_ at 0.3 "$cbr0 start"
  339. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  340. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  341. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  342. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  343. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  344. $ns_ run
  345. }
  346. Class Test/Mixmode3 -superclass TestSuite
  347. Test/Mixmode3 instproc init net {
  348. $self instvar defNet_ test_ net_
  349. set defNet_ net4
  350. set test_ Mixmode3
  351. set net_ $net
  352. $self next
  353. }
  354. Test/Mixmode3 instproc run {} {
  355. $self instvar ns_ node_ testName_
  356. $ns_ detailed-duplex-link $node_(n1) $node_(n3)
  357. set grp0 [Node allocaddr]
  358.         set mproto CtrMcast
  359.         set mrthandle [$ns_ mrtproto $mproto {}]
  360.         if {$mrthandle != ""} {
  361.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  362.         }
  363. set udp0 [new Agent/UDP]
  364. $ns_ attach-agent $node_(n2) $udp0
  365. $udp0 set dst_addr_ $grp0
  366. $udp0 set dst_port_ 0
  367. set cbr0 [new Application/Traffic/CBR]
  368. $cbr0 attach-agent $udp0
  369. $ns_ create-session $node_(n2) $udp0
  370. set rcvr0 [new Agent/LossMonitor]
  371. $ns_ attach-agent $node_(n0) $rcvr0
  372. set rcvr1 [new Agent/LossMonitor]
  373. $ns_ attach-agent $node_(n1) $rcvr1
  374. set rcvr2 [new Agent/LossMonitor]
  375. $ns_ attach-agent $node_(n2) $rcvr2
  376. set rcvr3 [new Agent/LossMonitor]
  377. $ns_ attach-agent $node_(n3) $rcvr3
  378. $ns_ at 0.3 "$cbr0 start"
  379. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  380. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  381. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  382. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  383. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  384. $ns_ run
  385. }
  386. Class Test/Mixmode4 -superclass TestSuite
  387. Test/Mixmode4 instproc init net {
  388. $self instvar defNet_ test_ net_
  389. set defNet_ net4
  390. set test_ Mixmode4
  391. set net_ $net
  392. $self next
  393. }
  394. Test/Mixmode4 instproc run {} {
  395. $self instvar ns_ node_ testName_
  396. $ns_ detailed-duplex-link $node_(n0) $node_(n1)
  397. $ns_ detailed-duplex-link $node_(n1) $node_(n2)
  398. set grp0 [Node allocaddr]
  399.         set mproto CtrMcast
  400.         set mrthandle [$ns_ mrtproto $mproto {}]
  401.         if {$mrthandle != ""} {
  402.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  403.         }
  404. set udp0 [new Agent/UDP]
  405. $ns_ attach-agent $node_(n2) $udp0
  406. $udp0 set dst_addr_ $grp0
  407. $udp0 set dst_port_ 0
  408. set cbr0 [new Application/Traffic/CBR]
  409. $cbr0 attach-agent $udp0
  410. $ns_ create-session $node_(n2) $udp0
  411. set rcvr0 [new Agent/LossMonitor]
  412. $ns_ attach-agent $node_(n0) $rcvr0
  413. set rcvr1 [new Agent/LossMonitor]
  414. $ns_ attach-agent $node_(n1) $rcvr1
  415. set rcvr2 [new Agent/LossMonitor]
  416. $ns_ attach-agent $node_(n2) $rcvr2
  417. set rcvr3 [new Agent/LossMonitor]
  418. $ns_ attach-agent $node_(n3) $rcvr3
  419. $ns_ at 0.3 "$cbr0 start"
  420. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  421. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  422. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  423. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  424. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  425. $ns_ run
  426. }
  427. Class Test/Mixmode5 -superclass TestSuite
  428. Test/Mixmode5 instproc init net {
  429. $self instvar defNet_ test_ net_
  430. set defNet_ net4
  431. set test_ Mixmode5
  432. set net_ $net
  433. $self next
  434. }
  435. Test/Mixmode5 instproc run {} {
  436. $self instvar ns_ node_ testName_
  437. $ns_ detailed-duplex-link $node_(n0) $node_(n1)
  438. $ns_ detailed-duplex-link $node_(n1) $node_(n3)
  439. set grp0 [Node allocaddr]
  440.         set mproto CtrMcast
  441.         set mrthandle [$ns_ mrtproto $mproto {}]
  442.         if {$mrthandle != ""} {
  443.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  444.         }
  445. set udp0 [new Agent/UDP]
  446. $ns_ attach-agent $node_(n2) $udp0
  447. $udp0 set dst_addr_ $grp0
  448. $udp0 set dst_port_ 0
  449. set cbr0 [new Application/Traffic/CBR]
  450. $cbr0 attach-agent $udp0
  451. $ns_ create-session $node_(n2) $udp0
  452. set rcvr0 [new Agent/LossMonitor]
  453. $ns_ attach-agent $node_(n0) $rcvr0
  454. set rcvr1 [new Agent/LossMonitor]
  455. $ns_ attach-agent $node_(n1) $rcvr1
  456. set rcvr2 [new Agent/LossMonitor]
  457. $ns_ attach-agent $node_(n2) $rcvr2
  458. set rcvr3 [new Agent/LossMonitor]
  459. $ns_ attach-agent $node_(n3) $rcvr3
  460. $ns_ at 0.3 "$cbr0 start"
  461. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  462. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  463. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  464. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  465. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  466. $ns_ run
  467. }
  468. Class Test/Mixmode6 -superclass TestSuite
  469. Test/Mixmode6 instproc init net {
  470. $self instvar defNet_ test_ net_
  471. set defNet_ net4
  472. set test_ Mixmode6
  473. set net_ $net
  474. $self next
  475. }
  476. Test/Mixmode6 instproc run {} {
  477. $self instvar ns_ node_ testName_
  478. $ns_ detailed-duplex-link $node_(n1) $node_(n2)
  479. $ns_ detailed-duplex-link $node_(n1) $node_(n3)
  480. set grp0 [Node allocaddr]
  481.         set mproto CtrMcast
  482.         set mrthandle [$ns_ mrtproto $mproto {}]
  483.         if {$mrthandle != ""} {
  484.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  485.         }
  486. set udp0 [new Agent/UDP]
  487. $ns_ attach-agent $node_(n2) $udp0
  488. $udp0 set dst_addr_ $grp0
  489. $udp0 set dst_port_ 0
  490. set cbr0 [new Application/Traffic/CBR]
  491. $cbr0 attach-agent $udp0
  492. $ns_ create-session $node_(n2) $udp0
  493. set rcvr0 [new Agent/LossMonitor]
  494. $ns_ attach-agent $node_(n0) $rcvr0
  495. set rcvr1 [new Agent/LossMonitor]
  496. $ns_ attach-agent $node_(n1) $rcvr1
  497. set rcvr2 [new Agent/LossMonitor]
  498. $ns_ attach-agent $node_(n2) $rcvr2
  499. set rcvr3 [new Agent/LossMonitor]
  500. $ns_ attach-agent $node_(n3) $rcvr3
  501. $ns_ at 0.3 "$cbr0 start"
  502. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  503. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  504. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  505. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  506. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  507. $ns_ run
  508. }
  509. Class Test/Mixmode7 -superclass TestSuite
  510. Test/Mixmode7 instproc init net {
  511. $self instvar defNet_ test_ net_
  512. set defNet_ net4
  513. set test_ Mixmode7
  514. set net_ $net
  515. $self next
  516. }
  517. Test/Mixmode7 instproc run {} {
  518. $self instvar ns_ node_ testName_
  519. $ns_ detailed-duplex-link $node_(n0) $node_(n1)
  520. $ns_ detailed-duplex-link $node_(n1) $node_(n2)
  521. $ns_ detailed-duplex-link $node_(n1) $node_(n3)
  522. set grp0 [Node allocaddr]
  523.         set mproto CtrMcast
  524.         set mrthandle [$ns_ mrtproto $mproto {}]
  525.         if {$mrthandle != ""} {
  526.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  527.         }
  528. set udp0 [new Agent/UDP]
  529. $ns_ attach-agent $node_(n2) $udp0
  530. $udp0 set dst_addr_ $grp0
  531. $udp0 set dst_port_ 0
  532. set cbr0 [new Application/Traffic/CBR]
  533. $cbr0 attach-agent $udp0
  534. $ns_ create-session $node_(n2) $udp0
  535. set rcvr0 [new Agent/LossMonitor]
  536. $ns_ attach-agent $node_(n0) $rcvr0
  537. set rcvr1 [new Agent/LossMonitor]
  538. $ns_ attach-agent $node_(n1) $rcvr1
  539. set rcvr2 [new Agent/LossMonitor]
  540. $ns_ attach-agent $node_(n2) $rcvr2
  541. set rcvr3 [new Agent/LossMonitor]
  542. $ns_ attach-agent $node_(n3) $rcvr3
  543. $ns_ at 0.3 "$cbr0 start"
  544. $ns_ at 0.3 "$node_(n1) join-group $rcvr1 $grp0"
  545. $ns_ at 0.3 "$node_(n0) join-group $rcvr0 $grp0"
  546. $ns_ at 0.3 "$node_(n3) join-group $rcvr3 $grp0"
  547. $ns_ at 0.3 "$node_(n2) join-group $rcvr2 $grp0"
  548. $ns_ at 1.1 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3]"
  549. $ns_ run
  550. }
  551. # Testing group join for mix-mode sim in a 6-node topology
  552. Class Test/Mixmode8 -superclass TestSuite
  553. Test/Mixmode8 instproc init net {
  554. $self instvar net_ defNet_ test_
  555. set defNet_ net6
  556. set test_ Mixmode8
  557. set net_ $net
  558. $self next
  559. }
  560. Test/Mixmode8 instproc run {} {
  561. $self instvar ns_ node_ testName_
  562.         $ns_ detailed-duplex-link $node_(n0) $node_(n2)
  563.         $ns_ detailed-duplex-link $node_(n1) $node_(n3)
  564.         $ns_ detailed-duplex-link $node_(n2) $node_(n4)
  565. set grp0 [Node allocaddr]
  566.         set mproto CtrMcast
  567.         set mrthandle [$ns_ mrtproto $mproto {}]
  568.         if {$mrthandle != ""} {
  569.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  570.         }
  571. set udp0 [new Agent/UDP]
  572. $ns_ attach-agent $node_(n0) $udp0
  573. set cbr0 [new Application/Traffic/CBR]
  574. $cbr0 attach-agent $udp0
  575. $udp0 set dst_addr_ $grp0
  576. $udp0 set dst_port_ 0
  577. $ns_ create-session $node_(n0) $udp0
  578. set rcvr0 [new Agent/LossMonitor]
  579. set rcvr1 [new Agent/LossMonitor]
  580. set rcvr2 [new Agent/LossMonitor]
  581. set rcvr3 [new Agent/LossMonitor]
  582. set rcvr4 [new Agent/LossMonitor]
  583. set rcvr5 [new Agent/LossMonitor]
  584. $ns_ attach-agent $node_(n0) $rcvr0
  585. $ns_ attach-agent $node_(n1) $rcvr1
  586. $ns_ attach-agent $node_(n2) $rcvr2
  587. $ns_ attach-agent $node_(n3) $rcvr3
  588. $ns_ attach-agent $node_(n4) $rcvr4
  589. $ns_ attach-agent $node_(n5) $rcvr5
  590. $ns_ at 0.2 "$node_(n0) join-group $rcvr0 $grp0"
  591. $ns_ at 0.2 "$node_(n1) join-group $rcvr1 $grp0"
  592. $ns_ at 0.2 "$node_(n2) join-group $rcvr2 $grp0"
  593. $ns_ at 0.2 "$node_(n3) join-group $rcvr3 $grp0"
  594. $ns_ at 0.2 "$node_(n4) join-group $rcvr4 $grp0"
  595. $ns_ at 0.2 "$node_(n5) join-group $rcvr5 $grp0"
  596. $ns_ at 0.1 "$cbr0 start"
  597. $ns_ at 1.6 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3 
  598. $rcvr4 $rcvr5]"
  599. $ns_ run
  600. }
  601. # Testing loss dependency for mix-mode sim in a 6-node topology
  602. Class Test/Mixmode9 -superclass TestSuite
  603. Test/Mixmode9 instproc init net {
  604. $self instvar net_ defNet_ test_
  605. set defNet_ net6
  606. set test_ Mixmode9
  607. set net_ $net
  608. $self next
  609. }
  610. Test/Mixmode9 instproc run {} {
  611. $self instvar ns_ node_ testName_
  612.         $ns_ detailed-duplex-link $node_(n1) $node_(n3)
  613.         $ns_ detailed-duplex-link $node_(n2) $node_(n5)
  614. set grp0 [Node allocaddr]
  615.         set mproto CtrMcast
  616.         set mrthandle [$ns_ mrtproto $mproto {}]
  617.         if {$mrthandle != ""} {
  618.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  619.         }
  620. set udp0 [new Agent/UDP]
  621. $udp0 set ttl_ 3
  622. $ns_ attach-agent $node_(n0) $udp0
  623. $udp0 set dst_addr_ $grp0
  624. $udp0 set dst_port_ 0
  625. set cbr0 [new Application/Traffic/CBR]
  626. $cbr0 attach-agent $udp0
  627. $ns_ create-session $node_(n0) $udp0
  628. set rcvr0 [new Agent/LossMonitor]
  629. set rcvr1 [new Agent/LossMonitor]
  630. set rcvr2 [new Agent/LossMonitor]
  631. set rcvr3 [new Agent/LossMonitor]
  632. set rcvr4 [new Agent/LossMonitor]
  633. set rcvr5 [new Agent/LossMonitor]
  634. $ns_ attach-agent $node_(n0) $rcvr0
  635. $ns_ attach-agent $node_(n1) $rcvr1
  636. $ns_ attach-agent $node_(n2) $rcvr2
  637. $ns_ attach-agent $node_(n3) $rcvr3
  638. $ns_ attach-agent $node_(n4) $rcvr4
  639. $ns_ attach-agent $node_(n5) $rcvr5
  640. $ns_ at 0.2 "$node_(n0) join-group $rcvr0 $grp0"
  641. $ns_ at 0.2 "$node_(n1) join-group $rcvr1 $grp0"
  642. $ns_ at 0.2 "$node_(n2) join-group $rcvr2 $grp0"
  643. $ns_ at 0.2 "$node_(n3) join-group $rcvr3 $grp0"
  644. $ns_ at 0.2 "$node_(n4) join-group $rcvr4 $grp0"
  645. $ns_ at 0.2 "$node_(n5) join-group $rcvr5 $grp0"
  646. set loss_module1 [new SelectErrorModel]
  647. $loss_module1 drop-packet 2 20 1
  648. $loss_module1 drop-target [$ns_ set nullAgent_]
  649. set loss_module2 [new SelectErrorModel]
  650. $loss_module2 drop-packet 2 10 1
  651. $loss_module2 drop-target [$ns_ set nullAgent_]
  652. set loss_module3 [new SelectErrorModel]
  653. $loss_module3 drop-packet 2 10 1
  654. $loss_module3 drop-target [$ns_ set nullAgent_]
  655. $ns_ insert-loss $loss_module1 $node_(n0) $node_(n1)
  656. $ns_ insert-loss $loss_module2 $node_(n1) $node_(n3)
  657. $ns_ insert-loss $loss_module3 $node_(n0) $node_(n2)
  658. $ns_ at 0.3 "$cbr0 start"
  659. $ns_ at 1.6 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3 
  660. $rcvr4 $rcvr5]"
  661. $ns_ run
  662. }
  663. # Testing for detailed-session-detailed mix-mode sim in a 10-node topology
  664. Class Test/Mixmode10 -superclass TestSuite
  665. Test/Mixmode10 instproc init net {
  666. $self instvar net_ defNet_ test_
  667. set defNet_ net10
  668. set test_ Mixmode10
  669. set net_ $net
  670. $self next
  671. }
  672. Test/Mixmode10 instproc run {} {
  673. $self instvar ns_ node_ testName_
  674.         $ns_ detailed-duplex-link $node_(n0) $node_(n1)
  675.         $ns_ detailed-duplex-link $node_(n3) $node_(n6)
  676. set grp0 [Node allocaddr]
  677.         set mproto CtrMcast
  678.         set mrthandle [$ns_ mrtproto $mproto  {}]
  679.         if {$mrthandle != ""} {
  680.     $ns_ at 0.01 "$mrthandle switch-treetype $grp0"
  681. }
  682. set udp0 [new Agent/UDP]
  683. $ns_ attach-agent $node_(n0) $udp0
  684. $udp0 set dst_addr_ $grp0
  685. $udp0 set dst_port_ 0
  686. set cbr0 [new Application/Traffic/CBR]
  687. $cbr0 attach-agent $udp0
  688. set sessionhelper [$ns_ create-session $node_(n0) $udp0]
  689. set rcvr0 [new Agent/LossMonitor]
  690. set rcvr1 [new Agent/LossMonitor]
  691. set rcvr2 [new Agent/LossMonitor]
  692. set rcvr3 [new Agent/LossMonitor]
  693. set rcvr4 [new Agent/LossMonitor]
  694. set rcvr5 [new Agent/LossMonitor]
  695. set rcvr6 [new Agent/LossMonitor]
  696. set rcvr7 [new Agent/LossMonitor]
  697. set rcvr8 [new Agent/LossMonitor]
  698. set rcvr9 [new Agent/LossMonitor]
  699. $ns_ attach-agent $node_(n0) $rcvr0
  700. $ns_ attach-agent $node_(n1) $rcvr1
  701. $ns_ attach-agent $node_(n2) $rcvr2
  702. $ns_ attach-agent $node_(n3) $rcvr3
  703. $ns_ attach-agent $node_(n4) $rcvr4
  704. $ns_ attach-agent $node_(n5) $rcvr5
  705. $ns_ attach-agent $node_(n6) $rcvr6
  706. $ns_ attach-agent $node_(n7) $rcvr7
  707. $ns_ attach-agent $node_(n8) $rcvr8
  708. $ns_ attach-agent $node_(n9) $rcvr9
  709. $ns_ at 0.2 "$node_(n0) join-group $rcvr0 $grp0"
  710. $ns_ at 0.2 "$node_(n1) join-group $rcvr1 $grp0"
  711. $ns_ at 0.2 "$node_(n2) join-group $rcvr2 $grp0"
  712. $ns_ at 0.2 "$node_(n3) join-group $rcvr3 $grp0"
  713. $ns_ at 0.2 "$node_(n4) join-group $rcvr4 $grp0"
  714. $ns_ at 0.2 "$node_(n5) join-group $rcvr5 $grp0"
  715. $ns_ at 0.2 "$node_(n6) join-group $rcvr6 $grp0"
  716. $ns_ at 0.2 "$node_(n7) join-group $rcvr7 $grp0"
  717. $ns_ at 0.2 "$node_(n8) join-group $rcvr8 $grp0"
  718. $ns_ at 0.2 "$node_(n9) join-group $rcvr9 $grp0"
  719. $ns_ at 0.1 "$cbr0 start"
  720. $ns_ at 1.6 "$self finish [list $rcvr0 $rcvr1 $rcvr2 $rcvr3 
  721. $rcvr4 $rcvr5 $rcvr6 $rcvr7 $rcvr8 $rcvr9]"
  722. $ns_ run
  723. }
  724. TestSuite runTest