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

通讯编程

开发平台:

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-frto.tcl,v 1.4 2006/01/24 23:00:06 sallyfloyd Exp $
  34. #
  35. # To view a list of available tests to run with this script:
  36. # ns test-suite-tcpVariants.tcl
  37. #
  38. source misc.tcl
  39. remove-all-packet-headers       ; # removes all except common
  40. add-packet-header Flags IP TCP  ; # hdrs reqd for validation test
  41. Agent/TCP set tcpTick_ 0.1
  42. # The default for tcpTick_ is being changed to reflect a changing reality.
  43. Agent/TCP set rfc2988_ false
  44. # The default for rfc2988_ is being changed to true.
  45. # FOR UPDATING GLOBAL DEFAULTS:
  46. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  47. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  48. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  49. Agent/TCP set useHeaders_ false
  50. # The default is being changed to useHeaders_ true.
  51. Agent/TCP set windowInit_ 1
  52. # The default is being changed to 2.
  53. Agent/TCP set singledup_ 0
  54. # The default is being changed to 1
  55. source topologies.tcl
  56. Agent/TCP set minrto_ 0
  57. # The default is being changed to minrto_ 1
  58. Agent/TCP set syn_ false
  59. Agent/TCP set delay_growth_ false
  60. # In preparation for changing the default values for syn_ and delay_growth_.
  61. Agent/TCP set frto_enabled_ true
  62. Agent/TCP set sfrto_enabled_ true
  63. Agent/TCP set partial_ack_ true
  64. Trace set show_tcphdr_ 1
  65. set wrap 200
  66. set wrap1 [expr 90 * 512 + 40]
  67. TestSuite instproc finish file {
  68. global quiet wrap PERL
  69. exec echo "0.Color: red" > temp.rands
  70. exec echo "2.Color: blue" >> temp.rands
  71. exec echo "1.Color: red" >> temp.rands
  72. exec echo "3.Color: purple" >> temp.rands
  73.           exec $PERL ../../bin/getrc -b -s 0 -d 2 all.tr | 
  74.           $PERL ../../bin/raw2xg -c -s 0.01 -m $wrap -r -t $file >> temp.rands
  75.           exec $PERL ../../bin/getrc -b -s 2 -d 0 all.tr | 
  76.           $PERL ../../bin/raw2xg -c -a -s 0.01 -m $wrap -t $file >> temp.rands
  77.   exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  78.           $PERL ../../bin/raw2xg -c -d -s 0.01 -m $wrap -t $file >> temp.rands
  79. if {$quiet == "false"} {
  80. exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  81. }
  82.         ## now use default graphing tool to make a data file
  83. ## if so desired
  84.         exit 0
  85. }
  86. TestSuite instproc printtimers { tcp time} {
  87. global quiet
  88. if {$quiet == "false"} {
  89.          puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]"
  90. }
  91. }
  92. TestSuite instproc printtimersAll { tcp time interval } {
  93.         $self instvar dump_inst_ ns_
  94.         if ![info exists dump_inst_($tcp)] {
  95.                 set dump_inst_($tcp) 1
  96.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  97.                 return
  98.         }
  99. set newTime [expr [$ns_ now] + $interval]
  100. $ns_ at $time "$self printtimers $tcp $time"
  101.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  102. }
  103. #
  104. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 10ms bottleneck.
  105. # Queue-limit on bottleneck is 2 packets.
  106. #
  107. Class Topology/net4 -superclass NodeTopology/4nodes
  108. Topology/net4 instproc init ns {
  109.     $self next $ns
  110.     $self instvar node_
  111.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 0ms DropTail
  112.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 0ms DropTail
  113.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 10ms DropTail
  114.     $ns queue-limit $node_(r1) $node_(k1) 8
  115.     $ns queue-limit $node_(k1) $node_(r1) 8
  116.     if {[$class info instprocs config] != ""} {
  117. $self config $ns
  118.     }
  119.     $self instvar lossylink_
  120.     set lossylink_ [$ns link $node_(r1) $node_(k1)]
  121.     set em [new ErrorModule Fid] 
  122.     set errmodel [new ErrorModel/Periodic]
  123.     $errmodel unit pkt
  124.     $lossylink_ errormodule $em
  125. }
  126. Class Topology/net4delay -superclass NodeTopology/4nodes
  127. Topology/net4delay instproc init ns {
  128.     global delayerDL myns_
  129.     $self next $ns
  130.     $self instvar node_
  131.     $ns duplex-link $node_(s1) $node_(r1) 2Mb 5ms DropTail
  132.     $ns duplex-link $node_(s2) $node_(r1) 2Mb 5ms DropTail
  133.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 20ms DropTail
  134.     $ns queue-limit $node_(r1) $node_(k1) 8
  135.     $ns queue-limit $node_(k1) $node_(r1) 8
  136.     
  137.     set delayerDL [new Delayer]
  138.     $ns insert-delayer $node_(s1) $node_(r1) $delayerDL
  139.     $ns after 1.5 "insertDelay"
  140.     set myns_ $ns
  141.     if {[$class info instprocs config] != ""} {
  142. $self config $ns
  143.     }
  144.     $self instvar lossylink_
  145.     set lossylink_ [$ns link $node_(r1) $node_(k1)]
  146.     set em [new ErrorModule Fid] 
  147.     set errmodel [new ErrorModel/Periodic]
  148.     $errmodel unit pkt
  149.     $lossylink_ errormodule $em
  150. }
  151. TestSuite instproc emod {} {
  152.         $self instvar topo_
  153.         $topo_ instvar lossylink_
  154.         set errmodule [$lossylink_ errormodule]
  155.         return $errmodule
  156. TestSuite instproc drop_pkts pkts {
  157.     $self instvar ns_
  158.     set emod [$self emod]
  159.     set errmodel1 [new ErrorModel/List]
  160.     $errmodel1 droplist $pkts
  161.     $emod insert $errmodel1
  162.     $emod bind $errmodel1 1
  163. }
  164. TestSuite instproc setup {tcptype list} {
  165. global wrap wrap1
  166.         $self instvar ns_ node_ testName_
  167. set fid 1
  168.         # Set up TCP connection
  169.      if {$tcptype == "Tahoe"} {
  170.        set tcp1 [$ns_ create-connection TCP $node_(s1) 
  171.            TCPSink/DelAck $node_(k1) $fid]
  172.      } elseif {$tcptype == "Sack1"} {
  173.        set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  174.            TCPSink/Sack1/DelAck  $node_(k1) $fid]
  175.      } else {
  176.        set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  177.            TCPSink/DelAck $node_(k1) $fid]
  178.      }
  179.         $tcp1 set window_ 28
  180.         set ftp1 [$tcp1 attach-app FTP]
  181.         $ns_ at 1.0 "$ftp1 produce 35"
  182.         $self tcpDump $tcp1 6.0
  183. $self drop_pkts $list
  184.         $self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  185.         $ns_ run
  186. }
  187. # Definition of test-suite tests
  188. ###################################################
  189. ## Checking for RFC2581-compliant immediate ACK on filling a hole.
  190. ###################################################
  191. Class Test/immediateAck -superclass TestSuite
  192. Test/immediateAck instproc init topo {
  193. $self instvar net_ defNet_ test_
  194. set net_ $topo
  195. set defNet_ net4
  196. set test_ immediateAck
  197. Agent/TCPSink set RFC2581_immediate_ack_ true
  198. $self next
  199. }
  200. Test/immediateAck instproc run {} {
  201. Agent/TCPSink/DelAck set interval_ 200ms
  202.         $self setup Tahoe {3 4}
  203. }
  204. Class Test/immediateAckReno -superclass TestSuite
  205. Test/immediateAckReno instproc init topo {
  206. $self instvar net_ defNet_ test_
  207. set net_ $topo
  208. set defNet_ net4
  209. set test_ immediateAckReno
  210. Agent/TCPSink set RFC2581_immediate_ack_ true
  211. $self next
  212. }
  213. Test/immediateAckReno instproc run {} {
  214. Agent/TCPSink/DelAck set interval_ 200ms
  215.         $self setup Reno {3 4}
  216. }
  217. Class Test/immediateAckNewReno -superclass TestSuite
  218. Test/immediateAckNewReno instproc init topo {
  219. $self instvar net_ defNet_ test_
  220. set net_ $topo
  221. set defNet_ net4
  222. set test_ immediateAckNewReno
  223. Agent/TCPSink set RFC2581_immediate_ack_ true
  224. $self next
  225. }
  226. Test/immediateAckNewReno instproc run {} {
  227. Agent/TCPSink/DelAck set interval_ 200ms
  228.         $self setup Newreno {5 6}
  229. }
  230. Class Test/noImmediateAckNewReno -superclass TestSuite
  231. Test/noImmediateAckNewReno instproc init topo {
  232. $self instvar net_ defNet_ test_
  233. set net_ $topo
  234. set defNet_ net4
  235. set test_ noImmediateAckNewReno
  236. Agent/TCPSink set RFC2581_immediate_ack_ false
  237. Test/noImmediateAckNewReno instproc run {} [Test/immediateAckNewReno info instbody run ]
  238. $self next
  239. }
  240. Class Test/noImmediateAckSack -superclass TestSuite
  241. Test/noImmediateAckSack instproc init topo {
  242. $self instvar net_ defNet_ test_
  243. set net_ $topo
  244. set defNet_ net4
  245. set test_ noImmediateAckSack
  246. Agent/TCPSink set RFC2581_immediate_ack_ false
  247. $self next
  248. }
  249. Test/noImmediateAckSack instproc run {} {
  250. Agent/TCPSink/Sack1/DelAck set interval_ 200ms
  251.         $self setup Sack1 {3 4}
  252. }
  253. proc insertDelay {} {
  254.         global delayerDL myns_
  255.         $delayerDL block
  256.  
  257.         set len 1
  258.         $myns_ after $len "$delayerDL unblock"
  259. }
  260. Class Test/delaySpikesSack -superclass TestSuite
  261. Test/delaySpikesSack instproc init topo {
  262. $self instvar net_ defNet_ test_
  263. set net_ $topo
  264. set defNet_ net4delay
  265. set test_ delaySpikesSack
  266. Agent/TCPSink set RFC2581_immediate_ack_ false
  267. $self next
  268. }
  269. Test/delaySpikesSack instproc run {} {
  270. Agent/TCPSink/Sack1/DelAck set interval_ 200ms
  271.         $self setup Sack1 {30}
  272. }
  273. Class Test/dropsNDelaySpikes -superclass TestSuite
  274. Test/dropsNDelaySpikes instproc init topo {
  275. $self instvar net_ defNet_ test_
  276. set net_ $topo
  277. set defNet_ net4delay
  278. set test_ dropsNDelaySpikes
  279. Agent/TCPSink set RFC2581_immediate_ack_ true
  280. $self next
  281. }
  282. Test/dropsNDelaySpikes instproc run {} {
  283. Agent/TCPSink/Sack1/DelAck set interval_ 200ms
  284.         $self setup Sack1 {17 18 30}
  285. }
  286. Class Test/spikeNDupAck -superclass TestSuite
  287. Test/spikeNDupAck instproc init topo {
  288. $self instvar net_ defNet_ test_
  289. set net_ $topo
  290. set defNet_ net4delay
  291. set test_ spikeNDupAck
  292. Agent/TCPSink set RFC2581_immediate_ack_ true
  293. $self next
  294. }
  295. Test/spikeNDupAck instproc run {} {
  296. Agent/TCPSink/Sack1/DelAck set interval_ 200ms
  297.         $self setup Sack1 {13 30}
  298. }
  299. TestSuite runTest
  300. ### Local Variables:
  301. ### mode: tcl
  302. ### tcl-indent-level: 8
  303. ### tcl-default-application: ns
  304. ### End: