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

通讯编程

开发平台:

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-ack.tcl,v 1.29 2007/09/29 01:09:23 sallyfloyd Exp $
  34. #
  35. # To run all tests: test-all-ecn-ack
  36. set dir [pwd]
  37. catch "cd tcl/test"
  38. catch "cd $dir"
  39. source misc_simple.tcl
  40. remove-all-packet-headers       ; # removes all except common
  41. add-packet-header Flags IP TCP RTP ; # hdrs reqd for validation test
  42.  
  43. # FOR UPDATING GLOBAL DEFAULTS:
  44. # Agent/TCP/FullTcp set debug_ true;
  45. set flowfile fairflow.tr; # file where flow data is written
  46. set flowgraphfile fairflow.xgr; # file given to graph tool 
  47. Trace set show_tcphdr_ 1
  48. set wrap 90
  49. set wrap1 [expr 90 * 512 + 40]
  50. Class Topology
  51.     
  52. Topology instproc node? num {
  53.     $self instvar node_
  54.     return $node_($num)
  55. }
  56. Topology instproc makenodes ns {
  57.     $self instvar node_
  58.     set node_(s1) [$ns node]
  59.     set node_(s2) [$ns node]
  60.     set node_(r1) [$ns node]
  61.     set node_(r2) [$ns node]
  62.     set node_(s3) [$ns node]
  63.     set node_(s4) [$ns node]
  64. }
  65. Topology instproc createlinks ns {
  66.     $self instvar node_
  67.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  68.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  69.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  70.     $ns queue-limit $node_(r1) $node_(r2) 25
  71.     $ns queue-limit $node_(r2) $node_(r1) 25
  72.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  73.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  74. }
  75. Class Topology/net2 -superclass Topology
  76. Topology/net2 instproc init ns {
  77.     $self instvar node_
  78.     $self makenodes $ns
  79.     $self createlinks $ns
  80. }
  81. Class Topology/net2-lossy -superclass Topology
  82. Topology/net2-lossy instproc init ns {
  83.     $self instvar node_
  84.     $self makenodes $ns
  85.     $self createlinks $ns
  86.     $self instvar lossylink_
  87.     set lossylink_ [$ns link $node_(r1) $node_(r2)]
  88.     set em [new ErrorModule Fid]
  89.     set errmodel [new ErrorModel/Periodic]
  90.     $errmodel unit pkt
  91.     $lossylink_ errormodule $em
  92.     $em insert $errmodel
  93.     $em bind $errmodel 0
  94.     $em default pass
  95. }
  96. Class Topology/net2A-lossy -superclass Topology
  97. Topology/net2A-lossy instproc init ns {
  98.     $self instvar node_
  99.     $self makenodes $ns
  100.     $self createlinks $ns
  101.     $self instvar lossylink_
  102.     set lossylink_ [$ns link $node_(r2) $node_(r1)]
  103.     set em [new ErrorModule Fid]
  104.     set errmodel [new ErrorModel/Periodic]
  105.     $errmodel unit pkt
  106.     $lossylink_ errormodule $em
  107.     $em insert $errmodel
  108.     $em bind $errmodel 0
  109.     $em default pass
  110. }
  111. TestSuite instproc finish file {
  112. global quiet wrap wrap1 PERL
  113. $self instvar ns_ tchan_ testName_ cwnd_chan_
  114. if {$file == "ecn_ack_fulltcp"} { 
  115.    ## tracing forward-path data packets
  116.            exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  117.      $PERL ../../bin/raw2xg -aecx -s 0.01 -m $wrap -t $file > temp.rands
  118.       exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  119.      $PERL ../../bin/raw2xg -aefcx -s 0.01 -m $wrap -t $file > temp1.rands
  120. } elseif {$wrap == $wrap1} {
  121.    ## tracing reverse-path data packets
  122.            exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  123.      $PERL ../../bin/raw2xg -aefcx -s 0.01 -m $wrap -t $file > temp.rands
  124.       exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  125.      $PERL ../../bin/raw2xg -aecx -s 0.01 -m $wrap -t $file > temp1.rands
  126. } else {
  127.            exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  128.      $PERL ../../bin/raw2xg -aecx -s 0.01 -m $wrap -t $file > temp.rands
  129.       exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  130.      $PERL ../../bin/raw2xg -aecx -s 0.01 -m $wrap -t $file > temp1.rands
  131. }
  132. if {$quiet == "false"} {
  133.          exec xgraph -bb -tk -nl -m -x time -y packets temp.rands 
  134.                      temp1.rands &
  135. }
  136.         ## now use default graphing tool to make a data file
  137.         ## if so desired
  138.         if { [info exists cwnd_chan_] && $quiet == "false" } {
  139.                 $self plot_cwnd
  140.         }
  141.         if { [info exists tchan_] && $quiet == "false" } {
  142.                 $self plotQueue $testName_
  143.         }
  144. # exec csh gnuplotC2.com temp.rands temp1.rands $file eps
  145. $ns_ halt
  146. }
  147. TestSuite instproc plotQueue file {   
  148.         global quiet
  149.         $self instvar tchan_
  150.         #
  151.         # Plot the queue size and average queue size, for RED gateways.
  152.         #
  153.         set awkCode {
  154.                 {
  155.                         if ($1 == "Q" && NF>2) {
  156.                                 print $2, $3 >> "temp.q";
  157.                                 set end $2
  158.                         }
  159.                         else if ($1 == "a" && NF>2)
  160.                                 print $2, $3 >> "temp.a";
  161.                 }
  162.         }
  163.         set f [open temp.queue w]
  164.         puts $f "TitleText: $file"
  165.         puts $f "Device: Postscript"
  166.          
  167.         if { [info exists tchan_] } {
  168.                 close $tchan_
  169.         }
  170.         exec rm -f temp.q temp.a
  171.         exec touch temp.a temp.q  
  172.         
  173.         exec awk $awkCode all.q  
  174.         
  175.         puts $f "queue 
  176.         exec cat temp.q >@ $f
  177.         puts $f n"ave_queue
  178.         exec cat temp.a >@ $f
  179.         ###puts $f n"thresh
  180.         ###puts $f 0 [[ns link $r1 $r2] get thresh]
  181.         ###puts $f $end [[ns link $r1 $r2] get thresh]
  182.         close $f
  183.         if {$quiet == "false"} {
  184.                 exec xgraph -bb -tk -x time -y queue temp.queue &
  185.         }
  186. }
  187. TestSuite instproc tcpDumpAll { tcpSrc interval label } {
  188.     global quiet
  189.     $self instvar dump_inst_ ns_
  190.     if ![info exists dump_inst_($tcpSrc)] {
  191. set dump_inst_($tcpSrc) 1
  192. set report $label/window=[$tcpSrc set window_]/packetSize=[$tcpSrc set packetSize_]
  193. if {$quiet == "false"} {
  194. puts $report
  195. }
  196. $ns_ at 0.0 "$self tcpDumpAll $tcpSrc $interval $label"
  197. return
  198.     }
  199.     $ns_ at [expr [$ns_ now] + $interval] "$self tcpDumpAll $tcpSrc $interval $label"
  200.     set report time=[$ns_ now]/class=$label/ack=[$tcpSrc set ack_]/packets_resent=[$tcpSrc set nrexmitpack_]
  201.     if {$quiet == "false"} {
  202.      puts $report
  203.     }
  204. }       
  205. TestSuite instproc emod {} {
  206. $self instvar topo_
  207. $topo_ instvar lossylink_
  208.         set errmodule [$lossylink_ errormodule]
  209. return $errmodule
  210. }
  211. TestSuite instproc setloss {} {
  212. $self instvar topo_
  213. $topo_ instvar lossylink_
  214.         set errmodule [$lossylink_ errormodule]
  215.         set errmodel [$errmodule errormodels]
  216.         if { [llength $errmodel] > 1 } {
  217.                 puts "droppedfin: confused by >1 err models..abort"
  218.                 exit 1
  219.         }
  220. return $errmodel
  221. }
  222. TestSuite instproc ecnsetup { tcptype { tcp1fid 0 } } {
  223.     $self instvar ns_ node_ testName_ net_
  224.     global wrap wrap1
  225.     set delay 10ms
  226.     $ns_ delay $node_(r1) $node_(r2) $delay
  227.     $ns_ delay $node_(r2) $node_(r1) $delay
  228.     set stoptime 2.0
  229.     set redq [[$ns_ link $node_(r1) $node_(r2)] queue]
  230.     $redq set setbit_ true
  231.     $redq set limit_ 50
  232.     set fid 1
  233.     if {$tcptype == "Tahoe"} {
  234.       set tcp1 [$ns_ create-connection TCP $node_(s1) 
  235.   TCPSink $node_(s3) $tcp1fid]
  236.     } elseif {$tcptype == "Sack1"} {
  237.       set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  238.   TCPSink/Sack1  $node_(s3) $tcp1fid]
  239.     } elseif {$tcptype == "FullTcpSack1"} {
  240.           set wrap $wrap1
  241.           set tcp1 [new Agent/TCP/FullTcp/Sack]
  242.           set sink [new Agent/TCP/FullTcp/Sack]
  243.           $ns_ attach-agent $node_(s1) $tcp1
  244.           $ns_ attach-agent $node_(s3) $sink
  245.           $tcp1 set fid_ $fid
  246.           $sink set fid_ $fid
  247.           $ns_ connect $tcp1 $sink
  248.           # set up TCP-level connections
  249.           $sink listen ; # will figure out who its peer is
  250.   $sink set window_ 35
  251.   $sink set ecn_ 1
  252.     } else {
  253.       set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  254.   TCPSink $node_(s3) $tcp1fid]
  255.     }
  256.     $tcp1 set window_ 35
  257.     $tcp1 set ecn_ 1
  258.     set ftp1 [$tcp1 attach-app FTP]
  259.     $self enable_tracecwnd $ns_ $tcp1
  260.         
  261.     $ns_ at 0.0 "$ftp1 start"
  262.         
  263.     $self tcpDump $tcp1 5.0
  264.         
  265.     # trace only the bottleneck link
  266.     ##$self traceQueues $node_(r1) [$self openTrace $stoptime $testName_]
  267.     $ns_ at $stoptime "$self cleanupAll $testName_"
  268. }
  269. # Drop the specified packet.
  270. TestSuite instproc drop_pkt { number } {
  271.     $self instvar ns_ lossmodel
  272.     set lossmodel [$self setloss]
  273.     $lossmodel set offset_ $number
  274.     $lossmodel set period_ 10000
  275. }
  276. # Mark the specified packet.
  277. TestSuite instproc mark_pkt { number } {
  278.     $self instvar ns_ lossmodel
  279.     set lossmodel [$self setloss]
  280.     $lossmodel set offset_ $number
  281.     $lossmodel set period_ 10000
  282.     $lossmodel set markecn_ true
  283. }
  284. TestSuite instproc emod1 {} {
  285.         $self instvar lossylink_
  286.         set errmodule [$lossylink_ errormodule]
  287.         return $errmodule
  288. }
  289. TestSuite instproc set_lossylink {} {
  290.         $self instvar lossylink_ ns_ node_
  291.         set lossylink_ [$ns_ link $node_(r1) $node_(r2)]
  292.         set em [new ErrorModule Fid]
  293.         set errmodel [new ErrorModel/Periodic]
  294.         $errmodel unit pkt
  295.         $lossylink_ errormodule $em
  296. }
  297. TestSuite instproc drop_pkts pkts {
  298.     $self instvar ns_
  299.     set emod [$self emod1]
  300.     set errmodel1 [new ErrorModel/List]
  301.     $errmodel1 droplist $pkts
  302.     $emod insert $errmodel1
  303.     $emod bind $errmodel1 0
  304. }
  305. #######################################################################
  306. # SACK Test #
  307. #######################################################################
  308. Class Test/ecn_ack -superclass TestSuite
  309. Test/ecn_ack instproc init {} {
  310.         $self instvar net_ test_
  311.         Queue/RED set setbit_ true
  312.         set net_ net2-lossy
  313. Agent/TCP set bugFix_ true
  314.         set test_ ecn_ack
  315.         $self next
  316. }
  317. Test/ecn_ack instproc run {} {
  318. $self instvar ns_
  319. $self setTopo
  320. $self ecnsetup Sack1
  321. $self drop_pkt 20000
  322. $ns_ run
  323. }
  324. Class Test/ecn_ack_fulltcp -superclass TestSuite
  325. Test/ecn_ack_fulltcp instproc init {} {
  326.         $self instvar net_ test_
  327.         Queue/RED set setbit_ true
  328.         set net_ net2-lossy
  329. Agent/TCP set bugFix_ true
  330.         set test_ ecn_ack_fulltcp
  331.         $self next
  332. }
  333. Test/ecn_ack_fulltcp instproc run {} {
  334.         global quiet wrap wrap1
  335. $self instvar ns_
  336. $self setTopo
  337.         set wrap $wrap1
  338. $self ecnsetup FullTcpSack1
  339. $self drop_pkt 20000
  340. $ns_ run
  341. }
  342. #######################################################################
  343. # SYN/ACK Packets #
  344. #######################################################################
  345. # No SYN packets dropped or marked.
  346. Class Test/synack -superclass TestSuite
  347. Test/synack instproc init {} {
  348.         $self instvar net_ test_ guide_ 
  349.         set net_        net2-lossy
  350.         set test_       synack_
  351.         set guide_      "No SYN packets dropped or marked."
  352.         Agent/TCPSink set ecn_syn_ false
  353.         $self next pktTraceFile
  354. }
  355. Test/synack instproc run {} {
  356.         global quiet
  357.         $self instvar ns_ guide_ node_ guide_ testName_ 
  358.         puts "Guide: $guide_"
  359.         Agent/TCP set ecn_ 1
  360. Agent/TCP set window_ 8
  361.         $self setTopo
  362.         # Set up forward TCP connection
  363.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  364. $tcp1 set window_ 8
  365.         set ftp1 [$tcp1 attach-app FTP]
  366.         $ns_ at 0.00 "$ftp1 produce 20"
  367.         $self drop_pkt 1000
  368.         $self tcpDump $tcp1 5.0
  369.         $ns_ at 10.0 "$self cleanupAll $testName_"
  370.         $ns_ run
  371. }
  372. # Full TCP, no SYN packets dropped or marked.
  373. Class Test/synack_fulltcp -superclass TestSuite
  374. Test/synack_fulltcp instproc init {} {
  375.         $self instvar net_ test_ guide_ 
  376.         set net_        net2-lossy
  377.         set test_       synack_fulltcp_
  378.         set guide_      "Full TCP, no SYN packets dropped or marked."
  379.         Agent/TCPSink set ecn_syn_ false
  380.         $self next pktTraceFile
  381. }
  382. Test/synack_fulltcp instproc run {} {
  383.         global quiet wrap wrap1
  384.         $self instvar ns_ guide_ node_ guide_ testName_ 
  385.         puts "Guide: $guide_"
  386.         Agent/TCP set ecn_ 1
  387. Agent/TCP set window_ 8
  388.         $self setTopo
  389.         # Set up forward TCP connection
  390.         set wrap $wrap1
  391.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  392.         set sink [new Agent/TCP/FullTcp/Sack]
  393.         $ns_ attach-agent $node_(s1) $tcp1
  394.         $ns_ attach-agent $node_(s4) $sink
  395.         $tcp1 set fid_ 0
  396.         $sink set fid_ 0
  397.         $ns_ connect $tcp1 $sink
  398.         $sink listen ; # will figure out who its peer is
  399.         set ftp1 [$tcp1 attach-app FTP]
  400.         $ns_ at 0.00 "$ftp1 produce 5"
  401.         set ftp2 [$sink attach-app FTP]
  402.         $ns_ at 0.03 "$ftp2 produce 20"
  403.         $self drop_pkt 1000
  404.         $self tcpDump $tcp1 5.0
  405.         $ns_ at 10.0 "$self cleanupAll $testName_"
  406.         $ns_ run
  407. }
  408. # SYN packet dropped.
  409. Class Test/synack0 -superclass TestSuite
  410. Test/synack0 instproc init {} {
  411.         $self instvar net_ test_ guide_ 
  412.         set net_        net2-lossy
  413.         set test_       synack0_
  414.         set guide_      "SYN packet dropped."
  415.         Agent/TCPSink set ecn_syn_ false
  416.         $self next pktTraceFile
  417. }
  418. Test/synack0 instproc run {} {
  419.         global quiet
  420.         $self instvar ns_ guide_ node_ guide_ testName_ 
  421.         puts "Guide: $guide_"
  422.         Agent/TCP set ecn_ 1
  423. Agent/TCP set window_ 8
  424.         $self setTopo
  425.         # Set up forward TCP connection
  426.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  427. $tcp1 set window_ 8
  428.         set ftp1 [$tcp1 attach-app FTP]
  429.         $ns_ at 0.00 "$ftp1 produce 20"
  430.         $self drop_pkt 1
  431.         $self tcpDump $tcp1 5.0
  432.         $ns_ at 10.0 "$self cleanupAll $testName_"
  433.         $ns_ run
  434. }
  435. # SYN packet dropped, old parameters for RTO.
  436. Class Test/synack0A -superclass TestSuite
  437. Test/synack0A instproc init {} {
  438.         $self instvar net_ test_ guide_ 
  439.         set net_        net2-lossy
  440.         set test_       synack0A_
  441.         set guide_      "SYN packet dropped, old parameters for RTO."
  442.         Agent/TCPSink set ecn_syn_ false
  443. Agent/TCP set rtxcur_init_ 6.0 
  444. Agent/TCP set updated_rttvar_ false 
  445. Test/synack0A instproc run {} [Test/synack0 info instbody run ]
  446.         $self next pktTraceFile
  447. }
  448. # Four SYN packets dropped.
  449. Class Test/synack-4 -superclass TestSuite
  450. Test/synack-4 instproc init {} {
  451.         $self instvar net_ test_ guide_ 
  452.         set net_        net2
  453.         set test_       synack-4_
  454.         set guide_      "Four SYN packets dropped, max_connects_ not used."
  455.         Agent/TCPSink set ecn_syn_ false
  456.         Agent/TCP set max_connects_ -1;
  457.         $self next pktTraceFile
  458. }
  459. Test/synack-4 instproc run {} {
  460.         global quiet
  461.         $self instvar ns_ guide_ node_ guide_ testName_ 
  462.         puts "Guide: $guide_"
  463.         Agent/TCP set ecn_ 1
  464. Agent/TCP set window_ 8
  465.         $self setTopo
  466. $self set_lossylink
  467.         # Set up forward TCP connection
  468.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  469. $tcp1 set window_ 8
  470.         set ftp1 [$tcp1 attach-app FTP]
  471.         $ns_ at 0.00 "$ftp1 produce 20"
  472.         $self drop_pkts {0 1 2 3}
  473.         #$self tcpDump $tcp1 5.0
  474.         $ns_ at 200.0 "$self cleanupAll $testName_"
  475.         $ns_ run
  476. }
  477. # Four SYN packets dropped.
  478. Class Test/synack-4-maxconnect -superclass TestSuite
  479. Test/synack-4-maxconnect instproc init {} {
  480.         $self instvar net_ test_ guide_ 
  481.         set net_        net2
  482.         set test_       synack-4-maxconnect_
  483.         set guide_      "Four SYN packets dropped, max_connects_ 5."
  484.         Agent/TCPSink set ecn_syn_ false
  485.         Agent/TCP set max_connects_ 5;
  486. Test/synack-4-maxconnect instproc run {} [Test/synack-4 info instbody run ]
  487.         $self next pktTraceFile
  488. }
  489. # Five SYN packets dropped.
  490. Class Test/synack-5-maxconnect -superclass TestSuite
  491. Test/synack-5-maxconnect instproc init {} {
  492.         $self instvar net_ test_ guide_ 
  493.         set net_        net2
  494.         set test_       synack-5-maxconnect_
  495.         set guide_      "Five SYN packets dropped, max_connects_ 5."
  496.         Agent/TCPSink set ecn_syn_ false
  497.         Agent/TCP set max_connects_ 5;
  498.         $self next pktTraceFile
  499. }
  500. Test/synack-5-maxconnect instproc run {} {
  501.         global quiet
  502.         $self instvar ns_ guide_ node_ guide_ testName_ 
  503.         puts "Guide: $guide_"
  504.         Agent/TCP set ecn_ 1
  505. Agent/TCP set window_ 8
  506.         $self setTopo
  507. $self set_lossylink
  508.         # Set up forward TCP connection
  509.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  510. $tcp1 set window_ 8
  511.         set ftp1 [$tcp1 attach-app FTP]
  512.         $ns_ at 0.00 "$ftp1 produce 20"
  513.         $self drop_pkts {0 1 2 3 4}
  514.         #$self tcpDump $tcp1 5.0
  515.         $ns_ at 200.0 "$self cleanupAll $testName_"
  516.         $ns_ run
  517. }
  518. # Fifteen SYN packets dropped.
  519. Class Test/synack-15 -superclass TestSuite
  520. Test/synack-15 instproc init {} {
  521.         $self instvar net_ test_ guide_ 
  522.         set net_        net2
  523.         set test_       synack-15_
  524.         set guide_      "Fifteen SYN packets dropped, max_connects not used."
  525.         Agent/TCPSink set ecn_syn_ false
  526.         Agent/TCP set max_connects_ -1;
  527.         $self next pktTraceFile
  528. }
  529. Test/synack-15 instproc run {} {
  530.         global quiet
  531.         $self instvar ns_ guide_ node_ guide_ testName_ 
  532.         puts "Guide: $guide_"
  533.         Agent/TCP set ecn_ 1
  534. Agent/TCP set window_ 8
  535.         $self setTopo
  536. $self set_lossylink
  537.         # Set up forward TCP connection
  538.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  539. $tcp1 set window_ 8
  540.         set ftp1 [$tcp1 attach-app FTP]
  541.         $ns_ at 0.00 "$ftp1 produce 20"
  542.         $self drop_pkts {0 1 2 3 4 5 6 7 8 9 10 11 12 13 14} 
  543.         #$self tcpDump $tcp1 5.0
  544.         $ns_ at 3000.0 "$self cleanupAll $testName_"
  545.         $ns_ run
  546. }
  547. # SYN/ACK packet dropped.
  548. Class Test/synack1 -superclass TestSuite
  549. Test/synack1 instproc init {} {
  550.         $self instvar net_ test_ guide_ 
  551.         set net_        net2A-lossy
  552.         set test_       synack1_
  553.         set guide_      "SYN/ACK packet dropped."
  554.         Agent/TCPSink set ecn_syn_ false
  555.         $self next pktTraceFile
  556. }
  557. Test/synack1 instproc run {} {
  558.         global quiet
  559.         $self instvar ns_ guide_ node_ guide_ testName_
  560.         puts "Guide: $guide_"
  561.         Agent/TCP set ecn_ 1
  562.         $self setTopo
  563.         # Set up forward TCP connection
  564.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  565.         $tcp1 set window_ 8
  566.         set ftp1 [$tcp1 attach-app FTP]
  567.         $ns_ at 0.00 "$ftp1 produce 20"
  568.         $self drop_pkt 1
  569.         $self tcpDump $tcp1 5.0
  570.         $ns_ at 5.0 "$self cleanupAll $testName_"
  571.         $ns_ run
  572. }
  573. # SYN/ACK packet dropped, FullTCP
  574. Class Test/synack1_fulltcp -superclass TestSuite
  575. Test/synack1_fulltcp instproc init {} {
  576.         $self instvar net_ test_ guide_ 
  577.         set net_        net2A-lossy
  578.         set test_       synack1_fulltcp_
  579.         set guide_      "SYN/ACK packet dropped, FullTCP."
  580.         Agent/TCPSink set ecn_syn_ false
  581.         $self next pktTraceFile
  582. }
  583. Test/synack1_fulltcp instproc run {} {
  584.         global quiet wrap wrap1
  585.         $self instvar ns_ guide_ node_ guide_ testName_
  586.         puts "Guide: $guide_"
  587.         Agent/TCP set ecn_ 1
  588.         Agent/TCP set window_ 8
  589.         $self setTopo
  590.         # Set up forward TCP connection
  591.         set wrap $wrap1
  592.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  593.         set sink [new Agent/TCP/FullTcp/Sack]
  594.         $ns_ attach-agent $node_(s1) $tcp1
  595.         $ns_ attach-agent $node_(s4) $sink
  596.         $tcp1 set fid_ 0
  597.         $sink set fid_ 0
  598.         $ns_ connect $tcp1 $sink
  599.         $sink listen ; # will figure out who its peer is
  600.         set ftp1 [$tcp1 attach-app FTP]
  601.         $ns_ at 0.00 "$ftp1 produce 5"
  602.         set ftp2 [$sink attach-app FTP]
  603.         $ns_ at 0.03 "$ftp2 produce 20"
  604.         $self drop_pkt 1
  605.         $self tcpDump $tcp1 5.0
  606.         $ns_ at 5.0 "$self cleanupAll $testName_"
  607.         $ns_ run
  608. }
  609. # SYN/ACK packet marked.
  610. Class Test/synack2 -superclass TestSuite
  611. Test/synack2 instproc init {} {
  612.         $self instvar net_ test_ guide_ 
  613.         set net_        net2A-lossy
  614.         set test_       synack2_
  615.         set guide_      "SYN/ACK packet marked."
  616.         Agent/TCPSink set ecn_syn_ true
  617.         $self next pktTraceFile
  618. }
  619. Test/synack2 instproc run {} {
  620.         global quiet
  621.         $self instvar ns_ guide_ node_ guide_ testName_
  622.         puts "Guide: $guide_"
  623.         Agent/TCP set ecn_ 1
  624. Agent/TCP set window_ 8
  625.         $self setTopo
  626.         # Set up forward TCP connection
  627.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s4) 0]
  628.         $tcp1 set window_ 8
  629.         set ftp1 [$tcp1 attach-app FTP]
  630.         $ns_ at 0.00 "$ftp1 produce 20"
  631.         $self mark_pkt 1
  632.         # $self mark_pkt 10
  633.         $self tcpDump $tcp1 5.0
  634.         $ns_ at 2.0 "$self cleanupAll $testName_"
  635.         $ns_ run
  636. }
  637. Class Test/synack2_fulltcp -superclass TestSuite
  638. Test/synack2_fulltcp instproc init {} {
  639.         $self instvar net_ test_ guide_ 
  640.         set net_        net2A-lossy
  641.         set test_       synack2_fulltcp_
  642.         set guide_      "SYN/ACK packet marked, FullTCP."
  643.         Agent/TCPSink set ecn_syn_ true
  644. Agent/TCP/FullTcp set ecn_syn_ true
  645.         $self next pktTraceFile
  646. }
  647. Test/synack2_fulltcp instproc run {} {
  648.         global quiet wrap wrap1
  649.         $self instvar ns_ guide_ node_ guide_ testName_
  650.         puts "Guide: $guide_"
  651.         Agent/TCP set ecn_ 1
  652.         $self setTopo
  653.         # Set up forward TCP connection
  654.         set wrap $wrap1
  655.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  656.         set sink [new Agent/TCP/FullTcp/Sack]
  657.         $ns_ attach-agent $node_(s1) $tcp1
  658.         $ns_ attach-agent $node_(s4) $sink
  659.         $tcp1 set fid_ 0
  660.         $sink set fid_ 0
  661.         $ns_ connect $tcp1 $sink
  662.         $sink listen ; # will figure out who its peer is
  663.         set ftp1 [$tcp1 attach-app FTP]
  664.         $ns_ at 0.00 "$ftp1 produce 5"
  665.         set ftp2 [$sink attach-app FTP]
  666.         $ns_ at 0.03 "$ftp2 produce 20"
  667.         $self mark_pkt 1
  668.         # $self mark_pkt 10
  669.         $self tcpDump $tcp1 5.0
  670.         $ns_ at 2.0 "$self cleanupAll $testName_"
  671.         $ns_ run
  672. }
  673. Class Test/synack2a_fulltcp -superclass TestSuite
  674. Test/synack2a_fulltcp instproc init {} {
  675.         $self instvar net_ test_ guide_ 
  676.         set net_        net2A-lossy
  677.         set test_       synack2a_fulltcp_
  678.         set guide_      "SYN/ACK packet marked, FullTCP, wait."
  679.         Agent/TCPSink set ecn_syn_ true
  680. Agent/TCP/FullTcp set ecn_syn_ true
  681. Agent/TCP/FullTcp set ecn_syn_wait_ true
  682.         $self next pktTraceFile
  683. }
  684. Test/synack2a_fulltcp instproc run {} {
  685.         global quiet wrap wrap1
  686.         $self instvar ns_ guide_ node_ guide_ testName_
  687.         puts "Guide: $guide_"
  688.         Agent/TCP set ecn_ 1
  689.         $self setTopo
  690.         # Set up forward TCP connection
  691.         set wrap $wrap1
  692.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  693.         set sink [new Agent/TCP/FullTcp/Sack]
  694.         $ns_ attach-agent $node_(s1) $tcp1
  695.         $ns_ attach-agent $node_(s4) $sink
  696.         $tcp1 set fid_ 0
  697.         $sink set fid_ 0
  698.         $ns_ connect $tcp1 $sink
  699.         $sink listen ; # will figure out who its peer is
  700.         set ftp1 [$tcp1 attach-app FTP]
  701.         $ns_ at 0.00 "$ftp1 produce 5"
  702.         set ftp2 [$sink attach-app FTP]
  703.         $ns_ at 0.03 "$ftp2 produce 20"
  704.         $self mark_pkt 1
  705.         # $self mark_pkt 10
  706.         $self tcpDump $tcp1 5.0
  707.         $ns_ at 2.0 "$self cleanupAll $testName_"
  708.         $ns_ run
  709. }
  710. # time 0: SYN packet sent by A
  711. # time 0.027277: SYN/ACK packet sent by B
  712. # time 0.032309: SYN/ACK packet marked
  713. # time 0.054555: ACK packet sent by A
  714. # time 0.054555: two request data packets sent by A
  715. # time 0.08558: ACK packets sent from B
  716. # time 0.112858: three data packets sent by A
  717. # time 0.146923: ACK packets sent by B
  718. # time 0.231832: data packets sent by B
  719. TestSuite runTest
  720. # E: Congestion Experienced in IP header.
  721. # N: ECN-Capable-Transport (ECT) in IP header.
  722. # C: ECN-Echo in TCP header.
  723. # A: Congestion Window Reduced (CWR) in TCP header.