📄 test-suite-simple.tcl
字号:
set guide_ \ "Reno TCP, two packets dropped from a congestion window of 5 packets." $self next}Test/reno3 instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ queue-limit $node_(r1) $node_(k1) 8 $ns_ queue-limit $node_(k1) $node_(r1) 8 set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0] $tcp1 set window_ 100 set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1] $tcp2 set window_ 16 set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] $ns_ at 1.0 "$ftp1 start" $ns_ at 0.5 "$ftp2 start" $self tcpDump $tcp1 1.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 8.0 $testName_] $ns_ run}Class Test/reno4 -superclass TestSuiteTest/reno4 instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net2 set test_ reno4 set guide_ \ "Reno TCP, two packets dropped, no Retransmit Timeout" $self next}Test/reno4 instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ queue-limit $node_(r1) $node_(r2) 29 set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink/DelAck $node_(r2) 0] $tcp1 set window_ 80 $tcp1 set maxcwnd_ 40 set ftp1 [$tcp1 attach-app FTP] $ns_ at 0.0 "$ftp1 start" $self tcpDump $tcp1 1.0 # Trace only the bottleneck link $self traceQueues $node_(s1) [$self openTrace 2.0 $testName_] $ns_ run}Class Test/reno4a -superclass TestSuiteTest/reno4a instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net2 set test_ reno4a set guide_ \ "Reno TCP, two packets dropped, Retransmit Timeout" $self next}Test/reno4a instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ queue-limit $node_(r1) $node_(r2) 29 set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink/DelAck $node_(r2) 0] $tcp1 set window_ 40 $tcp1 set maxcwnd_ 40 set ftp1 [$tcp1 attach-app FTP] $ns_ at 0.0 "$ftp1 start" $self tcpDump $tcp1 1.0 # Trace only the bottleneck link $self traceQueues $node_(s1) [$self openTrace 4.0 $testName_] $ns_ run}Class Test/reno5 -superclass TestSuiteTest/reno5 instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ reno5 set guide_ \ "Reno TCP, TCP/bugFix_ set to false." Agent/TCP set bugFix_ false $self next}Test/reno5 instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ queue-limit $node_(r1) $node_(k1) 9 set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0] $tcp1 set window_ 50 set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1] $tcp2 set window_ 20 set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] $ns_ at 1.0 "$ftp1 start" $ns_ at 1.1 "$ftp2 start" $self tcpDump $tcp1 1.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 10.0 $testName_] $ns_ run}Class Test/reno5_nobug -superclass TestSuiteTest/reno5_nobug instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ reno5_nobug set guide_ \ "Reno TCP, TCP/bugFix_ set to true." Agent/TCP set bugFix_ true Test/reno5_nobug instproc run {} [Test/reno5 info instbody run ] $self next}Class Test/telnet -superclass TestSuiteTest/telnet instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ telnet set guide_ \ "Telnet connections with two different packet generation processes." Agent/TCP set timerfix_ false # The default is being changed to true. $self next}Test/telnet instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ queue-limit $node_(r1) $node_(k1) 8 $ns_ queue-limit $node_(k1) $node_(r1) 8 set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0] set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1] set tcp3 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 2] set telnet1 [$tcp1 attach-app Telnet]; $telnet1 set interval_ 1 set telnet2 [$tcp2 attach-app Telnet]; $telnet2 set interval_ 0 # Interval 0 designates the tcplib telnet interarrival distribution set telnet3 [$tcp3 attach-app Telnet]; $telnet3 set interval_ 0 $ns_ at 0.0 "$telnet1 start" $ns_ at 0.0 "$telnet2 start" $ns_ at 0.0 "$telnet3 start" $self tcpDump $tcp1 5.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 50.0 $testName_] # use a different seed each time #puts seed=[$ns_ random 0] $ns_ run}Class Test/delayed -superclass TestSuiteTest/delayed instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ delayed set guide_ \ "TCP receiver with delayed acknowledgements." $self next}Test/delayed instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink/DelAck $node_(k1) 0] $tcp1 set window_ 50 # lookup up the sink and set it's delay interval [$node_(k1) agent [$tcp1 dst-port]] set interval 100ms set ftp1 [$tcp1 attach-app FTP]; $ns_ at 1.0 "$ftp1 start" $self tcpDump $tcp1 1.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 4.0 $testName_] $ns_ run}Class Test/phase -superclass TestSuiteTest/phase instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ phase set guide_ "Phase effects: connection 0 wins." $self next}Test/phase instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ delay $node_(s2) $node_(r1) 3ms $ns_ delay $node_(r1) $node_(s2) 3ms $ns_ queue-limit $node_(r1) $node_(k1) 16 $ns_ queue-limit $node_(k1) $node_(r1) 100 set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0] $tcp1 set window_ 32 set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1] $tcp2 set window_ 32 set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] $ns_ at 5.0 "$ftp1 start" $ns_ at 1.0 "$ftp2 start" $self tcpDump $tcp1 5.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_] $ns_ run}Class Test/phase1 -superclass TestSuiteTest/phase1 instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ phase1 set guide_ "Phase effects: connection 1 wins." $self next}Test/phase1 instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ delay $node_(s2) $node_(r1) 9.5ms $ns_ delay $node_(r1) $node_(s2) 9.5ms $ns_ queue-limit $node_(r1) $node_(k1) 16 $ns_ queue-limit $node_(k1) $node_(r1) 100 set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0] $tcp1 set window_ 32 set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1] $tcp2 set window_ 32 set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] $ns_ at 5.0 "$ftp1 start" $ns_ at 1.0 "$ftp2 start" $self tcpDump $tcp1 5.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_] $ns_ run}Class Test/phase2 -superclass TestSuiteTest/phase2 instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ phase2 set guide_ \ "Phase effects: TCP/overhead_ is used, and neither connection loses." $self next}Test/phase2 instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} $ns_ delay $node_(s2) $node_(r1) 3ms $ns_ delay $node_(r1) $node_(s2) 3ms $ns_ queue-limit $node_(r1) $node_(k1) 16 $ns_ queue-limit $node_(k1) $node_(r1) 100 set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0] $tcp1 set window_ 32 $tcp1 set overhead_ 0.01 set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1] $tcp2 set window_ 32 # $tcp2 set overhead_ 0.01 # The random overhead_ was increased slightly to illustrate fairness # for this scenario. $tcp2 set overhead_ 0.015 set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] $ns_ at 5.0 "$ftp1 start" $ns_ at 1.0 "$ftp2 start" $self tcpDump $tcp1 5.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_] $ns_ run}Class Test/timers -superclass TestSuiteTest/timers instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ timers set guide_ "TCP retransmit timers." Agent/TCP set timerfix_ false # The default is being changed to true. $self next}Test/timers instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ $ns_ queue-limit $node_(r1) $node_(k1) 2 $ns_ queue-limit $node_(k1) $node_(r1) 100 set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink/DelAck $node_(k1) 0] $tcp1 set window_ 4 # look up the sink and set its delay interval [$node_(k1) agent [$tcp1 dst-port]] set interval_ 100ms set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink/DelAck $node_(k1) 1] $tcp2 set window_ 4 # look up the sink and set its delay interval [$node_(k1) agent [$tcp2 dst-port]] set interval_ 100ms set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] $ns_ at 1.0 "$ftp1 start" $ns_ at 1.3225 "$ftp2 start" $self tcpDump $tcp1 5.0 # Trace only the bottleneck link $self traceQueues $node_(r1) [$self openTrace 10.0 $testName_] $ns_ run}# Many small TCP flows.Class Test/manyflows -superclass TestSuiteTest/manyflows instproc init topo { $self instvar net_ defNet_ test_ guide_ set net_ $topo set defNet_ net0 set test_ manyflows set guide_ "Using FTP commands to create many small flows." $self next}Test/manyflows instproc run {} { global quiet $self instvar ns_ node_ testName_ guide_ if {$quiet == "false"} {puts $guide_} # Set up TCP connections set rng_ [new RNG] ## $rng_ seed [ns random 0] set stoptime 5 set randomflows 10 for {set i 0} {$i < $randomflows} {incr i} { set tcp [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 1] set ftp [[set tcp] attach-app FTP] set numpkts [$rng_ uniform 0 10] set starttime [$rng_ uniform 0 $stoptime] $ns_ at $starttime "[set ftp] produce $numpkts" $ns_ at $stoptime "[set ftp] stop" } # Trace only the bottleneck link # # Actually, we now trace all activity at the node around the # bottleneck link. This allows us to track acks, as well # packets taking any alternate paths around the bottleneck # link. # $self traceQueues $node_(r1) [$self openTrace $stoptime $testName_] $ns_ run}TestSuite instproc printpkts { label tcp } { global tcpTick_ puts "tcp $label highest_seqment_acked [$tcp set ack_]" puts "tcp $label data_bytes_sent [$tcp set ndatabytes_]" set numRtts [$tcp set rtt_] set tick $tcpTick_ set rtt [expr $numRtts * $tcpTick_] puts "tcp $label most_recent_rtt [format "%5.3f" $rtt]" }TestSuite instproc printpktsTFRC { label tfrc } { global tcpTick_ puts "tfrc $label data_pkts_sent [$tfrc set ndatapack_]"}TestSuite instproc printdrops { fid fmon } { set fcl [$fmon classifier]; # flow classifier # # look up the flow using the classifier. Because we are # using a Fid classifier, the src/dst fields are not compared, # and can thus be just zero, as illustrated here. The "auto" # indicates we don't already know which bucket in the classifier's # hash table to find the flow we're looking for. # set flow [$fcl lookup auto 0 0 $fid] puts "fid: $fid per-link total_drops [$flow set pdrops_]" puts "fid: $fid per-link total_marks [$flow set pmarks_]" puts "fid: $fid per-link total_packets [$flow set pdepartures_]" puts "fid: $fid per-link total_bytes [$flow set bdepartures_]" # # note there is much more date available in $flow and $fmon # that isn't being printed here. #}TestSuite instproc printstop { stoptime } { puts "stop-time $stoptime"}TestSuite instproc printall { fmon } { puts "aggregate per-link total_drops [$fmon set pdrops_]" puts "aggregate per-link total_marks [$fmon set pmarks_]" puts "aggregate per-link total_packets [$fmon set pdepartures_]"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -