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

通讯编程

开发平台:

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-adaptive-red.tcl,v 1.27 2006/06/14 01:12:28 sallyfloyd Exp $
  34. #
  35. # To run all tests: test-all-adaptive-red
  36. set dir [pwd]
  37. catch "cd tcl/test"
  38. catch "cd $dir"
  39. source misc_simple.tcl
  40. remove-all-packet-headers       ; # removes all except common
  41. add-packet-header Flags IP TCP  ; # hdrs reqd for validation test
  42.  
  43. # FOR UPDATING GLOBAL DEFAULTS:
  44. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  45. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  46. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  47. Agent/TCP set tcpTick_ 0.1
  48. # The default for tcpTick_ is being changed to reflect a changing reality.
  49. Agent/TCP set rfc2988_ false
  50. # The default for rfc2988_ is being changed to true.
  51. Agent/TCP set minrto_ 1
  52. # default changed on 10/14/2004.
  53. Queue/RED set bytes_ false              
  54. # default changed on 10/11/2004.
  55. Queue/RED set queue_in_bytes_ false
  56. # default changed on 10/11/2004.
  57. Queue/RED set q_weight_ 0.002
  58. Queue/RED set thresh_ 5 
  59. Queue/RED set maxthresh_ 15
  60. # Queue/RED set bottom_ 0.01
  61. # The RED parameter defaults are being changed for automatic configuration.
  62. Agent/TCP set singledup_ 0
  63. # The default is being changed to 1
  64. Agent/TCP set useHeaders_ false
  65. # The default is being changed to useHeaders_ true.
  66. Agent/TCP set bugfix_ss_ 0
  67. # A new variable on 6/13/06.
  68. set flowfile fairflow.tr; # file where flow data is written
  69. set flowgraphfile fairflow.xgr; # file given to graph tool 
  70. TestSuite instproc finish file {
  71. global quiet PERL
  72. $self instvar ns_ tchan_ testName_
  73.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  74.           $PERL ../../bin/raw2xg -a -s 0.01 -m 90 -t $file > temp.rands
  75. if {$quiet == "false"} {
  76.          exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  77. }
  78.         ## now use default graphing tool to make a data file
  79.         ## if so desired
  80. if { [info exists tchan_] && $quiet == "false" } {
  81. $self plotQueue $testName_
  82. }
  83. ## exec csh gnuplotA1.com temp.rands $testName_
  84. ## exec csh gnuplotQueue.com temp.queue $testName_
  85. $ns_ halt
  86. }
  87. TestSuite instproc enable_tracequeue ns {
  88. $self instvar tchan_ node_
  89. set redq [[$ns link $node_(r1) $node_(r2)] queue]
  90. set tchan_ [open all.q w]
  91. $redq trace curq_
  92. $redq trace ave_
  93. $redq attach $tchan_
  94. }
  95. Class Topology
  96. Topology instproc node? num {
  97.     $self instvar node_
  98.     return $node_($num)
  99. }
  100. Class Topology/net2 -superclass Topology
  101. Topology/net2 instproc init ns {
  102.     $self instvar node_
  103.     set node_(s1) [$ns node]
  104.     set node_(s2) [$ns node]    
  105.     set node_(r1) [$ns node]    
  106.     set node_(r2) [$ns node]    
  107.     set node_(s3) [$ns node]    
  108.     set node_(s4) [$ns node]    
  109.     $self next 
  110.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  111.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  112.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  113.     $ns queue-limit $node_(r1) $node_(r2) 25
  114.     $ns queue-limit $node_(r2) $node_(r1) 25
  115.     # A 1500-byte packet has a transmission time of 0.008 seconds.
  116.     # A queue of 25 1500-byte packets would be 0.2 seconds. 
  117.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  118.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  119. }   
  120. Class Topology/netfast -superclass Topology
  121. Topology/netfast instproc init ns {
  122.     $self instvar node_
  123.     set node_(s1) [$ns node]
  124.     set node_(s2) [$ns node]    
  125.     set node_(r1) [$ns node]    
  126.     set node_(r2) [$ns node]    
  127.     set node_(s3) [$ns node]    
  128.     set node_(s4) [$ns node]    
  129.     $self next 
  130.     $ns duplex-link $node_(s1) $node_(r1) 100Mb 2ms DropTail
  131.     $ns duplex-link $node_(s2) $node_(r1) 100Mb 3ms DropTail
  132.     $ns duplex-link $node_(r1) $node_(r2) 15Mb 20ms RED
  133.     $ns queue-limit $node_(r1) $node_(r2) 1000
  134.     $ns queue-limit $node_(r2) $node_(r1) 1000
  135.     $ns duplex-link $node_(s3) $node_(r2) 100Mb 4ms DropTail
  136.     $ns duplex-link $node_(s4) $node_(r2) 100Mb 5ms DropTail
  137. }   
  138. Class Topology/net3 -superclass Topology
  139. Topology/net3 instproc init ns {
  140.     $self instvar node_
  141.     set node_(s1) [$ns node]
  142.     set node_(s2) [$ns node]    
  143.     set node_(r1) [$ns node]    
  144.     set node_(r2) [$ns node]    
  145.     set node_(s3) [$ns node]    
  146.     set node_(s4) [$ns node]    
  147.     $self next 
  148.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 0ms DropTail
  149.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 1ms DropTail
  150.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 10ms RED
  151.     $ns duplex-link $node_(r2) $node_(r1) 1.5Mb 10ms RED
  152.     $ns queue-limit $node_(r1) $node_(r2) 100
  153.     $ns queue-limit $node_(r2) $node_(r1) 100
  154.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 2ms DropTail
  155.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 3ms DropTail
  156. }   
  157. Class Topology/net4 -superclass Topology
  158. Topology/net4 instproc init ns {
  159.     $self instvar node_
  160.     set node_(s1) [$ns node]
  161.     set node_(s2) [$ns node]
  162.     set node_(r1) [$ns node]
  163.     set node_(r2) [$ns node]
  164.     set node_(s3) [$ns node]
  165.     set node_(s4) [$ns node]
  166.     $self next 
  167.     $ns duplex-link $node_(s1) $node_(r1) 1000Mb 0ms DropTail
  168.     $ns duplex-link $node_(s2) $node_(r1) 1000Mb 1ms DropTail
  169.     $ns duplex-link $node_(r1) $node_(r2) 10Mb 10ms RED
  170.     $ns duplex-link $node_(r2) $node_(r1) 10Mb 10ms RED
  171.     $ns queue-limit $node_(r1) $node_(r2) 1000
  172.     $ns queue-limit $node_(r2) $node_(r1) 1000
  173.     $ns duplex-link $node_(s3) $node_(r2) 1000Mb 2ms DropTail
  174.     $ns duplex-link $node_(s4) $node_(r2) 1000Mb 3ms DropTail
  175. }
  176. Class Topology/netlong -superclass Topology
  177. Topology/netlong instproc init ns {
  178.     $self instvar node_
  179.     set node_(s1) [$ns node]
  180.     set node_(s2) [$ns node]    
  181.     set node_(r1) [$ns node]    
  182.     set node_(r2) [$ns node]    
  183.     set node_(s3) [$ns node]    
  184.     set node_(s4) [$ns node]    
  185.     $self next 
  186.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 0ms DropTail
  187.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 1ms DropTail
  188.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 100ms RED
  189.     $ns duplex-link $node_(r2) $node_(r1) 1.5Mb 100ms RED
  190.     $ns queue-limit $node_(r1) $node_(r2) 100
  191.     $ns queue-limit $node_(r2) $node_(r1) 100
  192.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 2ms DropTail
  193.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 3ms DropTail
  194. }   
  195. TestSuite instproc plotQueue file {
  196. global quiet
  197. $self instvar tchan_
  198. #
  199. # Plot the queue size and average queue size, for RED gateways.
  200. #
  201. set awkCode {
  202. {
  203. if ($1 == "Q" && NF>2) {
  204. print $2, $3 >> "temp.q";
  205. set end $2
  206. }
  207. else if ($1 == "a" && NF>2)
  208. print $2, $3 >> "temp.a";
  209. }
  210. }
  211. set f [open temp.queue w]
  212. puts $f "TitleText: $file"
  213. puts $f "Device: Postscript"
  214. if { [info exists tchan_] } {
  215. close $tchan_
  216. }
  217. exec rm -f temp.q temp.a 
  218. exec touch temp.a temp.q
  219. exec awk $awkCode all.q
  220. puts $f "queue
  221. exec cat temp.q >@ $f  
  222. puts $f n"ave_queue
  223. exec cat temp.a >@ $f
  224. ###puts $f n"thresh
  225. ###puts $f 0 [[ns link $r1 $r2] get thresh]
  226. ###puts $f $end [[ns link $r1 $r2] get thresh]
  227. close $f
  228. if {$quiet == "false"} {
  229. exec xgraph -bb -tk -x time -y queue temp.queue &
  230. }
  231. }
  232. TestSuite instproc tcpDumpAll { tcpSrc interval label } {
  233.     global quiet
  234.     $self instvar dump_inst_ ns_
  235.     if ![info exists dump_inst_($tcpSrc)] {
  236. set dump_inst_($tcpSrc) 1
  237. set report $label/window=[$tcpSrc set window_]/packetSize=[$tcpSrc set packetSize_]
  238. if {$quiet == "false"} {
  239. puts $report
  240. }
  241. $ns_ at 0.0 "$self tcpDumpAll $tcpSrc $interval $label"
  242. return
  243.     }
  244.     $ns_ at [expr [$ns_ now] + $interval] "$self tcpDumpAll $tcpSrc $interval $label"
  245.     set report time=[$ns_ now]/class=$label/ack=[$tcpSrc set ack_]/packets_resent=[$tcpSrc set nrexmitpack_]
  246.     if {$quiet == "false"} {
  247.      puts $report
  248.     }
  249. }       
  250. TestSuite instproc maketraffic {{stoptime 50.0} {window 15} {starttime 3.0}} {
  251.     $self instvar ns_ node_ testName_ net_
  252.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  253.     $tcp1 set window_ $window
  254.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 1]
  255.     $tcp2 set window_ $window
  256.     set ftp1 [$tcp1 attach-app FTP]
  257.     set ftp2 [$tcp2 attach-app FTP]
  258.     $self enable_tracequeue $ns_
  259.     $ns_ at 0.0 "$ftp1 start"
  260.     $ns_ at $starttime "$ftp2 start"
  261.     $self tcpDump $tcp1 5.0
  262.     # trace only the bottleneck link
  263.     #$self traceQueues $node_(r1) [$self openTrace $stoptime $testName_]
  264.     $ns_ at $stoptime "$self cleanupAll $testName_"
  265. }
  266. TestSuite instproc maketraffic1 {window time} {
  267.     $self instvar ns_ node_ testName_ net_
  268.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 2]
  269.     $tcp1 set window_ $window
  270.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 3]
  271.     $tcp2 set window_ $window
  272.     set ftp1 [$tcp1 attach-app FTP]
  273.     set ftp2 [$tcp2 attach-app FTP]
  274.     $ns_ at $time "$ftp1 start"
  275.     $ns_ at [expr 2 * $time] "$ftp2 start"
  276. }
  277. TestSuite instproc automatic queue {
  278.     $queue set thresh_ 0
  279.     $queue set maxthresh_ 0
  280.     $queue set q_weight_ 0
  281. }
  282. #####################################################################
  283. Class Test/red1 -superclass TestSuite
  284. Test/red1 instproc init {} {
  285.     $self instvar net_ test_
  286.     set net_ net2 
  287.     set test_ red1
  288.     $self next pktTraceFile
  289. }
  290. Test/red1 instproc run {} {
  291.     $self instvar ns_ node_ testName_ net_
  292.     $self setTopo
  293.     $self maketraffic 
  294.     $ns_ run
  295. }
  296. Class Test/red1Adapt -superclass TestSuite
  297. Test/red1Adapt instproc init {} {
  298.     $self instvar net_ test_ ns_
  299.     set net_ net2 
  300.     set test_ red1Adapt
  301.     $self next pktTraceFile
  302. }
  303. Test/red1Adapt instproc run {} {
  304.     $self instvar ns_ node_ testName_ net_
  305.     $self setTopo
  306.     set forwq [[$ns_ link $node_(r1) $node_(r2)] queue]
  307.     $forwq set adaptive_ 1 
  308.     $self automatic $forwq
  309.     $self maketraffic
  310.     $ns_ run   
  311. }
  312. Class Test/red1ECN -superclass TestSuite
  313. Test/red1ECN instproc init {} {
  314.     $self instvar net_ test_
  315.     set net_ net2
  316.     set test_ red1ECN
  317.     Queue/RED set setbit_ true
  318.     Agent/TCP set ecn_ 1
  319.     Test/red1ECN instproc run {} [Test/red1 info instbody run ]
  320.     $self next pktTraceFile
  321. }
  322. Class Test/red1AdaptECN -superclass TestSuite
  323. Test/red1AdaptECN instproc init {} {
  324.     $self instvar net_ test_ ns_
  325.     set net_ net2
  326.     set test_ red1AdaptECN
  327.     Queue/RED set setbit_ true
  328.     Agent/TCP set ecn_ 1
  329.     Test/red1AdaptECN instproc run {} [Test/red1Adapt info instbody run ]
  330.     $self next pktTraceFile
  331. }
  332. Class Test/red1AdaptFeng -superclass TestSuite
  333. Test/red1AdaptFeng instproc init {} {
  334.     $self instvar net_ test_ ns_
  335.     set net_ net2 
  336.     set test_ red1AdaptFeng
  337.     Queue/RED set alpha_ 3.0
  338.     Queue/RED set beta_ 2.0
  339.     Queue/RED set feng_adaptive_ 1
  340.     Test/red1AdaptFeng instproc run {} [Test/red1Adapt info instbody run ]
  341.     $self next pktTraceFile
  342. }
  343. #####################################################################
  344. Class Test/fastlink -superclass TestSuite
  345. Test/fastlink instproc init {} {
  346.     $self instvar net_ test_
  347.     set net_ netfast 
  348.     set test_ fastlink
  349.     $self next pktTraceFile
  350. }
  351. Test/fastlink instproc run {} {
  352.     $self instvar ns_ node_ testName_ net_
  353.     $self setTopo
  354.     $self maketraffic 5.0 100 1.5
  355.     $self maketraffic1 100 0.5
  356.     $ns_ run
  357. }
  358. Class Test/fastlinkAutowq -superclass TestSuite
  359. Test/fastlinkAutowq instproc init {} {
  360.     $self instvar net_ test_ ns_
  361.     set net_ netfast 
  362.     set test_ fastlinkAutowq
  363.     Queue/RED set q_weight_ 0
  364.     Test/fastlinkAutowq instproc run {} [Test/fastlink info instbody run ]
  365.     $self next pktTraceFile
  366. }
  367. Class Test/fastlinkAutothresh -superclass TestSuite
  368. Test/fastlinkAutothresh instproc init {} {
  369.     $self instvar net_ test_ ns_
  370.     set net_ netfast 
  371.     set test_ fastlinkAutothresh
  372.     Queue/RED set thresh_ 0 
  373.     Queue/RED set maxthresh_ 0
  374.     Test/fastlinkAutothresh instproc run {} [Test/fastlink info instbody run ]
  375.     $self next pktTraceFile
  376. }
  377. Class Test/fastlinkAdapt -superclass TestSuite
  378. Test/fastlinkAdapt instproc init {} {
  379.     $self instvar net_ test_ ns_
  380.     set net_ netfast 
  381.     set test_ fastlinkAdapt
  382.     Queue/RED set adaptive_ 1
  383.     Test/fastlinkAdapt instproc run {} [Test/fastlink info instbody run ]
  384.     $self next pktTraceFile
  385. }
  386. Class Test/fastlinkAllAdapt -superclass TestSuite
  387. Test/fastlinkAllAdapt instproc init {} {
  388.     $self instvar net_ test_ ns_
  389.     set net_ netfast 
  390.     set test_ fastlinkAllAdapt
  391.     Queue/RED set adaptive_ 1
  392.     Queue/RED set q_weight_ 0
  393.     Queue/RED set thresh_ 0
  394.     Queue/RED set maxthresh_ 0
  395.     Test/fastlinkAllAdapt instproc run {} [Test/fastlink info instbody run ]
  396.     $self next pktTraceFile
  397. }
  398. Class Test/fastlinkAllAdaptECN -superclass TestSuite
  399. Test/fastlinkAllAdaptECN instproc init {} {
  400.     $self instvar net_ test_ ns_
  401.     set net_ netfast 
  402.     set test_ fastlinkAllAdaptECN
  403.     Queue/RED set adaptive_ 1
  404.     Queue/RED set q_weight_ 0
  405.     Queue/RED set thresh_ 0
  406.     Queue/RED set maxthresh_ 0
  407.     Queue/RED set setbit_ true
  408.     Agent/TCP set ecn_ 1
  409.     Test/fastlinkAllAdaptECN instproc run {} [Test/fastlink info instbody run ]
  410.     $self next pktTraceFile
  411. }
  412. # Changing upper bound for max_p 
  413. Class Test/fastlinkAllAdapt1 -superclass TestSuite
  414. Test/fastlinkAllAdapt1 instproc init {} {
  415.     $self instvar net_ test_ ns_
  416.     set net_ netfast 
  417.     set test_ fastlinkAllAdapt1
  418.     Queue/RED set adaptive_ 1
  419.     Queue/RED set q_weight_ 0
  420.     Queue/RED set thresh_ 0
  421.     Queue/RED set maxthresh_ 0
  422.     Queue/RED set top_ 0.2
  423.     Queue/RED set bottom_ 0.1
  424.     Test/fastlinkAllAdapt1 instproc run {} [Test/fastlink info instbody run ]
  425.     $self next pktTraceFile
  426. }
  427. #####################################################################
  428. Class Test/longlink -superclass TestSuite
  429. Test/longlink instproc init {} {
  430.     $self instvar net_ test_
  431.     set net_ netlong 
  432.     set test_ longlink
  433.     $self next pktTraceFile
  434. }
  435. Test/longlink instproc run {} {
  436.     $self instvar ns_ node_ testName_ net_
  437.     $self setTopo
  438.     $self maketraffic 50.0 100 1.5
  439.     $self maketraffic1 100 0.5
  440.     $ns_ run
  441. }
  442. Class Test/longlinkAdapt -superclass TestSuite
  443. Test/longlinkAdapt instproc init {} {
  444.     $self instvar net_ test_
  445.     set net_ netlong 
  446.     Queue/RED set adaptive_ 1
  447.     Queue/RED set thresh_ 0
  448.     Queue/RED set maxthresh_ 0
  449.     Queue/RED set q_weight_ 0
  450.     set test_ longlinkAdapt
  451.     Test/longlinkAdapt instproc run {} [Test/longlink info instbody run ]
  452.     $self next pktTraceFile
  453. }
  454. Class Test/longlinkAdapt1 -superclass TestSuite
  455. Test/longlinkAdapt1 instproc init {} {
  456.     $self instvar net_ test_
  457.     set net_ netlong 
  458.     Queue/RED set adaptive_ 1
  459.     Queue/RED set thresh_ 0
  460.     Queue/RED set maxthresh_ 0
  461.     Queue/RED set q_weight_ -1.0
  462.     set test_ longlinkAdapt1
  463.     Test/longlinkAdapt1 instproc run {} [Test/longlink info instbody run ]
  464.     $self next pktTraceFile
  465. }
  466. #####################################################################
  467. # This reuses connection state, with $nums effective TCP connections,
  468. #   reusing state from $conns underlying TCP connections.
  469. TestSuite instproc newtraffic { num window packets start interval conns} {
  470.     $self instvar ns_ node_ testName_ net_
  471.     for {set i 0} {$i < $conns } {incr i} {
  472.         set tcp($i) [$ns_ create-connection-list TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 2]
  473. set source($i) [lindex $tcp($i) 0]
  474. set sink($i) [lindex $tcp($i) 1]
  475.         $source($i) set window_ $window
  476. set ftp($i) [$source($i) attach-app FTP]
  477. $ns_ at 0.0 "$ftp($i) produce 0"
  478.     }
  479.     for {set i 0} {$i < $num } {incr i} {
  480.         set tcpnum [ expr $i % $conns ]
  481. set time [expr $start + $i * $interval]
  482. $ns_ at $time  "$source($tcpnum) reset"
  483. $ns_ at $time  "$sink($tcpnum) reset"
  484.         $ns_ at $time  "$ftp($tcpnum) producemore $packets"
  485.     }
  486. }
  487. Class Test/red2 -superclass TestSuite
  488. Test/red2 instproc init {} {
  489.     $self instvar net_ test_
  490.     set net_ net2 
  491.     set test_ red2
  492.     $self next pktTraceFile
  493. }
  494. Test/red2 instproc run {} {
  495.     $self instvar ns_ node_ testName_ net_
  496.     $self setTopo
  497.     $self maketraffic 
  498.     $self newtraffic 20 20 1000 25 0.1 20
  499.     $ns_ run
  500. }
  501. Class Test/red2Adapt -superclass TestSuite
  502. Test/red2Adapt instproc init {} {
  503.     $self instvar net_ test_ ns_
  504.     set net_ net2 
  505.     set test_ red2Adapt
  506.     $self next pktTraceFile
  507. }
  508. Test/red2Adapt instproc run {} {
  509.     $self instvar ns_ node_ testName_ net_
  510.     $self setTopo
  511.     set forwq [[$ns_ link $node_(r1) $node_(r2)] queue]
  512.     $forwq set adaptive_ 1 
  513.     $self automatic $forwq
  514.     $self maketraffic
  515.     $self newtraffic 20 20 1000 25 0.1 20
  516.     $ns_ run   
  517. }
  518. Class Test/red2A-Adapt -superclass TestSuite
  519. Test/red2A-Adapt instproc init {} {
  520.     $self instvar net_ test_ ns_
  521.     set net_ net2 
  522.     set test_ red2A-Adapt
  523.     Queue/RED set alpha_ 0.02
  524.     Queue/RED set beta_ 0.8
  525.     Test/red2A-Adapt instproc run {} [Test/red2Adapt info instbody run ]
  526.     $self next pktTraceFile
  527. }
  528. Class Test/red2-AdaptFeng -superclass TestSuite
  529. Test/red2-AdaptFeng instproc init {} {
  530.     $self instvar net_ test_ ns_
  531.     set net_ net2 
  532.     set test_ red2-AdaptFeng
  533.     Queue/RED set alpha_ 3
  534.     Queue/RED set beta_ 2
  535.     Queue/RED set feng_adaptive_ 1
  536.     Test/red2-AdaptFeng instproc run {} [Test/red2Adapt info instbody run ]
  537.     $self next pktTraceFile
  538. }
  539. #####################################################################
  540. Class Test/red3 -superclass TestSuite
  541. Test/red3 instproc init {} {
  542.     $self instvar net_ test_
  543.     set net_ net2 
  544.     set test_ red3
  545.     $self next pktTraceFile
  546. }
  547. Test/red3 instproc run {} {
  548.     $self instvar ns_ node_ testName_ net_
  549.     $self setTopo
  550.     $self maketraffic 
  551.     $self newtraffic 15 20 300 0 0.1 15
  552.     $ns_ run
  553. }
  554. Class Test/red3Adapt -superclass TestSuite
  555. Test/red3Adapt instproc init {} {
  556.     $self instvar net_ test_ ns_
  557.     set net_ net2 
  558.     set test_ red3Adapt
  559.     $self next pktTraceFile
  560. }
  561. Test/red3Adapt instproc run {} {
  562.     $self instvar ns_ node_ testName_ net_
  563.     $self setTopo
  564.     set forwq [[$ns_ link $node_(r1) $node_(r2)] queue]
  565.     $forwq set adaptive_ 1 
  566.     $self automatic $forwq
  567.     $self maketraffic
  568.     $self newtraffic 15 20 300 0 0.1 15
  569.     $ns_ run   
  570. }
  571. Class Test/red4Adapt -superclass TestSuite
  572. Test/red4Adapt instproc init {} {
  573.     $self instvar net_ test_ ns_
  574.     set net_ net2 
  575.     set test_ red4Adapt
  576.     Queue/RED set alpha_ 0.02
  577.     Queue/RED set beta_ 0.8
  578.     Test/red4Adapt instproc run {} [Test/red3Adapt info instbody run ]
  579.     $self next pktTraceFile
  580. }
  581. TestSuite instproc printall { fmon } {
  582.         puts "aggregate per-link total_drops [$fmon set pdrops_]"
  583.         puts "aggregate per-link total_packets [$fmon set pdepartures_]"
  584. }
  585. # Class Test/red5 -superclass TestSuite
  586. # Test/red5 instproc init {} {
  587. #     $self instvar net_ test_ ns_
  588. #     set net_ net2 
  589. #     set test_ red5
  590. #     Queue/RED set alpha_ 0.02
  591. #     Queue/RED set beta_ 0.8
  592. #     $self next pktTraceFile
  593. # }
  594. # Test/red5 instproc run {} {
  595. #     $self instvar ns_ node_ testName_ net_
  596. #     $self setTopo
  597. #     set slink [$ns_ link $node_(r1) $node_(r2)]; # link to collect stats on
  598. #     set fmon [$ns_ makeflowmon Fid]
  599. #     $ns_ attach-fmon $slink $fmon
  600. #     $self maketraffic
  601. #     $self newtraffic 20 20 300 0 0.001 10
  602. #     # To run many flows:
  603. #     # $self newtraffic 4000 20 300 0 0.005 500
  604. #     # $self newtraffic 40000 20 300 0 0.001 500
  605. #     $ns_ at 49.99 "$self printall $fmon" 
  606. #     $ns_ run
  607. # }
  608. #####################################################################
  609. Class Test/transient -superclass TestSuite
  610. Test/transient instproc init {} {
  611.     $self instvar net_ test_
  612.     set net_ netfast 
  613.     set test_ transient
  614.     $self next pktTraceFile
  615. }
  616. Test/transient instproc run {} {
  617.     $self instvar ns_ node_ testName_ net_
  618.     $self setTopo
  619.     set stoptime 5.0
  620.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  621.     $tcp1 set window_ 100
  622.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 1]
  623.     $tcp2 set window_ 1000
  624.     set ftp1 [$tcp1 attach-app FTP]
  625.     set ftp2 [$tcp2 attach-app FTP]
  626.     $self enable_tracequeue $ns_
  627.     $ns_ at 0.0 "$ftp1 start"
  628.     $ns_ at 2.5 "$ftp2 start"
  629.     $self tcpDump $tcp1 5.0
  630.     # trace only the bottleneck link
  631.     #$self traceQueues $node_(r1) [$self openTrace $stoptime $testName_]
  632.     $ns_ at $stoptime "$self cleanupAll $testName_"
  633.     $ns_ run
  634. }
  635. Class Test/transient1 -superclass TestSuite
  636. Test/transient1 instproc init {} {
  637.     $self instvar net_ test_
  638.     set net_ netfast 
  639.     set test_ transient1
  640.     Queue/RED set q_weight_ 0
  641.     Test/transient1 instproc run {} [Test/transient info instbody run ]
  642.     $self next pktTraceFile
  643. }
  644. Class Test/transient2 -superclass TestSuite
  645. Test/transient2 instproc init {} {
  646.     $self instvar net_ test_
  647.     set net_ netfast 
  648.     set test_ transient2
  649.     Queue/RED set q_weight_ 0.0001
  650.     Test/transient2 instproc run {} [Test/transient info instbody run ]
  651.     $self next pktTraceFile
  652. }
  653. Class Test/notcautious -superclass TestSuite
  654. Test/notcautious instproc init {} {
  655.     $self instvar net_ test_
  656.     set net_ net4
  657.     set test_ notcautious
  658.     Queue/RED set cautious_ 0
  659.     $self next pktTraceFile
  660. }
  661. Test/notcautious instproc run {} {
  662.     $self instvar ns_ node_ testName_ net_
  663.     Queue/RED set q_weight_ -1
  664.     Queue/RED set adaptive_ 1
  665.     Queue/RED set thresh 0
  666.     Queue/RED set maxthresh 0
  667.     $self setTopo
  668.     set stoptime 5.0
  669.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  670.     $tcp1 set window_ 600
  671.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 1]
  672.     $tcp2 set window_ 600
  673.     set ftp1 [$tcp1 attach-app FTP]
  674.     set ftp2 [$tcp2 attach-app FTP]
  675.     $self enable_tracequeue $ns_
  676.     $ns_ at 0.0 "$ftp1 start"
  677.     $ns_ at 1.0 "$ftp2 start"
  678.     $self tcpDump $tcp1 5.0
  679.     $ns_ at $stoptime "$self cleanupAll $testName_"
  680.     $ns_ run
  681. }
  682.     
  683. Class Test/cautious -superclass TestSuite
  684. Test/cautious instproc init {} {
  685.     $self instvar net_ test_
  686.     set net_ net4
  687.     set test_ cautious
  688.     Queue/RED set cautious_ 1
  689.     Test/cautious instproc run {} [Test/notcautious info instbody run ]
  690.     $self next pktTraceFile
  691. }
  692. Class Test/cautious2 -superclass TestSuite
  693. Test/cautious2 instproc init {} {
  694.     $self instvar net_ test_
  695.     set net_ net4
  696.     set test_ cautious2
  697.     Queue/RED set cautious_ 2
  698.     Test/cautious2 instproc run {} [Test/notcautious info instbody run ]
  699.     $self next pktTraceFile
  700. }
  701. Class Test/cautious3 -superclass TestSuite
  702. Test/cautious3 instproc init {} {
  703.     $self instvar net_ test_
  704.     set net_ net4
  705.     set test_ cautious3
  706.     Queue/RED set cautious_ 3
  707.     Queue/RED set idle_pktsize_ 100
  708.     Test/cautious3 instproc run {} [Test/notcautious info instbody run ]
  709.     $self next pktTraceFile
  710. }
  711. TestSuite runTest