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

通讯编程

开发平台:

Visual C++

  1. # copyright (c) 1995 The Regents of the University of California.
  2. # All rights reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. #    notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. #    notice, this list of conditions and the following disclaimer in the
  11. #    documentation and/or other materials provided with the distribution.
  12. # 3. All advertising materials mentioning features or use of this software
  13. #    must display the following acknowledgement:
  14. # This product includes software developed by the Computer Systems
  15. # Engineering Group at Lawrence Berkeley Laboratory.
  16. # 4. Neither the name of the University nor of the Laboratory may be used
  17. #    to endorse or promote products derived from this software without
  18. #    specific prior written permission.
  19. #
  20. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. # SUCH DAMAGE.
  31. #
  32. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-friendly.tcl,v 1.78 2007/09/16 17:15:07 sallyfloyd Exp $
  33. #
  34. source misc_simple.tcl
  35. source support.tcl
  36. remove-all-packet-headers       ; # removes all except common
  37. add-packet-header Flags IP RTP TCP TFRC TFRC_ACK ; # hdrs reqd for validation test
  38. # FOR UPDATING GLOBAL DEFAULTS:
  39. Queue/RED set bytes_ false              
  40. # default changed on 10/11/2004.
  41. Queue/RED set queue_in_bytes_ false
  42. # default changed on 10/11/2004.
  43. Queue/RED set q_weight_ 0.002
  44. Queue/RED set thresh_ 5 
  45. Queue/RED set maxthresh_ 15
  46. # The RED parameter defaults are being changed for automatic configuration.
  47. ##########################
  48. Agent/TFRCSink set numPkts_ 1
  49. # The default for numPkts_ might be changed to 3, at some point.
  50. # But right now, the code for numPkts does not work, except for numPkts_ 1.
  51. # With numPkts set to 1, TFRCSink is not robust to reordering.
  52. ##########################
  53. Agent/TFRC set maxHeavyRounds_ 0
  54. Agent/TCP set window_ 100
  55. # Uncomment the line below to use a random seed for the
  56. #  random number generator.
  57. # ns-random 0
  58. TestSuite instproc finish file {
  59.         global quiet PERL
  60.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  61.           $PERL ../../bin/raw2xg -s 0.01 -m 90 -t $file > temp1.rands
  62.         if {$quiet == "false"} {
  63.                 exec xgraph -bb -tk -nl -m -x time -y packets temp1.rands &
  64.         }
  65.         ## now use default graphing tool to make a data file
  66.         ## if so desired
  67. #       exec csh figure2.com $file
  68. # exec cp temp1.rands temp.$file 
  69. # exec csh gnuplotA.com temp.$file $file
  70. ###        exit 0
  71. }
  72. Class Topology
  73. Topology instproc node? num {
  74.     $self instvar node_
  75.     return $node_($num)
  76. }
  77. Class Topology/net2 -superclass Topology
  78. Topology/net2 instproc init ns {
  79.     $self instvar node_
  80.     set node_(s1) [$ns node]
  81.     set node_(s2) [$ns node]
  82.     set node_(r1) [$ns node]
  83.     set node_(r2) [$ns node]
  84.     set node_(s3) [$ns node]
  85.     set node_(s4) [$ns node]
  86.     $self next
  87.     Queue/RED set gentle_ true
  88.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  89.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  90.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  91.     $ns queue-limit $node_(r1) $node_(r2) 50
  92.     $ns queue-limit $node_(r2) $node_(r1) 50
  93.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  94.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  95. }
  96. Class Topology/net2a -superclass Topology
  97. Topology/net2a instproc init ns {
  98.     $self instvar node_
  99.     set node_(s1) [$ns node]
  100.     set node_(s2) [$ns node]
  101.     set node_(r1) [$ns node]
  102.     set node_(r2) [$ns node]
  103.     set node_(s3) [$ns node]
  104.     set node_(s4) [$ns node]
  105.     $self next 
  106.     Queue/RED set gentle_ true
  107.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  108.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  109.     $ns duplex-link $node_(r1) $node_(r2) 0.15Kb 2ms RED
  110.     $ns queue-limit $node_(r1) $node_(r2) 2
  111.     $ns queue-limit $node_(r2) $node_(r1) 50
  112.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  113.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  114. }
  115. Class Topology/net2d -superclass Topology
  116. Topology/net2d instproc init ns {
  117.     $self instvar node_
  118.     set node_(s1) [$ns node]
  119.     set node_(s2) [$ns node]
  120.     set node_(r1) [$ns node]
  121.     set node_(r2) [$ns node]
  122.     set node_(s3) [$ns node]
  123.     set node_(s4) [$ns node]
  124.     $self next
  125.     Queue/RED set gentle_ true
  126.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  127.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  128.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  129.     # 1.5Mb, 12.5 1500-byte pkts per 100 ms.
  130.     $ns queue-limit $node_(r1) $node_(r2) 50
  131.     $ns queue-limit $node_(r2) $node_(r1) 50
  132.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  133.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  134. }
  135. Class Topology/net3 -superclass Topology
  136. Topology/net3 instproc init ns {
  137.     $self instvar node_
  138.     set node_(s1) [$ns node]
  139.     set node_(s2) [$ns node]
  140.     set node_(r1) [$ns node]
  141.     set node_(r2) [$ns node]
  142.     set node_(s3) [$ns node]
  143.     set node_(s4) [$ns node]
  144.     $self next
  145.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  146.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  147.     $ns duplex-link $node_(r1) $node_(r2) 2Mb 300ms DropTail
  148.     $ns queue-limit $node_(r1) $node_(r2) 1000
  149.     $ns queue-limit $node_(r2) $node_(r1) 1000
  150.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  151.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  152. }
  153. #
  154. # Arrange for TFCC stats to be dumped for $src every
  155. # $interval seconds of simulation time
  156. #
  157. TestSuite instproc tfccDump { label src interval file } {
  158.         $self instvar dump_inst_ ns_ f
  159.         if ![info exists dump_inst_($src)] {
  160.                 set dump_inst_($src) 1
  161.                 $ns_ at 0.0 "$self tfccDump $label $src $interval $file"
  162.                 return
  163.         }
  164.         set nexttime [expr [$ns_ now] + $interval]
  165.         $ns_ at $nexttime "$self tfccDump $label $src $interval $file"
  166.         set report "[$ns_ now] $label [$src set ndatapack_] " 
  167. puts $file $report
  168. }
  169. #
  170. # Arrange for TCP stats to be dumped for $tcp every
  171. # $interval seconds of simulation time
  172. #
  173. TestSuite instproc pktsDump { label tcp interval file } {
  174.     $self instvar dump_inst_ ns_
  175.     if ![info exists dump_inst_($tcp)] {
  176.         set dump_inst_($tcp) 1
  177.         $ns_ at 0.0 "$self pktsDump $label $tcp $interval $file"
  178.         return
  179.     }
  180.     $ns_ at [expr [$ns_ now] + $interval] "$self pktsDump $label $tcp $interval $file"
  181.     set report "[$ns_ now] $label [$tcp set ack_]"
  182.     puts $file $report
  183. }
  184. # display graph of results
  185. TestSuite instproc finish_1 testname {
  186.         global quiet
  187.         $self instvar topo_
  188.         set graphfile temp.rands
  189.         set awkCode  {
  190. {
  191.                 if ($2 == fid) { print $1, $3 - last; last = $3 }
  192. }
  193.         }
  194.         set f [open $graphfile w]
  195.         puts $f "TitleText: $testname"
  196.         puts $f "Device: Postscript"
  197.         exec rm -f temp.p
  198.         exec touch temp.p
  199.         foreach i { 1 2 3 4 5} {
  200.                 exec echo "n"flow $i" >> temp.p
  201.                 exec awk $awkCode fid=$i temp.s > temp.$i
  202.                 exec cat temp.$i >> temp.p
  203.                 exec echo " " >> temp.p
  204.         }
  205.         exec cat temp.p >@ $f
  206.         close $f
  207. exec cp -f $graphfile temp2.rands
  208.         if {$quiet == "false"} {
  209.                 exec xgraph -bb -tk -x time -y packets temp2.rands &
  210.         }
  211. # exec csh gnuplotB.com temp2.rands $testname
  212. #       exec csh figure2.com temp.rands $testname
  213. ###        exit 0
  214. }
  215. TestSuite instproc runFriendly {} {
  216.     $self instvar ns_ node_ interval_ dumpfile_ guide_
  217.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 3]
  218.     set tf2 [$ns_ create-connection TFRC $node_(s2) TFRCSink $node_(s4) 4]
  219.     $ns_ at 0.0 "$tf1 start"
  220.     $ns_ at 4.0 "$tf2 start"
  221.     $ns_ at 30 "$tf1 stop"
  222.     $ns_ at 30 "$tf2 stop"
  223.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  224.     $self tfccDump 2 $tf2 $interval_ $dumpfile_
  225. }
  226. TestSuite instproc runTcp {} {
  227.     $self instvar ns_ node_ interval_ dumpfile_
  228.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 3]
  229.     set ftp1 [$tcp1 attach-app FTP]
  230.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s4) 4]
  231.     set ftp2 [$tcp2 attach-app FTP]
  232.     $ns_ at 0.0 "$ftp1 start"
  233.     $ns_ at 4.0 "$ftp2 start"
  234.     $ns_ at 30 "$ftp1 stop"
  235.     $ns_ at 30 "$ftp2 stop"
  236.     $self pktsDump 1 $tcp1 $interval_ $dumpfile_
  237.     $self pktsDump 2 $tcp2 $interval_ $dumpfile_
  238. }
  239. TestSuite instproc runTcps {} {
  240.     $self instvar ns_ node_ interval_ dumpfile_
  241.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s4) 0]
  242.     set ftp1 [$tcp1 attach-app FTP] 
  243.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s4) 1]
  244.     set ftp2 [$tcp2 attach-app FTP] 
  245.     set tcp3 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s4) 2]
  246.     set ftp3 [$tcp3 attach-app FTP] 
  247.     $ns_ at 8.0 "$ftp1 start"
  248.     $ns_ at 12.0 "$ftp2 start"
  249.     $ns_ at 16.0 "$ftp3 start"
  250.     $ns_ at 24 "$ftp2 stop"
  251.     $ns_ at 20 "$ftp3 stop"
  252.     $self pktsDump 3 $tcp1 $interval_ $dumpfile_
  253.     $self pktsDump 4 $tcp2 $interval_ $dumpfile_
  254.     $self pktsDump 5 $tcp3 $interval_ $dumpfile_
  255. }
  256. Class Test/slowStartDiscount -superclass TestSuite
  257. Test/slowStartDiscount instproc init {} {
  258.     $self instvar net_ test_ guide_
  259.     set net_ net2
  260.     set test_ slowStartDiscount
  261.     set guide_  "TFRC with discount_ true, for discounting older loss intervals."
  262.     Agent/TFRCSink set discount_ 1
  263.     Agent/TFRCSink set smooth_ 0
  264.     Agent/TFRC set df_ 0.25
  265.     Agent/TFRC set ca_ 0
  266.     Queue/RED set gentle_ false
  267.     Test/slowStartDiscount instproc run {} [Test/slowStart info instbody run ]
  268.     $self next pktTraceFile
  269. }
  270. Class Test/slowStartDiscount1 -superclass TestSuite
  271. Test/slowStartDiscount1 instproc init {} {
  272.     $self instvar net_ test_ guide_
  273.     set net_ net2
  274.     set test_ slowStartDiscount1
  275.     set guide_  "TFRC with minDiscountRatio_ set to 0.25, for stronger discounting."
  276.     Agent/TFRCSink set discount_ 1
  277.     Agent/TFRCSink set smooth_ 0
  278.     Agent/TFRCSink set minDiscountRatio_ 0.25
  279.     Agent/TFRC set df_ 0.25
  280.     Agent/TFRC set ca_ 0
  281.     Queue/RED set gentle_ false
  282.     Test/slowStartDiscount1 instproc run {} [Test/slowStart info instbody run ]
  283.     $self next pktTraceFile
  284. }
  285. Class Test/slowStartDiscountCA -superclass TestSuite
  286. Test/slowStartDiscountCA instproc init {} {
  287.     $self instvar net_ test_ guide_
  288.     set net_ net2
  289.     set test_ slowStartDiscountCA
  290.     set guide_  "TFRC with ca_ true, for Sqrt(RTT) based congestion avoidance mode."
  291.     Agent/TFRCSink set discount_ 1
  292.     Agent/TFRC set df_ 0.95
  293.     Agent/TFRC set ca_ 1
  294.     Agent/TFRCSink set discount_ 0
  295.     Agent/TFRCSink set smooth_ 0
  296.     Queue/RED set gentle_ false
  297.     Test/slowStartDiscountCA instproc run {} [Test/slowStart info instbody run ]
  298.     $self next pktTraceFile
  299. }
  300. Class Test/smooth -superclass TestSuite
  301. Test/smooth instproc init {} {
  302.     $self instvar net_ test_ guide_
  303.     set net_ net2
  304.     set test_ smooth
  305.     set guide_  "TFRC with smooth_ true, for smoothly incorporating new loss intervals."
  306.     Agent/TFRCSink set discount_ 1
  307.     Agent/TFRCSink set smooth_ 1
  308.     Agent/TFRC set df_ 0.25
  309.     Agent/TFRC set ca_ 0
  310.     Test/smooth instproc run {} [Test/slowStart info instbody run ]
  311.     $self next pktTraceFile
  312. }
  313. Class Test/smoothCA -superclass TestSuite
  314. Test/smoothCA instproc init {} {
  315.     $self instvar net_ test_ guide_
  316.     set net_ net2
  317.     set test_ smoothCA
  318.     set guide_  "TFRC with smooth_, discount_, and ca_ all true." 
  319.     Agent/TFRCSink set discount_ 1
  320.     Agent/TFRCSink set smooth_ 1
  321.     Agent/TFRC set df_ 0.95
  322.     Agent/TFRC set ca_ 1
  323.     Test/smoothCA instproc run {} [Test/slowStart info instbody run ]
  324.     $self next pktTraceFile
  325. }
  326. Class Test/slowStart -superclass TestSuite
  327. Test/slowStart instproc init {} {
  328.     $self instvar net_ test_ guide_
  329.     set net_ net2
  330.     set test_ slowStart
  331.     set guide_  "TFRC with smooth_, discount_, and ca_ all false."
  332.     Agent/TFRCSink set discount_ 0
  333.     Agent/TFRCSink set smooth_ 0
  334.     Agent/TFRC set df_ 0.25
  335.     Agent/TFRC set ca_ 0
  336.     Queue/RED set gentle_ false
  337.     $self next pktTraceFile
  338. }
  339. Class Test/slowStartCA -superclass TestSuite
  340. Test/slowStartCA instproc init {} {
  341.     $self instvar net_ test_ guide_ 
  342.     set net_ net2
  343.     set test_ slowStartCA
  344.     set guide_  "TFRC with discount_ false and ca_ true."
  345.     Agent/TFRCSink set discount_ 0
  346.     Agent/TFRC set df_ 0.95
  347.     Agent/TFRC set ca_ 1
  348.     Test/slowStartCA instproc run {} [Test/slowStart info instbody run ]
  349.     $self next pktTraceFile
  350. }
  351. Test/slowStart instproc run {} {
  352.     global quiet 
  353.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  354.     puts "Guide: $guide_"
  355.     $self setTopo
  356.     set interval_ 0.1
  357.     set stopTime 40.0
  358.     set stopTime0 [expr $stopTime - 0.001]
  359.     set stopTime2 [expr $stopTime + 0.001]
  360.     set dumpfile_ [open temp.s w]
  361.     if {$quiet == "false"} {
  362.         set tracefile [open all.tr w]
  363.         $ns_ trace-all $tracefile
  364.     }
  365.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  366.     $ns_ at 0.0 "$tf1 start"
  367.     $ns_ at 30 "$tf1 stop"
  368.     set tf2 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 1]
  369.     if {$stopTime > 16} {
  370.         $ns_ at 16 "$tf2 start"
  371.         $ns_ at $stopTime "$tf2 stop"
  372.         $self tfccDump 2 $tf2 $interval_ $dumpfile_
  373.     }
  374.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  375.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  376.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  377.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  378.     if {$quiet == "false"} {
  379. $ns_ at $stopTime2 "close $tracefile"
  380.     }
  381.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  382.     # trace only the bottleneck link
  383.     $ns_ run
  384. }
  385. # This test uses EWMA for estimating the loss event rate.
  386. Class Test/slowStartEWMA -superclass TestSuite
  387. Test/slowStartEWMA instproc init {} {
  388.     $self instvar net_ test_ guide_
  389.     set net_ net2
  390.     set test_ slowStartEWMA
  391.     set guide_  "TFRC with EWMA for estimating the loss event rate."
  392.     Agent/TFRCSink set algo_ 2
  393.     Test/slowStartEWMA instproc run {} [Test/slowStart info instbody run ]
  394.     $self next pktTraceFile
  395. }
  396. # This test uses Fixed Windows for estimating the loss event rate.
  397. Class Test/slowStartFixed -superclass TestSuite
  398. Test/slowStartFixed instproc init {} {
  399.     $self instvar net_ test_ guide_
  400.     set net_ net2
  401.     set test_ slowStartFixed
  402.     set guide_  "TFRC with Fixed Windows for estimating the loss event rate."
  403.     Agent/TFRCSink set algo_ 3
  404.     Test/slowStartFixed instproc run {} [Test/slowStart info instbody run ]
  405.     $self next pktTraceFile
  406. }
  407. Class Test/ecn -superclass TestSuite
  408. Test/ecn instproc init {} {
  409.     $self instvar net_ test_ guide_
  410.     set net_ net2
  411.     set test_ ecn
  412.     set guide_  "TFRC with ECN."
  413.     Agent/TFRC set ecn_ 1
  414.     Queue/RED set setbit_ true
  415.     Test/ecn instproc run {} [Test/slowStart info instbody run ]
  416.     $self next pktTraceFile
  417. }
  418. Class Test/slowStartTcp -superclass TestSuite
  419. Test/slowStartTcp instproc init {} {
  420.     $self instvar net_ test_ guide_
  421.     set net_ net2
  422.     set test_ slowStartTcp
  423.     set guide_  "TCP"
  424.     $self next pktTraceFile
  425. }
  426. Test/slowStartTcp instproc run {} {
  427.     global quiet
  428.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  429.     puts "Guide: $guide_"
  430.     $self setTopo
  431.     set interval_ 0.1
  432.     set stopTime 40.0
  433.     set stopTime0 [expr $stopTime - 0.001]
  434.     set stopTime2 [expr $stopTime + 0.001]
  435.     set dumpfile_ [open temp.s w]
  436.     if {$quiet == "false"} {
  437.         set tracefile [open all.tr w]
  438.         $ns_ trace-all $tracefile
  439.     }
  440.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  441.     set ftp1 [$tcp1 attach-app FTP]
  442.     $ns_ at 0.0 "$ftp1 start"
  443.     $ns_ at 30 "$ftp1 stop"
  444.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 1]
  445.     set ftp2 [$tcp2 attach-app FTP]
  446.     $ns_ at 16 "$ftp2 start"
  447.     $ns_ at $stopTime "$ftp2 stop"
  448.     $self tfccDump 1 $tcp1 $interval_ $dumpfile_
  449.     $self tfccDump 2 $tcp2 $interval_ $dumpfile_
  450.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  451.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  452.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  453.     if {$quiet == "false"} {
  454. $ns_ at $stopTime2 "close $tracefile"
  455.     }
  456.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  457.     # trace only the bottleneck link
  458.     $ns_ run
  459. }
  460. Class Test/impulseDiscount -superclass TestSuite
  461. Test/impulseDiscount instproc init {} {
  462.     $self instvar net_ test_ guide_
  463.     set net_ net2
  464.     set test_ impulseDiscount
  465.     set guide_  "TFRC with discount_ true, for discounting older loss intervals."
  466.     Agent/TFRCSink set discount_ 1
  467.     Agent/TFRC set df_ 0.25
  468.     Agent/TFRC set ca_ 0
  469.     Agent/TFRCSink set smooth_ 0
  470.     Test/impulseDiscount instproc run {} [Test/impulseCA info instbody run ]
  471.     $self next pktTraceFile
  472. }
  473. Class Test/impulseDiscountCA -superclass TestSuite
  474. Test/impulseDiscountCA instproc init {} {
  475.     $self instvar net_ test_ guide_
  476.     set net_ net2
  477.     set test_ impulseDiscountCA
  478.     set guide_  "TFRC with discount_ and ca_ true, smooth_ false."
  479.     Agent/TFRCSink set discount_ 1
  480.     Agent/TFRC set df_ 0.95
  481.     Agent/TFRC set ca_ 1
  482.     Agent/TFRCSink set smooth_ 0
  483.     Test/impulseDiscountCA instproc run {} [Test/impulseCA info instbody run ]
  484.     $self next pktTraceFile
  485. }
  486. Class Test/impulse -superclass TestSuite
  487. Test/impulse instproc init {} {
  488.     $self instvar net_ test_ guide_
  489.     set net_ net2
  490.     set test_ impulse
  491.     set guide_  "TFRC with smooth_, discount_, and ca_ all false."
  492.     Agent/TFRCSink set discount_ 0
  493.     Agent/TFRC set df_ 0.25
  494.     Agent/TFRC set ca_ 0
  495.     Agent/TFRCSink set smooth_ 0
  496.     Test/impulse instproc run {} [Test/impulseCA info instbody run ]
  497.     $self next pktTraceFile
  498. }
  499. Class Test/impulseCA -superclass TestSuite
  500. Test/impulseCA instproc init {} {
  501.     $self instvar net_ test_ guide_
  502.     set net_ net2
  503.     set test_ impulseCA
  504.     set guide_  "TFRC with ca_ true, for Sqrt(RTT) based congestion avoidance mode."
  505.     Agent/TFRCSink set discount_ 0
  506.     Agent/TFRCSink set smooth_ 0
  507.     Agent/TFRC set df_ 0.95
  508.     Agent/TFRC set ca_ 1
  509. #    Test/impulseCA instproc run {} [Test/impulseCA info instbody run ]
  510.     $self next pktTraceFile
  511. }
  512. Test/impulseCA instproc run {} {
  513.     global quiet
  514.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  515.     puts "Guide: $guide_"
  516.     $self setTopo
  517.     set interval_ 0.1
  518.     set stopTime 40.0
  519.     set stopTime0 [expr $stopTime - 0.001]
  520.     set stopTime2 [expr $stopTime + 0.001]
  521.     set dumpfile_ [open temp.s w]
  522.     if {$quiet == "false"} {
  523.         set tracefile [open all.tr w]
  524.         $ns_ trace-all $tracefile
  525.     }
  526.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  527.     $ns_ at 0.0 "$tf1 start"
  528.     $ns_ at $stopTime "$tf1 stop"
  529.     set tf2 [$ns_ create-connection TFRC $node_(s2) TFRCSink $node_(s4) 1]
  530.     $ns_ at 10.0 "$tf2 start"
  531.     $ns_ at 20.0 "$tf2 stop"
  532.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  533.     $self tfccDump 2 $tf2 $interval_ $dumpfile_
  534.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  535.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  536.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  537.     if {$quiet == "false"} {
  538. $ns_ at $stopTime2 "close $tracefile"
  539.     }
  540.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  541.     # trace only the bottleneck link
  542.     $ns_ run
  543. }
  544. Class Test/impulseMultReport -superclass TestSuite
  545. Test/impulseMultReport instproc init {} {
  546.     $self instvar net_ test_ guide_
  547.     set net_ net2
  548.     set test_ impulseMultReport
  549.     set guide_  "TFRC with feedback four times per RTT, discount_ and ca_ false." 
  550.     Agent/TFRCSink set NumFeedback_ 4
  551.     Agent/TFRCSink set discount_ 0
  552.     Agent/TFRC set df_ 0.25
  553.     Agent/TFRC set ca_ 0
  554.     $self next pktTraceFile
  555. }
  556. Test/impulseMultReport instproc run {} {
  557.     global quiet
  558.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  559.     puts "Guide: $guide_"
  560.     $self setTopo
  561.     set interval_ 0.1
  562.     set stopTime 40.0
  563.     set stopTime0 [expr $stopTime - 0.001]
  564.     set stopTime2 [expr $stopTime + 0.001]
  565.     set dumpfile_ [open temp.s w]
  566.     if {$quiet == "false"} {
  567.         set tracefile [open all.tr w]
  568.         $ns_ trace-all $tracefile
  569.     }
  570.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  571.     $ns_ at 0.0 "$tf1 start"
  572.     set tf2 [$ns_ create-connection TFRC $node_(s2) TFRCSink $node_(s4) 1]
  573.     $ns_ at 10.0 "$tf2 start"
  574.     $ns_ at 20.0 "$tf2 stop"
  575.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  576.     $self tfccDump 2 $tf2 $interval_ $dumpfile_
  577.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  578.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  579.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  580.     if {$quiet == "false"} {
  581. $ns_ at $stopTime2 "close $tracefile"
  582.     }
  583.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  584.     # trace only the bottleneck link
  585.     $ns_ run
  586. }
  587. # Feedback 4 times per roundtrip time.
  588. Class Test/impulseMultReportDiscount -superclass TestSuite
  589. Test/impulseMultReportDiscount instproc init {} {
  590.     $self instvar net_ test_ guide_
  591.     set net_ net2
  592.     set test_ impulseMultReportDiscount
  593.     set guide_  "TFRC with feedback four times per round-trip time, discount_ true, ca_ false."
  594.     Agent/TFRCSink set NumFeedback_ 4
  595.     Agent/TFRCSink set discount_ 1
  596.     Agent/TFRC set df_ 0.25
  597.     Agent/TFRC set ca_ 0
  598.     Test/impulseMultReportDiscount instproc run {} [Test/impulseMultReport info instbody run ]
  599.     $self next pktTraceFile
  600. }
  601. # Feedback 4 times per roundtrip time.
  602. Class Test/impulseMultReportDiscountCA -superclass TestSuite
  603. Test/impulseMultReportDiscountCA instproc init {} {
  604.     $self instvar net_ test_ guide_
  605.     set net_ net2
  606.     set test_ impulseMultReportDiscountCA
  607.     set guide_  "TFRC with feedback four times per RTT, discount_ and ca_ true."
  608.     Agent/TFRCSink set NumFeedback_ 4
  609.     Agent/TFRCSink set discount_ 1
  610.     Agent/TFRC set df_ 0.95
  611.     Agent/TFRC set ca_ 1
  612.     Test/impulseMultReportDiscountCA instproc run {} [Test/impulseMultReport info instbody run ]
  613.     $self next pktTraceFile
  614. }
  615. Class Test/impulseMultReportCA -superclass TestSuite
  616. Test/impulseMultReportCA instproc init {} {
  617.     $self instvar net_ test_ guide_
  618.     set net_ net2
  619.     set test_ impulseMultReportCA
  620.     set guide_  "TFRC with feedback four times per RTT, discount_ false, ca_ true." 
  621.     Agent/TFRCSink set NumFeedback_ 4
  622.     Agent/TFRCSink set discount_ 0
  623.     Agent/TFRC set df_ 0.95
  624.     Agent/TFRC set ca_ 1
  625.     Test/impulseMultReportCA instproc run {} [Test/impulseMultReport info instbody run ]
  626.     $self next pktTraceFile
  627. }
  628. Class Test/impulseTcp -superclass TestSuite
  629. Test/impulseTcp instproc init {} {
  630.     $self instvar net_ test_ guide_
  631.     set net_ net2
  632.     set test_ impulseTcp
  633.     set guide_  "TFRC with discount_, smooth_, and ca_ false."
  634.     $self next pktTraceFile
  635. }
  636. Test/impulseTcp instproc run {} {
  637.     global quiet
  638.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  639.     puts "Guide: $guide_"
  640.     $self setTopo
  641.     set interval_ 0.1
  642.     set stopTime 40.0
  643.     set stopTime0 [expr $stopTime - 0.001]
  644.     set stopTime2 [expr $stopTime + 0.001]
  645.     set dumpfile_ [open temp.s w]
  646.     if {$quiet == "false"} {
  647.         set tracefile [open all.tr w]
  648.         $ns_ trace-all $tracefile
  649.     }
  650.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  651.     set ftp1 [$tcp1 attach-app FTP]
  652.     $ns_ at 0.0 "$ftp1 start"
  653.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s4) 1]
  654.     set ftp2 [$tcp2 attach-app FTP]
  655.     $ns_ at 10.0 "$ftp2 start"
  656.     $ns_ at 20.0 "$ftp2 stop"
  657.     $self tfccDump 1 $tcp1 $interval_ $dumpfile_
  658.     $self tfccDump 2 $tcp2 $interval_ $dumpfile_
  659.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  660.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  661.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  662.     if {$quiet == "false"} {
  663. $ns_ at $stopTime2 "close $tracefile"
  664.     }
  665.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  666.     # trace only the bottleneck link
  667.     $ns_ run
  668. }
  669. # Two TFRC connections and three TCP connections.
  670. Class Test/two-friendly -superclass TestSuite
  671. Test/two-friendly instproc init {} {
  672.     $self instvar net_ test_ guide_
  673.     set net_ net2
  674.     set test_ two-friendly
  675.     set guide_  "Two TFRC and three TCP connections, ca_ false."
  676.     Agent/TFRC set df_ 0.25
  677.     Agent/TFRC set ca_ 0
  678.     Agent/TCP set timerfix_ false
  679.     # The default is being changed to true.
  680.     $self next pktTraceFile
  681. }
  682. # Two TFRC connections and three TCP connections.
  683. Class Test/two-friendlyCA -superclass TestSuite
  684. Test/two-friendlyCA instproc init {} {
  685.     $self instvar net_ test_ guide_
  686.     set net_ net2
  687.     set test_ two-friendlyCA
  688.     Agent/TFRCSink set discount_ 0
  689.     set guide_  "Two TFRC and three TCP connections, ca_ true."
  690.     Agent/TFRC set df_ 0.95
  691.     Agent/TFRC set ca_ 1
  692.     Agent/TCP set timerfix_ false
  693.     # The default is being changed to true.
  694.     Test/two-friendlyCA instproc run {} [Test/two-friendly info instbody run ]
  695.     $self next pktTraceFile
  696. }
  697. Test/two-friendly instproc run {} {
  698.     global quiet
  699.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  700.     puts "Guide: $guide_"
  701.     $self setTopo
  702.     set interval_ 0.1
  703.     set stopTime 30.0
  704.     set stopTime0 [expr $stopTime - 0.001]
  705.     set stopTime2 [expr $stopTime + 0.001]
  706.     set dumpfile_ [open temp.s w]
  707.     if {$quiet == "false"} {
  708.         set tracefile [open all.tr w]
  709.         $ns_ trace-all $tracefile
  710.     }
  711.     $self runFriendly 
  712.     $self runTcps
  713.     
  714.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  715.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  716.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  717.     if {$quiet == "false"} {
  718. $ns_ at $stopTime2 "close $tracefile"
  719.     }
  720.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  721.     # trace only the bottleneck link
  722.     $ns_ run
  723. }
  724. # Only TCP
  725. Class Test/OnlyTcp -superclass TestSuite
  726. Test/OnlyTcp instproc init {} {
  727.     $self instvar net_ test_ guide_
  728.     set net_ net2
  729.     set test_ OnlyTcp
  730.     set guide_  "Five TCP connections."
  731.     Agent/TCP set timerfix_ false
  732.     # The default is being changed to true.
  733.     $self next pktTraceFile
  734. }
  735. Test/OnlyTcp instproc run {} {
  736.     global quiet
  737.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  738.     puts "Guide: $guide_"
  739.     $self setTopo
  740.     set interval_ 0.1
  741.     set stopTime 30.0
  742.     set stopTime0 [expr $stopTime - 0.001]
  743.     set stopTime2 [expr $stopTime + 0.001]
  744.     set dumpfile_ [open temp.s w]
  745.     if {$quiet == "false"} {
  746.         set tracefile [open all.tr w]
  747.         $ns_ trace-all $tracefile
  748.     }
  749.     $self runTcp 
  750.     $self runTcps
  751.     
  752.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  753.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  754.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  755.     if {$quiet == "false"} {
  756. $ns_ at $stopTime2 "close $tracefile"
  757.     }
  758.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  759.     # trace only the bottleneck link
  760.     $ns_ run
  761. }
  762. ## Random factor added to sending times
  763. Class Test/randomized -superclass TestSuite
  764. Test/randomized instproc init {} {
  765.     $self instvar net_ test_ guide_
  766.     set net_ net2
  767.     set test_ randomized
  768.     set guide_  "Random delay added to sending times, ca_ false."
  769.     Agent/TFRC set overhead_ 0.5
  770.     Agent/TFRC set df_ 0.25
  771.     Agent/TFRC set ca_ 0
  772.     Test/randomized instproc run {} [Test/slowStart info instbody run]
  773.     $self next pktTraceFile
  774. }
  775. ## Random factor added to sending times
  776. Class Test/randomizedCA -superclass TestSuite
  777. Test/randomizedCA instproc init {} {
  778.     $self instvar net_ test_ guide_
  779.     set net_ net2
  780.     set test_ randomizedCA
  781.     set guide_  "Random delay added to sending times, with ca_."
  782.     Agent/TFRC set overhead_ 0.5
  783.     Agent/TFRC set df_ 0.95
  784.     Agent/TFRC set ca_ 1
  785.     Test/randomizedCA instproc run {} [Test/slowStart info instbody run]
  786.     $self next pktTraceFile
  787. }
  788. ## Smaller random factor added to sending times
  789. Class Test/randomized1 -superclass TestSuite
  790. Test/randomized1 instproc init {} {
  791.     $self instvar net_ test_ guide_
  792.     set net_ net2
  793.     set test_ randomized1
  794.     set guide_  "Smaller random delay added to sending times, ca_ false."
  795.     Agent/TFRC set overhead_ 0.1
  796.     Agent/TFRC set df_ 0.25
  797.     Agent/TFRC set ca_ 0
  798.     Test/randomized1 instproc run {} [Test/slowStart info instbody run]
  799.     $self next pktTraceFile
  800. }
  801. ## Smaller random factor added to sending times
  802. Class Test/randomized1CA -superclass TestSuite
  803. Test/randomized1CA instproc init {} {
  804.     $self instvar net_ test_ guide_
  805.     set net_ net2
  806.     set test_ randomized1CA
  807.     set guide_  "Smaller random delay added to sending times, with ca_."
  808.     Agent/TFRC set overhead_ 0.1
  809.     Agent/TFRC set df_ 0.95
  810.     Agent/TFRC set ca_ 1
  811.     Test/randomized1CA instproc run {} [Test/slowStart info instbody run]
  812.     $self next pktTraceFile
  813. }
  814. Class Test/slow -superclass TestSuite
  815. Test/slow instproc init {} {
  816.     $self instvar net_ test_ guide_
  817.     set net_ net2a
  818.     set test_ slow
  819.     set guide_  "Very slow path."
  820.     Agent/TFRCSink set discount_ 1
  821.     Agent/TFRCSink set smooth_ 1
  822.     Agent/TFRC set df_ 0.95
  823.     Agent/TFRC set ca_ 1
  824.     $self next pktTraceFile
  825. }
  826. Test/slow instproc run {} {
  827.     global quiet
  828.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  829.     puts "Guide: $guide_"
  830.     $self setTopo
  831. #    [$ns_ link $node_(r1) $node_(r2)] set bandwidth 0.001Mb
  832. #    [$ns_ link $node_(r1) $node_(r2)] set queue-limit 5
  833.     set interval_ 100
  834.     set stopTime 4000.0
  835.     set stopTime0 [expr $stopTime - 0.001]
  836.     set stopTime2 [expr $stopTime + 0.001]
  837.     set dumpfile_ [open temp.s w]
  838.     if {$quiet == "false"} {
  839.         set tracefile [open all.tr w]
  840.         $ns_ trace-all $tracefile
  841.     }
  842.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  843.     $ns_ at 0.0 "$tf1 start"
  844.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  845.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  846.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  847.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  848.     if {$quiet == "false"} {
  849. $ns_ at $stopTime2 "close $tracefile"
  850.     }
  851.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  852.     # trace only the bottleneck link
  853.     $ns_ run
  854. }
  855. Class Test/twoDrops -superclass TestSuite
  856. Test/twoDrops instproc init {} {
  857.     $self instvar net_ test_ guide_ drops_ stopTime1_
  858.     set net_ net2
  859.     set test_ twoDrops
  860.     set guide_  "TFRC, with two packets dropped near the beginning."
  861.     Agent/TFRCSink set discount_ 1
  862.     Agent/TFRCSink set smooth_ 1
  863.     Agent/TFRC set df_ 0.95
  864.     Agent/TFRC set ca_ 1
  865.     set drops_ " 2 3 "
  866.     set stopTime1_ 5.0
  867.     $self next pktTraceFile
  868. }
  869. Class Test/manyDrops -superclass TestSuite 
  870. Test/manyDrops instproc init {} { 
  871.     $self instvar net_ test_ guide_ drops_ stopTime1_
  872.     set net_    net2
  873.     set test_   manyDrops 
  874.     set guide_  "TFRC, with many packets dropped in the beginning."
  875.     Agent/TFRCSink set discount_ 1
  876.     Agent/TFRCSink set smooth_ 1
  877.     Agent/TFRC set df_ 0.95
  878.     Agent/TFRC set ca_ 1
  879. ##  set stopTime1_ 100.0
  880.     set stopTime1_ 100.0
  881. #    set drops_ " 0 1 "
  882.     set drops_ " 0 1 2 3 4 5 6 "
  883.     Test/manyDrops instproc run {} [Test/twoDrops info instbody run ]
  884.     $self next pktTraceFile
  885. }
  886. Test/twoDrops instproc run {} {
  887.     global quiet
  888.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ drops_ stopTime1_
  889.     puts "Guide: $guide_"
  890.     $self setTopo
  891.     set interval_ 1
  892.     set stopTime $stopTime1_
  893.     set stopTime0 [expr $stopTime - 0.001]
  894.     set stopTime2 [expr $stopTime + 0.001]
  895.     set dumpfile_ [open temp.s w]
  896.     if {$quiet == "false"} {
  897.         set tracefile [open all.tr w]
  898.         $ns_ trace-all $tracefile
  899.     }
  900.     set em [new ErrorModule Fid]
  901.     set lossylink_ [$ns_ link $node_(r1) $node_(r2)]
  902.     $lossylink_ errormodule $em
  903.     $em default pass
  904.     set emod [$lossylink_ errormodule]
  905.     set errmodel [new ErrorModel/List]
  906.     $errmodel unit pkt
  907.     $errmodel droplist $drops_
  908.     $emod insert $errmodel
  909.     $emod bind $errmodel 0
  910.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  911.     $ns_ at 0.0 "$tf1 start"
  912.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  913.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  914.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  915.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  916.     if {$quiet == "false"} {
  917. $ns_ at $stopTime2 "close $tracefile"
  918.     }
  919.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  920.     # trace only the bottleneck link
  921.     $ns_ run
  922. }
  923. Class Test/HighLoss -superclass TestSuite
  924. Test/HighLoss instproc init {} {
  925.     $self instvar net_ test_ guide_ stopTime1_
  926.     set net_ net2
  927.     set test_ HighLoss
  928.     set guide_  "TFRC competing against a CBR flow, with high loss."
  929.     Agent/TFRCSink set discount_ 1
  930.     Agent/TFRCSink set smooth_ 1
  931.     Agent/TFRC set df_ 0.95
  932.     Agent/TFRC set ca_ 1
  933.     set stopTime1_ 60
  934.     $self next pktTraceFile
  935. }
  936. Test/HighLoss instproc run {} {
  937.     global quiet
  938.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ stopTime1_
  939.     puts "Guide: $guide_"
  940.     $self setTopo
  941.     set interval_ 1
  942.     set stopTime $stopTime1_
  943.     set stopTime0 [expr $stopTime - 0.001]
  944.     set stopTime2 [expr $stopTime + 0.001]
  945.     set dumpfile_ [open temp.s w]
  946.     if {$quiet == "false"} {
  947.         set tracefile [open all.tr w]
  948.         $ns_ trace-all $tracefile
  949.     }
  950.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  951.     $ns_ at 0.0 "$tf1 start"
  952.     set udp1 [$ns_ create-connection UDP $node_(s2) UDP $node_(s4) 1]
  953. set cbr1 [$udp1 attach-app Traffic/CBR]
  954. $cbr1 set rate_ 3Mb
  955. $ns_ at [expr $stopTime1_/3.0] "$cbr1 start"   
  956. $ns_ at [expr 2.0*$stopTime1_/3.0] "$cbr1 stop"   
  957.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  958.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  959.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  960.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  961.     if {$quiet == "false"} {
  962. $ns_ at $stopTime2 "close $tracefile"
  963.     }
  964.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  965.     # trace only the bottleneck link
  966.     $ns_ run
  967. }
  968.   
  969. Class Test/HighLossShort -superclass TestSuite
  970. Test/HighLossShort instproc init {} {
  971.     $self instvar net_ test_ guide_ stopTime1_
  972.     set net_ net2
  973.     set test_ HighLossShort
  974.     set guide_  "TFRC competing against a CBR flow, with high loss, ShortIntervals_."
  975.     Agent/TFRCSink set discount_ 1
  976.     Agent/TFRCSink set smooth_ 1
  977.     Agent/TFRCSink set ShortIntervals_ 1
  978.     Agent/TFRC set df_ 0.95
  979.     Agent/TFRC set ca_ 1
  980.     set stopTime1_ 80
  981.     Test/HighLossShort instproc run {} [Test/HighLoss info instbody run ]
  982.     $self next pktTraceFile
  983. }
  984. # PreciseLoss_ is turned off
  985. Class Test/HighLossImprecise -superclass TestSuite
  986. Test/HighLossImprecise instproc init {} {
  987.     $self instvar net_ test_ guide_ stopTime1_
  988.     set net_ net2
  989.     set test_ HighLossImprecise
  990.     set guide_  "TFRC competing against a CBR flow, with PreciseLoss_ off."
  991.     Agent/TFRCSink set discount_ 1
  992.     Agent/TFRCSink set smooth_ 1
  993.     Agent/TFRC set df_ 0.95
  994.     Agent/TFRC set ca_ 1
  995.     Agent/TFRCSink set PreciseLoss_ 0
  996.     set stopTime1_ 80
  997.     $self next pktTraceFile
  998. }
  999. Test/HighLossImprecise instproc run {} {
  1000.     global quiet
  1001.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ stopTime1_
  1002.     puts "Guide: $guide_"
  1003.     $self setTopo
  1004.     set interval_ 1
  1005.     set stopTime $stopTime1_
  1006.     set stopTime0 [expr $stopTime - 0.001]
  1007.     set stopTime2 [expr $stopTime + 0.001]
  1008.     set dumpfile_ [open temp.s w]
  1009.     if {$quiet == "false"} {
  1010.         set tracefile [open all.tr w]
  1011.         $ns_ trace-all $tracefile
  1012.     }
  1013.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1014.     $ns_ at 0.0 "$tf1 start"
  1015.     set udp1 [$ns_ create-connection UDP $node_(s2) UDP $node_(s4) 1]
  1016. set cbr1 [$udp1 attach-app Traffic/CBR]
  1017. $cbr1 set rate_ 3Mb
  1018. $ns_ at [expr $stopTime1_/4.0] "$cbr1 start"   
  1019. $ns_ at [expr 2.0*$stopTime1_/4.0] "$cbr1 stop"   
  1020.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1021.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1022.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1023.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1024.     if {$quiet == "false"} {
  1025. $ns_ at $stopTime2 "close $tracefile"
  1026.     }
  1027.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1028.     # trace only the bottleneck link
  1029.     $ns_ run
  1030. }
  1031.   
  1032. Class Test/HighLossMinRTO -superclass TestSuite
  1033. Test/HighLossMinRTO instproc init {} {
  1034.     $self instvar net_ test_ guide_ stopTime1_
  1035.     set net_ net2
  1036.     set test_ HighLossMinRTO
  1037.     set guide_  "TFRC competing against a CBR flow, with high loss, high MinRTO."
  1038.     Agent/TFRCSink set discount_ 1
  1039.     Agent/TFRCSink set smooth_ 1
  1040.     Agent/TFRC set df_ 0.95
  1041.     Agent/TFRC set ca_ 1
  1042.     Agent/TFRC set minrto_ 1.0
  1043.     # Minimum RTO of one second.  This slows down the TFRC flow.
  1044.     set stopTime1_ 60
  1045.     Test/HighLossMinRTO instproc run {} [Test/HighLoss info instbody run ]
  1046.     $self next pktTraceFile
  1047. }
  1048.   
  1049. Class Test/HighLossConservative -superclass TestSuite
  1050. Test/HighLossConservative instproc init {} {
  1051.     $self instvar net_ test_ guide_ stopTime1_
  1052.     set net_ net2
  1053.     set test_ HighLossConservative
  1054.     set guide_  "TFRC and CBR, with a conservative_ response to heavy congestion."
  1055.     Agent/TFRCSink set discount_ 1
  1056.     Agent/TFRCSink set smooth_ 1
  1057.     Agent/TFRC set df_ 0.95
  1058.     Agent/TFRC set ca_ 1
  1059.     Agent/TFRC set conservative_ true
  1060.     set stopTime1_ 60
  1061.     # Test/HighLossConservative instproc run {} [Test/HighLoss info instbody run ]
  1062.     $self next pktTraceFile
  1063. }
  1064. Test/HighLossConservative instproc run {} {
  1065.     global quiet
  1066.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ stopTime1_
  1067.     puts "Guide: $guide_"
  1068.     $self setTopo
  1069.     set interval_ 1
  1070.     set stopTime $stopTime1_
  1071.     set stopTime0 [expr $stopTime - 0.001]
  1072.     set stopTime2 [expr $stopTime + 0.001]
  1073.     set dumpfile_ [open temp.s w]
  1074.     if {$quiet == "false"} {
  1075.         set tracefile [open all.tr w]
  1076.         $ns_ trace-all $tracefile
  1077.     }
  1078.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1079.     $ns_ at 0.0 "$tf1 start"
  1080.     set udp1 [$ns_ create-connection UDP $node_(s2) UDP $node_(s4) 1]
  1081. set cbr1 [$udp1 attach-app Traffic/CBR]
  1082. $cbr1 set rate_ 3Mb
  1083. $ns_ at [expr $stopTime1_/3.0] "$cbr1 start"   
  1084. $ns_ at [expr 2.0*$stopTime1_/3.0] "$cbr1 stop"   
  1085.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1086.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1087.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1088.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1089.     if {$quiet == "false"} {
  1090. $ns_ at $stopTime2 "close $tracefile"
  1091.     }
  1092.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1093.     # trace only the bottleneck link
  1094.     $ns_ run
  1095. }
  1096. Class Test/HighLossTCP -superclass TestSuite
  1097. Test/HighLossTCP instproc init {} {
  1098.     $self instvar net_ test_ guide_ stopTime1_
  1099.     set net_ net2
  1100.     set test_ HighLossTCP
  1101.     set guide_  "TCP competing against a CBR flow."
  1102.     Agent/TFRCSink set discount_ 1
  1103.     Agent/TFRCSink set smooth_ 1
  1104.     Agent/TFRC set df_ 0.95
  1105.     Agent/TFRC set ca_ 1
  1106.     set stopTime1_ 60
  1107.     $self next pktTraceFile
  1108. }
  1109. Test/HighLossTCP instproc run {} {
  1110.     global quiet
  1111.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ stopTime1_
  1112.     puts "Guide: $guide_"
  1113.     $self setTopo
  1114.     set interval_ 1
  1115.     set stopTime $stopTime1_
  1116.     set stopTime0 [expr $stopTime - 0.001]
  1117.     set stopTime2 [expr $stopTime + 0.001]
  1118.     set dumpfile_ [open temp.s w]
  1119.     if {$quiet == "false"} {
  1120.         set tracefile [open all.tr w]
  1121.         $ns_ trace-all $tracefile
  1122.     }
  1123.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  1124.     set ftp1 [$tcp1 attach-app FTP]
  1125.     $ns_ at 0.0 "$ftp1 start"
  1126.     set udp1 [$ns_ create-connection UDP $node_(s2) UDP $node_(s4) 1]
  1127. set cbr1 [$udp1 attach-app Traffic/CBR]
  1128. $cbr1 set rate_ 3Mb
  1129. $ns_ at [expr $stopTime1_/3.0] "$cbr1 start"   
  1130. $ns_ at [expr 2.0*$stopTime1_/3.0] "$cbr1 stop"   
  1131.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1132.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1133.     $ns_ at $stopTime "$self cleanupAll $testName_"
  1134.     if {$quiet == "false"} {
  1135. $ns_ at $stopTime2 "close $tracefile"
  1136.     }
  1137.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1138.     # trace only the bottleneck link
  1139.     $ns_ run
  1140. }
  1141.   
  1142. Class Test/TFRC_FTP -superclass TestSuite
  1143. Test/TFRC_FTP instproc init {} {
  1144.     $self instvar net_ test_ guide_ stopTime1_
  1145.     set net_ net2
  1146.     set test_ TFRC_FTP
  1147.     set guide_  "TFRC with a data source with limited, bursty data."
  1148.     Agent/TFRC set SndrType_ 1 
  1149.     Agent/TFRCSink set smooth_ 1
  1150.     Agent/TFRC set df_ 0.95
  1151.     Agent/TFRC set ca_ 1
  1152.     Agent/TFRC set discount_ 1
  1153.     Agent/TCP set oldCode_ false
  1154.     Agent/TFRC set idleFix_ true ;
  1155.     set stopTime1_ 15
  1156.     $self next pktTraceFile
  1157. }
  1158. Test/TFRC_FTP instproc run {} {
  1159.     global quiet
  1160.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ stopTime1_
  1161.     puts "Guide: $guide_"
  1162.     $self setTopo
  1163.     set interval_ 1
  1164.     set stopTime $stopTime1_
  1165.     set stopTime0 [expr $stopTime - 0.001]
  1166.     set stopTime2 [expr $stopTime + 0.001]
  1167.     set dumpfile_ [open temp.s w]
  1168.     if {$quiet == "false"} {
  1169.         set tracefile [open all.tr w]
  1170.         $ns_ trace-all $tracefile
  1171.     }
  1172.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1173.     set ftp [new Application/FTP]
  1174.     $ftp attach-agent $tf1
  1175.     $ns_ at 0 "$ftp produce 100"
  1176.     $ns_ at 5 "$ftp producemore 100"
  1177.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1178.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1179.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1180.     if {$quiet == "false"} {
  1181. $ns_ at $stopTime2 "close $tracefile"
  1182.     }
  1183.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1184.     # trace only the bottleneck link
  1185.     $ns_ run
  1186. }
  1187.   
  1188. Class Test/TFRC_CBR -superclass TestSuite
  1189. Test/TFRC_CBR instproc init {} {
  1190.     $self instvar net_ test_ guide_ stopTime1_
  1191.     set net_ net2
  1192.     set test_ TFRC_CBR
  1193.     set guide_  "TFRC with a data source with CBR data."
  1194.     Agent/TFRC set SndrType_ 1 
  1195.     Agent/TFRCSink set smooth_ 1
  1196.     Agent/TFRC set df_ 0.95
  1197.     Agent/TFRC set ca_ 1
  1198.     Agent/TFRC set discount_ 1
  1199.     Agent/TCP set oldCode_ false
  1200.     set stopTime1_ 15
  1201.     $self next pktTraceFile
  1202. }
  1203. Test/TFRC_CBR instproc run {} {
  1204.     global quiet
  1205.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ stopTime1_
  1206.     puts "Guide: $guide_"
  1207.     $self setTopo
  1208.     set interval_ 1
  1209.     set stopTime $stopTime1_
  1210.     set stopTime0 [expr $stopTime - 0.001]
  1211.     set stopTime2 [expr $stopTime + 0.001]
  1212.     set dumpfile_ [open temp.s w]
  1213.     if {$quiet == "false"} {
  1214.         set tracefile [open all.tr w]
  1215.         $ns_ trace-all $tracefile
  1216.     }
  1217.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1218.     set cbr [new Application/Traffic/CBR]
  1219.     $cbr attach-agent $tf1
  1220.     $cbr set rate_ 10Kb
  1221.     $ns_ at 0 "$cbr start"
  1222.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1223.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1224.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1225.     if {$quiet == "false"} {
  1226. $ns_ at $stopTime2 "close $tracefile"
  1227.     }
  1228.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1229.     # trace only the bottleneck link
  1230.     $ns_ run
  1231. }
  1232.   
  1233. Class Test/printLosses -superclass TestSuite
  1234. Test/printLosses instproc init {} {
  1235.     $self instvar net_ test_ guide_
  1236.     set net_ net2
  1237.     set test_ printLosses
  1238.     set guide_  "One TFRC flow, with the loss intervals from the TFRC receiver."
  1239.     Agent/TFRCSink set printLosses_ 1
  1240.     Agent/TFRCSink set printLoss_ 1
  1241.     $self next pktTraceFile
  1242. }
  1243. Test/printLosses instproc run {} {
  1244.     global quiet
  1245.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  1246.     puts "Guide: $guide_"
  1247.     $self setTopo
  1248.     set interval_ 0.1
  1249.     set stopTime 3.0
  1250.     set stopTime0 [expr $stopTime - 0.001]
  1251.     set stopTime2 [expr $stopTime + 0.001]
  1252.     set dumpfile_ [open temp.s w]
  1253.     if {$quiet == "false"} {
  1254.         set tracefile [open all.tr w]
  1255.         $ns_ trace-all $tracefile
  1256.     }
  1257.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1258.     $ns_ at 0.0 "$tf1 start"
  1259.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1260.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1261.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1262.     $ns_ at $stopTime "$self cleanupAll $testName_"
  1263.     if {$quiet == "false"} {
  1264. $ns_ at $stopTime2 "close $tracefile"
  1265.     }
  1266.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1267.     # trace only the bottleneck link
  1268.     $ns_ run
  1269. }
  1270. #
  1271. # This test shows that a few lost packets are not counted as lost
  1272. #   by the losses array.  I think this is for sequential packet losses.
  1273. #
  1274. Class Test/printLossesShort -superclass TestSuite
  1275. Test/printLossesShort instproc init {} {
  1276.     $self instvar net_ test_ guide_
  1277.     set net_ net2
  1278.     set test_ printLossesShort
  1279.     set guide_  "A TFRC-SP flow with ShortIntervals_, loss intervals from the TFRC receiver."
  1280.     $self next pktTraceFile
  1281. }
  1282. Test/printLossesShort instproc run {} {
  1283.     global quiet
  1284.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  1285.     puts "Guide: $guide_"
  1286.     $self setTopo
  1287.     set interval_ 0.1
  1288.     set stopTime 4.0
  1289.     set stopTime0 [expr $stopTime - 0.001]
  1290.     set stopTime2 [expr $stopTime + 0.001]
  1291.     set dumpfile_ [open temp.s w]
  1292.     if {$quiet == "false"} {
  1293.         set tracefile [open all.tr w]
  1294.         $ns_ trace-all $tracefile
  1295.     }
  1296.     # set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1297.     set tf1 [new Agent/TFRC]
  1298.     set tf1Dest [new Agent/TFRCSink]
  1299.     $tf1 set fid_ 0
  1300.     $tf1 set voip_ 1
  1301.     $tf1 set packetSize_ 125
  1302.     $tf1Dest set ShortIntervals_ 1
  1303.     $tf1Dest set fid_ 0
  1304.     $ns_ attach-agent $node_(s1) $tf1
  1305.     $ns_ attach-agent $node_(s3) $tf1Dest
  1306.     $tf1Dest set printLosses_ 1
  1307.     $tf1Dest set printLoss_ 1
  1308.     $ns_ connect $tf1 $tf1Dest
  1309.     set cbr0 [new Application/Traffic/CBR]
  1310.     $cbr0 set packetSize_ 125
  1311.     $cbr0 set interval_ 0.02
  1312.     $cbr0 attach-agent $tf1
  1313.     $ns_ at 0.0 "$cbr0 start"
  1314.     set tf2 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 1]
  1315.     $ns_ at 0.2 "$tf2 start"
  1316.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1317.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1318.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1319.     $ns_ at $stopTime "$self cleanupAll $testName_"
  1320.     if {$quiet == "false"} {
  1321. $ns_ at $stopTime2 "close $tracefile"
  1322.     }
  1323.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1324.     # trace only the bottleneck link
  1325.     $ns_ run
  1326. }
  1327. Class Test/printLossesShort3 -superclass TestSuite
  1328. Test/printLossesShort3 instproc init {} {
  1329.     $self instvar net_ test_ guide_
  1330.     set net_ net2
  1331.     set test_ printLossesShort3
  1332.     set guide_  "A TFRC-SP flow with ShortIntervals_ 3, loss intervals from the TFRC receiver."
  1333.     $self next pktTraceFile
  1334. }
  1335. Test/printLossesShort3 instproc run {} {
  1336.     global quiet
  1337.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_
  1338.     puts "Guide: $guide_"
  1339.     $self setTopo
  1340.     set interval_ 0.1
  1341.     set stopTime 4.0
  1342.     set stopTime0 [expr $stopTime - 0.001]
  1343.     set stopTime2 [expr $stopTime + 0.001]
  1344.     set dumpfile_ [open temp.s w]
  1345.     if {$quiet == "false"} {
  1346.         set tracefile [open all.tr w]
  1347.         $ns_ trace-all $tracefile
  1348.     }
  1349.     # set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1350.     set tf1 [new Agent/TFRC]
  1351.     set tf1Dest [new Agent/TFRCSink]
  1352.     $tf1 set fid_ 0
  1353.     $tf1 set voip_ 1
  1354.     $tf1 set packetSize_ 125
  1355.     $tf1Dest set ShortIntervals_ 3
  1356.     $tf1Dest set ShortRtts_ 3 
  1357.     $tf1Dest set fid_ 0
  1358.     $ns_ attach-agent $node_(s1) $tf1
  1359.     $ns_ attach-agent $node_(s3) $tf1Dest
  1360.     $tf1Dest set printLosses_ 1
  1361.     $tf1Dest set printLoss_ 1
  1362.     $ns_ connect $tf1 $tf1Dest
  1363.     set cbr0 [new Application/Traffic/CBR]
  1364.     $cbr0 set packetSize_ 125
  1365.     $cbr0 set interval_ 0.02
  1366.     $cbr0 attach-agent $tf1
  1367.     $ns_ at 0.0 "$cbr0 start"
  1368.     set tf2 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 1]
  1369.     $ns_ at 0.2 "$tf2 start"
  1370.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1371.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1372.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1373.     $ns_ at $stopTime "$self cleanupAll $testName_"
  1374.     if {$quiet == "false"} {
  1375. $ns_ at $stopTime2 "close $tracefile"
  1376.     }
  1377.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1378.     # trace only the bottleneck link
  1379.     $ns_ run
  1380. }
  1381. TestSuite instproc printpkts { label tcp } {
  1382.         puts "tcp $label highest_seqment_acked [$tcp set ack_]"
  1383. }
  1384. TestSuite instproc printTFRCpkts { label src } {
  1385.         puts "tfrc $label [$src set ndatapack_] " 
  1386. }
  1387. Class Test/goodTFRC superclass TestSuite
  1388. Test/goodTFRC instproc init {} {
  1389.     $self instvar net_ test_ guide_ period_
  1390.     set net_ net2
  1391.     set test_ goodTFRC
  1392.     set guide_  "One TFRC flow, no reordering and no extra drops."
  1393.     set period_ 10000.0
  1394.     $self next pktTraceFile
  1395. }
  1396. Test/goodTFRC instproc run {} {
  1397.     global quiet
  1398.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  1399.     puts "Guide: $guide_"
  1400.     $self setTopo
  1401.     set interval_ 0.1
  1402.     set stopTime 20.0
  1403.     set stopTime0 [expr $stopTime - 0.001]
  1404.     set stopTime2 [expr $stopTime + 0.001]
  1405.     set dumpfile_ [open temp.s w]
  1406.     if {$quiet == "false"} {
  1407.         set tracefile [open all.tr w]
  1408.         $ns_ trace-all $tracefile
  1409.     }
  1410.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1411.     $ns_ at 0.0 "$tf1 start"
  1412.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  1413.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1414.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1415.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1416.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1417.     if {$quiet == "false"} {
  1418. $ns_ at $stopTime2 "close $tracefile"
  1419.     }
  1420.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1421.     # $ns_ at $stopTime0 "$self printTFRCpkts 0 $tf1"
  1422.     # trace only the bottleneck link
  1423.     $ns_ run
  1424. }
  1425. Class Test/droppedTFRC superclass TestSuite
  1426. Test/droppedTFRC instproc init {} {
  1427.     $self instvar net_ test_ guide_ list_ period_
  1428.     set net_    net2
  1429.     set test_   droppedTFRC
  1430.     set guide_  "One TFRC flow, with extra dropped packets."
  1431.     set period_ 40.0
  1432.     Test/droppedTFRC instproc run {} [Test/goodTFRC info instbody run ]
  1433.     $self next pktTraceFile
  1434. }
  1435. Class Test/delayedTFRC superclass TestSuite
  1436. Test/delayedTFRC instproc init {} {
  1437.     $self instvar net_ test_ guide_ list_ period_
  1438.     set net_    net2
  1439.     set test_   delayedTFRC
  1440.     set guide_  "One TFRC flow, with some packets delayed 0.03 seconds, numPkts_ 1."
  1441.     set period_ 40.0
  1442.     ErrorModel set delay_pkt_ true
  1443.     ErrorModel set drop_ false
  1444.     ErrorModel set delay_ 0.03
  1445.     Agent/TFRCSink set numPkts_ 1
  1446.     Test/delayedTFRC instproc run {} [Test/goodTFRC info instbody run ]
  1447.     $self next pktTraceFile
  1448. }
  1449. Class Test/delayedTFRC1 superclass TestSuite
  1450. Test/delayedTFRC1 instproc init {} {
  1451.     $self instvar net_ test_ guide_ list_ period_
  1452.     set net_    net2
  1453.     set test_   delayedTFRC1
  1454.     set guide_  "One TFRC flow, with some packets delayed 0.03 seconds, numPkts_ 5."
  1455.     set period_ 40.0
  1456.     ErrorModel set delay_pkt_ true
  1457.     ErrorModel set drop_ false
  1458.     ErrorModel set delay_ 0.03
  1459.     Agent/TFRCSink set numPkts_ 5
  1460.     Test/delayedTFRC1 instproc run {} [Test/goodTFRC info instbody run ]
  1461.     $self next pktTraceFile
  1462. }
  1463. Class Test/delayedTFRC2 superclass TestSuite
  1464. Test/delayedTFRC2 instproc init {} {
  1465.     $self instvar net_ test_ guide_ list_ period_
  1466.     set net_    net2
  1467.     set test_   delayedTFRC2
  1468.     set guide_  "One TFRC flow, with some packets delayed 0.01 seconds, numPkts_ 3."
  1469.     set period_ 40.0
  1470.     ErrorModel set delay_pkt_ true
  1471.     ErrorModel set drop_ false
  1472.     ErrorModel set delay_ 0.01
  1473.     Agent/TFRCSink set numPkts_ 3
  1474.     Test/delayedTFRC2 instproc run {} [Test/goodTFRC info instbody run ]
  1475.     $self next pktTraceFile
  1476. }
  1477. Class Test/goodTCP superclass TestSuite
  1478. Test/goodTCP instproc init {} {
  1479.     $self instvar net_ test_ guide_ list_ period_
  1480.     set net_ net2
  1481.     set test_ goodTCP
  1482.     set guide_  "One TCP flow, no reordering and no extra drops."
  1483.     set list_ {50000 50001}
  1484.     set period_ 1000.0
  1485.     $self next pktTraceFile
  1486. }
  1487. Test/goodTCP instproc run {} {
  1488.     global quiet
  1489.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ list_ period_
  1490.     puts "Guide: $guide_"
  1491.     $self setTopo
  1492.     set interval_ 0.1
  1493.     set stopTime 20.0
  1494.     set stopTime0 [expr $stopTime - 0.001]
  1495.     set stopTime2 [expr $stopTime + 0.001]
  1496.     set dumpfile_ [open temp.s w]
  1497.     if {$quiet == "false"} {
  1498.         set tracefile [open all.tr w]
  1499.         $ns_ trace-all $tracefile
  1500.     }
  1501.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0]
  1502.     set ftp1 [$tcp1 attach-app FTP]
  1503.     $ns_ at 0.0 "$ftp1 start"
  1504.     $self pktsDump 1 $tcp1 $interval_ $dumpfile_
  1505.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 200.0 $period_
  1506.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1507.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1508.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1509.     if {$quiet == "false"} {
  1510. $ns_ at $stopTime2 "close $tracefile"
  1511.     }
  1512.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1513.     $ns_ at $stopTime0 "$self printpkts 0 $tcp1"
  1514.     # trace only the bottleneck link
  1515.     $ns_ run
  1516. }
  1517. Class Test/droppedTCP superclass TestSuite
  1518. Test/droppedTCP instproc init {} {
  1519.     $self instvar net_ test_ guide_ list_ period_
  1520.     set net_    net2
  1521.     set test_   droppedTCP
  1522.     set guide_  "One TCP flow, with extra dropped packets."
  1523.     set period_ 40.0
  1524.     Test/droppedTCP instproc run {} [Test/goodTCP info instbody run ]
  1525.     $self next pktTraceFile
  1526. }
  1527. Class Test/delayedTCP superclass TestSuite
  1528. Test/delayedTCP instproc init {} {
  1529.     $self instvar net_ test_ guide_ list_ period_
  1530.     set net_    net2
  1531.     set test_   delayedTCP
  1532.     set guide_  "One TCP flow, with some packets delayed 0.03 seconds."
  1533.     set period_ 40.0
  1534.     ErrorModel set delay_pkt_ true
  1535.     ErrorModel set drop_ false
  1536.     ErrorModel set delay_ 0.03
  1537.     Test/delayedTCP instproc run {} [Test/goodTCP info instbody run ]
  1538.     $self next pktTraceFile
  1539. }
  1540. Class Test/delayedTCP2 superclass TestSuite
  1541. Test/delayedTCP2 instproc init {} {
  1542.     $self instvar net_ test_ guide_ list_ period_
  1543.     set net_    net2
  1544.     set test_   delayedTCP2
  1545.     set guide_  "One TCP flow, with some packets delayed 0.01 seconds."
  1546.     set period_ 40.0
  1547.     ErrorModel set delay_pkt_ true
  1548.     ErrorModel set drop_ false
  1549.     ErrorModel set delay_ 0.01
  1550.     Test/delayedTCP2 instproc run {} [Test/goodTCP info instbody run ]
  1551.     $self next pktTraceFile
  1552. }
  1553. Class Test/initRate superclass TestSuite
  1554. Test/initRate instproc init {} {
  1555.     $self instvar net_ test_ guide_ period_
  1556.     set net_ net2
  1557.     set test_ initRate
  1558.     set guide_  "One TFRC flow, initial rate of one packet per RTT."
  1559.     set period_ 10000.0
  1560.     Agent/TFRC set rate_init_ 1 
  1561.     Agent/TFRC set rate_init_option_ 1
  1562.     $self next pktTraceFile
  1563. }
  1564. Test/initRate instproc run {} {
  1565.     global quiet
  1566.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  1567.     puts "Guide: $guide_"
  1568.     $self setTopo
  1569.     Agent/TFRC set SndrType_ 1
  1570.     Agent/TFRC set idleFix_ true ;
  1571.     set interval_ 0.1
  1572.     set stopTime 2.0
  1573.     set stopTime0 [expr $stopTime - 0.001]
  1574.     set stopTime2 [expr $stopTime + 0.001]
  1575.     set dumpfile_ [open temp.s w]
  1576.     if {$quiet == "false"} {
  1577.         set tracefile [open all.tr w]
  1578.         $ns_ trace-all $tracefile
  1579.     }
  1580.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1581.     set ftp [new Application/FTP]
  1582.     $ftp attach-agent $tf1
  1583.     $ns_ at 0 "$ftp produce 50"
  1584.     $ns_ at 1.5 "$ftp producemore 50"
  1585.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  1586.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1587.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1588.     #$self traceQueues $node_(r1) [$self openTrace $stopTime $testName_]
  1589.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1590.     if {$quiet == "false"} {
  1591. $ns_ at $stopTime2 "close $tracefile"
  1592.     }
  1593.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1594.     # $ns_ at $stopTime0 "$self printTFRCpkts 0 $tf1"
  1595.     # trace only the bottleneck link
  1596.     $ns_ run
  1597. }
  1598. Class Test/initRateLarge superclass TestSuite
  1599. Test/initRateLarge instproc init {} {
  1600.     $self instvar net_ test_ guide_ period_
  1601.     set net_ net2
  1602.     set test_ initRateLarge
  1603.     set guide_  "One TFRC flow, initial rate of 4 packets per RTT."
  1604.     set period_ 10000.0
  1605.     Agent/TFRC set rate_init_ 4.0 
  1606.     Agent/TFRC set rate_init_option_ 1
  1607.     Test/initRateLarge instproc run {} [Test/initRate info instbody run ]
  1608.     $self next pktTraceFile
  1609. }
  1610. Class Test/initRateLarger superclass TestSuite
  1611. Test/initRateLarger instproc init {} {
  1612.     $self instvar net_ test_ guide_ period_
  1613.     set net_ net2
  1614.     set test_ initRateLarger
  1615.     set guide_  "One TFRC flow, initial rate of 8 packets per RTT."
  1616.     set period_ 10000.0
  1617.     Agent/TFRC set rate_init_ 8.0 
  1618.     Agent/TFRC set rate_init_option_ 1
  1619.     Test/initRateLarger instproc run {} [Test/initRate info instbody run ]
  1620.     $self next pktTraceFile
  1621. }
  1622. Class Test/initRateRFC3390 superclass TestSuite
  1623. Test/initRateRFC3390 instproc init {} {
  1624.     $self instvar net_ test_ guide_ period_
  1625.     set net_ net2
  1626.     set test_ initRateRFC3390
  1627.     set guide_  "One TFRC flow, initial rate from RFC 3390."
  1628.     set period_ 10000.0
  1629.     Agent/TFRC set rate_init_option_ 2
  1630.     Test/initRateRFC3390 instproc run {} [Test/initRate info instbody run ]
  1631.     $self next pktTraceFile
  1632. }
  1633. TestSuite instproc printdrops { fid fmon } {
  1634.         set fcl [$fmon classifier]; # flow classifier
  1635.         #
  1636.         set flow [$fcl lookup auto 0 0 $fid]
  1637.         puts "fid: $fid drops [$flow set pdrops_] marks [$flow set pmarks_]"
  1638.         puts "fid: $fid packets [$flow set pdepartures_] _bytes [$flow set bdepartures_]"
  1639. }
  1640. Class Test/tfrcOnly superclass TestSuite
  1641. Test/tfrcOnly instproc init {} {
  1642.     $self instvar net_ test_ guide_ 
  1643.     set net_ net2d
  1644.     set test_ tfrcOnly
  1645.     set guide_  "One VoIP TFRC flow."
  1646.     Agent/TFRC set voip_ 1
  1647.     Agent/TFRCSink set ShortIntervals_ 1
  1648.     $self next pktTraceFile
  1649. }
  1650. Test/tfrcOnly instproc run {} {
  1651.     global quiet
  1652.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ 
  1653.     puts "Guide: $guide_"
  1654.     $self setTopo
  1655.     set interval_ 0.1
  1656.     set stopTime 20.0
  1657.     set stopTime0 [expr $stopTime - 0.001]
  1658.     set stopTime2 [expr $stopTime + 0.001]
  1659.     set pktsize 120
  1660.     set cbrInterval 0.01
  1661.     set slink [$ns_ link $node_(r1) $node_(r2)]; # link to collect stats on
  1662.     set fmon [$ns_ makeflowmon Fid]
  1663.     $ns_ attach-fmon $slink $fmon    
  1664.     set dumpfile_ [open temp.s w]
  1665.     if {$quiet == "false"} {
  1666.         set tracefile [open all.tr w]
  1667.         $ns_ trace-all $tracefile
  1668.     }
  1669.     $ns_ at 0.0 "$ns_ bandwidth $node_(r1) $node_(r2) 0.2Mbps duplex"
  1670.     $ns_ queue-limit $node_(r1) $node_(r2) 50
  1671.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1672.     $tf1 set packetSize_ $pktsize
  1673.     set cbr [new Application/Traffic/CBR]
  1674.     $cbr set packetSize_ $pktsize
  1675.     $cbr set interval_ $cbrInterval
  1676.     $cbr attach-agent $tf1
  1677.     $ns_ at 2.0 "$cbr start"
  1678.     $ns_ at $stopTime0 "$cbr stop"
  1679.     $self tfccDump 1 $tf1 $interval_ $dumpfile_ 
  1680.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1681.     $ns_ at $stopTime0 "$self printdrops 0 $fmon"
  1682.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1683.     if {$quiet == "false"} {
  1684. $ns_ at $stopTime2 "close $tracefile"
  1685.     }
  1686.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1687.     # trace only the bottleneck link
  1688.     $ns_ run
  1689. }
  1690. Class Test/tfrcOnlyHighLoss superclass TestSuite
  1691. Test/tfrcOnlyHighLoss instproc init {} {
  1692.     $self instvar net_ test_ guide_ voip
  1693.     set net_ net2d
  1694.     set test_ tfrcOnlyHighLoss
  1695.     set guide_  "One VoIP TFRC flow, high loss."
  1696.     Agent/TFRC set voip_ 1
  1697.     Agent/TFRCSink set ShortIntervals_ 1
  1698.     $self next pktTraceFile
  1699. }
  1700. Test/tfrcOnlyHighLoss instproc run {} {
  1701.     global quiet
  1702.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ voip
  1703.     puts "Guide: $guide_"
  1704.     $self setTopo
  1705.     set interval_ 0.1
  1706.     set stopTime 20.0
  1707.     set stopTime0 [expr $stopTime - 0.001]
  1708.     set stopTime2 [expr $stopTime + 0.001]
  1709.     set pktsize 120
  1710.     set cbrInterval 0.01
  1711.     set droprate 0.2
  1712.     set slink [$ns_ link $node_(r1) $node_(r2)]; # link to collect stats on
  1713.     set fmon [$ns_ makeflowmon Fid]
  1714.     $ns_ attach-fmon $slink $fmon    
  1715.     set lossylink_ [$ns_ link $node_(r1) $node_(r2)]
  1716.     set em [new ErrorModule Fid]
  1717.     set errmodel [new ErrorModel/Uniform $droprate pkt ]
  1718.     $lossylink_ errormodule $em
  1719.     $em insert $errmodel
  1720.     $em bind $errmodel 0 5
  1721.     $em default pass
  1722.     set dumpfile_ [open temp.s w]
  1723.     if {$quiet == "false"} {
  1724.         set tracefile [open all.tr w]
  1725.         $ns_ trace-all $tracefile
  1726.     }
  1727.     $ns_ at 0.0 "$ns_ bandwidth $node_(r1) $node_(r2) 0.2Mbps duplex"
  1728.     $ns_ queue-limit $node_(r1) $node_(r2) 50
  1729.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1730.     $tf1 set packetSize_ $pktsize
  1731.     set cbr [new Application/Traffic/CBR]
  1732.     $cbr set packetSize_ $pktsize
  1733.     $cbr set interval_ $cbrInterval
  1734.     $cbr attach-agent $tf1
  1735.     $ns_ at 2.0 "$cbr start"
  1736.     $ns_ at $stopTime0 "$cbr stop"
  1737.     $self tfccDump 1 $tf1 $interval_ $dumpfile_ 
  1738.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1739.     $ns_ at $stopTime0 "$self printdrops 0 $fmon"
  1740.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1741.     if {$quiet == "false"} {
  1742. $ns_ at $stopTime2 "close $tracefile"
  1743.     }
  1744.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1745.     # trace only the bottleneck link
  1746.     $ns_ run
  1747. }
  1748. Class Test/tfrcOnlyHighLoss1 superclass TestSuite
  1749. Test/tfrcOnlyHighLoss1 instproc init {} {
  1750.     $self instvar net_ test_ guide_ voip
  1751.     set net_ net2d
  1752.     set test_ tfrcOnlyHighLoss1
  1753.     set guide_  "One VoIP TFRC flow, high loss, old measurement of loss event rate."
  1754.     Agent/TFRC set voip_ 1
  1755.     Agent/TFRCSink set ShortIntervals_ 11
  1756.     Test/tfrcOnlyHighLoss1 instproc run {} [Test/tfrcOnlyHighLoss info instbody run ]
  1757.     $self next pktTraceFile
  1758. }
  1759. Class Test/voip superclass TestSuite
  1760. Test/voip instproc init {} {
  1761.     $self instvar net_ test_ guide_ 
  1762.     set net_ net2d
  1763.     set test_ voip
  1764.     set guide_  "One VoIP TFRC flow and one TCP flow, different packet sizes."
  1765.     Agent/TFRC set voip_ 1
  1766.     Agent/TFRCSink set ShortIntervals_ 1
  1767.     $self next pktTraceFile
  1768. }
  1769. Test/voip instproc run {} {
  1770.     global quiet
  1771.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ 
  1772.     puts "Guide: $guide_"
  1773.     $self setTopo
  1774.     set interval_ 0.1
  1775.     set stopTime 20.0
  1776.     set stopTime0 [expr $stopTime - 0.001]
  1777.     set stopTime2 [expr $stopTime + 0.001]
  1778.     set pktsize 120
  1779.     set cbrInterval 0.01
  1780.     set slink [$ns_ link $node_(r1) $node_(r2)]; # link to collect stats on
  1781.     set fmon [$ns_ makeflowmon Fid]
  1782.     $ns_ attach-fmon $slink $fmon    
  1783.     set dumpfile_ [open temp.s w]
  1784.     if {$quiet == "false"} {
  1785.         set tracefile [open all.tr w]
  1786.         $ns_ trace-all $tracefile
  1787.     }
  1788.     $ns_ at 0.0 "$ns_ bandwidth $node_(r1) $node_(r2) 0.2Mbps duplex"
  1789.     $ns_ queue-limit $node_(r1) $node_(r2) 50 
  1790.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1791.     $tf1 set packetSize_ $pktsize
  1792.     set cbr [new Application/Traffic/CBR]
  1793.     $cbr set packetSize_ $pktsize
  1794.     $cbr set interval_ $cbrInterval
  1795.     $cbr attach-agent $tf1
  1796.     $ns_ at 2.0 "$cbr start"
  1797.     $ns_ at $stopTime0 "$cbr stop"
  1798.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s4) 1]
  1799.     $tcp1 set window_ 10
  1800.     $tcp1 set packetSize_ 1460
  1801.     set ftp1 [$tcp1 attach-app FTP]
  1802.     $ns_ at 0.0 "$ftp1 start"
  1803.     $ns_ at $stopTime0 "$ftp1 stop"
  1804.     $self tfccDump 1 $tf1 $interval_ $dumpfile_ 
  1805.     $self pktsDump 2 $tcp1 $interval_ $dumpfile_
  1806.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1807.     $ns_ at $stopTime0 "$self printdrops 0 $fmon; $self printdrops 1 $fmon"
  1808.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1809.     if {$quiet == "false"} {
  1810. $ns_ at $stopTime2 "close $tracefile"
  1811.     }
  1812.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1813.     # trace only the bottleneck link
  1814.     $ns_ run
  1815. }
  1816. Class Test/voipHeader superclass TestSuite
  1817. Test/voipHeader instproc init {} {
  1818.     $self instvar net_ test_ guide_ 
  1819.     set net_ net2d
  1820.     set test_ voip
  1821.     set guide_  "One VoIP TFRC flow with headers, and one TCP flow."
  1822.     Agent/TFRC set useHeaders_ true ; 
  1823.     Agent/TFRC set headersize_ 32;
  1824.     Agent/TFRC set voip_ 1
  1825.     Agent/TFRCSink set ShortIntervals_ 1
  1826.     Test/voipHeader instproc run {} [Test/voip info instbody run ]
  1827.     $self next pktTraceFile
  1828. }
  1829. Class Test/voipNoHeader superclass TestSuite
  1830. Test/voipNoHeader instproc init {} {
  1831.     $self instvar net_ test_ guide_ 
  1832.     set net_ net2d
  1833.     set test_ voip
  1834.     set guide_  "One VoIP TFRC flow without headers, and one TCP flow."
  1835.     Agent/TFRC set useHeaders_ false ; 
  1836.     Agent/TFRC set headersize_ 32;
  1837.     Agent/TFRC set voip_ 1
  1838.     Agent/TFRCSink set ShortIntervals_ 1
  1839.     Test/voipNoHeader instproc run {} [Test/voip info instbody run ]
  1840.     $self next pktTraceFile
  1841. }
  1842. Class Test/voipEcn superclass TestSuite
  1843. Test/voipEcn instproc init {} {
  1844.     $self instvar net_ test_ guide_ 
  1845.     set net_ net2d
  1846.     set test_ voipEcn
  1847.     set guide_  "One ECN VoIP TFRC flow and one TCP flow, different packet sizes."
  1848.     Agent/TFRC set useHeaders_ false ; 
  1849.     Agent/TFRC set ecn_ 1
  1850.     Agent/TFRC set voip_ 1
  1851.     Agent/TFRCSink set ShortIntervals_ 1
  1852.     Agent/TCP set ecn_ 1
  1853.     Queue/RED set setbit_ true
  1854.     Test/voipEcn instproc run {} [Test/voip info instbody run ]
  1855.     $self next pktTraceFile
  1856. }
  1857. Class Test/noVoip superclass TestSuite
  1858. Test/noVoip instproc init {} {
  1859.     $self instvar net_ test_ guide_ 
  1860.     set net_ net2d
  1861.     set test_ noVoip
  1862.     set guide_  "One TFRC flow (not voip) and one TCP flow, different packet sizes."
  1863.     Agent/TFRC set voip_ 0
  1864.     Test/noVoip instproc run {} [Test/voip info instbody run ]
  1865.     $self next pktTraceFile
  1866. }
  1867. Class Test/idleTfrc superclass TestSuite
  1868. Test/idleTfrc instproc init {} {
  1869.     $self instvar net_ test_ guide_ period_
  1870.     set net_ net3
  1871.     set test_ idleTfrc
  1872.     set guide_  "TFRC with two idle periods during slow-start."
  1873.     set period_ 10000.0
  1874.     $self next pktTraceFile
  1875. }
  1876. Test/idleTfrc instproc run {} {
  1877.     global quiet
  1878.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  1879.     puts "Guide: $guide_"
  1880.     $self setTopo
  1881.     Agent/TFRC set SndrType_ 1
  1882.     Agent/TFRC set datalimited_ 1
  1883.     Agent/TFRC set voip_ 1
  1884.     Agent/TFRCSink set ShortIntervals_ 1
  1885.     Agent/TFRC set packetSize_ 160
  1886.     Agent/TFRC set voip_max_pkt_rate_ 50
  1887.     set interval_ 1.0
  1888.     set start_time 0.0
  1889.     set stopTime 60.0
  1890.     set stopTime0 [expr $stopTime - 0.001]
  1891.     set stopTime2 [expr $stopTime + 0.001]
  1892.     set dumpfile_ [open temp.s w]
  1893.     if {$quiet == "false"} {
  1894.         set tracefile [open all.tr w]
  1895.         $ns_ trace-all $tracefile
  1896.     }
  1897.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1898.     set cbr0 [new Application/Traffic/CBR]
  1899.     $cbr0 set packetSize_ 160
  1900.     $cbr0 set interval_ 0.02
  1901.     $cbr0 attach-agent $tf1
  1902.     $ns_ at $start_time "$cbr0 start"
  1903.     $ns_ at 10.0 "$cbr0 stop"
  1904.     $ns_ at 20.0 "$cbr0 start"
  1905.     $ns_ at 25.0 "$cbr0 stop"
  1906.     $ns_ at 35.0 "$cbr0 start"
  1907.     $ns_ at $stopTime "$cbr0 stop"
  1908.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  1909.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  1910.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1911.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1912.     if {$quiet == "false"} {
  1913. $ns_ at $stopTime2 "close $tracefile"
  1914.     }
  1915.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1916.     $ns_ run
  1917. }
  1918. Class Test/idleTcp superclass TestSuite
  1919. Test/idleTcp instproc init {} {
  1920.     $self instvar net_ test_ guide_ period_
  1921.     set net_ net3
  1922.     set test_ idleTcp
  1923.     set guide_  "TCP with two idle periods during slow-start."
  1924.     set period_ 10000.0
  1925.     $self next pktTraceFile
  1926. }
  1927. Test/idleTcp instproc run {} {
  1928.     global quiet
  1929.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  1930.     puts "Guide: $guide_"
  1931.     $self setTopo
  1932.     Agent/TCP set packetSize_ 160
  1933.     Agent/TCP set window_ 30
  1934.     set interval_ 1.0
  1935.     set start_time 0.0
  1936.     set stopTime 60.0
  1937.     set stopTime0 [expr $stopTime - 0.001]
  1938.     set stopTime2 [expr $stopTime + 0.001]
  1939.     set dumpfile_ [open temp.s w]
  1940.     if {$quiet == "false"} {
  1941.         set tracefile [open all.tr w]
  1942.         $ns_ trace-all $tracefile
  1943.     }
  1944.     set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s3) 0]
  1945.     set cbr0 [new Application/Traffic/CBR]
  1946.     $cbr0 set packetSize_ 160
  1947.     $cbr0 set interval_ 0.02
  1948.     $cbr0 attach-agent $tcp1
  1949.     $ns_ at $start_time "$cbr0 start"
  1950.     $ns_ at 10.0 "$cbr0 stop"
  1951.     $ns_ at 20.0 "$cbr0 start"
  1952.     $ns_ at 25.0 "$cbr0 stop"
  1953.     $ns_ at 35.0 "$cbr0 start"
  1954.     $ns_ at $stopTime "$cbr0 stop"
  1955.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  1956.     $self pktsDump 1 $tcp1 $interval_ $dumpfile_
  1957.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  1958.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  1959.     if {$quiet == "false"} {
  1960. $ns_ at $stopTime2 "close $tracefile"
  1961.     }
  1962.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  1963.     $ns_ run
  1964. }
  1965. Class Test/idleTfrc1 superclass TestSuite
  1966. Test/idleTfrc1 instproc init {} {
  1967.     $self instvar net_ test_ guide_ period_
  1968.     set net_ net3
  1969.     set test_ idleTfrc1
  1970.     set guide_  "TFRC with only one idle period during slow-start."
  1971.     set period_ 10000.0
  1972.     $self next pktTraceFile
  1973. }
  1974. Test/idleTfrc1 instproc run {} {
  1975.     global quiet
  1976.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  1977.     puts "Guide: $guide_"
  1978.     $self setTopo
  1979.     Agent/TFRC set SndrType_ 1
  1980.     Agent/TFRC set datalimited_ 1
  1981.     Agent/TFRC set voip_ 1
  1982.     Agent/TFRCSink set ShortIntervals_ 1
  1983.     Agent/TFRC set packetSize_ 160
  1984.     Agent/TFRC set voip_max_pkt_rate_ 50
  1985.     set interval_ 1.0
  1986.     set start_time 0.0
  1987.     set stopTime 60.0
  1988.     set stopTime0 [expr $stopTime - 0.001]
  1989.     set stopTime2 [expr $stopTime + 0.001]
  1990.     set dumpfile_ [open temp.s w]
  1991.     if {$quiet == "false"} {
  1992.         set tracefile [open all.tr w]
  1993.         $ns_ trace-all $tracefile
  1994.     }
  1995.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  1996.     set cbr0 [new Application/Traffic/CBR]
  1997.     $cbr0 set packetSize_ 160
  1998.     $cbr0 set interval_ 0.02
  1999.     $cbr0 attach-agent $tf1
  2000.     $ns_ at $start_time "$cbr0 start"
  2001.     $ns_ at 10.0 "$cbr0 stop"
  2002.     $ns_ at 20.0 "$cbr0 start"
  2003.     $ns_ at 30.0 "$cbr0 stop"
  2004.     $ns_ at 40.0 "$cbr0 start"
  2005.     $ns_ at $stopTime "$cbr0 stop"
  2006.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  2007.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  2008.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  2009.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  2010.     if {$quiet == "false"} {
  2011. $ns_ at $stopTime2 "close $tracefile"
  2012.     }
  2013.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  2014.     $ns_ run
  2015. }
  2016. Class Test/idleTcp1 superclass TestSuite
  2017. Test/idleTcp1 instproc init {} {
  2018.     $self instvar net_ test_ guide_ period_
  2019.     set net_ net3
  2020.     set test_ idleTcp1
  2021.     set guide_  "TCP with only one idle period during slow-start."
  2022.     set period_ 10000.0
  2023.     $self next pktTraceFile
  2024. }
  2025. Test/idleTcp1 instproc run {} {
  2026.     global quiet
  2027.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  2028.     puts "Guide: $guide_"
  2029.     $self setTopo
  2030.     Agent/TCP set packetSize_ 160
  2031.     Agent/TCP set window_ 30
  2032.     set interval_ 1.0
  2033.     set start_time 0.0
  2034.     set stopTime 60.0
  2035.     set stopTime0 [expr $stopTime - 0.001]
  2036.     set stopTime2 [expr $stopTime + 0.001]
  2037.     set dumpfile_ [open temp.s w]
  2038.     if {$quiet == "false"} {
  2039.         set tracefile [open all.tr w]
  2040.         $ns_ trace-all $tracefile
  2041.     }
  2042.     set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s3) 0]
  2043.     set cbr0 [new Application/Traffic/CBR]
  2044.     $cbr0 set packetSize_ 160
  2045.     $cbr0 set interval_ 0.02
  2046.     $cbr0 attach-agent $tcp1
  2047.     $ns_ at $start_time "$cbr0 start"
  2048.     $ns_ at 10.0 "$cbr0 stop"
  2049.     $ns_ at 20.0 "$cbr0 start"
  2050.     $ns_ at 30.0 "$cbr0 stop"
  2051.     $ns_ at 40.0 "$cbr0 start"
  2052.     $ns_ at $stopTime "$cbr0 stop"
  2053.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  2054.     $self pktsDump 1 $tcp1 $interval_ $dumpfile_
  2055.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  2056.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  2057.     if {$quiet == "false"} {
  2058. $ns_ at $stopTime2 "close $tracefile"
  2059.     }
  2060.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  2061.     $ns_ run
  2062. }
  2063. Class Test/shortIdleTcp superclass TestSuite
  2064. Test/shortIdleTcp instproc init {} {
  2065.     $self instvar net_ test_ guide_ period_
  2066.     set net_ net3
  2067.     set test_ shortIdleTcp
  2068.     set guide_  "TCP with two short idle periods during slow-start."
  2069.     set period_ 10000.0
  2070.     $self next pktTraceFile
  2071. }
  2072. Test/shortIdleTcp instproc run {} {
  2073.     global quiet
  2074.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  2075.     puts "Guide: $guide_"
  2076.     $self setTopo
  2077.     Agent/TCP set packetSize_ 160
  2078.     Agent/TCP set window_ 30
  2079.     set interval_ 1.0
  2080.     set start_time 0.0
  2081.     set stopTime 25.0
  2082.     set stopTime0 [expr $stopTime - 0.001]
  2083.     set stopTime2 [expr $stopTime + 0.001]
  2084.     set dumpfile_ [open temp.s w]
  2085.     if {$quiet == "false"} {
  2086.         set tracefile [open all.tr w]
  2087.         $ns_ trace-all $tracefile
  2088.     }
  2089.     set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s3) 0]
  2090.     set ftp [new Application/FTP]
  2091.     $ftp attach-agent $tcp1
  2092.     $ns_ at 0 "$ftp produce 280"
  2093.     $ns_ at 9.2 "$ftp producemore 280"
  2094.     $ns_ at 15.8 "$ftp producemore 280"
  2095.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  2096.     $self pktsDump 1 $tcp1 $interval_ $dumpfile_
  2097.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  2098.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  2099.     if {$quiet == "false"} {
  2100. $ns_ at $stopTime2 "close $tracefile"
  2101.     }
  2102.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  2103.     $ns_ run
  2104. }
  2105. Class Test/idleTfrc1 superclass TestSuite
  2106. Test/idleTfrc1 instproc init {} {
  2107.     $self instvar net_ test_ guide_ period_
  2108.     set net_ net3
  2109.     set test_ idleTfrc1
  2110.     set guide_  "TFRC with only one idle period during slow-start."
  2111.     set period_ 10000.0
  2112.     $self next pktTraceFile
  2113. }
  2114. Test/idleTfrc1 instproc run {} {
  2115.     global quiet
  2116.     $self instvar ns_ node_ testName_ interval_ dumpfile_ guide_ period_
  2117.     puts "Guide: $guide_"
  2118.     $self setTopo
  2119.     Agent/TFRC set SndrType_ 1
  2120.     Agent/TFRC set datalimited_ 1
  2121.     Agent/TFRC set voip_ 1
  2122.     Agent/TFRCSink set ShortIntervals_ 1
  2123.     Agent/TFRC set packetSize_ 160
  2124.     Agent/TFRC set voip_max_pkt_rate_ 50
  2125.     set interval_ 1.0
  2126.     set start_time 0.0
  2127.     set stopTime 60.0
  2128.     set stopTime0 [expr $stopTime - 0.001]
  2129.     set stopTime2 [expr $stopTime + 0.001]
  2130.     set dumpfile_ [open temp.s w]
  2131.     if {$quiet == "false"} {
  2132.         set tracefile [open all.tr w]
  2133.         $ns_ trace-all $tracefile
  2134.     }
  2135.     set tf1 [$ns_ create-connection TFRC $node_(s1) TFRCSink $node_(s3) 0]
  2136.     set cbr0 [new Application/Traffic/CBR]
  2137.     $cbr0 set packetSize_ 160
  2138.     $cbr0 set interval_ 0.02
  2139.     $cbr0 attach-agent $tf1
  2140.     $ns_ at $start_time "$cbr0 start"
  2141.     $ns_ at 10.0 "$cbr0 stop"
  2142.     $ns_ at 20.0 "$cbr0 start"
  2143.     $ns_ at 30.0 "$cbr0 stop"
  2144.     $ns_ at 40.0 "$cbr0 start"
  2145.     $ns_ at $stopTime "$cbr0 stop"
  2146.     $self dropPktsPeriodic [$ns_ link $node_(r2) $node_(s3)] 0 1000.0 $period_
  2147.     $self tfccDump 1 $tf1 $interval_ $dumpfile_
  2148.     $ns_ at $stopTime0 "close $dumpfile_; $self finish_1 $testName_"
  2149.     $ns_ at $stopTime "$self cleanupAll $testName_" 
  2150.     if {$quiet == "false"} {
  2151. $ns_ at $stopTime2 "close $tracefile"
  2152.     }
  2153.     $ns_ at $stopTime2 "exec cp temp2.rands temp.rands; exit 0"
  2154.     $ns_ run
  2155. }
  2156. TestSuite runTest