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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1995 The Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. # This product includes software developed by the Computer Systems
  16. # Engineering Group at Lawrence Berkeley Laboratory.
  17. # 4. Neither the name of the University nor of the Laboratory may be used
  18. #    to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. #
  33. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-sack.tcl,v 1.30 2006/12/24 17:04:44 sallyfloyd Exp $
  34. #
  35. source misc_simple.tcl
  36. source support.tcl
  37. # FOR UPDATING GLOBAL DEFAULTS:
  38. Agent/TCP set minrto_ 1
  39. # default changed on 10/14/2004.
  40. Queue/RED set bytes_ false              
  41. # default changed on 10/11/2004.
  42. Queue/RED set queue_in_bytes_ false
  43. # default changed on 10/11/2004.
  44. Queue/RED set q_weight_ 0.002
  45. Queue/RED set thresh_ 5 
  46. Queue/RED set maxthresh_ 15
  47. # The RED parameter defaults are being changed for automatic configuration.
  48. TestSuite instproc finish file {
  49.         global quiet PERL
  50. set wrap 90
  51.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  52.           $PERL ../../bin/raw2xg -s 0.01 -m $wrap -t $file > temp.rands
  53. if {$file == "FalsePipe"} {
  54.   exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  55.     $PERL ../../bin/raw2xg -a -s 0.01 -m $wrap -t $file > temp1.rands
  56.         } else {
  57.   exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  58.     $PERL ../../bin/raw2xg -a -c -s 0.01 -m $wrap -t $file > temp1.rands
  59. }
  60.         if {$quiet == "false"} {
  61.     if {$file == "FalsePipe"} {
  62.          exec  $PERL ../../bin/getrc -e -s 0 -d 2 all.tr | 
  63.                 $PERL ../../bin/raw2xg -c -v -s 0.01 -m $wrap -t $file > temp2.rands
  64.          exec  $PERL ../../bin/getrc -e -s 4 -d 3 all.tr | 
  65.            $PERL ../../bin/raw2xg -c -a -s 0.01 -m $wrap -t $file > temp3.rands
  66.                 exec xgraph -bb -tk -nl -m -x time -y packets temp.rands 
  67. temp1.rands temp2.rands temp3.rands &
  68.     } else {
  69.                 exec xgraph -bb -tk -nl -m -x time -y packets temp.rands 
  70. temp1.rands &
  71.     }
  72.         }
  73.         ## now use default graphing tool to make a data file
  74.         ## if so desired
  75.         # exec csh gnuplotC2.com temp.rands temp1.rands $file
  76.         ##
  77.         exit 0
  78. }
  79. Class Topology
  80. Topology instproc node? num {
  81.     $self instvar node_
  82.     return $node_($num)
  83. }
  84. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 100ms bottleneck.
  85. # Queue-limit on bottleneck is 6 packets. 
  86. Class Topology/net0 -superclass Topology
  87. Topology/net0 instproc init ns {
  88.     $self instvar node_
  89.     set node_(s1) [$ns node]
  90.     set node_(s2) [$ns node]
  91.     set node_(r1) [$ns node]
  92.     set node_(k1) [$ns node]
  93.     $self next
  94.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 5ms DropTail
  95.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 5ms DropTail
  96.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  97.     $ns queue-limit $node_(r1) $node_(k1) 6
  98.     $ns queue-limit $node_(k1) $node_(r1) 6
  99. }
  100. # Links1 uses 10Mb, 5ms feeders, and a 1.5Mb 100ms bottleneck.
  101. # Queue-limit on bottleneck is 23 packets.
  102. Class Topology/net1 -superclass Topology
  103. Topology/net1 instproc init ns {
  104.     $self instvar node_
  105.     set node_(s1) [$ns node]
  106.     set node_(s2) [$ns node]
  107.     set node_(r1) [$ns node]
  108.     set node_(k1) [$ns node]
  109.     $self next
  110.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 5ms DropTail
  111.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 5ms DropTail
  112.     $ns duplex-link $node_(r1) $node_(k1) 1.5Mb 100ms DropTail
  113.     $ns queue-limit $node_(r1) $node_(k1) 23
  114.     $ns queue-limit $node_(k1) $node_(r1) 23
  115. }
  116. Class Topology/net2 -superclass Topology
  117. Topology/net2 instproc init ns {
  118.     $self instvar node_
  119.     set node_(s1) [$ns node]
  120.     set node_(s2) [$ns node]
  121.     set node_(r1) [$ns node]
  122.     set node_(r2) [$ns node]
  123.     set node_(s3) [$ns node]
  124.     set node_(s4) [$ns node]
  125.     $self next
  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.     $ns queue-limit $node_(r1) $node_(r2) 25
  130.     $ns queue-limit $node_(r2) $node_(r1) 25
  131.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  132.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  133. }
  134. Class Topology/net3 -superclass Topology
  135. Topology/net3 instproc init ns {
  136.     $self instvar node_
  137.     set node_(s1) [$ns node]
  138.     set node_(s2) [$ns node]
  139.     set node_(r1) [$ns node]
  140.     set node_(r2) [$ns node]
  141.     set node_(s3) [$ns node]
  142.     set node_(s4) [$ns node]
  143.     $self next
  144.     $ns duplex-link $node_(s1) $node_(r1) 100Mb 1ms DropTail
  145.     $ns duplex-link $node_(s2) $node_(r1) 100Mb 1ms DropTail
  146.     $ns duplex-link $node_(r1) $node_(r2) 10Mb 200ms RED
  147.     $ns duplex-link $node_(s3) $node_(r2) 100Mb 1ms DropTail
  148.     $ns duplex-link $node_(s4) $node_(r2) 100Mb 1ms DropTail
  149. }
  150. Class Topology/net4 -superclass Topology
  151. Topology/net4 instproc init ns {
  152.     $self instvar node_
  153.     set node_(s1) [$ns node]
  154.     set node_(s2) [$ns node]
  155.     set node_(r1) [$ns node]
  156.     set node_(k1) [$ns node]
  157.     $self next
  158.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 5ms DropTail
  159.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 5ms DropTail
  160.     $ns duplex-link $node_(r1) $node_(k1) 1.5Mb 20ms DropTail
  161.     $ns queue-limit $node_(r1) $node_(k1) 25
  162.     $ns queue-limit $node_(k1) $node_(r1) 25
  163. }
  164. TestSuite instproc drops4 {delayPkt delay} {
  165. $self instvar ns_ node_
  166. set list {7 8 9 10}
  167. set link [$ns_ link $node_(r1) $node_(r2)]
  168. set fid 1
  169.         $self dropPkts $link $fid $list $delayPkt $delay
  170. }
  171. # single packet drop
  172. Class Test/sack1 -superclass TestSuite
  173. Test/sack1 instproc init {} {
  174.     $self instvar net_ test_ guide_
  175.     set net_ net0
  176.     set test_ sack1
  177.     set guide_      "Guide: SACK TCP, single packet drop"
  178.     $self next pktTraceFile
  179. }
  180. Test/sack1 instproc run {} {
  181.     $self instvar ns_ node_ testName_ guide_
  182.     $self setTopo
  183.     puts $guide_
  184.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  185.     $tcp1 set window_ 14
  186.     set ftp1 [$tcp1 attach-app FTP]
  187.     $ns_ at 1.0 "$ftp1 start"
  188.     $self tcpDump $tcp1 1.0
  189.     # trace only the bottleneck link
  190.     #$self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  191.     $ns_ at 5.0 "$self cleanupAll $testName_"
  192.     $ns_ run
  193. }
  194. Class Test/sack1z -superclass TestSuite
  195. Test/sack1z instproc init {} {
  196.     $self instvar net_ test_ guide_
  197.     set net_ net0
  198.     set test_ sack1z
  199.     set guide_      "Guide: SACK TCP, single packet drop, with maxburst"
  200.     $self next pktTraceFile
  201. }
  202. Test/sack1z instproc run {} {
  203.     $self instvar ns_ node_ testName_ guide_
  204.     $self setTopo
  205.     puts $guide_
  206.     Agent/TCP set maxburst_ 4
  207.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  208.     $tcp1 set window_ 14
  209.     set ftp1 [$tcp1 attach-app FTP]
  210.     $ns_ at 0.0 "$ftp1 start"
  211.     $self tcpDump $tcp1 1.0
  212.     
  213.     # trace only the bottleneck link
  214.     #$self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  215.     $ns_ at 5.0 "$self cleanupAll $testName_"
  216.     $ns_ run
  217. }
  218. # three packet drops
  219. Class Test/sack1a -superclass TestSuite
  220. Test/sack1a instproc init {} {
  221.     $self instvar net_ test_ guide_
  222.     set net_ net0
  223.     set test_ sack1a
  224.     set guide_      "Guide: SACK TCP, three packet drops"
  225.     $self next pktTraceFile
  226. }
  227. Test/sack1a instproc run {} {
  228.     $self instvar ns_ node_ testName_ guide_
  229.     $self setTopo
  230.     puts $guide_
  231.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  232.     $tcp1 set window_ 20
  233.     set ftp1 [$tcp1 attach-app FTP]
  234.     $ns_ at 0.0 "$ftp1 start"
  235.     $self tcpDump $tcp1 1.0
  236.     
  237.     # trace only the bottleneck link
  238.     #$self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  239.     $ns_ at 5.0 "$self cleanupAll $testName_"
  240.     $ns_ run
  241. }
  242. # three packet drops
  243. Class Test/sack1aa -superclass TestSuite
  244. Test/sack1aa instproc init {} {
  245.     $self instvar net_ test_ guide_
  246.     set net_ net0
  247.     set test_ sack1aa
  248.     set guide_      "Guide: SACK TCP, three packet drops, with maxburst"
  249.     $self next pktTraceFile
  250. }
  251. Test/sack1aa instproc run {} {
  252.     $self instvar ns_ node_ testName_ guide_
  253.     $self setTopo
  254.     puts $guide_
  255.     Agent/TCP set maxburst_ 4
  256.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  257.     $tcp1 set window_ 20
  258.     set ftp1 [$tcp1 attach-app FTP]
  259.     $ns_ at 0.0 "$ftp1 start"
  260.     $self tcpDump $tcp1 1.0
  261.     
  262.     # trace only the bottleneck link
  263.     #$self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  264.     $ns_ at 5.0 "$self cleanupAll $testName_"
  265.     $ns_ run
  266. }
  267. Class Test/sack1b -superclass TestSuite
  268. Test/sack1b instproc init {} {
  269.     $self instvar net_ test_ guide_
  270.     set net_ net0
  271.     set test_ sack1b
  272.     set guide_      "Guide: SACK TCP, many packet drops, window=26"
  273.     $self next pktTraceFile
  274. }
  275. Test/sack1b instproc run {} {
  276.     $self instvar ns_ node_ testName_ guide_
  277.     $self setTopo
  278.     puts $guide_
  279.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  280.     $tcp1 set window_ 26
  281.     set ftp1 [$tcp1 attach-app FTP]
  282.     $ns_ at 0.0 "$ftp1 start"
  283.     $self tcpDump $tcp1 1.0
  284.     
  285.     # trace only the bottleneck link
  286.     #$self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  287.     $ns_ at 5.0 "$self cleanupAll $testName_"
  288.     $ns_ run
  289. }
  290. Class Test/sack1c -superclass TestSuite
  291. Test/sack1c instproc init {} {
  292.     $self instvar net_ test_ guide_
  293.     set net_ net0
  294.     set test_ sack1c
  295.     set guide_      "Guide: SACK TCP, many packet drops, window=27"
  296.     $self next pktTraceFile
  297. }
  298. Test/sack1c instproc run {} {
  299.     $self instvar ns_ node_ testName_ guide_
  300.     $self setTopo
  301.     puts $guide_
  302.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  303.     $tcp1 set window_ 27
  304.     set ftp1 [$tcp1 attach-app FTP]
  305.     $ns_ at 0.0 "$ftp1 start"
  306.     $self tcpDump $tcp1 1.0
  307.     # trace only the bottleneck link
  308.     #$self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  309.     $ns_ at 5.0 "$self cleanupAll $testName_"
  310.     $ns_ run
  311. }
  312. Class Test/sack3 -superclass TestSuite
  313. Test/sack3 instproc init {} {
  314.     $self instvar net_ test_ guide_
  315.     set net_ net0
  316.     set test_ sack3
  317.     set guide_      "Guide: SACK TCP, drops from a small window"
  318.     $self next pktTraceFile
  319. }
  320. Test/sack3 instproc run {} {
  321.     $self instvar ns_ node_ testName_ guide_
  322.     $self setTopo
  323.     puts $guide_
  324.     $ns_ queue-limit $node_(r1) $node_(k1) 8
  325.     $ns_ queue-limit $node_(k1) $node_(r1) 8
  326.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  327.     $tcp1 set window_ 100
  328.     $tcp1 set bugFix_ false
  329.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  330.     $tcp2 set window_ 16
  331.     $tcp2 set bugFix_ false
  332.     set ftp1 [$tcp1 attach-app FTP]
  333.     set ftp2 [$tcp2 attach-app FTP]
  334.     $ns_ at 1.0 "$ftp1 start"
  335.     $ns_ at 0.5 "$ftp2 start"
  336.     $self tcpDump $tcp1 1.0
  337.     # trace only the bottleneck link
  338.     #$self traceQueues $node_(r1) [$self openTrace 4.0 $testName_]
  339.     $ns_ at 4.0 "$self cleanupAll $testName_"
  340.     $ns_ run
  341. }
  342. Class Test/sack5 -superclass TestSuite
  343. Test/sack5 instproc init {} {
  344.     $self instvar net_ test_ guide_
  345.     set net_ net1
  346.     set test_ sack5
  347.     set guide_      "Guide: SACK TCP, many drops, without maxburst"
  348.     $self next pktTraceFile
  349. }
  350. Test/sack5 instproc run {} {
  351.     $self instvar ns_ node_ testName_ guide_
  352.     $self setTopo
  353.     puts $guide_
  354.     $ns_ delay $node_(s1) $node_(r1) 3ms
  355.     $ns_ delay $node_(r1) $node_(s1) 3ms
  356.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  357.     $tcp1 set window_ 50
  358.     $tcp1 set bugFix_ false
  359.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  360.     $tcp2 set window_ 50
  361.     $tcp2 set bugFix_ false
  362.     set ftp1 [$tcp1 attach-app FTP]
  363.     set ftp2 [$tcp2 attach-app FTP]
  364.     $ns_ at 1.0 "$ftp1 start"
  365.     $ns_ at 1.75 "$ftp2 produce 100"
  366.     $self tcpDump $tcp1 1.0
  367.     # trace only the bottleneck link
  368.     #$self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  369.     $ns_ at 6.0 "$self cleanupAll $testName_"
  370.     $ns_ run
  371. }
  372. Class Test/sack5a -superclass TestSuite
  373. Test/sack5a instproc init {} {
  374.     $self instvar net_ test_ guide_
  375.     set net_ net1
  376.     set test_ sack5a
  377.     set guide_      "Guide: SACK TCP, many drops, with maxburst"
  378.     $self next pktTraceFile
  379. }
  380. Test/sack5a instproc run {} {
  381.     $self instvar ns_ node_ testName_ guide_
  382.     $self setTopo
  383.     puts $guide_
  384.     Agent/TCP set maxburst_ 4
  385.     $ns_ delay $node_(s1) $node_(r1) 3ms
  386.     $ns_ delay $node_(r1) $node_(s1) 3ms
  387.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  388.     $tcp1 set window_ 50
  389.     $tcp1 set bugFix_ false
  390.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  391.     $tcp2 set window_ 50
  392.     $tcp2 set bugFix_ false
  393.     set ftp1 [$tcp1 attach-app FTP]
  394.     set ftp2 [$tcp2 attach-app FTP]
  395.     $ns_ at 1.0 "$ftp1 start"
  396.     $ns_ at 1.75 "$ftp2 produce 100"
  397.     $self tcpDump $tcp1 1.0
  398.     # trace only the bottleneck link
  399.     #$self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  400.     $ns_ at 6.0 "$self cleanupAll $testName_"
  401.     $ns_ run
  402. }
  403. # shows a long recovery from sack.
  404. Class Test/sackB2 -superclass TestSuite
  405. Test/sackB2 instproc init {} {
  406.     $self instvar net_ test_ guide_
  407.     set net_ net0
  408.     set test_ sackB2
  409.     set guide_      "Guide: SACK TCP, a connection with a long recovery"
  410.     Agent/TCP set windowInit_ 1
  411.     $self next pktTraceFile
  412. }
  413. Test/sackB2 instproc run {} {
  414.     $self instvar ns_ node_ testName_ guide_
  415.     $self setTopo
  416.     puts $guide_
  417.     $ns_ queue-limit $node_(r1) $node_(k1) 9
  418.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  419.     $tcp1 set window_ 50
  420.     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  421.     $tcp2 set window_ 20
  422.     set ftp1 [$tcp1 attach-app FTP]
  423.     set ftp2 [$tcp2 attach-app FTP]
  424.     $ns_ at 1.0 "$ftp1 start"
  425.     $ns_ at 1.0 "$ftp2 start"
  426.     $self tcpDump $tcp1 1.0
  427.     # trace only the bottleneck link
  428.     #$self traceQueues $node_(r1) [$self openTrace 8.0 $testName_]
  429.     $ns_ at 8.0 "$self cleanupAll $testName_"
  430.     $ns_ run
  431. }
  432. # two packets dropped
  433. Class Test/sackB4 -superclass TestSuite
  434. Test/sackB4 instproc init {} {
  435.     $self instvar net_ test_ guide_
  436.     set net_ net2
  437.     set test_ sackB4
  438.     set guide_      "Guide: SACK TCP, two packets dropped"
  439.     $self next pktTraceFile
  440. }
  441. Test/sackB4 instproc run {} {
  442.     $self instvar ns_ node_ testName_ guide_
  443.     $self setTopo
  444.     puts $guide_
  445.     $ns_ queue-limit $node_(r1) $node_(r2) 29
  446.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(r2) 0]
  447.     $tcp1 set window_ 40
  448.     set ftp1 [$tcp1 attach-app FTP]
  449.     $ns_ at 0.0 "$ftp1 start"
  450.     $self tcpDump $tcp1 1.0
  451.     # trace only the bottleneck link
  452.     #$self traceQueues $node_(r1) [$self openTrace 2.0 $testName_]
  453.     $ns_ at 2.0 "$self cleanupAll $testName_"
  454.     $ns_ run
  455. }
  456. # two packets dropped
  457. Class Test/sackB4a -superclass TestSuite
  458. Test/sackB4a instproc init {} {
  459.     $self instvar net_ test_ guide_
  460.     set net_ net2
  461.     set test_ sackB4a
  462.     set guide_      "Guide: SACK TCP, two packets dropped, with maxburst"
  463.     $self next pktTraceFile
  464. }
  465. Test/sackB4a instproc run {} {
  466.     $self instvar ns_ node_ testName_ guide_
  467.     $self setTopo
  468.     puts $guide_
  469.     $ns_ queue-limit $node_(r1) $node_(r2) 29
  470.     Agent/TCP set maxburst_ 4
  471.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(r2) 0]
  472.     $tcp1 set window_ 40
  473.     set ftp1 [$tcp1 attach-app FTP]
  474.     $ns_ at 0.0 "$ftp1 start"
  475.     $self tcpDump $tcp1 1.0
  476.     # trace only the bottleneck link
  477.     #$self traceQueues $node_(r1) [$self openTrace 2.0 $testName_]
  478.     $ns_ at 2.0 "$self cleanupAll $testName_"
  479.     $ns_ run
  480. }
  481. # Incorrect estimated pipe value
  482. # Four packets delayed, no packets dropped.
  483. Class Test/FalsePipe -superclass TestSuite
  484. Test/FalsePipe instproc init {} {
  485.     $self instvar net_ test_ guide_
  486.     set net_ net3
  487.     set test_ FalsePipe
  488.     set guide_      "Guide: SACK TCP, four packets delayed"
  489.     $self next pktTraceFile
  490. }
  491. Test/FalsePipe instproc run {} {
  492.     $self instvar ns_ node_ testName_ guide_
  493.     $self setTopo
  494.     puts $guide_
  495.     $self June01defaults
  496.     $ns_ eventtrace-all
  497.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 1]
  498.     $tcp1 set window_ 8
  499.     set ftp1 [$tcp1 attach-app FTP]
  500.     $ns_ at 0.0 "$ftp1 start"
  501.     $self tcpDump $tcp1 3.0
  502.     #delay packet 7, 8, 9, 10
  503.     $self drops4 true 0.1
  504.     $ns_ at 3.0 "$self cleanupAll $testName_"
  505.     $ns_ run
  506. }
  507. # Incorrect estimated pipe value
  508. # One packet dropped, four packets delayed.
  509. Class Test/FalsePipe1 -superclass TestSuite
  510. Test/FalsePipe1 instproc init {} {
  511.     $self instvar net_ test_ guide_
  512.     set net_ net3
  513.     set test_ FalsePipe1
  514.     set guide_      "Guide: SACK TCP, one packet dropped and four packets delayed"
  515.     $self next pktTraceFile
  516. }
  517. Test/FalsePipe1 instproc run {} {
  518.     $self instvar ns_ node_ testName_ guide_
  519.     $self setTopo
  520.     puts $guide_
  521.     $self June01defaults
  522.     $ns_ eventtrace-all
  523.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 1]
  524.     $tcp1 set window_ 20
  525.     set ftp1 [$tcp1 attach-app FTP]
  526.     $ns_ at 0.0 "$ftp1 start"
  527.     $self tcpDump $tcp1 3.0
  528.     #delay packet 7, 8, 9, 10
  529.     $self drops4 true 0.5
  530.     $self dropPkts [$ns_ link $node_(r1) $node_(r2)] 1 7
  531.     $ns_ at 3.0 "$self cleanupAll $testName_"
  532.     $ns_ run
  533. }
  534. Class Test/sack_dupacks -superclass TestSuite
  535. Test/sack_dupacks instproc init {} {
  536.     $self instvar net_ test_ guide_
  537.     set net_ net4
  538.     set test_ sack_dupacks
  539.     set guide_      "Guide: SACK TCP, Fast Recovery with standard numdupacks"
  540.     $self next pktTraceFile
  541. }
  542. Test/sack_dupacks instproc run {} {
  543.     $self instvar ns_ node_ testName_ guide_
  544.     $self setTopo
  545.     puts $guide_
  546.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  547.     $tcp1 set window_ 200
  548.     set ftp1 [$tcp1 attach-app FTP]
  549.     $ns_ at 0.1 "$ftp1 start"
  550.     $self tcpDump $tcp1 1.0
  551.     # trace only the bottleneck link
  552.     $ns_ at 3.0 "$self cleanupAll $testName_"
  553.     $ns_ run
  554. }
  555. # finite flow
  556. # make sure that the last packets are fast retransmitted if lost
  557. Class Test/sack_finiteflow -superclass TestSuite
  558. Test/sack_finiteflow instproc init {} {
  559.     $self instvar net_ test_ guide_
  560.     set net_    net4
  561.     set test_   sack_finiteflow
  562.     set guide_      "Guide: SACK TCP, Fast Recovery with last packets in a finite flow"
  563.     $self next pktTraceFile
  564. }
  565. Test/sack_finiteflow instproc run {} {
  566.     $self instvar ns_ node_ testName_ guide_
  567.     $self setTopo
  568.     puts $guide_
  569.     $ns_ duplex-link $node_(r1) $node_(k1) 100Mb 5ms DropTail
  570.     $ns_ queue-limit $node_(r1) $node_(k1) 4
  571.     $ns_ queue-limit $node_(k1) $node_(r1) 4
  572.     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(r1) TCPSink/Sack1 $node_(k1) 0]
  573.     $tcp1 set window_ 200
  574.     set ftp1 [$tcp1 attach-app FTP]
  575.     # send 21 packets only
  576.     set bytesToSend [expr 21 * [ $tcp1 set packetSize_ ]  ]
  577.     $ns_ at 0.01 "$ftp1 send $bytesToSend"
  578.     $self tcpDump $tcp1 0.1
  579.     # trace only the bottleneck link
  580.     $ns_ at 3.0 "$self cleanupAll $testName_"
  581.     $ns_ run
  582. }
  583. #
  584. # Sack_dupacks1 tests "numdupacksFrac_", for increasing numdupacks
  585. #   up to a specified fraction of the current congestion window.
  586. #
  587. Class Test/sack_dupacks1 -superclass TestSuite
  588. Test/sack_dupacks1 instproc init {} {
  589.     $self instvar net_ test_ guide_
  590.     set net_ net4
  591.     set test_ sack_dupacks1
  592.     set guide_      "Guide: SACK TCP, Fast Recovery with modified numdupacks"
  593.     Agent/TCP set numdupacksFrac_ 4
  594.     Test/sack_dupacks1 instproc run {} [Test/sack_dupacks info instbody run] 
  595.     $self next pktTraceFile
  596. }
  597. # delayed ack not implemented yet
  598. #Class Test/delayedSack -superclass TestSuite
  599. #Test/delayedSack instproc init {} {
  600. #    $self instvar net_ test_ guide_
  601. #    set net_    net0
  602. #    set test_ delayedSack
  603. #    set guide_      "simple"
  604. #    $self next pktTraceFile
  605. #}
  606. #Test/delayedSack instproc run {} {
  607. #     $self instvar ns_ node_ testName_ guide_
  608. #     $self setTopo
  609. #     puts $guide_
  610. #     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  611. #     $tcp1 set window_ 50
  612. #     # lookup up the sink and set it's delay interval
  613. #     [$node_(k1) agent [$tcp1 dst-port]] set interval 100ms
  614. #     set ftp1 [$tcp1 attach-app FTP]
  615. #     $ns_ at 1.0 "$ftp1 start"
  616. #     $self tcpDump $tcp1 1.0
  617. #     # trace only the bottleneck link
  618. #     #$self traceQueues $node_(r1) [$self openTrace 4.0 $testName_]
  619. #     $ns_ run
  620. # }
  621. ## segregation
  622. #Class Test/phaseSack -superclass TestSuite
  623. #Test/phaseSack instproc init {} {
  624. #    $self instvar net_ test_ guide_
  625. #    set net_ net0
  626. #    set test_ phaseSack
  627. #    set guide_      "simple"
  628. #    $self next pktTraceFile
  629. #}
  630. #Test/phaseSack instproc run {} {
  631. #    $self instvar ns_ node_ testName_ guide_
  632. #    $self setTopo
  633. #    puts $guide_
  634. #
  635. #    $ns_ delay $node_(s2) $node_(r1) 3ms
  636. #    $ns_ delay $node_(r1) $node_(s2) 3ms
  637. #    $ns_ queue-limit $node_(r1) $node_(k1) 16
  638. #    $ns_ queue-limit $node_(k1) $node_(r1) 100
  639. #
  640. #    set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  641. #    $tcp1 set window_ 32
  642. #
  643. #    set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  644. #    $tcp2 set window_ 32
  645. #
  646. #    set ftp1 [$tcp1 attach-app FTP]
  647. #    set ftp2 [$tcp2 attach-app FTP]
  648. #
  649. #    $ns_ at 5.0 "$ftp1 start"
  650. #    $ns_ at 1.0 "$ftp2 start"
  651. #
  652. #    $self tcpDump $tcp1 5.0
  653. #
  654. #    # trace only the bottleneck link
  655. #    #$self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  656. #    $ns_ run
  657. #}
  658. #
  659. ## random overhead, but segregation remains 
  660. #Class Test/phaseSack2 -superclass TestSuite
  661. #Test/phaseSack2 instproc init {} {
  662. #    $self instvar net_ test_ guide_
  663. #    set net_ net0
  664. #    set test_ phaseSack2
  665. #    set guide_      "simple"
  666. #    $self next pktTraceFile
  667. #}
  668. #Test/phaseSack2 instproc run {} {
  669. #    $self instvar ns_ node_ testName_ guide_
  670. #    $self setTopo
  671. #    puts $guide_
  672. #
  673. #    $ns_ delay $node_(s2) $node_(r1) 3ms
  674. #    $ns_ delay $node_(r1) $node_(s2) 3ms
  675. #    $ns_ queue-limit $node_(r1) $node_(k1) 16
  676. #    $ns_ queue-limit $node_(k1) $node_(r1) 100
  677. #
  678. #    set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  679. #    $tcp1 set window_ 32
  680. #    $tcp1 set overhead_ 0.01
  681. #
  682. #    set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  683. #    $tcp2 set window_ 32
  684. #    $tcp2 set overhead_ 0.01
  685. #    
  686. #    set ftp1 [$tcp1 attach-app FTP]
  687. #    set ftp2 [$tcp2 attach-app FTP]
  688. #    
  689. #    $ns_ at 5.0 "$ftp1 start"
  690. #    $ns_ at 1.0 "$ftp2 start"
  691. #    
  692. #    $self tcpDump $tcp1 5.0
  693. #    
  694. #    # trace only the bottleneck link
  695. #    #$self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  696. #    $ns_ run
  697. #}
  698. #
  699. ## no segregation, because of random overhead
  700. #Class Test/phaseSack3 -superclass TestSuite
  701. #Test/phaseSack3 instproc init {} {
  702. #    $self instvar net_ test_ guide_
  703. #    set net_ net0
  704. #    set test_ phaseSack3
  705. #    set guide_      "simple"
  706. #    $self next pktTraceFile
  707. #}
  708. #Test/phaseSack3 instproc run {} {
  709. #    $self instvar ns_ node_ testName_ guide_
  710. #    $self setTopo
  711. #    puts $guide_
  712. #
  713. #    $ns_ delay $node_(s2) $node_(r1) 9.5ms
  714. #    $ns_ delay $node_(r1) $node_(s2) 9.5ms
  715. #    $ns_ queue-limit $node_(r1) $node_(k1) 16
  716. #    $ns_ queue-limit $node_(k1) $node_(r1) 100
  717. #
  718. #    set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  719. #    $tcp1 set window_ 32
  720. #    $tcp1 set overhead_ 0.01
  721. #
  722. #    set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  723. #    $tcp2 set window_ 32
  724. #    $tcp2 set overhead_ 0.01
  725. #
  726. #    set ftp1 [$tcp1 attach-app FTP]
  727. #    set ftp2 [$tcp2 attach-app FTP]
  728. #
  729. #    $ns_ at 5.0 "$ftp1 start"
  730. #    $ns_ at 1.0 "$ftp2 start"
  731. #
  732. #    $self tcpDump $tcp1 5.0
  733. #
  734. #    # trace only the bottleneck link
  735. #    #$self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  736. #    $ns_ run
  737. #}
  738. #Class Test/timersSack -superclass TestSuite
  739. #Test/timersSack instproc init {} {
  740. #    $self instvar net_ test_ guide_
  741. #    set net_ net0
  742. #    set test_ timersSack
  743. #    set guide_      "simple"
  744. #    $self next pktTraceFile
  745. #}
  746. #Test/timersSack instproc run {} {
  747. #     $self instvar ns_ node_ testName_ guide_
  748. #     $self setTopo
  749. #     puts $guide_
  750. #     $ns_ queue-limit $node_(r1) $node_(k1) 2
  751. #     $ns_ queue-limit $node_(k1) $node_(r1) 100
  752. #     set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) 0]
  753. #     $tcp1 set window_ 4
  754. #     # lookup up the sink and set it's delay interval
  755. #     [$node_(k1) agent [$tcp1 dst-port]] set interval 100ms
  756. #     set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(k1) 1]
  757. #     $tcp2 set window_ 4
  758. #     # lookup up the sink and set it's delay interval
  759. #     [$node_(k1) agent [$tcp2 dst-port]] set interval 100ms
  760. #     set ftp1 [$tcp1 attach-app FTP]
  761. #     set ftp2 [$tcp2 attach-app FTP]
  762. #     $ns_ at 1.0 "$ftp1 start"
  763. #     $ns_ at 1.3225 "$ftp2 start"
  764. #     $self tcpDump $tcp1 5.0
  765. #     # trace only the bottleneck link
  766. #     #$self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  767. #     $ns_ run
  768. # }
  769. TestSuite runTest