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

通讯编程

开发平台:

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-tcpOptions.tcl,v 1.22 2006/01/25 22:02:05 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. # FOR UPDATING GLOBAL DEFAULTS:
  42. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  43. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  44. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  45. Agent/TCP set minrto_ 1
  46. # default changed on 10/14/2004.
  47. source support.tcl
  48. Agent/TCP set singledup_ 0
  49. # The default is being changed to 1
  50. Trace set show_tcphdr_ 1
  51. set wrap 90
  52. set wrap1 [expr $wrap * 512 + 40]
  53. Class Topology
  54. Topology instproc node? num {
  55.     $self instvar node_
  56.     return $node_($num)
  57. }
  58. #
  59. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 10ms bottleneck.
  60. # Queue-limit on bottleneck is 2 packets.
  61. #
  62. Class Topology/net4 -superclass Topology
  63. Topology/net4 instproc init ns {
  64.     $self instvar node_
  65.     set node_(s1) [$ns node]
  66.     set node_(s2) [$ns node]
  67.     set node_(r1) [$ns node]
  68.     set node_(k1) [$ns node]
  69.     $self next
  70.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 0ms DropTail
  71.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 0ms DropTail
  72.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  73.     $ns queue-limit $node_(r1) $node_(k1) 8
  74.     $ns queue-limit $node_(k1) $node_(r1) 8
  75.     $self instvar lossylink_
  76.     set lossylink_ [$ns link $node_(r1) $node_(k1)]
  77.     set em [new ErrorModule Fid]
  78.     set errmodel [new ErrorModel/Periodic]
  79.     $errmodel unit pkt
  80.     $lossylink_ errormodule $em
  81. }
  82. Class Topology/net4a -superclass Topology
  83. Topology/net4a instproc init ns {
  84.     $self instvar node_
  85.     set node_(s1) [$ns node]
  86.     set node_(s2) [$ns node]
  87.     set node_(r1) [$ns node]
  88.     set node_(k1) [$ns node]
  89.     $self next
  90.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 0ms DropTail
  91.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 0ms DropTail
  92.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  93.     $ns queue-limit $node_(r1) $node_(k1) 8
  94.     $ns queue-limit $node_(k1) $node_(r1) 8
  95. }
  96. TestSuite instproc finish file {
  97. global quiet wrap wrap1 PERL
  98. set space 512
  99.         #exec $PERL ../../bin/set_flow_id -s all.tr | 
  100.         #  $PERL ../../bin/getrc -s 2 -d 3 | 
  101.         #  $PERL ../../bin/raw2xg -s 0.01 -m $wrap -t $file > temp.rands
  102. if [string match {*full*} $file] {
  103.                 exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  104.                    $PERL ../../bin/raw2xg -c -n $space -s 0.01 -m $wrap1 -t $file > temp.rands
  105.                 exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  106.                    $PERL ../../bin/raw2xg -a -c -f -p -y -n $space -s 0.01 -m $wrap1 -t $file >> temp.rands
  107. } else {
  108.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  109.           $PERL ../../bin/raw2xg -s 0.01 -m $wrap -t $file > temp.rands
  110.         exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  111.           $PERL ../../bin/raw2xg -a -c -p -y -s 0.01 -m $wrap -t $file 
  112.   >> temp.rands
  113. }
  114. if {$quiet == "false"} {
  115. exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  116. }
  117.         ## now use default graphing tool to make a data file
  118. ## if so desired
  119.         exit 0
  120. }
  121. TestSuite instproc printtimers { tcp time} {
  122. global quiet
  123. if {$quiet == "false"} {
  124.          puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]"
  125. }
  126. }
  127. TestSuite instproc printtimersAll { tcp time interval } {
  128.         $self instvar dump_inst_ ns_
  129.         if ![info exists dump_inst_($tcp)] {
  130.                 set dump_inst_($tcp) 1
  131.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  132.                 return
  133.         }
  134. set newTime [expr [$ns_ now] + $interval]
  135. $ns_ at $time "$self printtimers $tcp $time"
  136.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  137. }
  138. TestSuite instproc emod {} {
  139.         $self instvar topo_
  140.         $topo_ instvar lossylink_
  141.         set errmodule [$lossylink_ errormodule]
  142.         return $errmodule
  143. TestSuite instproc drop_pkts pkts {
  144.     $self instvar ns_
  145.     set emod [$self emod]
  146.     set errmodel1 [new ErrorModel/List]
  147.     $errmodel1 droplist $pkts
  148.     $emod insert $errmodel1
  149.     $emod bind $errmodel1 1
  150. }
  151. TestSuite instproc setup {tcptype list} {
  152. global wrap wrap1 quiet
  153.         $self instvar ns_ node_ testName_ guide_
  154. $self setTopo 
  155. puts "Guide: $guide_"
  156.         Agent/TCP set bugFix_ false
  157. set fid 1
  158.         # Set up TCP connection
  159.      if {$tcptype == "Tahoe"} {
  160.        set tcp1 [$ns_ create-connection TCP $node_(s1) 
  161.            TCPSink $node_(k1) $fid]
  162.      } elseif {$tcptype == "Sack1"} {
  163.        set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  164.            TCPSink/Sack1  $node_(k1) $fid]
  165.      } elseif {$tcptype == "Fack"} {
  166.        set tcp1 [$ns_ create-connection TCP/Fack $node_(s1) 
  167.            TCPSink/Sack1  $node_(k1) $fid]
  168.      } elseif {$tcptype == "SackRH"} {
  169.        set tcp1 [$ns_ create-connection TCP/SackRH $node_(s1) 
  170.            TCPSink/Sack1 $node_(k1) $fid]
  171.      } elseif {$tcptype == "FullTcp"} {
  172. set wrap $wrap1
  173.         set tcp1 [new Agent/TCP/FullTcp]
  174.         set sink [new Agent/TCP/FullTcp]
  175.         $ns_ attach-agent $node_(s1) $tcp1
  176.         $ns_ attach-agent $node_(k1) $sink
  177.         $tcp1 set fid_ $fid
  178.         $sink set fid_ $fid
  179.         $ns_ connect $tcp1 $sink
  180.         # set up TCP-level connections
  181.         $sink listen ; # will figure out who its peer is
  182.      } elseif {$tcptype == "FullTcpTahoe"} {
  183. set wrap $wrap1
  184.         set tcp1 [new Agent/TCP/FullTcp/Tahoe]
  185.         set sink [new Agent/TCP/FullTcp/Tahoe]
  186.         $ns_ attach-agent $node_(s1) $tcp1
  187.         $ns_ attach-agent $node_(k1) $sink
  188.         $tcp1 set fid_ $fid
  189.         $sink set fid_ $fid
  190.         $ns_ connect $tcp1 $sink
  191.         # set up TCP-level connections
  192.         $sink listen ; # will figure out who its peer is
  193.      } elseif {$tcptype == "FullTcpNewreno"} {
  194. set wrap $wrap1
  195.         set tcp1 [new Agent/TCP/FullTcp/Newreno]
  196.         set sink [new Agent/TCP/FullTcp/Newreno]
  197.         $ns_ attach-agent $node_(s1) $tcp1
  198.         $ns_ attach-agent $node_(k1) $sink
  199.         $tcp1 set fid_ $fid
  200.         $sink set fid_ $fid
  201.         $ns_ connect $tcp1 $sink
  202.         # set up TCP-level connections
  203.         $sink listen ; # will figure out who its peer is
  204.      } elseif {$tcptype == "FullTcpSack1"} {
  205. set wrap $wrap1
  206.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  207.         set sink [new Agent/TCP/FullTcp/Sack]
  208.         $ns_ attach-agent $node_(s1) $tcp1
  209.         $ns_ attach-agent $node_(k1) $sink
  210.         $tcp1 set fid_ $fid
  211.         $sink set fid_ $fid
  212.         $ns_ connect $tcp1 $sink
  213.         # set up TCP-level connections
  214.         $sink listen ; # will figure out who its peer is
  215.      } else {
  216.        set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  217.            TCPSink $node_(k1) $fid]
  218.      }
  219.         $tcp1 set window_ 50
  220.         set ftp1 [$tcp1 attach-app FTP]
  221.         $ns_ at 0.0 "$ftp1 start"
  222.         $self tcpDump $tcp1 2.0
  223.         $self drop_pkts $list
  224.         #$self traceQueues $node_(r1) [$self openTrace 2.0 $testName_]
  225. $ns_ at 2.0 "$self cleanupAll $testName_"
  226.         $ns_ run
  227. }
  228. TestSuite instproc setup1 {tcptype list delay list1 delay1} {
  229. global wrap wrap1 quiet
  230.         $self instvar ns_ node_ testName_ guide_
  231. $self setTopo 
  232. puts "Guide: $guide_"
  233.         Agent/TCP set bugFix_ false
  234. set fid 1
  235.         # Set up TCP connection
  236.      if {$tcptype == "Tahoe"} {
  237.        set tcp1 [$ns_ create-connection TCP $node_(s1) 
  238.            TCPSink $node_(k1) $fid]
  239.      } elseif {$tcptype == "Sack1"} {
  240.        set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  241.            TCPSink/Sack1  $node_(k1) $fid]
  242.      } elseif {$tcptype == "Fack"} {
  243.        set tcp1 [$ns_ create-connection TCP/Fack $node_(s1) 
  244.            TCPSink/Sack1  $node_(k1) $fid]
  245.      } elseif {$tcptype == "SackRH"} {
  246.        set tcp1 [$ns_ create-connection TCP/SackRH $node_(s1) 
  247.            TCPSink/Sack1 $node_(k1) $fid]
  248.      } elseif {$tcptype == "FullTcp"} {
  249. set wrap $wrap1
  250.         set tcp1 [new Agent/TCP/FullTcp]
  251.         set sink [new Agent/TCP/FullTcp]
  252.         $ns_ attach-agent $node_(s1) $tcp1
  253.         $ns_ attach-agent $node_(k1) $sink
  254.         $tcp1 set fid_ $fid
  255.         $sink set fid_ $fid
  256.         $ns_ connect $tcp1 $sink
  257.         # set up TCP-level connections
  258.         $sink listen ; # will figure out who its peer is
  259.      } elseif {$tcptype == "FullTcpTahoe"} {
  260. set wrap $wrap1
  261.         set tcp1 [new Agent/TCP/FullTcp/Tahoe]
  262.         set sink [new Agent/TCP/FullTcp/Tahoe]
  263.         $ns_ attach-agent $node_(s1) $tcp1
  264.         $ns_ attach-agent $node_(k1) $sink
  265.         $tcp1 set fid_ $fid
  266.         $sink set fid_ $fid
  267.         $ns_ connect $tcp1 $sink
  268.         # set up TCP-level connections
  269.         $sink listen ; # will figure out who its peer is
  270.      } elseif {$tcptype == "FullTcpNewreno"} {
  271. set wrap $wrap1
  272.         set tcp1 [new Agent/TCP/FullTcp/Newreno]
  273.         set sink [new Agent/TCP/FullTcp/Newreno]
  274.         $ns_ attach-agent $node_(s1) $tcp1
  275.         $ns_ attach-agent $node_(k1) $sink
  276.         $tcp1 set fid_ $fid
  277.         $sink set fid_ $fid
  278.         $ns_ connect $tcp1 $sink
  279.         # set up TCP-level connections
  280.         $sink listen ; # will figure out who its peer is
  281.      } elseif {$tcptype == "FullTcpSack1"} {
  282. set wrap $wrap1
  283.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  284.         set sink [new Agent/TCP/FullTcp/Sack]
  285.         $ns_ attach-agent $node_(s1) $tcp1
  286.         $ns_ attach-agent $node_(k1) $sink
  287.         $tcp1 set fid_ $fid
  288.         $sink set fid_ $fid
  289.         $ns_ connect $tcp1 $sink
  290.         # set up TCP-level connections
  291.         $sink listen ; # will figure out who its peer is
  292.      } else {
  293.        set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  294.            TCPSink $node_(k1) $fid]
  295.      }
  296.         $tcp1 set window_ 50
  297.         set ftp1 [$tcp1 attach-app FTP]
  298.         $ns_ at 0.0 "$ftp1 produce 22"
  299.         $self tcpDump $tcp1 2.0
  300.         $self dropPkts [$ns_ link $node_(k1) $node_(r1)] $fid $list true $delay
  301.         $self dropPkts [$ns_ link $node_(k1) $node_(r1)] $fid $list1 true $delay1
  302.         #$self traceQueues $node_(r1) [$self openTrace 2.0 $testName_]
  303. $ns_ at 2.0 "$self cleanupAll $testName_"
  304.         $ns_ run
  305. }
  306. # Definition of test-suite tests
  307. ###################################################
  308. ## One drop, numdupacks
  309. ###################################################
  310. Class Test/onedrop_tahoe -superclass TestSuite
  311. Test/onedrop_tahoe instproc init {} {
  312. $self instvar net_ test_ guide_
  313. set net_ net4
  314. set test_ onedrop_tahoe
  315. set guide_ "Tahoe TCP, numdupacks set to 3."
  316. $self next pktTraceFile
  317. }
  318. Test/onedrop_tahoe instproc run {} {
  319.         $self setup Tahoe {3}
  320. }
  321. Class Test/onedrop_numdup4_tahoe -superclass TestSuite
  322. Test/onedrop_numdup4_tahoe instproc init {} {
  323. $self instvar net_ test_ guide_
  324. set net_ net4
  325. set test_ onedrop_numdup4_tahoe
  326. set guide_ "Tahoe TCP, numdupacks set to 4."
  327. Agent/TCP set numdupacks_ 4
  328. Test/onedrop_numdup4_tahoe instproc run {} [Test/onedrop_tahoe info instbody run ]
  329. $self next pktTraceFile
  330. }
  331. Class Test/onedrop_tahoe_full -superclass TestSuite
  332. Test/onedrop_tahoe_full instproc init {} {
  333. $self instvar net_ test_ guide_
  334. set net_ net4
  335. set test_ onedrop_tahoe_full
  336. set guide_ "Tahoe Full TCP, numdupacks set to 3."
  337. $self next pktTraceFile
  338. }
  339. Test/onedrop_tahoe_full instproc run {} {
  340.         $self setup FullTcpTahoe {4}
  341. }
  342. Class Test/onedrop_numdup4_tahoe_full -superclass TestSuite
  343. Test/onedrop_numdup4_tahoe_full instproc init {} {
  344. $self instvar net_ test_ guide_
  345. set net_ net4
  346. set test_ onedrop_numdup4_tahoe_full
  347. set guide_ "Tahoe Full TCP, numdupacks set to 4."
  348. Agent/TCP/FullTcp set tcprexmtthresh_ 4
  349. $self next pktTraceFile
  350. }
  351. Test/onedrop_numdup4_tahoe_full instproc run {} {
  352.         $self setup FullTcpTahoe {4}
  353. }
  354. Class Test/onedrop_reno -superclass TestSuite
  355. Test/onedrop_reno instproc init {} {
  356. $self instvar net_ test_ guide_
  357. set net_ net4
  358. set test_ onedrop_reno
  359. set guide_      "Reno TCP, numdupacks set to 3."
  360. $self next pktTraceFile
  361. }
  362. Test/onedrop_reno instproc run {} {
  363.         $self setup Reno {3}
  364. }
  365. Class Test/onedrop_numdup4_reno -superclass TestSuite
  366. Test/onedrop_numdup4_reno instproc init {} {
  367. $self instvar net_ test_ guide_
  368. set net_ net4
  369. set test_ onedrop_numdup4_reno
  370. set guide_ "Reno TCP, numdupacks set to 4."
  371. Agent/TCP set numdupacks_ 4
  372. Test/onedrop_numdup4_reno instproc run {} [Test/onedrop_reno info instbody run ]
  373. $self next pktTraceFile
  374. }
  375. Class Test/onedrop_reno_full -superclass TestSuite
  376. Test/onedrop_reno_full instproc init {} {
  377. $self instvar net_ test_ guide_
  378. set net_ net4
  379. set test_ onedrop_reno_full
  380. set guide_ "Reno Full TCP, numdupacks set to 3."
  381. $self next pktTraceFile
  382. }
  383. Test/onedrop_reno_full instproc run {} {
  384.         $self setup FullTcp {4}
  385. }
  386. Class Test/onedrop_numdup4_reno_full -superclass TestSuite
  387. Test/onedrop_numdup4_reno_full instproc init {} {
  388. $self instvar net_ test_ guide_
  389. set net_ net4
  390. set test_ onedrop_numdup4_reno_full
  391. set guide_ "Reno Full TCP, numdupacks set to 4."
  392. Agent/TCP/FullTcp set tcprexmtthresh_ 4
  393. $self next pktTraceFile
  394. }
  395. Test/onedrop_numdup4_reno_full instproc run {} {
  396.         $self setup FullTcp {4}
  397. }
  398. Class Test/onedrop_newreno -superclass TestSuite
  399. Test/onedrop_newreno instproc init {} {
  400. $self instvar net_ test_ guide_
  401. set net_ net4
  402. set test_ onedrop_newreno
  403. set guide_      "NewReno TCP, numdupacks set to 3."
  404. $self next pktTraceFile
  405. }
  406. Test/onedrop_newreno instproc run {} {
  407.         $self setup Newreno {3}
  408. }
  409. Class Test/onedrop_numdup4_newreno -superclass TestSuite
  410. Test/onedrop_numdup4_newreno instproc init {} {
  411. $self instvar net_ test_ guide_
  412. set net_ net4
  413. set test_ onedrop_numdup4_newreno
  414. set guide_      "NewReno TCP, numdupacks set to 4."
  415. Agent/TCP set numdupacks_ 4
  416. Test/onedrop_numdup4_newreno instproc run {} [Test/onedrop_newreno info instbody run ]
  417. $self next pktTraceFile
  418. }
  419. Class Test/onedrop_newreno_full -superclass TestSuite
  420. Test/onedrop_newreno_full instproc init {} {
  421. $self instvar net_ test_ guide_
  422. set net_ net4
  423. set test_ onedrop_newreno_full
  424. set guide_      "NewReno Full TCP, numdupacks set to 3."
  425. $self next pktTraceFile
  426. }
  427. Test/onedrop_newreno_full instproc run {} {
  428.         $self setup FullTcpNewreno {4}
  429. }
  430. Class Test/onedrop_numdup4_newreno_full -superclass TestSuite
  431. Test/onedrop_numdup4_newreno_full instproc init {} {
  432. $self instvar net_ test_ guide_
  433. set net_ net4
  434. set test_ onedrop_numdup4_newreno_full
  435. set guide_      "NewReno Full TCP, numdupacks set to 4."
  436. Agent/TCP/FullTcp set tcprexmtthresh_ 4
  437. $self next pktTraceFile
  438. }
  439. Test/onedrop_numdup4_newreno_full instproc run {} {
  440.         $self setup FullTcpNewreno {4}
  441. }
  442. Class Test/onedrop_sack -superclass TestSuite
  443. Test/onedrop_sack instproc init {} {
  444. $self instvar net_ test_ guide_
  445. set net_ net4
  446. set test_ onedrop_sack
  447. set guide_      "Sack TCP, numdupacks set to 3."
  448. $self next pktTraceFile
  449. }
  450. Test/onedrop_sack instproc run {} {
  451.         $self setup Sack1 {3}
  452. }
  453. Class Test/onedrop_numdup4_sack -superclass TestSuite
  454. Test/onedrop_numdup4_sack instproc init {} {
  455. $self instvar net_ test_ guide_
  456. set net_ net4
  457. set test_ onedrop_numdup4_sack
  458. set guide_      "Sack TCP, numdupacks set to 4."
  459. Agent/TCP set numdupacks_ 4
  460. Test/onedrop_numdup4_sack instproc run {} [Test/onedrop_sack info instbody run ]
  461. $self next pktTraceFile
  462. }
  463. # Why does the sender sent two packets for the Fast Restransmit?
  464. Class Test/onedrop_sack_full -superclass TestSuite
  465. Test/onedrop_sack_full instproc init {} {
  466. $self instvar net_ test_ guide_
  467. set net_ net4
  468. set test_ onedrop_sack_full
  469. set guide_      "Sack Full TCP, numdupacks set to 3."
  470. $self next pktTraceFile
  471. }
  472. Test/onedrop_sack_full instproc run {} {
  473.        $self setup FullTcpSack1 {4}
  474. }
  475. Class Test/onedrop_numdup4_sack_full -superclass TestSuite
  476. Test/onedrop_numdup4_sack_full instproc init {} {
  477. $self instvar net_ test_ guide_
  478. set net_ net4
  479. set test_ onedrop_numdup4_sack_full
  480. set guide_      "Sack Full TCP, numdupacks set to 4."
  481. Agent/TCP/FullTcp set tcprexmtthresh_ 4
  482. $self next pktTraceFile
  483. }
  484. Test/onedrop_numdup4_sack_full instproc run {} {
  485.         $self setup FullTcpSack1 {4}
  486. }
  487. #############################################################
  488. ##  Tests for aggressive_maxburst_, for sending packets after
  489. ##     invalid ACKs.
  490. #############################################################
  491. Class Test/maxburst_tahoe -superclass TestSuite
  492. Test/maxburst_tahoe instproc init {} {
  493. $self instvar net_ test_ guide_
  494. set net_ net4a
  495. set test_ maxburst_tahoe
  496. set guide_ "Tahoe TCP, maxburst set to 3."
  497. Agent/TCP set aggressive_maxburst_ 0
  498. $self next pktTraceFile
  499. }
  500. Test/maxburst_tahoe instproc run {} {
  501. Agent/TCP set maxburst_ 3
  502.         $self setup1 Tahoe {8 9 10 11 12 } {100} {13} {0.02}
  503. }
  504. Class Test/maxburst_tahoe1 -superclass TestSuite
  505. Test/maxburst_tahoe1 instproc init {} {
  506. $self instvar net_ test_ guide_
  507. set net_ net4a
  508. set test_ maxburst_tahoe1
  509. set guide_ "Tahoe TCP, maxburst set to 3, aggressive_maxburst_."
  510. Agent/TCP set aggressive_maxburst_ 1
  511. Test/maxburst_tahoe1 instproc run {} [Test/maxburst_tahoe info instbody run ]
  512. $self next pktTraceFile
  513. }
  514. Class Test/maxburst_reno -superclass TestSuite
  515. Test/maxburst_reno instproc init {} {
  516. $self instvar net_ test_ guide_
  517. set net_ net4a
  518. set test_ maxburst_reno
  519. set guide_ "Tahoe TCP, maxburst set to 3."
  520. Agent/TCP set aggressive_maxburst_ 0
  521. $self next pktTraceFile
  522. }
  523. Test/maxburst_reno instproc run {} {
  524. Agent/TCP set maxburst_ 3
  525.         $self setup1 Reno {8 9 10 11 12 } {100} {13} {0.02}
  526. }
  527. Class Test/maxburst_reno1 -superclass TestSuite
  528. Test/maxburst_reno1 instproc init {} {
  529. $self instvar net_ test_ guide_
  530. set net_ net4a
  531. set test_ maxburst_reno1
  532. set guide_ "Reno TCP, maxburst set to 3, aggressive_maxburst_."
  533. Agent/TCP set aggressive_maxburst_ 1
  534. Test/maxburst_reno1 instproc run {} [Test/maxburst_reno info instbody run ]
  535. $self next pktTraceFile
  536. }
  537. Class Test/maxburst_newreno -superclass TestSuite
  538. Test/maxburst_newreno instproc init {} {
  539. $self instvar net_ test_ guide_
  540. set net_ net4a
  541. set test_ maxburst_newreno
  542. set guide_ "NewReno TCP, maxburst set to 3."
  543. Agent/TCP set aggressive_maxburst_ 0
  544. $self next pktTraceFile
  545. }
  546. Test/maxburst_newreno instproc run {} {
  547. Agent/TCP set maxburst_ 3
  548.         $self setup1 Newreno {8 9 10 11 12 } {100} {13} {0.02}
  549. }
  550. Class Test/maxburst_newreno1 -superclass TestSuite
  551. Test/maxburst_newreno1 instproc init {} {
  552. $self instvar net_ test_ guide_
  553. set net_ net4a
  554. set test_ maxburst_newreno1
  555. set guide_ "NewReno TCP, maxburst set to 3, aggressive_maxburst_."
  556. Agent/TCP set aggressive_maxburst_ 1
  557. Test/maxburst_newreno1 instproc run {} [Test/maxburst_newreno info instbody run ]
  558. $self next pktTraceFile
  559. }
  560. Class Test/maxburst_sack -superclass TestSuite
  561. Test/maxburst_sack instproc init {} {
  562. $self instvar net_ test_ guide_
  563. set net_ net4a
  564. set test_ maxburst_sack
  565. set guide_ "Sack TCP, maxburst set to 3."
  566. Agent/TCP set aggressive_maxburst_ 0
  567. $self next pktTraceFile
  568. }
  569. Test/maxburst_sack instproc run {} {
  570. Agent/TCP set maxburst_ 3
  571.         $self setup1 Sack1 {8 9 10 11 12 } {100} {13} {0.02}
  572. }
  573. Class Test/maxburst_sack1 -superclass TestSuite
  574. Test/maxburst_sack1 instproc init {} {
  575. $self instvar net_ test_ guide_
  576. set net_ net4a
  577. set test_ maxburst_sack1
  578. set guide_ "Sack TCP, maxburst set to 3, aggressive_maxburst_."
  579. Agent/TCP set aggressive_maxburst_ 1
  580. Test/maxburst_sack1 instproc run {} [Test/maxburst_sack info instbody run ]
  581. $self next pktTraceFile
  582. }
  583. ###################################################
  584. ## Timeout, from a list of packets dropped.
  585. ###################################################
  586. TestSuite instproc setup2 {tcptype list endtime} {
  587. global wrap wrap1 quiet
  588.         $self instvar ns_ node_ testName_ guide_
  589. $self setTopo 
  590. puts "Guide: $guide_"
  591. set fid 1
  592.         # Set up TCP connection
  593.      if {$tcptype == "Tahoe"} {
  594.        set tcp1 [$ns_ create-connection TCP $node_(s1) 
  595.            TCPSink $node_(k1) $fid]
  596.      } elseif {$tcptype == "Sack1"} {
  597.        set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  598.            TCPSink/Sack1  $node_(k1) $fid]
  599.      } elseif {$tcptype == "Fack"} {
  600.        set tcp1 [$ns_ create-connection TCP/Fack $node_(s1) 
  601.            TCPSink/Sack1  $node_(k1) $fid]
  602.      } elseif {$tcptype == "SackRH"} {
  603.        set tcp1 [$ns_ create-connection TCP/SackRH $node_(s1) 
  604.            TCPSink/Sack1 $node_(k1) $fid]
  605.      } elseif {$tcptype == "FullTcp"} {
  606. set wrap $wrap1
  607.         set tcp1 [new Agent/TCP/FullTcp]
  608.         set sink [new Agent/TCP/FullTcp]
  609.         $ns_ attach-agent $node_(s1) $tcp1
  610.         $ns_ attach-agent $node_(k1) $sink
  611.         $tcp1 set fid_ $fid
  612.         $sink set fid_ $fid
  613.         $ns_ connect $tcp1 $sink
  614.         # set up TCP-level connections
  615.         $sink listen ; # will figure out who its peer is
  616.      } elseif {$tcptype == "FullTcpTahoe"} {
  617. set wrap $wrap1
  618.         set tcp1 [new Agent/TCP/FullTcp/Tahoe]
  619.         set sink [new Agent/TCP/FullTcp/Tahoe]
  620.         $ns_ attach-agent $node_(s1) $tcp1
  621.         $ns_ attach-agent $node_(k1) $sink
  622.         $tcp1 set fid_ $fid
  623.         $sink set fid_ $fid
  624.         $ns_ connect $tcp1 $sink
  625.         # set up TCP-level connections
  626.         $sink listen ; # will figure out who its peer is
  627.      } elseif {$tcptype == "FullTcpNewreno"} {
  628. set wrap $wrap1
  629.         set tcp1 [new Agent/TCP/FullTcp/Newreno]
  630.         set sink [new Agent/TCP/FullTcp/Newreno]
  631.         $ns_ attach-agent $node_(s1) $tcp1
  632.         $ns_ attach-agent $node_(k1) $sink
  633.         $tcp1 set fid_ $fid
  634.         $sink set fid_ $fid
  635.         $ns_ connect $tcp1 $sink
  636.         # set up TCP-level connections
  637.         $sink listen ; # will figure out who its peer is
  638.      } elseif {$tcptype == "FullTcpSack1"} {
  639. set wrap $wrap1
  640.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  641.         set sink [new Agent/TCP/FullTcp/Sack]
  642.         $ns_ attach-agent $node_(s1) $tcp1
  643.         $ns_ attach-agent $node_(k1) $sink
  644.         $tcp1 set fid_ $fid
  645.         $sink set fid_ $fid
  646.         $ns_ connect $tcp1 $sink
  647.         # set up TCP-level connections
  648.         $sink listen ; # will figure out who its peer is
  649.      } else {
  650.        set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  651.            TCPSink $node_(k1) $fid]
  652.      }
  653.         $tcp1 set window_ 50
  654.         set ftp1 [$tcp1 attach-app FTP]
  655.         $ns_ at 0.0 "$ftp1 start"
  656.         $self tcpDump $tcp1 2.0
  657.         $self drop_pkts $list
  658.         #$self traceQueues $node_(r1) [$self openTrace 2.0 $testName_]
  659. $ns_ at $endtime "$self cleanupAll $testName_"
  660.         $ns_ run
  661. }
  662. ###################################################
  663. ## Timeouts, scenarios that are better without bugfix.
  664. ##   This also includes tests for timestamps with ts_resetRTO_,
  665. ##   to reset the RTO backoff after a valid RTT measurement.
  666. ###################################################
  667. Class Test/timeouts_tahoe -superclass TestSuite
  668. Test/timeouts_tahoe instproc init {} {
  669.         $self instvar net_ test_ guide_
  670.         set net_        net4
  671.         set test_       timeouts_tahoe
  672. set guide_      "Tahoe, timeouts, bugfix"
  673.         $self next pktTraceFile
  674. }
  675. Test/timeouts_tahoe instproc run {} {
  676.         $self setup2 Tahoe {7 8 9 10 11 12 13 14 21} 8
  677. }
  678. Class Test/timeouts_tahoe1 -superclass TestSuite
  679. Test/timeouts_tahoe1 instproc init {} {
  680.         $self instvar net_ test_ guide_
  681.         set net_        net4
  682.         set test_       timeouts_tahoe1
  683. set guide_      "Tahoe, timeouts, better without bugfix"
  684.         Agent/TCP set bugFix_ false
  685. Test/timeouts_tahoe1 instproc run {} [Test/timeouts_tahoe info instbody run ]
  686.         $self next pktTraceFile
  687. }
  688. Class Test/timeouts_tahoe2 -superclass TestSuite
  689. Test/timeouts_tahoe2 instproc init {} {
  690.         $self instvar net_ test_ guide_
  691.         set net_        net4
  692.         set test_       timeouts_tahoe2
  693. set guide_      "Tahoe, timeouts, bugfix, with timestamps, new version"
  694. Agent/TCP set timestamps_ true
  695. Agent/TCP set ts_resetRTO_ true
  696. Test/timeouts_tahoe2 instproc run {} [Test/timeouts_tahoe info instbody run ]
  697.         $self next pktTraceFile
  698. }
  699. Class Test/timeouts_tahoe3 -superclass TestSuite
  700. Test/timeouts_tahoe3 instproc init {} {
  701.         $self instvar net_ test_ guide_
  702.         set net_        net4
  703.         set test_       timeouts_tahoe3
  704. set guide_      "Tahoe, timeouts, bugfix, with timestamps, old version"
  705. Agent/TCP set timestamps_ true
  706. #Agent/TCP set ts_resetRTO_ true
  707. Test/timeouts_tahoe3 instproc run {} [Test/timeouts_tahoe info instbody run ]
  708.         $self next pktTraceFile
  709. }
  710. Class Test/timeouts_reno -superclass TestSuite
  711. Test/timeouts_reno instproc init {} {
  712.         $self instvar net_ test_ guide_
  713.         set net_        net4
  714.         set test_       timeouts_reno
  715. set guide_      "Reno, timeouts, bugfix"
  716.         $self next pktTraceFile
  717. }
  718. Test/timeouts_reno instproc run {} {
  719.         $self setup2 Reno {7 8 9 10 11 12 13 14 21} 8
  720. }
  721. Class Test/timeouts_reno_noexitFR -superclass TestSuite
  722. Test/timeouts_reno_noexitFR instproc init {} {
  723.         $self instvar net_ test_ guide_
  724.         set net_        net4
  725.         set test_       timeouts_reno_noexitFR
  726. set guide_      "Reno, timeouts, bugfix, without exitFastRetrans_"
  727. Agent/TCP set exitFastRetrans_ false
  728. Test/timeouts_reno_noexitFR instproc run {} [Test/timeouts_reno info instbody run ]
  729.         $self next pktTraceFile
  730. }
  731. Class Test/timeouts_reno1 -superclass TestSuite
  732. Test/timeouts_reno1 instproc init {} {
  733.         $self instvar net_ test_ guide_
  734.         set net_        net4
  735.         set test_       timeouts_reno1
  736. set guide_      "Reno, timeouts, better without bugfix"
  737.         Agent/TCP set bugFix_ false
  738. Test/timeouts_reno1 instproc run {} [Test/timeouts_reno info instbody run ]
  739.         $self next pktTraceFile
  740. }
  741. Class Test/timeouts_reno2 -superclass TestSuite
  742. Test/timeouts_reno2 instproc init {} {
  743.         $self instvar net_ test_ guide_
  744.         set net_        net4
  745.         set test_       timeouts_reno2
  746. set guide_      "Reno, timeouts, bugfix, with timestamps, old version"
  747. Agent/TCP set timestamps_ true
  748. Agent/TCP set ts_resetRTO_ true
  749. Test/timeouts_reno2 instproc run {} [Test/timeouts_reno info instbody run ]
  750.         $self next pktTraceFile
  751. }
  752. Class Test/timeouts_reno3 -superclass TestSuite
  753. Test/timeouts_reno3 instproc init {} {
  754.         $self instvar net_ test_ guide_
  755.         set net_        net4
  756.         set test_       timeouts_reno3
  757. set guide_      "Reno, timeouts, bugfix, with timestamps, new version"
  758. Agent/TCP set timestamps_ true
  759. #Agent/TCP set ts_resetRTO_ true
  760. Test/timeouts_reno3 instproc run {} [Test/timeouts_reno info instbody run ]
  761.         $self next pktTraceFile
  762. }
  763. Class Test/timeouts_newreno -superclass TestSuite
  764. Test/timeouts_newreno instproc init {} {
  765.         $self instvar net_ test_ guide_
  766.         set net_        net4
  767.         set test_       timeouts_newreno
  768. set guide_      "NewReno, timeouts, bugfix"
  769.         $self next pktTraceFile
  770. }
  771. Test/timeouts_newreno instproc run {} {
  772.         $self setup2 Newreno {7 8 9 10 11 12 13 14 21} 8
  773. }
  774. Class Test/timeouts_newreno_noexitFR -superclass TestSuite
  775. Test/timeouts_newreno_noexitFR instproc init {} {
  776.         $self instvar net_ test_ guide_
  777.         set net_        net4
  778.         set test_       timeouts_newreno_noexitFR
  779. set guide_      "NewReno, timeouts, bugfix, without exitFastRetrans_"
  780. Agent/TCP set exitFastRetrans_ false
  781. Test/timeouts_newreno_noexitFR instproc run {} [Test/timeouts_newreno info instbody run ]
  782.         $self next pktTraceFile
  783. }
  784. Class Test/timeouts_newreno1 -superclass TestSuite
  785. Test/timeouts_newreno1 instproc init {} {
  786.         $self instvar net_ test_ guide_
  787.         set net_        net4
  788.         set test_       timeouts_newreno1
  789. set guide_      "NewReno, timeouts, better without bugfix"
  790.         Agent/TCP set bugFix_ false
  791. Test/timeouts_newreno1 instproc run {} [Test/timeouts_newreno info instbody run ]
  792.         $self next pktTraceFile
  793. }
  794. Class Test/timeouts_newreno2 -superclass TestSuite
  795. Test/timeouts_newreno2 instproc init {} {
  796.         $self instvar net_ test_ guide_
  797.         set net_        net4
  798.         set test_       timeouts_newreno2
  799. set guide_      "NewReno, timeouts, bugfix, with timestamps, old version"
  800. Agent/TCP set timestamps_ true
  801. Agent/TCP set ts_resetRTO_ true
  802. Test/timeouts_newreno2 instproc run {} [Test/timeouts_newreno info instbody run ]
  803.         $self next pktTraceFile
  804. }
  805. Class Test/timeouts_newreno3 -superclass TestSuite
  806. Test/timeouts_newreno3 instproc init {} {
  807.         $self instvar net_ test_ guide_
  808.         set net_        net4
  809.         set test_       timeouts_newreno3
  810. set guide_      "NewReno, timeouts, bugfix, with timestamps, new version"
  811. Agent/TCP set timestamps_ true
  812. #Agent/TCP set ts_resetRTO_ true
  813. Test/timeouts_newreno3 instproc run {} [Test/timeouts_newreno info instbody run ]
  814.         $self next pktTraceFile
  815. }
  816. Class Test/timeouts_sack -superclass TestSuite
  817. Test/timeouts_sack instproc init {} {
  818.         $self instvar net_ test_ guide_
  819.         set net_        net4
  820.         set test_       timeouts_sack
  821. set guide_      "Sack, timeouts, bugfix"
  822.         $self next pktTraceFile
  823. }
  824. Test/timeouts_sack instproc run {} {
  825.         $self setup2 Sack1 {7 8 9 10 11 12 13 14 21} 8
  826. }
  827. Class Test/timeouts_sack1 -superclass TestSuite
  828. Test/timeouts_sack1 instproc init {} {
  829.         $self instvar net_ test_ guide_
  830.         set net_        net4
  831.         set test_       timeouts_sack1
  832. set guide_      "Sack, timeouts, better without bugfix"
  833.         Agent/TCP set bugFix_ false
  834. Test/timeouts_sack1 instproc run {} [Test/timeouts_sack info instbody run ]
  835.         $self next pktTraceFile
  836. }
  837. Class Test/timeouts_sack2 -superclass TestSuite
  838. Test/timeouts_sack2 instproc init {} {
  839.         $self instvar net_ test_ guide_
  840.         set net_        net4
  841.         set test_       timeouts_sack2
  842. set guide_      "Sack, timeouts, bugfix, with timestamps, old version"
  843. Agent/TCP set timestamps_ true
  844. Agent/TCP set ts_resetRTO_ true
  845. Test/timeouts_sack2 instproc run {} [Test/timeouts_sack info instbody run ]
  846.         $self next pktTraceFile
  847. }
  848. Class Test/timeouts_sack3 -superclass TestSuite
  849. Test/timeouts_sack3 instproc init {} {
  850.         $self instvar net_ test_ guide_
  851.         set net_        net4
  852.         set test_       timeouts_sack3
  853. set guide_      "Sack, timeouts, bugfix, with timestamps, new version"
  854. Agent/TCP set timestamps_ true
  855. #Agent/TCP set ts_resetRTO_ true
  856. Test/timeouts_sack3 instproc run {} [Test/timeouts_sack info instbody run ]
  857.         $self next pktTraceFile
  858. }
  859. ###################################################
  860. ## Timeouts, scenarios that are better with bugfix.
  861. ###################################################
  862. Class Test/timeoutsA_tahoe -superclass TestSuite
  863. Test/timeoutsA_tahoe instproc init {} {
  864.         $self instvar net_ test_ guide_
  865.         set net_        net4
  866.         set test_       timeoutsA_tahoe
  867. set guide_      "Tahoe, timeoutsA, bugfix"
  868.         #Agent/TCP set bugFix_ false
  869.         $self next pktTraceFile
  870. }
  871. Test/timeoutsA_tahoe instproc run {} {
  872.         $self setup2 Tahoe {20 21 22 23 24 25 26 31 41} 5
  873. }
  874. Class Test/timeoutsA_tahoe1 -superclass TestSuite
  875. Test/timeoutsA_tahoe1 instproc init {} {
  876.         $self instvar net_ test_ guide_
  877.         set net_        net4
  878.         set test_       timeoutsA_tahoe1
  879. set guide_      "Tahoe, timeoutsA, worse without bugfix"
  880.         Agent/TCP set bugFix_ false
  881. Test/timeoutsA_tahoe1 instproc run {} [Test/timeoutsA_tahoe info instbody run ]
  882.         $self next pktTraceFile
  883. }
  884. TestSuite runTest