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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1995-1997 The Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. # This product includes software developed by the Computer Systems
  16. # Engineering Group at Lawrence Berkeley Laboratory.
  17. # 4. Neither the name of the University nor of the Laboratory may be used
  18. #    to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. #
  33. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-cbq.tcl,v 1.36 2006/01/24 23:00:06 sallyfloyd Exp $
  34. #
  35. #
  36. # This test suite reproduces the tests from the following note:
  37. # Floyd, S., Ns Simulator Tests for Class-Based Queueing, February 1996.
  38. # URL ftp://ftp.ee.lbl.gov/papers/cbqsims.ps.Z.
  39. #
  40. # To run individual tests:
  41. #  ./ns test-suite-cbq.tcl cbqPRR 
  42. #  ./ns test-suite-cbq.tcl cbqWRR
  43. #  ...
  44. #
  45. set dir [pwd]
  46. catch "cd tcl/test"
  47. source misc.tcl
  48. remove-all-packet-headers       ; # removes all except common
  49. add-packet-header Flags IP RTP TCP  ; # hdrs reqd for validation test
  50.  
  51. # FOR UPDATING GLOBAL DEFAULTS:
  52. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  53. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  54. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  55. Agent/TCP set tcpTick_ 0.1
  56. # The default for tcpTick_ is being changed to reflect a changing reality.
  57. Agent/TCP set rfc2988_ false
  58. # The default for rfc2988_ is being changed to true.
  59. Agent/TCP set minrto_ 1
  60. # default changed on 10/14/2004.
  61. Agent/TCP set useHeaders_ false
  62. # The default is being changed to useHeaders_ true.
  63. Agent/TCP set windowInit_ 1
  64. # The default is being changed to 2.
  65. Agent/TCP set singledup_ 0
  66. # The default is being changed to 1
  67. source topologies.tcl
  68. catch "cd $dir"
  69. Agent/TCP set syn_ false
  70. Agent/TCP set delay_growth_ false
  71. # In preparation for changing the default values for syn_ and delay_growth_.
  72. TestSuite instproc make_queue { cl qlim } {
  73. $self instvar cbq_qtype_
  74. set q [new Queue/$cbq_qtype_]
  75. $q set limit_ $qlim
  76. $cl install-queue $q
  77. }
  78. TestSuite instproc make_fmon cbqlink {
  79. $self instvar ns_ fmon_
  80. set fmon_ [$ns_ makeflowmon Fid]
  81. $ns_ attach-fmon $cbqlink $fmon_
  82. }
  83. # ~/newr/rm/testB
  84. # Create a flat link-sharing structure.
  85. #
  86. # 3 leaf classes:
  87. # vidClass (32%), pri 1
  88. # audioClass (03%), pri 1
  89. # dataClass (65%), pri 2
  90. #
  91. TestSuite instproc create_flat { audborrowok audxdelay} {
  92. $self instvar topclass_ vidclass_ audioclass_ dataclass_
  93. $self instvar cbq_qtype_
  94. set qlim 20
  95. set cbq_qtype_ DropTail
  96. set topclass_ [new CBQClass]
  97. # (topclass_ doesn't have a queue)
  98. $topclass_ setparams none 0 0.98 auto 8 2 0
  99.   set vidclass_ [new CBQClass]
  100. $self make_queue $vidclass_ $qlim
  101. $vidclass_ setparams $topclass_ true 0.32 auto 1 1 0
  102. set audioclass_ [new CBQClass]
  103. $self make_queue $audioclass_ $qlim
  104. $audioclass_ setparams $topclass_ $audborrowok 0.03 auto 1 1 $audxdelay
  105. set dataclass_ [new CBQClass]
  106. $self make_queue $dataclass_ $qlim
  107. $dataclass_ setparams $topclass_ true 0.65 auto 2 1 0
  108. }
  109. TestSuite instproc insert_flat cbqlink {
  110. $self instvar topclass_ vidclass_ audioclass_ dataclass_
  111. #
  112. # note: auto settings for maxidle are resolved in insert
  113. # (see tcl/lib/ns-queue.tcl)
  114. #
  115.   $cbqlink insert $topclass_
  116. $cbqlink insert $vidclass_
  117.   $cbqlink insert $audioclass_
  118.         $cbqlink insert $dataclass_
  119. $cbqlink bind $vidclass_ 2;# fid 2
  120.   $cbqlink bind $audioclass_ 1;# fid 1
  121. $cbqlink bind $dataclass_ 3; # fid 3
  122. }
  123. TestSuite instproc create_flat2 { audmaxidle audxdelay } {
  124. $self instvar topclass_ audioclass_ dataclass_
  125. $self instvar cbq_qtype_
  126. set qlim 1000
  127. set cbq_qtype_ DropTail
  128. set topclass_ [new CBQClass]
  129. # (topclass_ doesn't have a queue)
  130. $topclass_ setparams none false 0.97 1.0 8 2 0
  131. set audioclass_ [new CBQClass]
  132. $self make_queue $audioclass_ $qlim
  133. $audioclass_ setparams $topclass_ false 0.30 $audmaxidle 1 1 $audxdelay
  134. set dataclass_ [new CBQClass]
  135. $self make_queue $dataclass_ $qlim
  136. $dataclass_ setparams $topclass_ true 0.30 auto 2 1 0
  137. }
  138. TestSuite instproc create_flat3 { rootbw rootmaxidle } {
  139. $self instvar topclass_ audioclass_ dataclass_
  140. $self instvar cbq_qtype_
  141. set qlim 20
  142. set cbq_qtype_ DropTail
  143. set topclass_ [new CBQClass]
  144. # (topclass_ doesn't have a queue)
  145. $topclass_ setparams none false $rootbw $rootmaxidle 8 2 0
  146. set audioclass_ [new CBQClass]
  147. $self make_queue $audioclass_ $qlim
  148. $audioclass_ setparams $topclass_ true 0.01 auto 1 1 0
  149. set dataclass_ [new CBQClass]
  150. $self make_queue $dataclass_ $qlim
  151. $dataclass_ setparams $topclass_ true 0.99 auto 2 1 0
  152. }
  153. TestSuite instproc create_flat4 { rootbw rootmaxidle {audiobw 0.01} 
  154.    {databw 0.99} {qlim 20} } {
  155. $self instvar topclass_ audioclass_ dataclass_
  156. $self instvar cbq_qtype_
  157. set cbq_qtype_ DropTail
  158. set topclass_ [new CBQClass]
  159. # (topclass_ doesn't have a queue)
  160. $topclass_ setparams none false $rootbw $rootmaxidle 8 2 0
  161. set audioclass_ [new CBQClass]
  162. $self make_queue $audioclass_ $qlim
  163. $audioclass_ setparams $topclass_ true $audiobw auto 1 1 0
  164. set dataclass_ [new CBQClass]
  165. $self make_queue $dataclass_ $qlim
  166. $dataclass_ setparams $topclass_ true $databw auto 1 1 0
  167. }
  168. TestSuite instproc insert_flat2 cbqlink {
  169. $self instvar topclass_ audioclass_ dataclass_
  170. #
  171. # note: auto settings for maxidle are resolved in insert
  172. # (see tcl/lib/ns-queue.tcl)
  173. #
  174.   $cbqlink insert $topclass_
  175.   $cbqlink insert $audioclass_
  176.         $cbqlink insert $dataclass_
  177.   $cbqlink bind $audioclass_ 1;# fid 1
  178. $cbqlink bind $dataclass_ 2; # fid 2
  179. }
  180. # Create a two-agency link-sharing structure.
  181. #
  182. # 4 leaf classes for 2 "agencies":
  183. # vidAClass (30%), pri 1
  184. # dataAClass (40%), pri 2
  185. # vidBClass (10%), pri 1
  186. # dataBClass (20%), pri 2
  187. #
  188. TestSuite instproc create_twoagency { } {
  189. $self instvar cbqalgorithm_
  190. $self instvar topClass_ topAClass_ topBClass_
  191. set qlim 20
  192. set topClass_ [new CBQClass]
  193. set topAClass_ [new CBQClass]
  194. set topBClass_ [new CBQClass]
  195. if { $cbqalgorithm_ == "ancestor-only" } { 
  196. # For Ancestor-Only link-sharing. 
  197. # Maxidle should be smaller for AO link-sharing.
  198. $topClass_ setparams none 0 0.97 auto 8 3 0
  199. $topAClass_ setparams $topClass_ 1 0.69 auto 8 2 0
  200. $topBClass_ setparams $topClass_ 1 0.29 auto 8 2 0
  201. } elseif { $cbqalgorithm_ == "top-level" } {
  202. # For Top-Level link-sharing?
  203. # borrowing from $topAClass_ is occuring before from $topClass
  204. # yellow borrows from $topBClass_
  205. # Goes green borrow from $topClass_ or from $topAClass?
  206. # When $topBClass_ is unsatisfied, there is no borrowing from
  207. #  $topClass_ until a packet is sent from the yellow class.
  208. $topClass_ setparams none 0 0.97 0.001 8 3 0
  209. $topAClass_ setparams $topClass_ 1 0.69 auto 8 2 0
  210. $topBClass_ setparams $topClass_ 1 0.29 auto 8 2 0
  211. } elseif { $cbqalgorithm_ == "formal" } {
  212. # For Formal link-sharing
  213. # The allocated bandwidth can be exact for parent classes.
  214. $topClass_ setparams none 0 1.0 1.0 8 3 0
  215. $topAClass_ setparams $topClass_ 1 0.7 1.0 8 2 0
  216. $topBClass_ setparams $topClass_ 1 0.3 1.0 8 2 0
  217. }
  218. $self instvar vidAClass_ vidBClass_ dataAClass_ dataBClass_
  219. set vidAClass_ [new CBQClass]
  220. $vidAClass_ setparams $topAClass_ 1 0.3 auto 1 1 0
  221. set dataAClass_ [new CBQClass]
  222.   $dataAClass_ setparams $topAClass_ 1 0.4 auto 2 1 0
  223.   set vidBClass_ [new CBQClass]
  224.   $vidBClass_ setparams $topBClass_ 1 0.1 auto 1 1 0
  225.   set dataBClass_ [new CBQClass]
  226.   $dataBClass_ setparams $topBClass_ 1 0.2 auto 2 1 0
  227. # (topclass_ doesn't have a queue)
  228. $self instvar cbq_qtype_
  229. set cbq_qtype_ DropTail
  230. $self make_queue $vidAClass_ $qlim
  231. $self make_queue $dataAClass_ $qlim
  232. $self make_queue $vidBClass_ $qlim
  233. $self make_queue $dataBClass_ $qlim
  234. }
  235. TestSuite instproc insert_twoagency cbqlink {
  236. $self instvar topClass_ topAClass_ topBClass_
  237. $self instvar vidAClass_ vidBClass_
  238. $self instvar dataAClass_ dataBClass_
  239. $cbqlink insert $topClass_
  240.   $cbqlink insert $topAClass_
  241.   $cbqlink insert $topBClass_
  242. $cbqlink insert $vidAClass_
  243. $cbqlink insert $vidBClass_
  244.         $cbqlink insert $dataAClass_
  245.         $cbqlink insert $dataBClass_
  246. $cbqlink bind $vidAClass_ 1
  247. $cbqlink bind $dataAClass_ 2
  248. $cbqlink bind $vidBClass_ 3
  249. $cbqlink bind $dataBClass_ 4
  250. }
  251. # display graph of results
  252. TestSuite instproc finish testname {
  253. global quiet 
  254. $self instvar tmpschan_ tmpqchan_ topo_
  255. $topo_ instvar cbqlink_
  256. set graphfile temp.rands
  257. set bw [[$cbqlink_ set link_] set bandwidth_]
  258. set maxbytes [expr $bw / 8.0]
  259. set awkCode  {
  260. $2 == fid { print $1, $3/maxbytes }
  261. }
  262. set awkCodeAll {
  263. $2 == fid { print time, sum; sum = 0 }
  264. {
  265. sum += $3/maxbytes;
  266. if (NF==3)
  267. time = $1;
  268. else
  269. time = 0;
  270. }
  271. }
  272. if { [info exists tmpschan_] } {
  273. close $tmpschan_
  274. }
  275. if { [info exists tmpqchan_] } {
  276. close $tmpqchan_
  277. }
  278. set f [open $graphfile w]
  279. puts $f "TitleText: $testname"
  280. puts $f "Device: Postscript"
  281. exec rm -f temp.p
  282. exec touch temp.p
  283. foreach i { 1 2 3 4 } {
  284. exec echo "n"flow $i" >> temp.p
  285. exec awk $awkCode fid=$i maxbytes=$maxbytes temp.s > temp.$i
  286. exec cat temp.$i >> temp.p
  287. exec echo " " >> temp.p
  288. }
  289. exec awk $awkCodeAll fid=1 maxbytes=$maxbytes temp.s > temp.all
  290. exec echo "n"all " >> temp.p  
  291. exec cat temp.all >> temp.p 
  292. exec cat temp.p >@ $f
  293. close $f
  294. if {$quiet == "false"} {
  295. exec xgraph -bb -tk -x time -y bandwidth $graphfile &
  296. }
  297. # exec csh figure2.com $file
  298. exit 0
  299. }
  300. #
  301. # Save the number of bytes sent by each class in each time interval.
  302. # File: temp.s
  303. #
  304. TestSuite instproc cbrDump4 { linkno interval stopTime maxBytes } {
  305. set dumpfile temp.s
  306. $self instvar oldbytes_
  307. $self instvar ns_
  308. TestSuite instproc cdump { lnk interval file }  {
  309.   global quiet
  310.   $self instvar oldbytes_
  311.   $self instvar ns_ fmon_
  312.   set now [$ns_ now]
  313.   set fcl [$fmon_ classifier]
  314.   set fids { 1 2 3 4 }
  315.   if {$quiet == "false"} {
  316.    puts "$now"
  317.   }
  318.   foreach i $fids {
  319.   set flow($i) [$fcl lookup auto 0 0 $i]
  320.   if { $flow($i) != "" } {
  321.   set bytes($i) [$flow($i) set bdepartures_]
  322.   puts $file "$now $i [expr $bytes($i) - $oldbytes_($i)]"
  323.   set oldbytes_($i) $bytes($i)
  324.   }
  325.   }
  326.   $ns_ at [expr $now + $interval] "$self cdump $lnk $interval $file"
  327. }
  328. set fids { 1 2 3 4 }
  329. foreach i $fids {
  330. set oldbytes_($i) 0
  331. }
  332. $self instvar tmpschan_
  333. set f [open $dumpfile w]
  334. set tmpschan_ $f
  335. puts $f "maxbytes $maxBytes"
  336. $ns_ at 0.0 "$self cdump $linkno $interval $f"
  337. TestSuite instproc cdumpdel file {
  338.   $self instvar ns_ fmon_
  339.   set now [$ns_ now]
  340.   set fcl [$fmon_ classifier]
  341.   set fids { 1 2 3 4 }
  342.   foreach i $fids {
  343.   set flow [$fcl lookup auto 0 0 $i]
  344.   if { $flow != "" } {
  345.   set dsamp [$flow get-delay-samples]
  346.   puts $file "$now $i [$dsamp mean]"
  347.   }
  348.   }
  349. }
  350. $self instvar tmpqchan_
  351. set f1 [open temp.q w]
  352. set tmpqchan_ $f1
  353. puts $f1 "delay"
  354. $ns_ at $stopTime "$self cdumpdel $f1"
  355. }
  356. #
  357. # Save the queueing delay seen by each class.
  358. # File: temp.q
  359. # Format: time, class, delay
  360. #
  361. # proc cbrDumpDel { linkno stopTime } {
  362. #  proc cdump { lnk file }  {
  363. #    set timenow [ns now]
  364. #    # format: time, class, delay
  365. #    puts $file "$timenow 1 [$lnk stat 1 mean-qsize]"
  366. #    puts $file "$timenow 2 [$lnk stat 2 mean-qsize]"
  367. #    puts $file "$timenow 3 [$lnk stat 3 mean-qsize]"
  368. #    puts $file "$timenow 4 [$lnk stat 4 mean-qsize]"
  369. #  }
  370. #  set f1 [open temp.q w]
  371. #  puts $f1 "delay"
  372. #  ns at $stopTime "cdump $linkno $f1"
  373. #  ns at $stopTime "close $f1"
  374. # }
  375. #
  376. # Create three CBR connections.
  377. #
  378. TestSuite instproc three_cbrs {} {
  379. $self instvar ns_ node_
  380. set udp1 [$ns_ create-connection UDP $node_(s1) LossMonitor $node_(r2) 1]
  381. set cbr1 [new Application/Traffic/CBR]
  382. $cbr1 attach-agent $udp1
  383. $cbr1 set packetSize_ 190
  384. $cbr1 set rate_ 1.52Mb; # interval of 0.001
  385. set udp2 [$ns_ create-connection UDP $node_(s2) LossMonitor $node_(r2) 2]
  386. set cbr2 [new Application/Traffic/CBR]
  387. $cbr2 attach-agent $udp2
  388. $cbr2 set packetSize_ 500
  389. $cbr2 set rate_ 2Mb; # interval of 0.002
  390. set udp3 [$ns_ create-connection UDP $node_(s3) LossMonitor $node_(r2) 3]
  391. set cbr3 [new Application/Traffic/CBR]
  392. $cbr3 attach-agent $udp3
  393. $cbr3 set packetSize_ 1000 
  394. $cbr3 set rate_ 1.6Mb; # interval of 0.005
  395. $ns_ at 0.0 "$cbr1 start; $cbr2 start; $cbr3 start"
  396.         $ns_ at 4.0 "$cbr3 stop"
  397.         $ns_ at 8.0 "$cbr3 start"
  398.         $ns_ at 12.0 "$cbr2 stop"
  399.         $ns_ at 18.0 "$cbr2 start"
  400. $ns_ at 20.0 "$cbr1 stop"
  401.         $ns_ at 24.0 "$cbr1 start"
  402. }
  403. #
  404. # Create two CBR connections.
  405. #
  406. TestSuite instproc two_cbrs { ps1 ps2 int1 int2 dostop } {
  407. $self instvar ns_ node_
  408. set udp1 [$ns_ create-connection UDP $node_(s1) LossMonitor $node_(r2) 1]
  409. set cbr1 [new Application/Traffic/CBR]
  410. $cbr1 attach-agent $udp1
  411. $cbr1 set packetSize_ $ps1 
  412. $cbr1 set rate_ [expr $ps1 * 8/ [$ns_ delay_parse $int1]]
  413. set udp2 [$ns_ create-connection UDP $node_(s2) LossMonitor $node_(r2) 2]
  414. set cbr2 [new Application/Traffic/CBR]
  415. $cbr2 attach-agent $udp2
  416. $cbr2 set packetSize_ $ps2 
  417. $cbr2 set rate_ [expr $ps2 * 8/ [$ns_ delay_parse $int2]]
  418. $ns_ at 0.0 "$cbr1 start; $cbr2 start"
  419. if { $dostop } {
  420. $ns_ at 0.002 "$cbr1 stop"
  421. $ns_ at 1.0 "$cbr1 start"
  422. $ns_ at 1.08 "$cbr1 stop"
  423. }
  424. }
  425. TestSuite instproc four_cbrs {} {
  426. $self instvar ns_ node_
  427. set udp1 [$ns_ create-connection UDP $node_(s1) LossMonitor $node_(r2) 1]
  428. set cbr1 [new Application/Traffic/CBR]
  429. $cbr1 attach-agent $udp1
  430. $cbr1 set packetSize_ 190
  431. $cbr1 set rate_ 1.52Mb; # interval of 0.001
  432. set udp2 [$ns_ create-connection UDP $node_(s2) LossMonitor $node_(r2) 2]
  433. set cbr2 [new Application/Traffic/CBR]
  434. $cbr2 attach-agent $udp2
  435. $cbr2 set packetSize_ 1000 
  436. $cbr2 set rate_ 1.6Mb; # interval of 0.005
  437. set udp3 [$ns_ create-connection UDP $node_(s3) LossMonitor $node_(r2) 3]
  438. set cbr3 [new Application/Traffic/CBR]
  439. $cbr3 attach-agent $udp3
  440. $cbr3 set packetSize_ 500
  441. $cbr3 set rate_ 2Mb; # interval of 0.002
  442. set udp4 [$ns_ create-connection UDP $node_(s3) LossMonitor $node_(r2) 4]
  443. set cbr4 [new Application/Traffic/CBR]
  444. $cbr4 attach-agent $udp4
  445. $cbr4 set packetSize_ 1000 
  446. $cbr4 set rate_ 1.6Mb; # interval of 0.005
  447. $ns_ at 0.0 "$cbr1 start; $cbr2 start; $cbr3 start; $cbr4 start"
  448. $ns_ at 12.0 "$cbr1 stop"
  449. $ns_ at 16.0 "$cbr1 start"
  450. $ns_ at 36.0 "$cbr1 stop"
  451. $ns_ at 20.0 "$cbr2 stop"
  452. $ns_ at 24.0 "$cbr2 start"
  453. $ns_ at 4.0 "$cbr3 stop"
  454. $ns_ at 8.0 "$cbr3 start"
  455. $ns_ at 36.0 "$cbr3 stop"
  456. $ns_ at 28.0 "$cbr4 stop"
  457. $ns_ at 32.0 "$cbr4 start"
  458. }
  459. TestSuite instproc four_tcps {} {
  460. $self instvar ns_ node_
  461. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(r2) 1]
  462. set ftp1 [$tcp1 attach-app FTP]
  463. $tcp1 set packetSize_ 190
  464. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(r2) 2]
  465. set ftp2 [$tcp2 attach-app FTP]
  466. $tcp2 set packetSize_ 1000 
  467. set tcp3 [$ns_ create-connection TCP $node_(s3) TCPSink $node_(r2) 3]
  468. set ftp3 [$tcp3 attach-app FTP]
  469. $tcp3 set packetSize_ 500
  470. set tcp4 [$ns_ create-connection TCP $node_(s3) TCPSink $node_(r2) 4]
  471. set ftp4 [$tcp4 attach-app FTP]
  472. $tcp4 set packetSize_ 1000 
  473. $ns_ at 0.0 "$ftp1 start; $ftp2 start; $ftp3 start; $ftp4 start"
  474. $ns_ at 12.0 "$ftp1 stop"
  475. $ns_ at 16.0 "$ftp1 start"
  476. $ns_ at 36.0 "$ftp1 stop"
  477. $ns_ at 20.0 "$ftp2 stop"
  478. $ns_ at 24.0 "$ftp2 start"
  479. $ns_ at 4.0 "$ftp3 stop"
  480. $ns_ at 8.0 "$ftp3 start"
  481. $ns_ at 36.0 "$ftp3 stop"
  482. $ns_ at 28.0 "$ftp4 stop"
  483. $ns_ at 32.0 "$ftp4 start"
  484. }
  485. #
  486. # Figure 10 from the link-sharing paper. 
  487. # ~/newr/rm/testB.com
  488. Class Test/WRR -superclass TestSuite
  489. Test/WRR instproc init topo {
  490. $self instvar net_ defNet_ test_
  491. set net_ $topo
  492. set defNet_ cbq1-wrr
  493. set test_ CBQ_WRR
  494. $self next 0
  495. }
  496. Test/WRR instproc run {} {
  497. $self instvar cbqalgorithm_ ns_ net_ topo_
  498. set cbqalgorithm_ top-level
  499. set stopTime 28.1
  500. set maxbytes 187500
  501. $topo_ instvar cbqlink_
  502. $self create_flat true 0
  503. $self insert_flat $cbqlink_
  504. $self three_cbrs
  505. $self make_fmon $cbqlink_
  506. [$cbqlink_ queue] algorithm $cbqalgorithm_
  507. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  508. $self openTrace $stopTime CBQ_WRR
  509. $ns_ run
  510. }
  511. Class Test/PRR -superclass TestSuite
  512. Test/PRR instproc init topo {
  513. $self instvar net_ defNet_ test_
  514. set net_ $topo
  515. set defNet_ cbq1-prr
  516. set test_ CBQ_PRR
  517. $self next 0
  518. }
  519. #
  520. # Figure 10, but packet-by-packet RR, and Formal.
  521. Test/PRR instproc run {} {
  522. $self instvar cbqalgorithm_ ns_ net_ topo_
  523. set cbqalgorithm_ formal
  524. set stopTime 28.1
  525. set maxbytes 187500
  526. $topo_ instvar cbqlink_
  527. $self create_flat true 0
  528. $self insert_flat $cbqlink_
  529. $self three_cbrs
  530. $self make_fmon $cbqlink_
  531. [$cbqlink_ queue] algorithm $cbqalgorithm_
  532. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  533. $self openTrace $stopTime CBQ_PRR
  534. $ns_ run
  535. }
  536. # Figure 12 from the link-sharing paper.
  537. # WRR, Ancestor-Only link-sharing.
  538. # ~/newr/rm/testA.com
  539. Class Test/AO -superclass TestSuite
  540. Test/AO instproc init topo {
  541. $self instvar net_ defNet_ test_
  542. set net_ $topo
  543. set defNet_ cbq1-wrr
  544. set test_ CBQ_AO
  545. $self next 0
  546. }
  547. Test/AO instproc run {} {
  548. $self instvar cbqalgorithm_ ns_ net_ topo_
  549. set stopTime 40.1
  550. set maxbytes 187500
  551. set cbqalgorithm_ ancestor-only
  552. $topo_ instvar cbqlink_
  553. $self create_twoagency
  554. $self insert_twoagency $cbqlink_
  555. $self four_cbrs
  556. $self make_fmon $cbqlink_
  557. [$cbqlink_ queue] algorithm $cbqalgorithm_
  558. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  559. $self openTrace $stopTime CBQ_AO
  560. $ns_ run
  561. }
  562. #
  563. # Figure 13 from the link-sharing paper.
  564. # WRR, Top link-sharing.
  565. # ~/newr/rm/testA.com
  566. #
  567. Class Test/TL -superclass TestSuite
  568. Test/TL instproc init topo {
  569. $self instvar net_ defNet_ test_
  570. set net_ $topo
  571. set defNet_ cbq1-wrr
  572. set test_ CBQ_TL
  573. $self next 0
  574. }
  575. Test/TL instproc run {} {
  576. $self instvar cbqalgorithm_ ns_ net_ topo_
  577. set stopTime 40.1
  578. set maxbytes 187500
  579. set cbqalgorithm_ top-level
  580. $topo_ instvar cbqlink_
  581. $self create_twoagency
  582. $self insert_twoagency $cbqlink_
  583. $self four_cbrs
  584. $self make_fmon $cbqlink_
  585. [$cbqlink_ queue] algorithm $cbqalgorithm_
  586. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  587. $self openTrace $stopTime CBQ_TL
  588. $ns_ run
  589. }
  590. #
  591. # Figure 11 from the link-sharing paper.
  592. # WRR, Formal (new) link-sharing.
  593. # ~/newr/rm/testA.com
  594. #
  595. Class Test/FORMAL -superclass TestSuite
  596. Test/FORMAL instproc init topo {
  597. $self instvar net_ defNet_ test_
  598. set net_ $topo
  599. set defNet_ cbq1-wrr
  600. set test_ CBQ_FORMAL
  601. $self next 0
  602. }
  603. Test/FORMAL instproc run {} {
  604. $self instvar cbqalgorithm_ ns_ net_ topo_
  605. set stopTime 40.1
  606. set maxbytes 187500
  607. set cbqalgorithm_ formal
  608. $topo_ instvar cbqlink_
  609. $self create_twoagency
  610. $self insert_twoagency $cbqlink_
  611. $self four_cbrs
  612. $self make_fmon $cbqlink_
  613. [$cbqlink_ queue] algorithm $cbqalgorithm_
  614. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  615. $self openTrace $stopTime CBQ_FORMAL
  616. $ns_ run
  617. }
  618. #
  619. # WRR, Formal link-sharing, with TCP instead of UDP traffic.
  620. #
  621. Class Test/FORMAL_TCP -superclass TestSuite
  622. Test/FORMAL_TCP instproc init topo {
  623. $self instvar net_ defNet_ test_
  624. set net_ $topo
  625. set defNet_ cbq1-wrr
  626. set test_ CBQ_FORMAL_TCP
  627. $self next 0
  628. }
  629. Test/FORMAL_TCP instproc run {} {
  630. $self instvar cbqalgorithm_ ns_ net_ topo_
  631. set stopTime 40.1
  632. set maxbytes 187500
  633. set cbqalgorithm_ formal
  634. $topo_ instvar cbqlink_
  635. $self create_twoagency
  636. $self insert_twoagency $cbqlink_
  637. $self four_tcps
  638. $self make_fmon $cbqlink_
  639. [$cbqlink_ queue] algorithm $cbqalgorithm_
  640. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  641. $self openTrace $stopTime CBQ_FORMAL_TCP
  642. $ns_ run
  643. }
  644. TestSuite instproc finish_max tname {
  645. global quiet PERL
  646.         $self instvar ns_ tchan_ testName_
  647.         exec $PERL ../../bin/getrc -s 2 -d 3 out.tr | 
  648.           $PERL ../../bin/raw2xg -s 0.01 -m 90 -t $tname > temp.rands
  649.         if {$quiet == "false"} {
  650.                 exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  651.         }
  652.         ## now use default graphing tool to make a data file
  653.         ## if so desired
  654.         if { [info exists tchan_] && $quiet == "false" } {
  655.                 $self plotQueue $testName_
  656.         }
  657.         $ns_ halt
  658. }
  659. #
  660. # Figure 11 from the link-sharing paper, but Formal (old) link-sharing.
  661. # WRR. 
  662. # ~/newr/rm/testA.com DELETED
  663. #
  664. # To send five back-to-back packets for $audClass,
  665. #   maxidle should be 0.004 seconds
  666. # To send 50 back-to-back packets, maxidle should be 0.25 seconds
  667. Class Test/MAX1 -superclass TestSuite
  668. Test/MAX1 instproc init topo { 
  669.         $self instvar net_ defNet_ test_
  670. Queue set limit_ 1000
  671.         set net_ $topo
  672.         set defNet_ cbq1-wrr
  673.         set test_ CBQ_MAX1
  674.         $self next 0
  675. }
  676. Test/MAX1 instproc run {} {
  677.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  678.         set stopTime 2.1
  679.         set maxbytes 187500
  680.         set cbqalgorithm_ formal
  681.  
  682.         $topo_ instvar cbqlink_
  683.         $self create_flat2 0.25 0
  684.         $self insert_flat2 $cbqlink_
  685.         $self two_cbrs 1000 1000 0.001 0.01 1
  686.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  687. TestSuite instproc finish tname { $self finish_max $tname }
  688. $self traceQueues $node_(r1) [$self openTrace $stopTime CBQ_MAX1]
  689.         $ns_ run
  690. }
  691. Class Test/MAX2 -superclass TestSuite
  692. Test/MAX2 instproc init topo { 
  693.         $self instvar net_ defNet_ test_
  694. Queue set limit_ 1000
  695.         set net_ $topo
  696.         set defNet_ cbq1-wrr
  697.         set test_ CBQ_MAX2
  698.         $self next 0
  699. }
  700. Test/MAX2 instproc run {} {
  701.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  702.         set stopTime 2.1
  703.         set maxbytes 187500
  704.         set cbqalgorithm_ formal
  705.  
  706.         $topo_ instvar cbqlink_
  707.         $self create_flat2 0.004 0
  708.         $self insert_flat2 $cbqlink_
  709.         $self two_cbrs 1000 1000 0.001 0.01 1
  710.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  711. TestSuite instproc finish tname { $self finish_max $tname }
  712. $self traceQueues $node_(r1) [$self openTrace $stopTime CBQ_MAX2]
  713.         $ns_ run
  714. }
  715. #
  716. # Set "extradelay" to 0.024 seconds for a steady-state burst of 2 
  717. #
  718. Class Test/EXTRA1 -superclass TestSuite
  719. Test/EXTRA1 instproc init topo { 
  720.         $self instvar net_ defNet_ test_
  721.         Queue set limit_ 1000
  722.         set net_ $topo
  723.         set defNet_ cbq1-prr
  724.         set test_ CBQ_EXTRA1
  725.         $self next 0
  726. }
  727. Test/EXTRA1 instproc run {} {
  728.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  729.         set stopTime 2.1
  730.         set maxbytes 187500
  731.         set cbqalgorithm_ formal
  732.         
  733.         $topo_ instvar cbqlink_ 
  734.         $self create_flat2 auto 0.024
  735.         $self insert_flat2 $cbqlink_
  736.         $self two_cbrs 1000 1000 0.015 0.01 0
  737.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  738.         TestSuite instproc finish tname { $self finish_max $tname }
  739.         $self traceQueues $node_(r1) [$self openTrace $stopTime CBQ_EXTRA1]
  740.         $ns_ run
  741. }
  742. #
  743. # Set "extradelay" to 0.12 seconds for a steady-state burst of 8 
  744. #
  745. Class Test/EXTRA2 -superclass TestSuite
  746. Test/EXTRA2 instproc init topo { 
  747.         $self instvar net_ defNet_ test_
  748.         Queue set limit_ 1000
  749.         set net_ $topo
  750.         set defNet_ cbq1-prr
  751.         set test_ CBQ_EXTRA2
  752.         $self next 0
  753. }
  754. Test/EXTRA2 instproc run {} {
  755.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  756.         set stopTime 2.1
  757.         set maxbytes 187500
  758.         set cbqalgorithm_ formal
  759.         
  760.         $topo_ instvar cbqlink_ 
  761.         $self create_flat2 auto 0.12
  762.         $self insert_flat2 $cbqlink_
  763.         $self two_cbrs 1000 1000 0.015 0.01 0
  764.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  765.         TestSuite instproc finish tname { $self finish_max $tname }
  766.         $self traceQueues $node_(r1) [$self openTrace $stopTime CBQ_EXTRA2]
  767.         $ns_ run
  768. }
  769. # With Packet-by-Packet Round-robin, it is necessary either to
  770. # set a positive value for extradelay, or a negative value for minidle
  771. #
  772. Class Test/MIN1 -superclass TestSuite
  773. Test/MIN1 instproc init topo {
  774. $self instvar net_ defNet_ test_
  775. set net_ $topo
  776. set defNet_ cbq1-prr
  777. set test_ CBQ_MIN1
  778. $self next 0
  779. }
  780. Test/MIN1 instproc run {} {
  781. $self instvar cbqalgorithm_ ns_ net_ topo_
  782. set cbqalgorithm_ formal
  783. set stopTime 4.1
  784. set maxbytes 187500
  785. $topo_ instvar cbqlink_
  786. $self create_flat false 0
  787. $self insert_flat $cbqlink_
  788. $self three_cbrs
  789. $self make_fmon $cbqlink_
  790. [$cbqlink_ queue] algorithm $cbqalgorithm_
  791. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  792. $self openTrace $stopTime CBQ_MIN1
  793. $ns_ run
  794. }
  795. #
  796. # Min2 is deprecated
  797. #
  798. #
  799. # Min3 is like Min1, except extradelay is set to 0.2
  800. #
  801. Class Test/MIN3 -superclass TestSuite
  802. Test/MIN3 instproc init topo {
  803.         $self instvar net_ defNet_ test_
  804.         set net_ $topo
  805.         set defNet_ cbq1-prr
  806.         set test_ CBQ_MIN3
  807.         $self next 0
  808. }   
  809. Test/MIN3 instproc run {} {
  810.         $self instvar cbqalgorithm_ ns_ net_ topo_
  811.         set cbqalgorithm_ formal
  812.         set stopTime 4.1
  813.         set maxbytes 187500
  814.     
  815.         $topo_ instvar cbqlink_
  816.         $self create_flat false 0.20
  817.         $self insert_flat $cbqlink_
  818.         $self three_cbrs
  819.         $self make_fmon $cbqlink_
  820.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  821.     
  822. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  823.         $self openTrace $stopTime CBQ_MIN3
  824.     
  825.         $ns_ run
  826. }   
  827. #
  828. # Min1, but with Ancestor-Only link-sharing.
  829. Class Test/MIN4 -superclass TestSuite
  830. Test/MIN4 instproc init topo {
  831.         $self instvar net_ defNet_ test_
  832.         set net_ $topo
  833.         set defNet_ cbq1-prr  
  834.         set test_ CBQ_MIN4
  835.         $self next 0
  836. }   
  837.     
  838. Test/MIN4 instproc run {} {
  839.         $self instvar cbqalgorithm_ ns_ net_ topo_
  840.         set cbqalgorithm_ ancestor-only
  841.         set stopTime 4.1
  842.         set maxbytes 187500
  843.     
  844.         $topo_ instvar cbqlink_
  845.         $self create_flat false 0
  846.         $self insert_flat $cbqlink_
  847.         $self three_cbrs
  848.         $self make_fmon $cbqlink_
  849.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  850. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  851.         $self openTrace $stopTime CBQ_MIN4
  852.     
  853.         $ns_ run
  854. }   
  855. #
  856. # Min5 is deprecated
  857. #
  858. #
  859. # Min6 is like Min4, except extradelay is set to 0.2
  860. #
  861. Class Test/MIN6 -superclass TestSuite
  862. Test/MIN6 instproc init topo {
  863.         $self instvar net_ defNet_ test_
  864.         set net_ $topo
  865.         set defNet_ cbq1-prr
  866.         set test_ CBQ_MIN6
  867.         $self next 0
  868. }   
  869.     
  870. Test/MIN6 instproc run {} {
  871.         $self instvar cbqalgorithm_ ns_ net_ topo_
  872.         set cbqalgorithm_ ancestor-only
  873.         set stopTime 4.1
  874.         set maxbytes 187500
  875.     
  876.         $topo_ instvar cbqlink_
  877.         $self create_flat false 0.20
  878.         $self insert_flat $cbqlink_
  879.         $self three_cbrs
  880.         $self make_fmon $cbqlink_
  881.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  882.     
  883.     $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  884.         $self openTrace $stopTime CBQ_MIN6
  885.     
  886.         $ns_ run
  887. }   
  888. #
  889. # With Formal link-sharing, the dataClass gets most of the bandwidth.
  890. # With Ancestor-Only link-sharing, the audioClass generally gets
  891. #   to borrow from the not-overlimit root class.
  892. # With Top-Level link-sharing, the audioClass is often blocked
  893. #   from borrowing by an underlimit dataClass
  894. # With Ancestor-Only link-sharing, the top class cannot be
  895. #   allocated 100% of the link bandwidth.
  896. #
  897. Class Test/TwoAO -superclass TestSuite
  898. Test/TwoAO instproc init topo {
  899.         $self instvar net_ defNet_ test_
  900.         set net_ $topo
  901.         set defNet_ cbq1-prr
  902.         set test_ CBQ_TwoAO
  903.         $self next 0
  904. }   
  905. Test/TwoAO instproc run {} {
  906.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  907.         set stopTime 8.1
  908.         set maxbytes 187500
  909.         set cbqalgorithm_ ancestor-only
  910.     
  911.         $topo_ instvar cbqlink_
  912.         $self create_flat3 0.98 1.0
  913.         $self insert_flat2 $cbqlink_
  914.         $self two_cbrs 190 500 0.001 0.002 0
  915. $self make_fmon $cbqlink_
  916.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  917. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  918.         $self openTrace $stopTime CBQ_TwoAO
  919.     
  920.         $ns_ run
  921. }   
  922. # This has a smaller value for maxidle for the root class. 
  923. Class Test/TwoAO2 -superclass TestSuite
  924. Test/TwoAO2 instproc init topo {
  925.         $self instvar net_ defNet_ test_
  926.         set net_ $topo
  927.         set defNet_ cbq1-prr
  928.         set test_ CBQ_TwoAO2
  929.         $self next 0
  930. }   
  931. Test/TwoAO2 instproc run {} {
  932.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  933.         set stopTime 8.1
  934.         set maxbytes 187500
  935.         set cbqalgorithm_ ancestor-only
  936.     
  937.         $topo_ instvar cbqlink_
  938.         $self create_flat3 0.98 0.005
  939.         $self insert_flat2 $cbqlink_
  940.         $self two_cbrs 190 500 0.001 0.002 0 
  941. $self make_fmon $cbqlink_
  942.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  943.     
  944. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  945.         $self openTrace $stopTime CBQ_TwoAO2
  946.     
  947.         $ns_ run
  948. }   
  949. Class Test/TwoAO3 -superclass TestSuite
  950. Test/TwoAO3 instproc init topo {
  951.         $self instvar net_ defNet_ test_
  952.         set net_ $topo
  953.         set defNet_ cbq1-prr
  954.         set test_ CBQ_TwoAO3
  955.         $self next 0
  956. }   
  957. Test/TwoAO3 instproc run {} {
  958.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  959.         set stopTime 8.1
  960.         set maxbytes 187500
  961.         set cbqalgorithm_ ancestor-only
  962.     
  963.         $topo_ instvar cbqlink_
  964.         $self create_flat3 0.99 auto
  965.         $self insert_flat2 $cbqlink_
  966.         $self two_cbrs 190 500 0.001 0.002 0 
  967. $self make_fmon $cbqlink_
  968.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  969.     
  970. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  971.         $self openTrace $stopTime CBQ_TwoAO3
  972.     
  973.         $ns_ run
  974. }   
  975. #
  976. # With Formal link-sharing, the dataClass gets most of the bandwidth.
  977. # With Ancestor-Only link-sharing, the audioClass generally gets
  978. #   to borrow from the not-overlimit root class.
  979. # With Top-Level link-sharing, the audioClass is often blocked
  980. #   from borrowing by an underlimit dataClass
  981. #
  982. Class Test/TwoTL -superclass TestSuite
  983. Test/TwoTL instproc init topo {
  984.         $self instvar net_ defNet_ test_
  985.         set net_ $topo
  986.         set defNet_ cbq1-prr
  987.         set test_ CBQ_TwoTL
  988.         $self next 0
  989. }   
  990. Test/TwoTL instproc run {} {
  991.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  992.         set stopTime 8.1
  993.         set maxbytes 187500
  994.         set cbqalgorithm_ top-level
  995.     
  996.         $topo_ instvar cbqlink_
  997.         $self create_flat3 1.0 auto
  998.         $self insert_flat2 $cbqlink_
  999.         $self two_cbrs 190 500 0.001 0.002 0 
  1000. $self make_fmon $cbqlink_
  1001.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  1002.     
  1003. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  1004.         $self openTrace $stopTime CBQ_TwoTL
  1005.     
  1006.         $ns_ run
  1007. }   
  1008. #
  1009. # With Formal link-sharing, the dataClass gets most of the bandwidth.
  1010. # With Ancestor-Only link-sharing, the audioClass generally gets
  1011. #   to borrow from the not-overlimit root class.
  1012. # With Top-Level link-sharing, the audioClass is often blocked
  1013. #   from borrowing by an underlimit dataClass
  1014. #
  1015. Class Test/TwoF -superclass TestSuite
  1016. Test/TwoF instproc init topo {
  1017.         $self instvar net_ defNet_ test_
  1018.         set net_ $topo
  1019.         set defNet_ cbq1-prr
  1020.         set test_ CBQ_TwoF
  1021.         $self next 0
  1022. }   
  1023. Test/TwoF instproc run {} {
  1024.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  1025.         set stopTime 8.1
  1026.         set maxbytes 187500
  1027.         set cbqalgorithm_ formal
  1028.     
  1029.         $topo_ instvar cbqlink_
  1030.         $self create_flat3 1.0 auto
  1031.         $self insert_flat2 $cbqlink_
  1032.         $self two_cbrs 190 500 0.001 0.002 0 
  1033. $self make_fmon $cbqlink_
  1034.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  1035.     
  1036. $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  1037.         $self openTrace $stopTime CBQ_TwoF
  1038.     
  1039.         $ns_ run
  1040. }   
  1041. #
  1042. # This tests the dynamic allocation of bandwidth to classes.
  1043. #
  1044. Class Test/TwoDynamic -superclass TestSuite
  1045. Test/TwoDynamic instproc init topo { 
  1046.         $self instvar net_ defNet_ test_
  1047.         set net_ $topo
  1048.         set defNet_ cbq1-prr
  1049.         set test_ CBQ_TwoDynamic
  1050.         $self next 0
  1051. Test/TwoDynamic instproc run {} {
  1052.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  1053.         $self instvar topclass_ audioclass_ dataclass_
  1054.         set stopTime 8.1
  1055.         set maxbytes 187500
  1056.         set cbqalgorithm_ formal
  1057.         $topo_ instvar cbqlink_ 
  1058.         $self create_flat3 1.0 auto
  1059.         $self insert_flat2 $cbqlink_
  1060.         $self two_cbrs 190 500 0.001 0.002 0
  1061.         $self make_fmon $cbqlink_
  1062.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  1063.         $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  1064.         $self openTrace $stopTime CBQ_TwoDynamic
  1065.         $ns_ at 2.0 "$audioclass_ newallot 0.4; $dataclass_ newallot 0.6"
  1066.         $ns_ at 5.0 "$audioclass_ newallot 0.2; $dataclass_ newallot 0.8"
  1067.         $ns_ run
  1068. }
  1069. #
  1070. # This tests the dynamic allocation of bandwidth to classes.
  1071. # For this test the two classes have the same priority level.
  1072. # This is packet-by-packet round robin.
  1073. #
  1074. # At time 6.0, each class is allocated 80% of the link bandwidth.
  1075. # Because this is packet-by-packet round robin, bandwidth is distributed
  1076. # according to the packet sizes of the two classes;  the Audio class
  1077. # has 190-byte packets, while the Data class has 500-byte packets.
  1078. #
  1079. Class Test/TwoDynamic1 -superclass TestSuite
  1080. Test/TwoDynamic1 instproc init topo { 
  1081.         $self instvar net_ defNet_ test_
  1082.         set net_ $topo
  1083.         set defNet_ cbq1-prr
  1084.         set test_ CBQ_TwoDynamic1
  1085.         $self next 0
  1086. Test/TwoDynamic1 instproc run {} {
  1087.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  1088.         $self instvar topclass_ audioclass_ dataclass_
  1089.         set stopTime 8.1
  1090.         set maxbytes 187500
  1091.         set cbqalgorithm_ formal
  1092.         $topo_ instvar cbqlink_ 
  1093.         $self create_flat4 1.0 auto
  1094.         $self insert_flat2 $cbqlink_
  1095.         $self two_cbrs 190 500 0.001 0.002 0
  1096.         $self make_fmon $cbqlink_
  1097.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  1098.         $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  1099.         $self openTrace $stopTime CBQ_TwoDynamic1
  1100.         $ns_ at 2.0 "$audioclass_ newallot 0.4; $dataclass_ newallot 0.6"
  1101.         $ns_ at 4.0 "$audioclass_ newallot 0.2; $dataclass_ newallot 0.8"
  1102. $ns_ at 6.0 "$audioclass_ newallot 0.8; $dataclass_ newallot 0.8"
  1103.         $ns_ run
  1104. }
  1105. # This tests the dynamic allocation of bandwidth to classes.
  1106. # For this test the two classes have the same priority level.
  1107. # This is weighted round robin.
  1108. #
  1109. # At time 6.0, each class is allocated 80% of the link bandwidth.
  1110. # Because this is weighted round robin, each class receives
  1111. # half of the link bandwidth. 
  1112. #
  1113. Class Test/TwoDynamic1WRR -superclass TestSuite
  1114. Test/TwoDynamic1WRR instproc init topo { 
  1115.         $self instvar net_ defNet_ test_
  1116.         set net_ $topo
  1117.         set defNet_ cbq1-wrr
  1118.         set test_ CBQ_TwoDynamic1WRR
  1119.         $self next 0
  1120. Test/TwoDynamic1WRR instproc run {} {
  1121.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_
  1122.         $self instvar topclass_ audioclass_ dataclass_
  1123.         set stopTime 8.1
  1124.         set maxbytes 187500
  1125.         set cbqalgorithm_ formal
  1126.         $topo_ instvar cbqlink_ 
  1127.         $self create_flat4 1.0 auto
  1128.         $self insert_flat2 $cbqlink_
  1129.         $self two_cbrs 190 500 0.001 0.002 0
  1130.         $self make_fmon $cbqlink_
  1131.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  1132.         $self cbrDump4 $cbqlink_ 1.0 $stopTime $maxbytes
  1133.         $self openTrace $stopTime CBQ_TwoDynamic1WRR
  1134.         $ns_ at 2.0 "$audioclass_ newallot 0.4; $dataclass_ newallot 0.6"
  1135.         $ns_ at 4.0 "$audioclass_ newallot 0.2; $dataclass_ newallot 0.8"
  1136. $ns_ at 6.0 "$audioclass_ newallot 0.8; $dataclass_ newallot 0.8"
  1137.         $ns_ run
  1138. }
  1139. # This tests the dynamic allocation of bandwidth to classes.
  1140. # For this test the two classes have the same priority level.
  1141. # This is weighted round robin.
  1142. #
  1143. # The purpose of this test is to illustrate the number of bytes
  1144. # in a single round of the weighted round robin.
  1145. #
  1146. Class Test/TwoWRR -superclass TestSuite
  1147. Test/TwoWRR instproc init topo { 
  1148.         $self instvar net_ defNet_ test_
  1149.         set net_ $topo
  1150.         set defNet_ cbq1-wrr
  1151.         set test_ CBQ_TwoWRR
  1152.         $self next 0
  1153. Test/TwoWRR instproc run {} {
  1154.         $self instvar cbqalgorithm_ ns_ net_ topo_ node_ test_
  1155.         $self instvar topclass_ audioclass_ dataclass_
  1156.         set stopTime 0.4
  1157.         set maxbytes 187500
  1158.         set cbqalgorithm_ formal
  1159.         $topo_ instvar cbqlink_ 
  1160. $self create_flat4 1.0 auto 0.039 .961 200
  1161.         $self insert_flat2 $cbqlink_
  1162. $self two_cbrs 40 1000 0.002 0.005 0
  1163.         $self make_fmon $cbqlink_
  1164.         [$cbqlink_ queue] algorithm $cbqalgorithm_
  1165.   TestSuite instproc finish tname { $self finish_max $tname }
  1166. $self traceQueues $node_(r1) [$self openTrace $stopTime $test_]
  1167. $ns_ at 0.1 "$audioclass_ newallot 0.075; $dataclass_ newallot 0.925"
  1168. $ns_ at 0.2 "$audioclass_ newallot 0.138; $dataclass_ newallot 0.862"
  1169. $ns_ at 0.3 "$audioclass_ newallot 0.069; $dataclass_ newallot 0.431"
  1170.         $ns_ run
  1171. }
  1172. TestSuite runTest