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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1995-1997 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-ecn-full.tcl,v 1.22 2007/09/16 21:28:17 sallyfloyd Exp $
  34. #
  35. # To run all tests: test-all-ecn-full
  36. ##To run tests:
  37. ## set test=ecn_twoecn_reno
  38. ## ../../ns test-suite-ecn-full.tcl $test'_full'
  39. ## ../../ns test-suite-ecn.tcl $test
  40. set dir [pwd]
  41. catch "cd tcl/test"
  42. source misc_simple.tcl
  43. remove-all-packet-headers       ; # removes all except common
  44. add-packet-header Flags IP TCP  ; # hdrs reqd for validation test
  45.  
  46. # FOR UPDATING GLOBAL DEFAULTS:
  47. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  48. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  49. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  50. Agent/TCP set tcpTick_ 0.1
  51. # The default for tcpTick_ is being changed to reflect a changing reality.
  52. Agent/TCP set rfc2988_ false
  53. # The default for rfc2988_ is being changed to true.
  54. # FOR UPDATING GLOBAL DEFAULTS:
  55. Agent/TCP set minrto_ 1
  56. # default changed on 10/14/2004.
  57. Queue/RED set bytes_ false              
  58. # default changed on 10/11/2004.
  59. Queue/RED set queue_in_bytes_ false
  60. # default changed on 10/11/2004.
  61. Queue/RED set q_weight_ 0.002
  62. Queue/RED set thresh_ 5 
  63. Queue/RED set maxthresh_ 15
  64. # The RED parameter defaults are being changed for automatic configuration.
  65. Agent/TCP set useHeaders_ false
  66. # The default is being changed to useHeaders_ true.
  67. Agent/TCP set windowInit_ 1
  68. # The default is being changed to 2.
  69. Agent/TCP set singledup_ 0
  70. # The default is being changed to 1
  71. Agent/TCP set minrto_ 0
  72. Agent/TCP set syn_ false
  73. Agent/TCP set delay_growth_ false
  74. catch "cd $dir"
  75. set scale 0.00001
  76. set wrap [expr 90 * 1000 + 40]
  77. Agent/TCP/FullTcp set segsize_ 960
  78. # Agent/TCP/FullTcp set debug_ true;
  79. set flowfile fairflow.tr; # file where flow data is written
  80. set flowgraphfile fairflow.xgr; # file given to graph tool 
  81. Class Topology
  82. Topology instproc node? num {
  83.     $self instvar node_
  84.     return $node_($num)
  85. }
  86. Topology instproc makenodes ns {
  87.     $self instvar node_
  88.     set node_(s1) [$ns node]
  89.     set node_(s2) [$ns node]
  90.     set node_(r1) [$ns node]
  91.     set node_(r2) [$ns node]
  92.     set node_(s3) [$ns node]
  93.     set node_(s4) [$ns node]
  94. }
  95. Topology instproc createlinks ns {  
  96.     $self instvar node_
  97.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  98.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  99.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  100.     $ns queue-limit $node_(r1) $node_(r2) 25
  101.     $ns queue-limit $node_(r2) $node_(r1) 25
  102.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  103.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  104.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  105.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  106.     $ns duplex-link-op $node_(r1) $node_(r2) orient right
  107.     $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0
  108.     $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0
  109.     $ns duplex-link-op $node_(s3) $node_(r2) orient left-down
  110.     $ns duplex-link-op $node_(s4) $node_(r2) orient left-up
  111. }
  112. Class Topology/net2 -superclass Topology
  113. Topology/net2 instproc init ns {
  114.     $self instvar node_
  115.     $self makenodes $ns
  116.     $self createlinks $ns
  117. }
  118. Class Topology/net2-lossy -superclass Topology
  119. Topology/net2-lossy instproc init ns {
  120.     $self instvar node_
  121.     $self makenodes $ns
  122.     $self createlinks $ns
  123.  
  124.     $self instvar lossylink_
  125.     set lossylink_ [$ns link $node_(r1) $node_(r2)]
  126.     set em [new ErrorModule Fid]
  127.     set errmodel [new ErrorModel/Periodic]
  128.     $errmodel unit pkt
  129.     $lossylink_ errormodule $em
  130.     $em insert $errmodel
  131.     $em bind $errmodel 0
  132.     $em default pass
  133. TestSuite instproc finish file {
  134. global quiet PERL wrap scale
  135. $self instvar ns_ tchan_ testName_ cwnd_chan_
  136.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  137.    $PERL ../../bin/raw2xg -a -e -s $scale -m $wrap -t $file > temp.rands
  138. exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  139.   $PERL ../../bin/raw2xg -a -e -s $scale -m $wrap -t $file > temp1.rands
  140. if {$quiet == "false"} {
  141. exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  142. # The line below plots both data and ack packets.
  143. #         exec xgraph -bb -tk -nl -m -x time -y packets temp.rands 
  144. #                     temp1.rands &
  145. }
  146.         ## now use default graphing tool to make a data file
  147.         ## if so desired
  148. if { [info exists tchan_] && $quiet == "false" } {
  149. $self plotQueue $testName_
  150. }
  151. if { [info exists cwnd_chan_] && $quiet == "false" } {
  152. $self plot_cwnd 
  153. }
  154. $ns_ halt
  155. }
  156. TestSuite instproc enable_tracequeue ns {
  157. $self instvar tchan_ node_
  158. set redq [[$ns link $node_(r1) $node_(r2)] queue]
  159. set tchan_ [open all.q w]
  160. $redq trace curq_
  161. $redq trace ave_
  162. $redq attach $tchan_
  163. }
  164. TestSuite instproc plotQueue file {
  165. global quiet
  166. $self instvar tchan_
  167. #
  168. # Plot the queue size and average queue size, for RED gateways.
  169. #
  170. set awkCode {
  171. {
  172. if ($1 == "Q" && NF>2) {
  173. print $2, $3 >> "temp.q";
  174. set end $2
  175. }
  176. else if ($1 == "a" && NF>2)
  177. print $2, $3 >> "temp.a";
  178. }
  179. }
  180. set f [open temp.queue w]
  181. puts $f "TitleText: $file"
  182. puts $f "Device: Postscript"
  183. if { [info exists tchan_] } {
  184. close $tchan_
  185. }
  186. exec rm -f temp.q temp.a 
  187. exec touch temp.a temp.q
  188. exec awk $awkCode all.q
  189. puts $f "queue
  190. exec cat temp.q >@ $f  
  191. puts $f n"ave_queue
  192. exec cat temp.a >@ $f
  193. ###puts $f n"thresh
  194. ###puts $f 0 [[ns link $r1 $r2] get thresh]
  195. ###puts $f $end [[ns link $r1 $r2] get thresh]
  196. close $f
  197. if {$quiet == "false"} {
  198. exec xgraph -bb -tk -x time -y queue temp.queue &
  199. }
  200. }
  201. TestSuite instproc tcpDumpAll { tcpSrc interval label } {
  202.     global quiet
  203.     $self instvar dump_inst_ ns_
  204.     if ![info exists dump_inst_($tcpSrc)] {
  205. set dump_inst_($tcpSrc) 1
  206. set report $label/window=[$tcpSrc set window_]/packetSize=[$tcpSrc set packetSize_]
  207. if {$quiet == "false"} {
  208. puts $report
  209. }
  210. $ns_ at 0.0 "$self tcpDumpAll $tcpSrc $interval $label"
  211. return
  212.     }
  213.     $ns_ at [expr [$ns_ now] + $interval] "$self tcpDumpAll $tcpSrc $interval $label"
  214.     set report time=[$ns_ now]/class=$label/ack=[$tcpSrc set ack_]/packets_resent=[$tcpSrc set nrexmitpack_]
  215.     if {$quiet == "false"} {
  216.      puts $report
  217.     }
  218. }       
  219. TestSuite instproc emod {} {
  220. $self instvar topo_
  221. $topo_ instvar lossylink_
  222.         set errmodule [$lossylink_ errormodule]
  223. return $errmodule
  224. }
  225. TestSuite instproc setloss {} {
  226. $self instvar topo_
  227. $topo_ instvar lossylink_
  228.         set errmodule [$lossylink_ errormodule]
  229.         set errmodel [$errmodule errormodels]
  230.         if { [llength $errmodel] > 1 } {
  231.                 puts "droppedfin: confused by >1 err models..abort"
  232.                 exit 1
  233.         }
  234. return $errmodel
  235. }
  236. TestSuite instproc ecnsetup { tcptype {stoptime 3.0} { tcp1fid 0 } { delack 0 }} {
  237.     $self instvar ns_ node_ testName_ net_
  238.     $self setTopo
  239. ##
  240. ##  Agent/TCP set maxburst_ 4
  241. ##
  242.     set delay 10ms
  243.     $ns_ delay $node_(r1) $node_(r2) $delay
  244.     $ns_ delay $node_(r2) $node_(r1) $delay
  245.     set redq [[$ns_ link $node_(r1) $node_(r2)] queue]
  246.     $redq set setbit_ true
  247.     $self tcpconnection $tcptype $tcp1fid $delack 1
  248.     #$self enable_tracequeue $ns_
  249.         
  250.     # trace only the bottleneck link
  251.     ##$self traceQueues $node_(r1) [$self openTrace $stoptime $testName_]
  252.     $ns_ at $stoptime "$self cleanupAll $testName_"
  253. }
  254. TestSuite instproc tcpconnection { tcptype tcpfid delack dump } {
  255.     $self instvar ns_ node_
  256.     if {$tcptype == "Reno" } {
  257.       set tcp [$ns_ create-connection-list TCP/FullTcp $node_(s1) 
  258.   TCP/FullTcp $node_(s3) $tcpfid]
  259.     } else {
  260.       set tcp [$ns_ create-connection-list TCP/FullTcp/$tcptype $node_(s1) 
  261.   TCP/FullTcp/$tcptype $node_(s3) $tcpfid]
  262.     }
  263.     set tcp1 [lindex $tcp 0]
  264.     set sink [lindex $tcp 1]
  265.     $sink listen
  266.     $sink set ecn_ 1
  267.  
  268.     if {$delack == 1} {
  269. $sink set interval_ 100ms
  270.     }
  271.     $tcp1 set window_ 30
  272.     $tcp1 set ecn_ 1
  273.     set ftp1 [$tcp1 attach-app FTP]
  274.     $ns_ at 0.0 "$ftp1 start"
  275.     if { $dump == 1 } {
  276. $self tcpDump $tcp1 5.0
  277.         $self enable_tracecwnd $ns_ $tcp1
  278.     }
  279. }
  280. TestSuite instproc second_tcp { tcptype starttime } {
  281.     $self instvar ns_ node_
  282.     if {$tcptype == "Tahoe"} {
  283.       set tcp [$ns_ create-connection TCP $node_(s1) 
  284.          TCPSink $node_(s3) 2]
  285.     } elseif {$tcptype == "Sack1"} {
  286.       set tcp [$ns_ create-connection TCP/Sack1 $node_(s1) 
  287.           TCPSink/Sack1  $node_(s3) 2]
  288.     } else {
  289.       set tcp [$ns_ create-connection TCP/$tcptype $node_(s1) 
  290.          TCPSink $node_(s3) 2]
  291.     }
  292.     $tcp set window_ 30
  293.     $tcp set ecn_ 1
  294.     set ftp [$tcp attach-app FTP]
  295.     $ns_ at $starttime "$ftp start"
  296. }
  297. # TestSuite instproc second_tcp { tcptype starttime } {
  298. #     $self tcpconnection $tcptype 2 0 0 
  299. # }
  300. # Drop the specified packet.
  301. TestSuite instproc drop_pkt { number } {
  302.     $self instvar ns_ lossmodel
  303.     set lossmodel [$self setloss]
  304.     $lossmodel set offset_ $number
  305.     $lossmodel set period_ 10000
  306. }
  307. TestSuite instproc drop_pkts pkts {
  308.     $self instvar ns_ errmodel1
  309.     set emod [$self emod]
  310.     set errmodel1 [new ErrorModel/List]
  311.     $errmodel1 droplist $pkts
  312.     $emod insert $errmodel1
  313.     $emod bind $errmodel1 1
  314. }
  315. #######################################################################
  316. # Reno Tests #
  317. #######################################################################
  318. # Plain ECN
  319. Class Test/ecn_nodrop_reno_full -superclass TestSuite
  320. Test/ecn_nodrop_reno_full instproc init {} {
  321.         $self instvar net_ test_
  322.         Queue/RED set setbit_ true
  323.         set net_ net2-lossy
  324. Agent/TCP set bugFix_ true
  325.         set test_ ecn_nodrop_reno_full
  326.         $self next pktTraceFile
  327. }
  328. Test/ecn_nodrop_reno_full instproc run {} {
  329. $self instvar ns_
  330. Agent/TCP set old_ecn_ 1
  331. $self ecnsetup Reno 3.0 
  332. $self drop_pkt 10000
  333. $ns_ run
  334. }
  335. # Two ECNs close together
  336. Class Test/ecn_twoecn_reno_full -superclass TestSuite
  337. Test/ecn_twoecn_reno_full instproc init {} {
  338.         $self instvar net_ test_ 
  339.         Queue/RED set setbit_ true
  340.         set net_ net2-lossy
  341. Agent/TCP set bugFix_ true
  342.         set test_ ecn_twoecn_reno_full
  343.         $self next pktTraceFile
  344. }
  345. Test/ecn_twoecn_reno_full instproc run {} {
  346. $self instvar ns_ lossmodel
  347. Agent/TCP set old_ecn_ 1
  348. $self ecnsetup Reno 3.0 
  349. $self drop_pkt 243
  350. $lossmodel set markecn_ true
  351. $ns_ run
  352. }
  353. # ECN followed by packet loss.
  354. Class Test/ecn_drop_reno_full -superclass TestSuite
  355. Test/ecn_drop_reno_full instproc init {} {
  356.         $self instvar net_ test_
  357.         Queue/RED set setbit_ true
  358.         set net_ net2-lossy
  359. Agent/TCP set bugFix_ true
  360.         set test_ ecn_drop_reno_full
  361.         $self next pktTraceFile
  362. }
  363. Test/ecn_drop_reno_full instproc run {} {
  364. $self instvar ns_
  365. Agent/TCP set old_ecn_ 1
  366. $self ecnsetup Reno 3.0
  367. $self drop_pkt 243
  368. $ns_ run
  369. }
  370. # This shows ECN preceded by packet loss,
  371. Class Test/ecn_drop1_reno_full -superclass TestSuite
  372. Test/ecn_drop1_reno_full instproc init {} {
  373.         $self instvar net_ test_
  374.         Queue/RED set setbit_ true
  375.         set net_ net2-lossy
  376. Agent/TCP set bugFix_ true
  377.         set test_ ecn_drop1_reno_full
  378.         $self next pktTraceFile
  379. }
  380. Test/ecn_drop1_reno_full instproc run {} {
  381. $self instvar ns_
  382. Agent/TCP set old_ecn_ 1
  383. $self ecnsetup Reno 3.0
  384. $self drop_pkt 237
  385. $ns_ run
  386. }
  387. # Packet loss only.
  388. Class Test/ecn_noecn_reno_full -superclass TestSuite
  389. Test/ecn_noecn_reno_full instproc init {} {
  390.         $self instvar net_ test_
  391.         Queue/RED set setbit_ true
  392. Queue/RED set thresh_ 1000
  393. Queue/RED set maxthresh_ 1000
  394.         set net_ net2-lossy
  395. Agent/TCP set bugFix_ true
  396.         set test_ ecn_noecn_reno_full
  397. Test/ecn_noecn_reno_full instproc run {} [Test/ecn_drop_reno_full info instbody run ]
  398.         $self next pktTraceFile
  399. }
  400. # Multiple dup acks with bugFix_
  401. Class Test/ecn_bursty_reno_full -superclass TestSuite
  402. Test/ecn_bursty_reno_full instproc init {} {
  403.         $self instvar net_ test_
  404.         Queue/RED set setbit_ true
  405. Queue/RED set thresh_ 100
  406. Queue/RED set maxthresh_ 100
  407.         set net_ net2-lossy
  408. Agent/TCP set bugFix_ true
  409.         set test_ ecn_bursty_reno_full
  410.         $self next pktTraceFile
  411. }
  412. Test/ecn_bursty_reno_full instproc run {} {
  413. $self instvar ns_
  414. $self ecnsetup Reno 3.0
  415.         set lossmodel [$self setloss]
  416.         $lossmodel set offset_ 245
  417. $lossmodel set burstlen_ 15
  418.         $lossmodel set period_ 10000
  419. $ns_ run
  420. }
  421. # Multiple dup acks following ECN
  422. Class Test/ecn_burstyEcn_reno_full -superclass TestSuite
  423. Test/ecn_burstyEcn_reno_full instproc init {} {
  424.         global quiet
  425.         $self instvar net_ test_
  426.         Queue/RED set setbit_ true
  427.         set net_ net2-lossy
  428. Agent/TCP set bugFix_ true
  429. if {$quiet == "false"} {
  430.                 Agent/TCP/FullTcp set debug_ true
  431.         }
  432.         set test_ ecn_burstyEcn_reno_full
  433. Test/ecn_burstyEcn_reno_full instproc run {} [Test/ecn_bursty_reno_full info instbody run ]   
  434.         $self next pktTraceFile
  435. }
  436. # Multiple dup acks without bugFix_
  437. Class Test/ecn_noBugfix_reno_full -superclass TestSuite
  438. Test/ecn_noBugfix_reno_full instproc init {} {
  439.         $self instvar net_ test_
  440. Queue/RED set thresh_ 100 
  441. Queue/RED set maxthresh_ 100
  442.         Queue/RED set setbit_ true
  443.         set net_ net2-lossy
  444. Agent/TCP set bugFix_ false
  445.         set test_ ecn_noBugfix_reno_full
  446. Test/ecn_noBugfix_reno_full instproc run {} [Test/ecn_bursty_reno_full info instbody run ]
  447.         $self next pktTraceFile
  448. }
  449. # ECN followed by timeout.
  450. Class Test/ecn_timeout_reno_full -superclass TestSuite
  451. Test/ecn_timeout_reno_full instproc init {} {
  452.         $self instvar net_ test_
  453.         Queue/RED set setbit_ true
  454.         set net_ net2-lossy
  455. Agent/TCP set bugFix_ true
  456.         set test_ ecn_timeout_reno_full
  457.         $self next pktTraceFile
  458. }
  459. Test/ecn_timeout_reno_full instproc run {} {
  460. $self instvar ns_
  461. $self ecnsetup Reno 3.0 1
  462. $self drop_pkts {242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267} 
  463. $ns_ run
  464. }
  465. # ECN followed by a timeout, followed by an ECN representing a
  466. # new instance of congestion.
  467. Class Test/ecn_timeout1_reno_full -superclass TestSuite
  468. Test/ecn_timeout1_reno_full instproc init {} {
  469.         $self instvar net_ test_
  470.         Queue/RED set setbit_ true
  471.         set net_ net2-lossy
  472. Agent/TCP set bugFix_ true
  473.         set test_ ecn_timeout1_reno_full
  474.         $self next pktTraceFile
  475. }
  476. Test/ecn_timeout1_reno_full instproc run {} {
  477. $self instvar ns_
  478. Agent/TCP set old_ecn_ 1
  479. $self ecnsetup Reno 3.0 1
  480. $self drop_pkts {245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262} 
  481. $self second_tcp Tahoe 1.2
  482. $ns_ run
  483. }
  484. # Packet drops with a window of one packet.
  485. Class Test/ecn_smallwin_reno_full -superclass TestSuite
  486. Test/ecn_smallwin_reno_full instproc init {} {
  487.         $self instvar net_ test_
  488.         Queue/RED set setbit_ true
  489. Agent/TCP set bugFix_ true
  490.         set net_ net2-lossy
  491.         set test_ ecn_smallwin_reno_full
  492.         $self next pktTraceFile
  493. }
  494. Test/ecn_smallwin_reno_full instproc run {} {
  495. $self instvar ns_
  496. Agent/TCP set old_ecn_ 0
  497. $self ecnsetup Reno 6.0 1
  498. $self drop_pkts {4 8 9 10 11 100 115 118 119 121 122}
  499. $ns_ run
  500. }
  501. #ECN with a window of one packet.
  502. Class Test/ecn_smallwinEcn_reno_full -superclass TestSuite
  503. Test/ecn_smallwinEcn_reno_full instproc init {} {
  504.         $self instvar net_ test_ 
  505.         Queue/RED set setbit_ true
  506.         set net_ net2-lossy
  507. Agent/TCP set bugFix_ true
  508. Agent/TCP set rfc2988_ true
  509.         set test_ ecn_smallwinEcn_reno_full
  510.         $self next pktTraceFile
  511. }
  512. Test/ecn_smallwinEcn_reno_full instproc run {} {
  513. $self instvar ns_ errmodel1
  514. Agent/TCP set old_ecn_ 0
  515. $self ecnsetup Reno 10.0 1
  516. $self drop_pkts {4 8 9 10 11 100 115 118 119 121 122}
  517. #$self drop_pkts {6 10 11 13 14 15 122 137 145 150 152 153 154 155}
  518. $errmodel1 set markecn_ true
  519. $ns_ run
  520. }
  521. # Packet drops for the second packet.
  522. Class Test/ecn_secondpkt_reno_full -superclass TestSuite
  523. Test/ecn_secondpkt_reno_full instproc init {} {
  524.         $self instvar net_ test_
  525.         Queue/RED set setbit_ true
  526. Agent/TCP set bugFix_ true
  527.         set net_ net2-lossy
  528.         set test_ ecn_secondpkt_reno_full
  529.         $self next pktTraceFile
  530. }
  531. Test/ecn_secondpkt_reno_full instproc run {} {
  532. $self instvar ns_
  533. Agent/TCP set old_ecn_ 0
  534. $self ecnsetup Reno 2.0 1
  535. $self drop_pkts {3 5} 
  536. $ns_ run
  537. }
  538. # ECN for the second packet.
  539. Class Test/ecn_secondpktEcn_reno_full -superclass TestSuite
  540. Test/ecn_secondpktEcn_reno_full instproc init {} {
  541.         $self instvar net_ test_ 
  542.         Queue/RED set setbit_ true
  543.         set net_ net2-lossy
  544. Agent/TCP set bugFix_ true
  545.         set test_ ecn_secondpktEcn_reno_full
  546.         $self next pktTraceFile
  547. }
  548. Test/ecn_secondpktEcn_reno_full instproc run {} {
  549. $self instvar ns_ errmodel1
  550. Agent/TCP set old_ecn_ 0
  551. $self ecnsetup Reno 2.0 1
  552. #$self drop_pkts {2 4} 
  553. $self drop_pkts {3 5}
  554. $errmodel1 set markecn_ true
  555. $ns_ run
  556. }
  557. TestSuite runTest