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

通讯编程

开发平台:

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-LimTransmit.tcl,v 1.14 2006/08/13 04:45:59 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_simple.tcl
  39. remove-all-packet-headers       ; # removes all except common
  40. add-packet-header Flags IP TCP  ; # hdrs reqd for TCP
  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 minrto_ 1
  50. # default changed on 10/14/2004.
  51. Agent/TCP set singledup_ 0
  52. # The default is being changed to 1
  53. Trace set show_tcphdr_ 1
  54. Agent/TCP set useHeaders_ false
  55. # The default is being changed to useHeaders_ true.
  56. Agent/TCP set tcpTick_ 0.5
  57. ## First scenaio: maxpkts 15, droppkt 4.
  58. ## For the paper: droppkt 2.
  59. set wrap 90
  60. set wrap1 [expr 90 * 512 + 40]
  61. Class Topology
  62. Topology instproc node? num {
  63.     $self instvar node_
  64.     return $node_($num)
  65. }
  66. #
  67. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 10ms bottleneck.
  68. # Queue-limit on bottleneck is 2 packets.
  69. #
  70. Class Topology/net4 -superclass Topology
  71. Topology/net4 instproc init ns {
  72.     $self instvar node_
  73.     set node_(s1) [$ns node]
  74.     set node_(s2) [$ns node]
  75.     set node_(r1) [$ns node]
  76.     set node_(k1) [$ns node]
  77.     $self next
  78.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 0ms DropTail
  79.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 0ms DropTail
  80.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  81.     # 800Kb/sec = 100 pkts/sec = 20 pkts/200 ms.
  82.     $ns queue-limit $node_(r1) $node_(k1) 8
  83.     $ns queue-limit $node_(k1) $node_(r1) 8
  84.     $self instvar lossylink_
  85.     set lossylink_ [$ns link $node_(r1) $node_(k1)]
  86.     set em [new ErrorModule Fid]
  87.     set errmodel [new ErrorModel/Periodic]
  88.     $errmodel unit pkt
  89.     $lossylink_ errormodule $em
  90. }
  91. TestSuite instproc finish file {
  92. global quiet wrap PERL
  93.         exec $PERL ../../bin/set_flow_id -m all.tr > t
  94.         exec $PERL ../../bin/getrc -s 0 -d 2 t > t1 
  95.         exec  $PERL ../../bin/raw2xg -c -a -s 0.01 -m $wrap -t $file t1 > temp.rands
  96. exec $PERL ../../bin/getrc -s 2 -d 0 t > t2
  97.         exec $PERL ../../bin/raw2xg -c -a -s 0.01 -m $wrap -t $file t2 > temp1.rands
  98.         exec $PERL ../../bin/getrc -s 2 -d 3 t | 
  99.           $PERL ../../bin/raw2xg -c -d -s 0.01 -m $wrap -t $file > temp2.rands
  100.         #exec $PERL ../../bin/set_flow_id -s all.tr | 
  101.         #  $PERL ../../bin/getrc -s 2 -d 3 | 
  102.         #  $PERL ../../bin/raw2xg -s 0.01 -m $wrap -t $file > temp.rands
  103. if {$quiet == "false"} {
  104. exec xgraph -bb -tk -nl -m -x time -y packets temp.rands 
  105. temp1.rands temp2.rands &
  106. }
  107.         ## now use default graphing tool to make a data file
  108. ## if so desired
  109.         # exec csh gnuplotC.com temp.rands temp1.rands temp2.rands $file
  110.         exit 0
  111. }
  112. TestSuite instproc printtimers { tcp time} {
  113. global quiet
  114. if {$quiet == "false"} {
  115.          puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]"
  116. }
  117. }
  118. TestSuite instproc printtimersAll { tcp time interval } {
  119.         $self instvar dump_inst_ ns_
  120.         if ![info exists dump_inst_($tcp)] {
  121.                 set dump_inst_($tcp) 1
  122.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  123.                 return
  124.         }
  125. set newTime [expr [$ns_ now] + $interval]
  126. $ns_ at $time "$self printtimers $tcp $time"
  127.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  128. }
  129. TestSuite instproc emod {} {
  130.         $self instvar topo_
  131.         $topo_ instvar lossylink_
  132.         set errmodule [$lossylink_ errormodule]
  133.         return $errmodule
  134. TestSuite instproc drop_pkts { pkts {ecn 0}} {
  135.     $self instvar ns_
  136.     set emod [$self emod]
  137.     set errmodel1 [new ErrorModel/List]
  138.     if {$ecn == "ECN"} {
  139.      $errmodel1 set markecn_ true
  140.     }
  141.     $errmodel1 droplist $pkts
  142.     $emod insert $errmodel1
  143.     $emod bind $errmodel1 1
  144. }
  145. TestSuite instproc setup { tcptype list {ecn 0}} {
  146. global wrap wrap1
  147.         $self instvar ns_ node_ testName_ guide_
  148. $self setTopo
  149. puts "Guide: $guide_"
  150.         Agent/TCP set bugFix_ false
  151. if {$ecn == "ECN"} {
  152.  Agent/TCP set ecn_ 1
  153. }
  154. set fid 1
  155.         # Set up TCP connection
  156.      if {$tcptype == "Tahoe"} {
  157.        set tcp1 [$ns_ create-connection TCP $node_(s1) 
  158.            TCPSink/DelAck $node_(k1) $fid]
  159.      } elseif {$tcptype == "Sack1"} {
  160.        set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  161.            TCPSink/Sack1/DelAck  $node_(k1) $fid]
  162.      } else {
  163.        set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  164.            TCPSink/DelAck $node_(k1) $fid]
  165.      }
  166.         $tcp1 set window_ 28
  167.         set ftp1 [$tcp1 attach-app FTP]
  168.         $ns_ at 0.0 "$ftp1 produce 7"
  169.         $self tcpDump $tcp1 5.0
  170.         $self drop_pkts $list $ecn
  171.         #$self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  172. $ns_ at 6.0 "$self cleanupAll $testName_"
  173.         $ns_ run
  174. }
  175. # Definition of test-suite tests
  176. ###################################################
  177. ## One drop
  178. ###################################################
  179. Class Test/onedrop_sack -superclass TestSuite
  180. Test/onedrop_sack instproc init {} {
  181. $self instvar net_ test_ guide_
  182. set net_ net4
  183. set test_ onedrop_sack
  184. set guide_      "Sack TCP, no Limited Transmit, one packet drop, so timeout."
  185. $self next pktTraceFile
  186. }
  187. Test/onedrop_sack instproc run {} {
  188.         $self setup Sack1 {1}
  189. }
  190. Class Test/onedrop_SA_sack -superclass TestSuite
  191. Test/onedrop_SA_sack instproc init {} {
  192. $self instvar net_ test_ guide_
  193. set net_ net4
  194. set test_ onedrop_SA_sack
  195. set guide_      "Sack TCP, Limited Transmit, one packet drop, so Fast Retransmit."
  196. Agent/TCP set singledup_ 1
  197. Test/onedrop_SA_sack instproc run {} [Test/onedrop_sack info instbody run ]
  198. $self next pktTraceFile
  199. }
  200. Class Test/onedrop_ECN_sack -superclass TestSuite
  201. Test/onedrop_ECN_sack instproc init {} {
  202. $self instvar net_ test_ guide_
  203. set net_ net4
  204. set test_ onedrop_ECN_sack
  205. set guide_      "Sack TCP, ECN, one packet drop, so Fast Retransmit."
  206. Agent/TCP set ecn_ 1
  207. $self next pktTraceFile
  208. }
  209. Test/onedrop_ECN_sack instproc run {} {
  210.         $self setup Sack1 {1} ECN
  211. }
  212. Class Test/nodrop_sack -superclass TestSuite
  213. Test/nodrop_sack instproc init {} {
  214. $self instvar net_ test_ guide_
  215. set net_ net4
  216. set test_ nodrop_sack
  217. set guide_      "Sack TCP with no packet drops, for comparison."
  218. $self next pktTraceFile
  219. }
  220. Test/nodrop_sack instproc run {} {
  221.         $self setup Sack1 {1000} 
  222. }
  223. TestSuite runTest