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

📄 red-pd.tcl

📁 ns-2的文件包。多多下载
💻 TCL
字号:
## Main test file for red-pd simulations#Class TestSuitesource monitoring.tclsource helper.tclsource sources.tclsource plot.tclsource traffic.tclsource topology.tcl#global optionsset unresponsive_test_ 1set target_rtt_ 0.040set seed_ 0set simtime_ 500set verbosity_ 0set plotgraphs_ 0set plotq_ 0set dump_interval_ 10set testIdent_ 0set listMode_ "multi"#topology or traffic specific optionset topo_para1_ -1set traf_para1_ -1set traf_para2_ -1TestSuite instproc init {} {    $self instvar ns_  test_ net_ traffic_ enable_     $self instvar topo_ node_    $self instvar scheduler_ random_    global testIdent_    if {$traffic_ == "TestIdent"} {	puts stderr "Running in Ident Only Mode"	set testIdent_ 1    }    set ns_ [new Simulator]        global seed_	set random_ [new RNG]    $random_ seed $seed_    #$ns_ use-scheduler Heap    set scheduler_ [$ns_ set scheduler_]    #    puts stderr "Instantiating Topology ...$net_"    set topo_ [new Topology/$net_ $ns_]#    puts stderr "Done ..."    foreach i [$topo_ array names node_] {	set node_($i) [$topo_ node? $i]    }    }TestSuite instproc  rnd {n} {	$self instvar random_	return [$random_ uniform 0 $n]}TestSuite instproc config { name } {    $self instvar linkflowfile_ linkgraphfile_    $self instvar flowfile_ graphfile_    $self instvar redqfile_    $self instvar label_ post_        set label_ $name        set linkflowfile_ $name.flows    set linkgraphfile_ $name.xgr        set flowfile_ $name.f.tr    set graphfile_ $name.f.xgr        set redqfile_ $name.q        set post_ [new PostProcess $label_ $linkflowfile_ $linkgraphfile_ \		   $flowfile_ $graphfile_ $redqfile_]        $post_ set format_ "xgraph"}## prints "time: $time class: $class bytes: $bytes" for the link.#TestSuite instproc linkDumpFlows { linkmon interval stoptime } {    $self instvar ns_ linkflowfile_    set f [open $linkflowfile_ w]#    puts "linkDumpFlows: opening file $linkflowfile_, fdesc: $f"    TestSuite instproc dump1 { file linkmon interval } {	$self instvar ns_ linkmon_	$ns_ at [expr [$ns_ now] + $interval] \	    "$self dump1 $file $linkmon $interval"	foreach flow [$linkmon flows] {	    set bytes [$flow set bdepartures_]	    if {$bytes > 0} {		puts $file \		    "time: [$ns_ now] class: [$flow set flowid_] bytes: $bytes $interval"     	    }	}	# now put in the total	set bytes [$linkmon set bdepartures_]	puts $file  "time: [$ns_ now] class: 0 bytes: $bytes $interval"       }        $ns_ at $interval "$self dump1 $f $linkmon $interval"    $ns_ at $stoptime "flush $f"}## called on exit#TestSuite instproc finish {} {    $self instvar post_ scheduler_    $self instvar linkflowfile_    $self instvar tcpRateFileDesc_ tcpRateFile_ topo_    $topo_ instvar bandwidth_	    $scheduler_ halt    close $tcpRateFileDesc_       	    global plotgraphs_ plotq_    if {$plotgraphs_ != 0} { 	$post_ plot_bytes $bandwidth_  ;#plots the bandwidth consumed by various flows	$post_ plot_tcpRate $tcpRateFile_  ;#plots TCP goodput	if {$plotq_ == 1} { 	    $post_ plot_queue             ;#plots red's average and instantaneous queue size	}    }}## for tests with a single congested link#Class Test/one -superclass TestSuiteTest/one instproc init { name topo traffic enable } {    $self instvar net_ test_ traffic_ enable_    set test_ $name    set net_ $topo       set traffic_ $traffic    set enable_ $enable    $self next    $self config $name.$topo.$traffic.$enable}Test/one instproc run {} {    $self instvar ns_ net_ topo_ enable_ stoptime_ test_ traffic_ label_    $topo_ instvar node_ rtt_ redpdq_ redpdflowmon_ redpdlink_     $self instvar tcpRateFileDesc_ tcpRateFile_        #set stoptime_ 100.0    global simtime_    set stoptime_ $simtime_    set redpdsim [new REDPDSim $ns_ $redpdq_ $redpdflowmon_ $redpdlink_ 0 $enable_]    set fmon [$redpdsim monitor-link]    #    $self instvar flowfile_#    set flowf [open $flowfile_ w]#    $fmon attach $flowf        global dump_interval_    $self linkDumpFlows $fmon $dump_interval_ $stoptime_    global plotq_     if {$plotq_ == 1} {	$self instvar redqfile_	set redqf [open $redqfile_ w]	$redpdq_ trace curq_	$redpdq_ trace ave_	$redpdq_ attach $redqf    }    set tcpRateFile_ $label_.tcp    set tcpRateFileDesc_ [open $tcpRateFile_ w]    puts $tcpRateFileDesc_ "TitleText: $test_"    puts $tcpRateFileDesc_ "Device: Postscript"            $self traffic$traffic_    $ns_ at $stoptime_ "$self finish"        ns-random 0    $ns_ run}##multiple congested link tests#Class Test/multi -superclass TestSuiteTest/multi instproc init { name topo traffic enable } {    $self instvar net_ test_ traffic_ enable_    set test_ $name    set net_ $topo       set traffic_ $traffic    set enable_ $enable    $self next    $self config $name.$topo.$traffic.$enable}Test/multi instproc run {} {    $self instvar ns_ net_ topo_ enable_ stoptime_ test_ label_    $topo_ instvar node_ rtt_ redpdq_ redpdflowmon_ redpdlink_ noLinks_    $self instvar tcpRateFileDesc_ tcpRateFile_        global simtime_	set stoptime_ $simtime_        for {set i 0} {$i < $noLinks_} {incr i} {	set redpdsim($i) [new REDPDSim $ns_ $redpdq_($i) $redpdflowmon_($i) $redpdlink_($i) $i $enable_]    }        #monitor the last congested link    set link [expr {$noLinks_ - 1}]    	global dump_interval_    set fmon [$redpdsim($link) monitor-link]	$self linkDumpFlows $fmon $dump_interval_ $stoptime_#    $self instvar flowfile_#    set flowf [open $flowfile_ w]#    $fmon attach $flowf        global plotq_ 	if {$plotq_ == 1} {		$self instvar redqfile_		set redqf [open $redqfile_ w]		$redpdq_($link) trace curq_		$redpdq_($link) trace ave_		$redpdq_($link) attach $redqf	}    set tcpRateFile_ $label_.tcp    set tcpRateFileDesc_ [open $tcpRateFile_ w]    puts $tcpRateFileDesc_ "TitleText: $test_"    puts $tcpRateFileDesc_ "Device: Postscript"        $self trafficMulti $noLinks_        $ns_ at $stoptime_ "$self finish"    ns-random 0    $ns_ run}#-----------------------------------------TestSuite proc usage {} {        global argv0    puts stderr "\nUsage: ns $argv0 <test> <topology> <traffic> \[options]"    puts stderr "\nValid tests: [$self get-subclasses TestSuite Test/]"    puts stderr "Valid Topologies: [$self get-subclasses Topology Topology/]"    puts stderr "Valid Traffic: [$self get-subclasses TestSuite Traffic/]"	puts stderr "\nOptions:"	puts stderr "enable <0|1> - whether RED-PD is enabled (default 1)"	puts stderr "testUnresp <0|1> - whether unresponsive testing is ON (default 1)"	puts stderr "rtt <value> - target rtt in seconds (default 0.040)"	puts stderr "seed <value> - seed for the random number generator (default 0)"	puts stderr "time <value> - time in seconds for which to run the simulation (default 500)"    puts stderr "verbose <value> - verbosity level \[-1,5] (default 0)"	puts stderr "plotgraphs <0|1> - whether to plot instantaneous throughput graph"	puts stderr "plotq <0|1> - whether to trace RED instantaneous and avg queue"	puts stderr "period <value> - period in seconds for dumping flow information"#	puts stderr "listmode <single|multi> - what list mode to run in (currently supported only for testIdent)"	puts stderr "\nTopology or Traffic specific options:"	puts stderr "p <value> - drop rate (fraction) for fixed drop rate simulations (netTestFRp & netPktsVsBytes)"	puts stderr "gamma <value> - sending rate multiplier for the flow (TestFRp)"	puts stderr "flows <value> - number of flows (TFRC & Response)"	puts stderr "links <value> - number of links (netMulti)"	puts stderr "ftype <cbr|tcp> - type of flow (Multi & TestFRp)"	puts stderr "testRTT <value> - rtt of flows for testing identification (TestIdent)"	exit  1}TestSuite proc isProc? {cls prc} {        if [catch "Object info subclass $cls/$prc" r] {                global argv0                puts stderr "$argv0: no such $cls: $prc"                $self usage        }}TestSuite proc get-subclasses {cls pfx} {        set ret ""        set l [string length $pfx]        set c $cls        while {[llength $c] > 0} {                set t [lindex $c 0]                set c [lrange $c 1 end]                if [string match ${pfx}* $t] {                        lappend ret [string range $t $l end]                }                eval lappend c [$t info subclass]        }        set ret}TestSuite proc runTest {} {    global argc argv    set enable 1	if {$argc < 3} {		$self usage	}	set test [lindex $argv 0]	$self isProc? Test $test		set topo [lindex $argv 1]	$self isProc? Topology $topo		set traffic [lindex $argv 2]	$self isProc? Traffic $traffic		for {set i 3} {$i < $argc} {incr i} {		set option [lindex $argv $i]		incr i		set value [lindex $argv $i]		switch -exact $option {			enable {				set enable $value			}			testUnresp {				global unresponsive_test_				set unresponsive_test_ $value			}			rtt {				global target_rtt_				set target_rtt_ $value			}			seed {				global seed_				set seed_ $value			}			time {				global simtime_				set simtime_ $value			}			verbose {				global verbosity_				set verbosity_ $value			}			plotgraphs {				global plotgraphs_				set plotgraphs_ $value			}			plotq {				global plotq_				set plotq_ $value			}			period {				global dump_interval_				set dump_interval_ $value			}			listmode {				global listMode_ 				set listMode_ $value			}			p {				global topo_para1_				set topo_para1_ $value			}			gamma {				global traf_para2_				set traf_para2_ $value			}			flows {				global traf_para1_				set traf_para1_ $value			}			links {				global topo_para1_				set topo_para1_ $value			}			ftype {				global traf_para1_				set traf_para1_ $value			}			testRTT {				global topo_para1_				set topo_para1_ $value			}			default {				puts "Unknown Option $option"				$self usage			}		}	}		    set t [new Test/$test $test $topo $traffic $enable]    $t run}TestSuite runTest

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -