📄 test-suite-full.tcl
字号:
## Copyright (c) 1997, 1998 The Regents of the University of California.# All rights reserved.## Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions# are met:# 1. Redistributions of source code must retain the above copyright# notice, this list of conditions and the following disclaimer.# 2. Redistributions in binary form must reproduce the above copyright# notice, this list of conditions and the following disclaimer in the# documentation and/or other materials provided with the distribution.# 3. All advertising materials mentioning features or use of this software# must display the following acknowledgement:# This product includes software developed by the Computer Systems# Engineering Group at Lawrence Berkeley Laboratory.# 4. Neither the name of the University nor of the Laboratory may be used# to endorse or promote products derived from this software without# specific prior written permission.## THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF# SUCH DAMAGE.## this is still somewhat experimental,# and should be considered of 'beta-test' quality (kfall@ee.lbl.gov)## This file tests "fulltcp", a version of tcp reno implemented in the # simulator based on the BSD Net/3 code. ## This test suite is based on test-suite-fulltcp.tcl from ns-1.set dir [pwd]catch "cd tcl/test"source misc.tcl# FOR UPDATING GLOBAL DEFAULTS:Agent/TCP set windowInit_ 1# The default is being changed to 2.Agent/TCP set singledup_ 0# The default is being changed to 1source topologies.tclcatch "cd $dir"Agent/TCP set minrto_ 0# The default is being changed to minrto_ 1Trace set show_tcphdr_ 1 ; # needed to plot ack numbers for tracing TestSuite instproc printtimers { tcp time} { global quiet if {$quiet == "false"} { puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]" }}TestSuite instproc printtimersAll { tcp time interval } { $self instvar dump_inst_ ns_ if ![info exists dump_inst_($tcp)] { set dump_inst_($tcp) 1 $ns_ at $time "$self printtimersAll $tcp $time $interval" return } set newTime [expr [$ns_ now] + $interval] $ns_ at $time "$self printtimers $tcp $time" $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"}TestSuite instproc finish testname { global env quiet $self instvar ns_ $ns_ halt set outtype text set tfile "out.tr" if { $quiet != "true" } { if { [info exists env(NSOUT)] } { set outtype $env(NSOUT) } elseif { [info exists env(DISPLAY)] } { set outtype xgraph } if { $outtype == "text" } { puts "output files are $fname.{p,packs,acks,d,ctrl,es,ecn,cact}" puts " and $fname.r.{p,packs,acks,d,ctrl,es,ecn,cact}" } else { global TCLSH exec ../../bin/tcpf2xgr $TCLSH $tfile $outtype $testname & } } exec cp $tfile temp.rands; # verification scripts wants stuff in 'temp.rands'}TestSuite instproc bsdcompat tcp { $tcp set segsperack_ 2 ## $tcp set dupseg_fix_ false $tcp set dupack_reset_ true $tcp set bugFix_ false $tcp set data_on_syn_ false $tcp set tcpTick_ 0.5}# Definition of test-suite testsClass Test/full -superclass TestSuiteTest/full instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ full $self next}Test/full instproc run {} { $self instvar ns_ node_ testName_ set stopt 6.0 # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen ; # will figure out who its peer is $src set window_ 100 set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 start" $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}Class Test/close -superclass TestSuiteTest/close instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ close $self next}Test/close instproc run {} { $self instvar ns_ node_ testName_ set stopt 6.0 # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen $src set window_ 100 set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 produce 50" $ns_ at 5.5 "$src close" $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}Class Test/twoway -superclass TestSuiteTest/twoway instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ twoway $self next}Test/twoway instproc run {} { $self instvar ns_ node_ testName_ set stopt 6.0 set startt 3.0 # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen $sink set iss_ 2144 $src set window_ 100 set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 start" set ftp2 [$sink attach-app FTP] $ns_ at $startt "$ftp2 start" $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}Class Test/twoway1 -superclass TestSuiteTest/twoway1 instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ twoway1 $self next}Test/twoway1 instproc run {} { $self instvar ns_ node_ testName_ set stopt 6.0 set startt 1.9 # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen $sink set iss_ 2144 $src set window_ 100 $sink set window_ 100 set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 start" set ftp2 [$sink attach-app FTP] $ns_ at $startt "$ftp2 start" $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}#Class Test/twoway_bsdcompat -superclass TestSuite#Test/twoway_bsdcompat instproc init topo {# $self instvar net_ defNet_ test_# set net_ $topo# set defNet_ net0# set test_ twoway_bsdcompat# $self next#}#Test/twoway_bsdcompat instproc run {} {# $self instvar ns_ node_ testName_## set stopt 6.0 # set startt 1.9## # set up connection (do not use "create-connection" method because# # we need a handle on the sink object)# set src [new Agent/TCP/FullTcp]# set sink [new Agent/TCP/FullTcp]# $ns_ attach-agent $node_(s1) $src# $ns_ attach-agent $node_(k1) $sink# $src set fid_ 0# $sink set fid_ 0# $ns_ connect $src $sink## # set up TCP-level connections# $sink listen# $src set window_ 100# $sink set window_ 100# $self bsdcompat $src# $self bsdcompat $sink# set ftp1 [$src attach-app FTP]# $ns_ at 0.0 "$ftp1 start"# set ftp2 [$sink attach-app FTP]# $ns_ at $startt "$ftp2 start"## $self traceQueues $node_(r1) [$self openTrace $stopt $testName_]# $ns_ run#}##Class Test/oneway_bsdcompat -superclass TestSuite#Test/oneway_bsdcompat instproc init topo {# $self instvar net_ defNet_ test_# set net_ $topo# set defNet_ net0# set test_ oneway_bsdcompat# $self next#}#Test/oneway_bsdcompat instproc run {} {# $self instvar ns_ node_ testName_## set stopt 6.0 # set startt 1.9## # set up connection (do not use "create-connection" method because# # we need a handle on the sink object)# set src [new Agent/TCP/FullTcp]# set sink [new Agent/TCP/FullTcp]# $ns_ attach-agent $node_(s1) $src# $ns_ attach-agent $node_(k1) $sink# $src set fid_ 0# $sink set fid_ 0# $ns_ connect $src $sink## # set up TCP-level connections# $sink listen ; # will figure out who its peer is# $src set window_ 100# $sink set window_ 100# $self bsdcompat $src# $self bsdcompat $sink# set ftp1 [$src attach-app FTP]# $ns_ at 0.0 "$ftp1 start"## $self traceQueues $node_(r1) [$self openTrace $stopt $testName_]# $ns_ run#}#Class Test/twowayrandom -superclass TestSuiteTest/twowayrandom instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ twowayrandom $self next}Test/twowayrandom instproc run {} { $self instvar ns_ node_ testName_ global quiet set stopt 6.0 if { $quiet == "true" } { set startt 1 } else { set startt [expr [ns-random 0] % 6] } puts "second TCP starting at time $startt" # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen $sink set iss_ 2144 $src set window_ 100 $sink set window_ 100 set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 start" set ftp2 [$sink attach-app FTP] $ns_ at $startt "$ftp2 start" $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}Class Test/delack -superclass TestSuiteTest/delack instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ delack $self next}Test/delack instproc run {} { $self instvar ns_ node_ testName_ set stopt 6.0 # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen $src set window_ 100 $sink set segsperack_ 2 set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 start" #forward $self instvar direction_ set direction_ forward $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}Class Test/iw=4 -superclass TestSuiteTest/iw=4 instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0 set test_ iw=4 $self next}Test/iw=4 instproc run {} { $self instvar ns_ node_ testName_ set stopt 6.0 # set up connection (do not use "create-connection" method because # we need a handle on the sink object) set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] $ns_ attach-agent $node_(s1) $src $ns_ attach-agent $node_(k1) $sink $src set fid_ 0 $sink set fid_ 0 $ns_ connect $src $sink # set up TCP-level connections $sink listen set ftp1 [$src attach-app FTP] $ns_ at 0.0 "$ftp1 start" # set up special params for this test $src set window_ 100 $src set delay_growth_ true $src set windowInit_ 4 $src set tcpTick_ 0.500 $src set packetSize_ 576 $self traceQueues $node_(r1) [$self openTrace $stopt $testName_] $ns_ run}Class Test/droppedsyn -superclass TestSuiteTest/droppedsyn instproc init topo { $self instvar net_ defNet_ test_ set net_ $topo set defNet_ net0-lossy set test_ droppedsyn $self next}Test/droppedsyn instproc run {} { $self instvar ns_ node_ testName_ topo_ set stopt 20.0 $topo_ instvar lossylink_ set errmodule [$lossylink_ errormodule] set errmodel [$errmodule errormodels] if { [llength $errmodel] > 1 } { puts "droppedsyn: confused by >1 err models..abort" exit 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -