📄 test-suite-red.tcl
字号:
########################################################################TestSuite instproc create_flowstats {} { global flowfile flowchan $self instvar ns_ node_ r1fm_ set r1fm_ [$ns_ makeflowmon Fid] set flowchan [open $flowfile w] $r1fm_ attach $flowchan $ns_ attach-fmon [$ns_ link $node_(r1) $node_(r2)] $r1fm_ 1}## awk code used to produce:# x axis: # arrivals for this flow+category / # total arrivals [bytes]# y axis: # drops for this flow+category / # drops this category [pkts]# (verified compatible for ns2 - kfall, 10/30/97)TestSuite instproc unforcedmakeawk { } { set awkCode { { if ($2 != prev) { print " "; print "\"flow " $2; if ($13 > 0 && $14 > 0) { print 100.0 * $9/$13, 100.0 * $10 / $14 } prev = $2; } else if ($13 > 0 && $14 > 0) { print 100.0 * $9 / $13, 100.0 * $10 / $14 } } } return $awkCode}## awk code used to produce:# x axis: # arrivals for this flow+category / # total arrivals [bytes]# y axis: # drops for this flow+category / # drops this category [bytes]# (modified for compatibility with ns2 flowmon - kfall, 10/30/97)TestSuite instproc forcedmakeawk { } { set awkCode { BEGIN { print "\"flow 0" } { if ($2 != prev) { print " "; print "\"flow " $2; if ($13 > 0 && ($17 - $15) > 0) { print 100.0 * $9/$13, 100.0 * ($19 - $11) / ($17 - $15); } prev = $2; } else if ($13 > 0 && ($17 - $15) > 0) { print 100.0 * $9 / $13, 100.0 * ($19 - $11) / ($17 - $15) } } } return $awkCode}## awk code used to produce:# x axis: # arrivals for this flow+category / # total arrivals [bytes]# y axis: # drops for this flow / # drops [pkts and bytes combined]TestSuite instproc allmakeawk { } { set awkCode { BEGIN {prev=-1; tot_bytes=0; tot_packets=0; forced_total=0; unforced_total=0} { if ($5 != prev) { print " "; print "\"flow ",$5; prev = $5 } tot_bytes = $19-$11; forced_total= $16-$14; tot_packets = $10; tot_arrivals = $9; unforced_total = $14; if (unforced_total + forced_total > 0) { if ($14 > 0) { frac_packets = tot_packets/$14; } else { frac_packets = 0;} if ($17-$15 > 0) { frac_bytes = tot_bytes/($17-$15); } else {frac_bytes = 0;} if ($13 > 0) { frac_arrivals = tot_arrivals/$13; } else {frac_arrivals = 0;} if (frac_packets + frac_bytes > 0) { unforced_total_part = frac_packets * unforced_total / ( unforced_total + forced_total) forced_total_part = frac_bytes * forced_total / ( unforced_total + forced_total) print 100.0 * frac_arrivals, 100.0 * ( unforced_total_part +forced_total_part) } } } } return $awkCode}TestSuite instproc create_flow_graph { graphtitle graphfile } { global flowfile quiet $self instvar awkprocedure_ if {$quiet == "false"} { puts "awkprocedure: $awkprocedure_" } set tmpfile1 /tmp/fg1[pid] set tmpfile2 /tmp/fg2[pid] exec rm -f $graphfile set outdesc [open $graphfile w] # # this next part is xgraph specific # puts $outdesc "TitleText: $graphtitle" puts $outdesc "Device: Postscript" exec rm -f $tmpfile1 $tmpfile2 if {$quiet == "false"} { puts "writing flow xgraph data to $graphfile..." } exec sort -n +1 -o $flowfile $flowfile exec awk [$self $awkprocedure_] $flowfile >@ $outdesc close $outdesc}TestSuite instproc finish_flows testname { global flowgraphfile flowfile flowchan quiet $self instvar r1fm_ $r1fm_ dump close $flowchan $self create_flow_graph $testname $flowgraphfile if {$quiet == "false"} { puts "running xgraph..." } exec cp $flowgraphfile temp.rands if {$quiet == "false"} { exec xgraph -bb -tk -nl -m -lx 0,100 -ly 0,100 -x "% of data bytes" -y "% of discards" $flowgraphfile & } exit 0}TestSuite instproc new_tcp { startTime source dest window fid verbose size } { $self instvar ns_ set tcp [$ns_ create-connection TCP/Reno $source TCPSink $dest $fid] $tcp set window_ $window if {$size > 0} {$tcp set packetSize_ $size } set ftp [$tcp attach-app FTP] $ns_ at $startTime "$ftp start" if {$verbose == "1"} { $self tcpDumpAll $tcp 20.0 $fid }}TestSuite instproc new_cbr { startTime source dest pktSize interval fid } { $self instvar ns_ set s_agent [new Agent/UDP] set d_agent [new Agent/LossMonitor] $s_agent set fid_ $fid $d_agent set fid_ $fid set cbr [new Application/Traffic/CBR] $cbr attach-agent $s_agent $ns_ attach-agent $source $s_agent $ns_ attach-agent $dest $d_agent $ns_ connect $s_agent $d_agent if {$pktSize > 0} { $cbr set packetSize_ $pktSize } $cbr set rate_ [expr 8 * $pktSize / $interval] $ns_ at $startTime "$cbr start"}TestSuite instproc dumpflows interval { $self instvar dumpflows_inst_ ns_ r1fm_ $self instvar awkprocedure_ dump_pthresh_ global flowchan if ![info exists dumpflows_inst_] { set dumpflows_inst_ 1 $ns_ at 0.0 "$self dumpflows $interval" return } if { $awkprocedure_ == "unforcedmakeawk" } { set pcnt [$r1fm_ set epdrops_] } elseif { $awkprocedure_ == "forcedmakeawk" } { set pcnt [expr [$r1fm_ set pdrops_] - [$r1fm_ set epdrops_]] } elseif { $awkprocedure_ == "allmakeawk" } { set pcnt [$r1fm_ set pdrops_] } else { puts stderr "unknown handling of flow dumps!" exit 1 } if { $pcnt >= $dump_pthresh_ } { $r1fm_ dump flush $flowchan foreach f [$r1fm_ flows] { $f reset } $r1fm_ reset set interval 2.0 } else { set interval 1.0 } $ns_ at [expr [$ns_ now] + $interval] "$self dumpflows $interval"} TestSuite instproc droptest { stoptime } { $self instvar ns_ node_ testName_ r1fm_ awkprocedure_ set forwq [[$ns_ link $node_(r1) $node_(r2)] queue] set revq [[$ns_ link $node_(r2) $node_(r1)] queue] $forwq set mean_pktsize_ 1000 $revq set mean_pktsize_ 1000 $forwq set linterm_ 10 $revq set linterm_ 10 $forwq set limit_ 100 $revq set limit_ 100 $self create_flowstats $self dumpflows 10.0 $forwq set bytes_ true $forwq set queue_in_bytes_ true $forwq set wait_ false $self new_tcp 1.0 $node_(s1) $node_(s3) 100 1 1 1000 $self new_tcp 1.2 $node_(s2) $node_(s4) 100 2 1 50 $self new_cbr 1.4 $node_(s1) $node_(s4) 190 0.003 3 $ns_ at $stoptime "$self finish_flows $testName_" $ns_ run}Class Test/flows_unforced -superclass TestSuiteTest/flows_unforced instproc init {} { $self instvar net_ test_ set net_ net2 set test_ flows_unforced $self next 0; # zero here means don't product all.tr} Test/flows_unforced instproc run {} { $self instvar ns_ node_ testName_ r1fm_ awkprocedure_ $self instvar dump_pthresh_ $self setTopo set stoptime 500.0 set testName_ test_flows_unforced set awkprocedure_ unforcedmakeawk set dump_pthresh_ 100 $self droptest $stoptime}Class Test/flows_forced -superclass TestSuiteTest/flows_forced instproc init {} { $self instvar net_ test_ set net_ net2 set test_ flows_forced $self next 0; # zero here means don't product all.tr} Test/flows_forced instproc run {} { $self instvar ns_ node_ testName_ r1fm_ awkprocedure_ $self instvar dump_pthresh_ $self setTopo set stoptime 500.0 set testName_ test_flows_forced set awkprocedure_ forcedmakeawk set dump_pthresh_ 100 $self droptest $stoptime}Class Test/flows_combined -superclass TestSuiteTest/flows_combined instproc init {} { $self instvar net_ test_ set net_ net2 set test_ flows_combined $self next 0; # zero here means don't product all.tr} Test/flows_combined instproc run {} { $self instvar ns_ node_ testName_ r1fm_ awkprocedure_ $self instvar dump_pthresh_ $self setTopo set stoptime 500.0 set testName_ test_flows_combined set awkprocedure_ allmakeawk set dump_pthresh_ 100 $self droptest $stoptime}#--------------------------------------------------------------TestSuite instproc printall { fmon } { puts "total_drops [$fmon set pdrops_] total_packets [$fmon set pdepartures_]"}Class Test/ungentle -superclass TestSuiteTest/ungentle instproc init {} { $self instvar net_ test_ set net_ net3 set test_ ungentle $self next}Test/ungentle instproc run {} { $self instvar ns_ node_ testName_ net_ $self setTopo Agent/TCP set packetSize_ 1500 Agent/TCP set window_ 50 Queue/RED set bytes_ true set stoptime 40.0 set slink [$ns_ link $node_(r1) $node_(r2)]; # link to collect stats on set fmon [$ns_ makeflowmon Fid] #$ns_ attach-fmon $slink $fmon $ns_ attach-fmon $slink $fmon 1 set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 0] set tcp2 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 1] $tcp2 set packetSize_ 1000 set tcp3 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 2] set tcp4 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 3] $tcp4 set packetSize_ 512 set tcp5 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(s3) 4] set tcp6 [$ns_ create-connection TCP/Sack1 $node_(s2) TCPSink/Sack1 $node_(s3) 5] set tcp7 [$ns_ create-connection TCP/Sack1 $node_(s4) TCPSink/Sack1 $node_(s2) 6] set tcp8 [$ns_ create-connection TCP/Sack1 $node_(s3) TCPSink/Sack1 $node_(s1) 7] $tcp8 set packetSize_ 2000 set ftp1 [$tcp1 attach-app FTP] set ftp2 [$tcp2 attach-app FTP] set ftp3 [$tcp3 attach-app FTP] set ftp4 [$tcp4 attach-app FTP] set ftp5 [$tcp5 attach-app FTP] set ftp6 [$tcp6 attach-app FTP] set ftp7 [$tcp7 attach-app FTP] set ftp8 [$tcp8 attach-app FTP] $self enable_tracequeue $ns_ $ns_ at 0.0 "$ftp1 start" $ns_ at 1.0 "$ftp2 start" $ns_ at 5.0 "$ftp3 start" $ns_ at 6.0 "$ftp4 start" $ns_ at 9.0 "$ftp5 start" $ns_ at 10.0 "$ftp6 start" $ns_ at 13.0 "$ftp7 start" $ns_ at 14.0 "$ftp8 start" $ns_ at $stoptime "$self printall $fmon" $self tcpDump $tcp1 5.0 # trace only the bottleneck link #$self traceQueues $node_(r1) [$self openTrace $stoptime $testName_] $ns_ at $stoptime "$self cleanupAll $testName_" $ns_ run}Class Test/gentle -superclass TestSuiteTest/gentle instproc init {} { $self instvar net_ test_ set net_ net3 set test_ gentle Queue/RED set gentle_ true Test/gentle instproc run {} [Test/ungentle info instbody run ] $self next}Class Test/gentleEcn -superclass TestSuiteTest/gentleEcn instproc init {} { $self instvar net_ test_ Queue/RED set setbit_ true Agent/TCP set ecn_ 1 set net_ net3 set test_ gentleEcn Queue/RED set gentle_ true Test/gentleEcn instproc run {} [Test/ungentle info instbody run ] $self next}Class Test/ungentleBadParams -superclass TestSuiteTest/ungentleBadParams instproc init {} { $self instvar net_ test_ set net_ net3 set test_ ungentleBadParams Queue/RED set gentle_ false Queue/RED set linterm_ 50 Queue/RED set maxthresh_ 10 Test/ungentleBadParams instproc run {} [Test/ungentle info instbody run ] $self next}Class Test/gentleBadParams -superclass TestSuiteTest/gentleBadParams instproc init {} { $self instvar net_ test_ set net_ net3 set test_ gentleBadParams Queue/RED set gentle_ true Queue/RED set linterm_ 50 Queue/RED set maxthresh_ 10 Test/gentleBadParams instproc run {} [Test/ungentle info instbody run ] $self next}TestSuite runTest
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -