⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test-suite-red.tcl

📁 柯老师网站上找到的
💻 TCL
📖 第 1 页 / 共 2 页
字号:
########################################################################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 + -