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

通讯编程

开发平台:

Visual C++

  1. # This test suite is for validating the multicast support in ns.
  2. #
  3. # To run all tests:  test-mcast
  4. #
  5. # To run individual tests:
  6. # ns test-suite-mcast.tcl DM1
  7. # ns test-suite-mcast.tcl DM2
  8. # ...
  9. #
  10. # To view a list of available tests to run with this script:
  11. # ns test-suite-mcast.tcl
  12. #
  13. #remove-all-packet-headers       ; # removes all except common
  14. #add-packet-header Flags IP RTP TCP  ; # hdrs reqd for validation test
  15.  
  16. # FOR UPDATING GLOBAL DEFAULTS:
  17. Class TestSuite
  18. TestSuite instproc init {} {
  19. $self instvar ns_ net_ defNet_ test_ topo_ node_ testName_
  20. set ns_ [new Simulator -multicast on]
  21. #$ns_ use-scheduler List
  22. $ns_ trace-all [open temp.rands w]
  23. $ns_ namtrace-all [open temp.rands.nam w]
  24. $ns_ color 0 blue
  25. $ns_ color 1 red
  26. $ns_ color 2 yellow
  27. $ns_ color 30 purple
  28. $ns_ color 31 green
  29. if {$net_ == ""} {
  30. set net_ $defNet_
  31. }
  32. if ![Topology/$defNet_ info subclass Topology/$net_] {
  33. global argv0
  34. puts "$argv0: cannot run test $test_ over topology $net_"
  35. exit 1
  36. }
  37. set topo_ [new Topology/$net_ $ns_]
  38. foreach i [$topo_ array names node_] {
  39. # This would be cool, but lets try to be compatible
  40. # with test-suite.tcl as far as possible.
  41. #
  42. # $self instvar $i
  43. # set $i [$topo_ node? $i]
  44. #
  45. set node_($i) [$topo_ node? $i]
  46. }
  47. if {$net_ == $defNet_} {
  48. set testName_ "$test_"
  49. } else {
  50. set testName_ "$test_:$net_"
  51. }
  52. }
  53. TestSuite instproc finish { file } {
  54. $self instvar ns_ 
  55. global quiet
  56. $ns_ flush-trace
  57. if { !$quiet } {
  58. puts "running nam..."
  59. exec nam temp.rands.nam &
  60. }
  61. exit 0
  62. }
  63. TestSuite instproc openTrace { stopTime testName } {
  64. $self instvar ns_
  65. exec rm -f temp.rands
  66. set traceFile [open temp.rands w]
  67. puts $traceFile "v testName $testName"
  68. $ns_ at $stopTime 
  69. "close $traceFile ; $self finish $testName"
  70. return $traceFile
  71. }
  72. proc usage {} {
  73. global argv0
  74. puts stderr "usage: ns $argv0 <tests> [<topologies>]"
  75. puts stderr "Valid tests are:t[get-subclasses TestSuite Test/]"
  76. puts stderr "Valid Topologies are:t[get-subclasses SkelTopology Topology/]"
  77. exit 1
  78. }
  79. proc isProc? {cls prc} {
  80. if [catch "Object info subclass $cls/$prc" r] {
  81. global argv0
  82. puts stderr "$argv0: no such $cls: $prc"
  83. usage
  84. }
  85. }
  86. proc get-subclasses {cls pfx} {
  87. set ret ""
  88. set l [string length $pfx]
  89. set c $cls
  90. while {[llength $c] > 0} {
  91. set t [lindex $c 0]
  92. set c [lrange $c 1 end]
  93. if [string match ${pfx}* $t] {
  94. lappend ret [string range $t $l end]
  95. }
  96. eval lappend c [$t info subclass]
  97. }
  98. set ret
  99. }
  100. TestSuite proc runTest {} {
  101. global argc argv quiet
  102. set quiet 0
  103. switch $argc {
  104. 1 {
  105. set test $argv
  106. isProc? Test $test
  107. set topo ""
  108. }
  109. 2 {
  110. set test [lindex $argv 0]
  111. isProc? Test $test
  112. set a [lindex $argv 1]
  113. if {$a == "QUIET"} {
  114. set topo ""
  115. set quiet 1
  116. } else {
  117. set topo $a
  118. isProc? Topology $topo
  119. }
  120. }
  121. default {
  122. usage
  123. }
  124. }
  125. set t [new Test/$test $topo]
  126. $t run
  127. }
  128. # Skeleton topology base class
  129. Class SkelTopology
  130. SkelTopology instproc init {} {
  131. $self next
  132. }
  133. SkelTopology instproc node? n {
  134. $self instvar node_
  135. if [info exists node_($n)] {
  136. set ret $node_($n)
  137. } else {
  138. set ret ""
  139. }
  140. set ret
  141. }
  142. SkelTopology instproc add-fallback-links {ns nodelist bw delay qtype args} {
  143. $self instvar node_
  144. set n1 [lindex $nodelist 0]
  145. foreach n2 [lrange $nodelist 1 end] {
  146. if ![info exists node_($n2)] {
  147. set node_($n2) [$ns node]
  148. }
  149. $ns duplex-link $node_($n1) $node_($n2) $bw $delay $qtype
  150. foreach opt $args {
  151. set cmd [lindex $opt 0]
  152. set val [lindex $opt 1]
  153. if {[llength $opt] > 2} {
  154. set x1 [lindex $opt 2]
  155. set x2 [lindex $opt 3]
  156. } else {
  157. set x1 $n1
  158. set x2 $n2
  159. }
  160. $ns $cmd $node_($x1) $node_($x2) $val
  161. $ns $cmd $node_($x2) $node_($x1) $val
  162. }
  163. set n1 $n2
  164. }
  165. }
  166. Class NodeTopology/4nodes -superclass SkelTopology
  167. NodeTopology/4nodes instproc init ns {
  168. $self next
  169. $self instvar node_
  170. set node_(n0) [$ns node]
  171. set node_(n1) [$ns node]
  172. set node_(n2) [$ns node]
  173. set node_(n3) [$ns node]
  174. }
  175. Class Topology/net4a -superclass NodeTopology/4nodes
  176. # Create a simple four node topology:
  177. #
  178. #               n3
  179. #              / 
  180. #       1.5Mb,10ms  / 1.5Mb,10ms                              
  181. #    n0 --------- n1
  182. #                    1.5Mb,10ms
  183. #              
  184. #              n2
  185. #
  186. Topology/net4a instproc init ns {
  187. $self next $ns
  188. $self instvar node_
  189. $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail
  190. $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail
  191. $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail
  192. if {[$class info instprocs config] != ""} {
  193. $self config $ns
  194. }
  195. }
  196. Class Topology/net4b -superclass NodeTopology/4nodes
  197. # 4 nodes on the same LAN
  198. #
  199. #           n0   n1
  200. #           |    |
  201. #       -------------
  202. #           |    |
  203. #           n2   n3
  204. #
  205. #
  206.  
  207. Topology/net4b instproc init ns {
  208. $self next $ns
  209. $self instvar node_
  210. $ns multi-link-of-interfaces [list $node_(n0) $node_(n1) $node_(n2) $node_(n3)] 1.5Mb 10ms DropTail
  211. if {[$class info instprocs config] != ""} {
  212. $self config $ns
  213. }
  214. }
  215. Class NodeTopology/5nodes -superclass SkelTopology
  216. NodeTopology/5nodes instproc init ns {
  217. $self next
  218. $self instvar node_
  219. set node_(n0) [$ns node]
  220. set node_(n1) [$ns node]
  221. set node_(n2) [$ns node]
  222. set node_(n3) [$ns node]
  223. set node_(n4) [$ns node]
  224. }
  225. Class Topology/net5a -superclass NodeTopology/5nodes
  226. #
  227. # Create a simple five node topology:
  228. #
  229. #                  n4
  230. #                 /                      
  231. #               n3    n2
  232. #               |     |
  233. #               n0    n1
  234. #
  235. # All links are of 1.5Mbps bandwidth with 10ms latency
  236. #
  237. Topology/net5a instproc init ns {
  238. $self next $ns
  239. $self instvar node_
  240. $ns duplex-link $node_(n0) $node_(n3) 1.5Mb 10ms DropTail 
  241. $ns duplex-link $node_(n2) $node_(n1) 1.5Mb 10ms DropTail 
  242. $ns duplex-link $node_(n3) $node_(n4) 1.5Mb 10ms DropTail 
  243. $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  244. if {[$class info instprocs config] != ""} {
  245. $self config $ns
  246. }
  247. }
  248. Class Topology/net5b -superclass NodeTopology/5nodes
  249. #
  250. # Create a five node topology:
  251. #
  252. #                  n4
  253. #                 /                      
  254. #               n3----n2
  255. #               |     |
  256. #               n0    n1
  257. #
  258. # All links are of 1.5Mbps bandwidth with 10ms latency
  259. #
  260. Topology/net5b instproc init ns {
  261.     $self next $ns
  262. $self instvar node_
  263. $ns duplex-link $node_(n0) $node_(n3) 1.5Mb 10ms DropTail 
  264. $ns duplex-link $node_(n2) $node_(n1) 1.5Mb 10ms DropTail 
  265. $ns duplex-link $node_(n2) $node_(n3) 1.5Mb 10ms DropTail 
  266. $ns duplex-link $node_(n3) $node_(n4) 1.5Mb 10ms DropTail 
  267. $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  268. if {[$class info instprocs config] != ""} {
  269. $self config $ns
  270.     }
  271. }
  272. Class Topology/net5c -superclass NodeTopology/5nodes
  273. #
  274. # Create a five node topology:
  275. #
  276. #                  n4
  277. #                 /                      
  278. #               n3----n2
  279. #               |   /|
  280. #               |    |
  281. #               | /  |
  282. #               n0    n1
  283. #
  284. # All links are of 1.5Mbps bandwidth with 10ms latency
  285. #
  286. Topology/net5c instproc init ns {
  287. $self next $ns
  288. $self instvar node_
  289. $ns duplex-link $node_(n0) $node_(n3) 1.5Mb 10ms DropTail 
  290. $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  291. $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail 
  292. $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail 
  293. $ns duplex-link $node_(n2) $node_(n3) 1.5Mb 10ms DropTail 
  294. $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  295. $ns duplex-link $node_(n3) $node_(n4) 1.5Mb 10ms DropTail 
  296. if {[$class info instprocs config] != ""} {
  297. $self config $ns
  298. }
  299. }
  300. Class Topology/net5d -superclass NodeTopology/5nodes
  301. #
  302. # Create a five node topology:
  303. #
  304. #                  n4
  305. #                 /                      
  306. #               n3----n2
  307. #               |   /|
  308. #               |    |
  309. #               | /  |
  310. #               n0----n1
  311. #
  312. # All links are of 1.5Mbps bandwidth with 10ms latency
  313. #
  314. Topology/net5d instproc init ns {
  315. $self next $ns
  316. $self instvar node_
  317. $ns duplex-link $node_(n0) $node_(n3) 1.5Mb 10ms DropTail 
  318. $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  319. $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail 
  320. $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail 
  321. $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail 
  322. $ns duplex-link $node_(n2) $node_(n3) 1.5Mb 10ms DropTail 
  323. $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  324. $ns duplex-link $node_(n3) $node_(n4) 1.5Mb 10ms DropTail 
  325. if {[$class info instprocs config] != ""} {
  326. $self config $ns
  327. }
  328. }
  329. Class Topology/net5e -superclass NodeTopology/5nodes
  330. #
  331. # Create a five node topology with 4 nodes on a LAN:
  332. #
  333. #                  n4
  334. #                 /                      
  335. #               n3    n2
  336. #               |     |
  337. #             -----------
  338. #               |     |
  339. #               n0    n1
  340. #
  341. Topology/net5e instproc init ns {
  342. $self next $ns
  343. $self instvar node_
  344. $ns newLan [list $node_(n0) $node_(n3) $node_(n1) $node_(n2)] 1.5Mb 10ms
  345. $ns duplex-link $node_(n3) $node_(n4) 1.5Mb 3ms DropTail
  346. $ns duplex-link-op $node_(n3) $node_(n4) orient right-down
  347. $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 3ms DropTail
  348. $ns duplex-link-op $node_(n2) $node_(n4) orient left-down
  349. if {[$class info instprocs config] != ""} {
  350. $self config $ns
  351. }
  352. }
  353. Class NodeTopology/6nodes -superclass SkelTopology
  354. NodeTopology/6nodes instproc init ns {
  355. $self next
  356. $self instvar node_
  357. set node_(n0) [$ns node]
  358. set node_(n1) [$ns node]
  359. set node_(n2) [$ns node]
  360. set node_(n3) [$ns node]
  361. set node_(n4) [$ns node]
  362. set node_(n5) [$ns node]
  363. }
  364. Class Topology/net6a -superclass NodeTopology/6nodes
  365. #
  366. # Create a simple six node topology:
  367. #
  368. #                  n0
  369. #                 /                      
  370. #               n1    n2
  371. #              /    /  
  372. #             n3   n4   n5
  373. #
  374. # All links are of 1.5Mbps bandwidth with 10ms latency
  375. #
  376. Topology/net6a instproc init ns {
  377. $self next $ns
  378. $self instvar node_
  379. $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail 
  380. $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail 
  381. $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail 
  382. $ns duplex-link $node_(n1) $node_(n4) 1.5Mb 10ms DropTail 
  383. $ns duplex-link $node_(n2) $node_(n4) 1.5Mb 10ms DropTail 
  384. $ns duplex-link $node_(n2) $node_(n5) 1.5Mb 10ms DropTail 
  385. if {[$class info instprocs config] != ""} {
  386. $self config $ns
  387. }
  388. }
  389. Class Topology/net6b -superclass NodeTopology/6nodes
  390. # 6 node topology with nodes n2, n3 and n5 on a LAN.
  391. #
  392. #          n4
  393. #          |
  394. #          n3
  395. #          |
  396. #    --------------
  397. #      |       |
  398. #      n5      n2
  399. #      |       |
  400. #      n0      n1
  401. #
  402. # All point-to-point links have 1.5Mbps Bandwidth, 10ms latency.
  403. #
  404. Topology/net6b instproc init ns {
  405. $self next $ns
  406. $self instvar node_
  407. $ns multi-link-of-interfaces [list $node_(n5) $node_(n2) $node_(n3)] 1.5Mb 10ms DropTail
  408. $ns duplex-link $node_(n1) $node_(n2) 1.5Mb 10ms DropTail
  409. $ns duplex-link $node_(n4) $node_(n3) 1.5Mb 10ms DropTail
  410. $ns duplex-link $node_(n5) $node_(n0) 1.5Mb 10ms DropTail
  411. if {[$class info instprocs config] != ""} {
  412. $self config $ns
  413. }
  414. }
  415. Class NodeTopology/8nodes -superclass SkelTopology
  416. NodeTopology/8nodes instproc init ns {
  417. $self next
  418. $self instvar node_
  419. set node_(n0) [$ns node]
  420. set node_(n1) [$ns node]
  421. set node_(n2) [$ns node]
  422. set node_(n3) [$ns node]
  423. set node_(n4) [$ns node]
  424. set node_(n5) [$ns node]
  425. set node_(n6) [$ns node]
  426. set node_(n7) [$ns node]
  427. }
  428. Class Topology/net8a -superclass NodeTopology/8nodes
  429. # 8 node topology with nodes n2, n3, n4 and n5 on a LAN.
  430. #
  431. #      n0----n1     
  432. #      |     |
  433. #      n2    n3
  434. #      |     |
  435. #    --------------
  436. #      |     |
  437. #      n4    n5
  438. #      |     |
  439. #      n6    n7
  440. #
  441. # All point-to-point links have 1.5Mbps Bandwidth, 10ms latency.
  442. #
  443. Topology/net8a instproc init ns {
  444. $self next $ns
  445. $self instvar node_
  446. $ns multi-link-of-interfaces [list $node_(n2) $node_(n3) $node_(n4) $node_(n5)] 1.5Mb 10ms DropTail
  447. $ns duplex-link $node_(n0) $node_(n1) 1.5Mb 10ms DropTail
  448. $ns duplex-link $node_(n0) $node_(n2) 1.5Mb 10ms DropTail
  449. $ns duplex-link $node_(n1) $node_(n3) 1.5Mb 10ms DropTail
  450. $ns duplex-link $node_(n4) $node_(n6) 1.5Mb 10ms DropTail
  451. $ns duplex-link $node_(n5) $node_(n7) 1.5Mb 10ms DropTail
  452. if {[$class info instprocs config] != ""} {
  453. $self config $ns
  454. }
  455. }
  456. # Definition of test-suite tests
  457. # Testing group join/leave in a simple topology
  458. Class Test/DM1 -superclass TestSuite
  459. Test/DM1 instproc init topo {
  460. source ../mcast/DM.tcl
  461. $self instvar net_ defNet_ test_
  462. set net_ $topo
  463. set defNet_ net4a
  464. set test_ DM1
  465. $self next
  466. }
  467. Test/DM1 instproc run {} {
  468. $self instvar ns_ node_ testName_
  469. set mproto DM
  470. set mrthandle [$ns_ mrtproto $mproto {}]
  471. set grp0 [Node allocaddr]
  472. set udp0 [new Agent/UDP]
  473. $ns_ attach-agent $node_(n1) $udp0
  474. $udp0 set dst_addr_ $grp0
  475. $udp0 set dst_port_ 0
  476. set cbr0 [new Application/Traffic/CBR]
  477. $cbr0 attach-agent $udp0
  478. set grp1 [Node allocaddr]
  479. set udp1 [new Agent/UDP]
  480. $ns_ attach-agent $node_(n3) $udp1
  481. $udp1 set dst_addr_ $grp1
  482. $udp1 set dst_port_ 0
  483. $udp1 set class_ 1
  484. set cbr1 [new Application/Traffic/CBR]
  485. $cbr1 attach-agent $udp1
  486. set rcvr [new Agent/LossMonitor]
  487. $ns_ attach-agent $node_(n2) $rcvr
  488. $ns_ at 1.2 "$node_(n2) join-group $rcvr $grp1"
  489. $ns_ at 1.25 "$node_(n2) leave-group $rcvr $grp1"
  490. $ns_ at 1.3 "$node_(n2) join-group $rcvr $grp1"
  491. $ns_ at 1.35 "$node_(n2) join-group $rcvr $grp0"
  492. $ns_ at 1.0 "$cbr0 start"
  493. $ns_ at 1.1 "$cbr1 start"
  494. $ns_ at 1.8 "$self finish 4a-nam"
  495. $ns_ run
  496. }
  497. # Testing group join/leave in a richer topology. Testing rcvr join before
  498. # the source starts sending pkts to the group.
  499. Class Test/DM2 -superclass TestSuite
  500. Test/DM2 instproc init topo {
  501. source ../mcast/DM.tcl
  502. $self instvar net_ defNet_ test_
  503. set net_ $topo
  504. set defNet_ net6a
  505. set test_ DM2
  506. $self next
  507. }
  508. Test/DM2 instproc run {} {
  509. $self instvar ns_ node_ testName_
  510. ### Start multicast configuration
  511. DM set PruneTimeout 0.3
  512. set mproto DM
  513. set mrthandle [$ns_ mrtproto $mproto  {}]
  514. ### End of multicast  config
  515. set grp0 [Node allocaddr]
  516. set udp0 [new Agent/UDP]
  517. $ns_ attach-agent $node_(n0) $udp0
  518. $udp0 set dst_addr_ $grp0
  519. $udp0 set dst_port_ 0
  520. set cbr0 [new Application/Traffic/CBR]
  521. $cbr0 attach-agent $udp0
  522. set rcvr [new Agent/LossMonitor]
  523. $ns_ attach-agent $node_(n3) $rcvr
  524. $ns_ attach-agent $node_(n4) $rcvr
  525. $ns_ attach-agent $node_(n5) $rcvr
  526. $ns_ at 0.2 "$node_(n3) join-group $rcvr $grp0"
  527. $ns_ at 0.4 "$node_(n4) join-group $rcvr $grp0"
  528. $ns_ at 0.6 "$node_(n3) leave-group $rcvr $grp0"
  529. $ns_ at 0.7 "$node_(n5) join-group $rcvr $grp0"
  530. $ns_ at 0.95 "$node_(n3) join-group $rcvr $grp0"
  531. $ns_ at 0.3 "$cbr0 start"
  532. $ns_ at 1.0 "$self finish 6a-nam"
  533. $ns_ run
  534. }
  535. #Same as DM2 but with dvmrp-like cache miss rules
  536. Class Test/DM3 -superclass TestSuite
  537. Test/DM3 instproc init topo {
  538. source ../mcast/DM.tcl
  539. $self instvar net_ defNet_ test_
  540. set net_ $topo
  541. set defNet_ net6a
  542. set test_ DM3
  543. $self next
  544. }
  545. Test/DM3 instproc run {} {
  546. $self instvar ns_ node_ testName_
  547. ### Start multicast configuration
  548. DM set PruneTimeout  0.3
  549. DM set CacheMissMode dvmrp
  550. set mproto DM
  551. set mrthandle [$ns_ mrtproto $mproto  {}]
  552. ### End of multicast  config
  553. set grp0 [Node allocaddr]
  554. set udp0 [new Agent/UDP]
  555. $ns_ attach-agent $node_(n0) $udp0
  556. $udp0 set dst_addr_ $grp0
  557. $udp0 set dst_port_ 0
  558. set cbr0 [new Application/Traffic/CBR]
  559. $cbr0 attach-agent $udp0
  560. set rcvr [new Agent/LossMonitor]
  561. $ns_ attach-agent $node_(n3) $rcvr
  562. $ns_ attach-agent $node_(n4) $rcvr
  563. $ns_ attach-agent $node_(n5) $rcvr
  564. $ns_ at 0.2 "$node_(n3) join-group $rcvr $grp0"
  565. $ns_ at 0.4 "$node_(n4) join-group $rcvr $grp0"
  566. $ns_ at 0.6 "$node_(n3) leave-group $rcvr $grp0"
  567. $ns_ at 0.7 "$node_(n5) join-group $rcvr $grp0"
  568. $ns_ at 0.95 "$node_(n3) join-group $rcvr $grp0"
  569. $ns_ at 0.3 "$cbr0 start"
  570. $ns_ at 1.0 "$self finish 6a-nam"
  571. $ns_ run
  572. }
  573. # Testing dynamics of links going up/down.
  574. Class Test/DM4 -superclass TestSuite
  575. Test/DM4 instproc init topo {
  576. source ../mcast/DM.tcl
  577. $self instvar net_ defNet_ test_
  578. set net_ $topo
  579. set defNet_ net6a
  580. set test_ DM4
  581. $self next
  582. }
  583. Test/DM4 instproc run {} {
  584. $self instvar ns_ node_ testName_
  585. $ns_ rtproto Session
  586. ### Start multicast configuration
  587. DM set PruneTimeout 0.3
  588. set mproto DM
  589. set mrthandle [$ns_ mrtproto $mproto  {}]
  590. ### End of multicast  config
  591. set grp0 [Node allocaddr]
  592. set udp0 [new Agent/UDP]
  593. $ns_ attach-agent $node_(n0) $udp0
  594. $udp0 set dst_addr_ $grp0
  595. $udp0 set dst_port_ 0
  596. set cbr0 [new Application/Traffic/CBR]
  597. $cbr0 attach-agent $udp0
  598. set rcvr [new Agent/LossMonitor]
  599. $ns_ attach-agent $node_(n3) $rcvr
  600. $ns_ attach-agent $node_(n4) $rcvr
  601. $ns_ attach-agent $node_(n5) $rcvr
  602. $ns_ at 0.2 "$node_(n3) join-group $rcvr $grp0"
  603. $ns_ at 0.4 "$node_(n4) join-group $rcvr $grp0"
  604. $ns_ at 0.6 "$node_(n3) leave-group $rcvr $grp0"
  605. $ns_ at 0.7 "$node_(n5) join-group $rcvr $grp0"
  606. $ns_ at 0.8 "$node_(n3) join-group $rcvr $grp0"
  607. #### Link between n0 & n1 down at 1.0, up at 1.2
  608. $ns_ rtmodel-at 1.0 down $node_(n0) $node_(n1)
  609. $ns_ rtmodel-at 1.2 up   $node_(n0) $node_(n1)
  610. ####
  611. $ns_ at 0.1 "$cbr0 start"
  612. $ns_ at 1.6 "$self finish 6a-nam"
  613. $ns_ run
  614. }
  615. # testing lan topologies
  616. #Class Test/DM5 -superclass TestSuite
  617. #Test/DM5 instproc init topo {
  618. #source ../mcast/DM.tcl
  619. #$self instvar net_ defNet_ test_
  620. #set net_ $topo
  621. #set defNet_ net5e
  622. #set test_ DM5
  623. #$self next
  624. #}
  625. #Test/DM5 instproc run {} {
  626. #$self instvar ns_ node_ testName_
  627. #$ns_ rtproto Session
  628. #### Start multicast configuration
  629. #DM set PruneTimeout 0.3
  630. #DM set CacheMissMode dvmrp
  631. #set mproto DM
  632. #set mrthandle [$ns_ mrtproto $mproto  {}]
  633. ### End of multicast  config
  634. #set udp0 [new Agent/UDP]
  635. #$ns_ attach-agent $node_(n4) $udp0
  636. #$udp0 set dst_addr_ 0x8002
  637. #$udp0 set dst_port_ 0
  638. #set cbr0 [new Application/Traffic/CBR]
  639. #$cbr0 attach-agent $udp0
  640. #set rcvr [new Agent/LossMonitor]
  641. #$ns_ attach-agent $node_(n0) $rcvr
  642. #$ns_ attach-agent $node_(n1) $rcvr
  643. #$ns_ attach-agent $node_(n2) $rcvr
  644. #$ns_ at 0.2 "$node_(n0) join-group  $rcvr 0x8002"
  645. #$ns_ at 0.3 "$node_(n1) join-group  $rcvr 0x8002"
  646. #$ns_ at 0.4 "$node_(n1) leave-group $rcvr 0x8002"
  647. #$ns_ at 0.5 "$node_(n2) join-group  $rcvr 0x8002"
  648. #$ns_ at 0.6 "$node_(n2) leave-group $rcvr 0x8002"
  649. #$ns_ at 0.7 "$node_(n0) leave-group $rcvr 0x8002"
  650. ####
  651. #$ns_ at 0.1 "$cbr0 start"
  652. # #$ns_ at 0.11 "$node_(n4) dump-routes stdout"
  653. # #$ns_ at 0.25 "$node_(n0) dump-routes stdout"
  654. #$ns_ at 1.0 "$self finish 5e-nam"
  655. #$ns_ run
  656. #}
  657. # Testing group join/leave in a simple topology, changing the RP set. 
  658. # The RP node also has a source.
  659. Class Test/CtrMcast1 -superclass TestSuite
  660. Test/CtrMcast1 instproc init topo {
  661. source ../ctr-mcast/CtrMcast.tcl
  662. $self instvar net_ defNet_ test_
  663. set net_ $topo
  664. set defNet_ net4a
  665. set test_ CtrMcast1
  666. $self next
  667. }
  668. # source and RP on same node
  669. Test/CtrMcast1 instproc run {} {
  670. $self instvar ns_ node_ testName_
  671. set mproto CtrMcast
  672. set mrthandle [$ns_ mrtproto $mproto  {}]
  673. $mrthandle set_c_rp $node_(n2)
  674. set udp1 [new Agent/UDP]
  675. $ns_ attach-agent $node_(n2) $udp1
  676. set grp [Node allocaddr]
  677. $udp1 set dst_addr_ $grp
  678. $udp1 set dst_port_ 0
  679. $udp1 set class_ 1
  680. ##$udp1 set dst_addr_ 0x8003
  681. set cbr1 [new Application/Traffic/CBR]
  682. $cbr1 attach-agent $udp1
  683. set udp2 [new Agent/UDP]
  684. $ns_ attach-agent $node_(n3) $udp2
  685. $udp2 set dst_addr_ $grp
  686. $udp2 set dst_port_ 0
  687. $udp2 set class_ 2
  688. ##$udp2 set dst_addr_ 0x8003
  689. set cbr2 [new Application/Traffic/CBR]
  690. $cbr2 attach-agent $udp2
  691. set rcvr0 [new Agent/Null]
  692. $ns_ attach-agent $node_(n0) $rcvr0
  693. set rcvr1 [new Agent/Null]
  694. $ns_ attach-agent $node_(n1) $rcvr1
  695. set rcvr2  [new Agent/Null]
  696. $ns_ attach-agent $node_(n2) $rcvr2
  697. set rcvr3 [new Agent/Null]
  698. $ns_ attach-agent $node_(n3) $rcvr3
  699. $ns_ at 0.2 "$cbr1 start"
  700. $ns_ at 0.25 "$cbr2 start"
  701. $ns_ at 0.3 "$node_(n1) join-group  $rcvr1 $grp"
  702. $ns_ at 0.4 "$node_(n0) join-group  $rcvr0 $grp"
  703. $ns_ at 0.45 "$mrthandle switch-treetype $grp"
  704. $ns_ at 0.5 "$node_(n3) join-group  $rcvr3 $grp"
  705. $ns_ at 0.65 "$node_(n2) join-group  $rcvr2 $grp"
  706. $ns_ at 0.7 "$node_(n0) leave-group $rcvr0 $grp"
  707. $ns_ at 0.8 "$node_(n2) leave-group  $rcvr2 $grp"
  708. $ns_ at 0.9 "$node_(n3) leave-group  $rcvr3 $grp"
  709. $ns_ at 1.0 "$node_(n1) leave-group $rcvr1 $grp"
  710. $ns_ at 1.1 "$node_(n1) join-group $rcvr1 $grp"
  711. $ns_ at 1.2 "$self finish 4a-nam"
  712. $ns_ run
  713. }
  714. # Testing performance in the presence of dynamics. Also testing a rcvr joining
  715. # a group before the src starts sending pkts to the group.
  716. Class Test/CtrMcast2 -superclass TestSuite
  717. Test/CtrMcast2 instproc init topo {
  718.   $self instvar net_ defNet_ test_
  719.   set net_ $topo
  720.   set defNet_ net6a
  721.   set test_ CtrMcast2
  722.   $self next
  723. }
  724. Test/CtrMcast2 instproc run {} {
  725.   $self instvar ns_ node_ testName_
  726.   $ns_ rtproto Session
  727.   set mproto CtrMcast
  728.   set mrthandle [$ns_ mrtproto $mproto  {}]
  729.   
  730.   set grp0 [Node allocaddr]
  731.   set udp0 [new Agent/UDP]
  732.   $ns_ attach-agent $node_(n0) $udp0
  733.   $udp0 set dst_addr_ $grp0
  734.   $udp0 set dst_port_ 0
  735.   $udp0 set class_ 1
  736.   set cbr0 [new Application/Traffic/CBR]
  737.   $cbr0 attach-agent $udp0
  738.   set rcvr [new Agent/Null]
  739.   $ns_ attach-agent $node_(n3) $rcvr
  740.   $ns_ attach-agent $node_(n4) $rcvr
  741.   $ns_ attach-agent $node_(n5) $rcvr
  742.   
  743.   $ns_ at 0.3 "$node_(n3) join-group  $rcvr $grp0"
  744.   $ns_ at 0.35 "$cbr0 start"
  745.   $ns_ at 0.4 "$node_(n4) join-group  $rcvr $grp0"
  746.   $ns_ at 0.5 "$node_(n5) join-group  $rcvr $grp0"
  747.   ### Link between n2 & n4 down at 0.6, up at 1.2
  748.   $ns_ rtmodel-at 0.6 down $node_(n2) $node_(n4)
  749.   $ns_ rtmodel-at 0.8 up $node_(n2) $node_(n4)
  750.   ###
  751.   $ns_ at 1.2 "$mrthandle switch-treetype $grp0"
  752.   ### Link between n0 & n1 down at 1.5, up at 2.0
  753.   $ns_ rtmodel-at 1.0 down $node_(n0) $node_(n1)
  754.   $ns_ rtmodel-at 1.4 up $node_(n0) $node_(n1)
  755.   ###
  756.   $ns_ at 1.5 "$self finish 6a-nam"
  757.   
  758.   $ns_ run
  759. }
  760. # Testing dynamics of joining and leaving for shared tree
  761. Class Test/ST1 -superclass TestSuite
  762. Test/ST1 instproc init topo {
  763. source ../mcast/ST.tcl
  764. global quiet
  765. if { $quiet } {
  766. ST instproc dbg arg {}
  767. }
  768. $self instvar net_ defNet_ test_ 
  769. set net_ $topo
  770. set defNet_ net6a
  771. set test_ ST1
  772. $self next
  773. }
  774. Test/ST1 instproc run {} {
  775. $self instvar ns_ node_ testName_
  776. set grp3 [Node allocaddr]
  777. set udp3 [new Agent/UDP]
  778. $ns_ attach-agent $node_(n3) $udp3
  779. $udp3 set dst_addr_ $grp3
  780. $udp3 set dst_port_ 0
  781. set cbr3 [new Application/Traffic/CBR]
  782. $cbr3 attach-agent $udp3
  783. $cbr3 set interval_ 30ms
  784. set rcvr2 [new Agent/LossMonitor]
  785. set rcvr4 [new Agent/LossMonitor]
  786. set rcvr5 [new Agent/LossMonitor]
  787. $ns_ attach-agent $node_(n2) $rcvr2
  788. $ns_ attach-agent $node_(n4) $rcvr4
  789. $ns_ attach-agent $node_(n5) $rcvr5
  790. ### Start multicast configuration
  791. ST set RP_($grp3) $node_(n0)
  792. $ns_ mrtproto ST  ""
  793. ### End of multicast  config
  794. $ns_ at 0.1 "$cbr3 start"
  795. $ns_ at 0.2 "$node_(n2) join-group $rcvr2 $grp3"
  796. $ns_ at 0.4 "$node_(n4) join-group $rcvr4 $grp3"
  797. $ns_ at 0.6 "$node_(n2) leave-group $rcvr2 $grp3"
  798. $ns_ at 0.7 "$node_(n5) join-group $rcvr5 $grp3"
  799. $ns_ at 0.8 "$node_(n2) join-group $rcvr2 $grp3"
  800. ####
  801. $ns_ at 1.6 "$self finish 6a-nam"
  802. $ns_ run
  803. }
  804. TestSuite runTest
  805. ### Local Variables:
  806. ### mode: tcl
  807. ### tcl-indent-level: 8
  808. ### tcl-default-application: ns
  809. ### End: