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

📄 test-suite-intserv.tcl

📁 跑leach需要的
💻 TCL
字号:
## Copyright (c) Xerox Corporation 1998. All rights reserved.## License is granted to copy, to use, and to make and to use derivative# works for research and evaluation purposes, provided that Xerox is# acknowledged in all documentation pertaining to any such copy or# derivative work. Xerox grants no other licenses expressed or# implied. The Xerox trade name should not be used in any advertising# without its written permission. ## XEROX CORPORATION MAKES NO REPRESENTATIONS CONCERNING EITHER THE# MERCHANTABILITY OF THIS SOFTWARE OR THE SUITABILITY OF THIS SOFTWARE# FOR ANY PARTICULAR PURPOSE.  The software is provided "as is" without# express or implied warranty of any kind.## These notices must be retained in any copies of any part of this# software. ### $Header: /nfs/jade/vint/CVSROOT/ns-2/tcl/test/test-suite-intserv.tcl,v 1.7 1999/12/15 15:55:04 heideman Exp $## # This test suite runs validation tests for the measurement based# admission control algorithms that are part of the simple# integrated services support in ns.  The integrated services support# includes a simple signalling protocol and a scheduler that provides# a service like controlled-load by giving priority to real-time over# best-effort traffic.## Five admission control algorithms are tested:# 1. Measured Sum (MS)# 2. Hoeffding Bounds (HB)# 3. Acceptance Region Tangent at Peak (ACTP)# 4. Acceptance Region Tangent at Origin (ACTO)# 5. Parameter Based (Param)## The first four are measurement-based, the last is parameter-based.## The measurement-based algorithms each use an estimation algorithm.# Time window for Measured Sum, exponential averaging for Hoeffding# Bounds and Point Sample for the Acceptance region algorithms.# See the paper "Comparison of Measurement-based Admission Control Algorithms# for Controlled-Load Service", Sugih Jamin, Scott Shenker and Peter# Danzig, in the Proceedings of IEEE Infocom '97, and references therein# for a further description of these algorithms.# To run a test:  # ns test-suite-intserv.tcl ALG# where ALG is one of MS, HB, ACTP, ACTO, Param#set meastime 100set simtime 300Class TestSuiteTestSuite proc setinstance {T} {	TestSuite set T $T}TestSuite proc getinstance {} {	TestSuite set T}TestSuite instproc init {} {	$self instvar ns_ net_ test_ node_ testName_ adc_ est_	$self instvar param_ r_ hvar_ fvar_ srcno_ qmon_ f_ flow_ totflows_	$self defaults	set ns_ [new Simulator]	# next line no longer needed with 32-bit addressing, Nov '99.	# $ns_ expand-port-field-bits 16	TestSuite setinstance $self	set net_ 2Node	set topo_ [new Topology/$net_ $ns_]	foreach i [$topo_ array names node_] {		# This would be cool, but lets try to be compatible		# with test-suite.tcl as far as possible.		#		# $self instvar $i		# set $i [$topo_ node? $i]		#		set node_($i) [$topo_ node? $i]	}	# create the link 	$ns_ duplex-intserv-link $node_(0) $node_(1) $param_(bw) $param_(dly) SimpleIntServ SALink $adc_ $est_ CL	# set up queue monitor	set f_ [open temp.rands w]	set qmon_ [$ns_ monitor-queue $node_(0) $node_(1) $f_]	set l01 [$ns_ link $node_(0) $node_(1)]	$l01 set qBytesEstimate_ 0	$l01 set qPktsEstimate_ 0	$l01 set sampleInterval_ 0	#$ns_ at $param_(meastime) "$l01 trace-util [expr $param_(ptime)*$param_(S)] $f_"	# create the receiver	set r_ [new Agent/SAack]	$ns_ attach-agent $node_(1) $r_	set hvar_ [new RandomVariable/Exponential]	$hvar_ set avg_ $param_(hold)	set fvar_ [new RandomVariable/Exponential]	$fvar_ set avg_ $param_(fint)	set srcno_ 1	# schedule the first flow	set starttime  [expr $srcno_ + double([ns-random] % 10000000) / 1e7]	$ns_ at $starttime "$self sched-source $node_(0)"	$ns_ at $param_(meastime) "$qmon_ set bdepartures_ 0;$qmon_ set bdrops_ 0"	$ns_ at $param_(simtime) "$self finish $f_"	$self set flows_ 0	$self set totflows_ 0}TestSuite instproc flowadmit {} {	$self instvar flows_ totflows_	incr flows_	incr totflows_}TestSuite instproc flowdepart {} {	$self instvar flows_	incr flows_ -1}TestSuite instproc defaults {} {	global simtime meastime	$self instvar param_	set param_(psize) 125	set param_(bw) 10e6	set param_(ptime) [expr $param_(psize)*8.0/$param_(bw)]	set param_(dly) 1ms	set param_(S) 5e3	set param_(hold) 300	set param_(fint) .4	set param_(simtime) $simtime	set param_(meastime) $meastime	set param_(trace_flow) 0	Queue/SimpleIntServ set qlimit1_ 160	Queue/SimpleIntServ set qlimit0_ 0	ADC set backoff_ true	Est set period_ [expr $param_(S) * $param_(ptime)]}TestSuite instproc run {} {	$self instvar ns_	$ns_ run}TestSuite instproc create-source {node starttime i} {	$self instvar ns_ r_ hvar_        set a [new Agent/SA]        $ns_ attach-agent $node $a        $a set fid_ $i         $ns_ connect $a $r_          set exp1 [new Application/Traffic/Exponential]        $exp1 set packetSize_ 125        $exp1 set burst_time_ [expr 20.0/64]        $exp1 set idle_time_ 325ms        $exp1 set rate_ 64k         #set up (r,b)        $a set rate_ 64k        $a set bucket_ 1        $a attach-traffic $exp1        $a set lifetime_ [$hvar_ value]        $ns_ at $starttime "$a start"        $a instvar trafgen_        set trafgen_ $exp1} TestSuite instproc sched-source {node} {	$self instvar srcno_ ns_ fvar_  param_ f_         $self create-source $node  [$ns_ now]  $srcno_        if { $param_(trace_flow) } {                puts $f_ "Flow $srcno started @ [$ns now]"        }        incr srcno_         #generate another startime        set starttime [expr [$ns_ now]+[$fvar_ value]]        $ns_ at $starttime "$self sched-source $node"}TestSuite proc runTest {} {	global argc argv quiet	set test [lindex $argv 0]	set t [new Test/$test]	$t show-simtime	$t run}TestSuite instproc show-simtime {} {	global tcl_precision	$self instvar ns_ qmon_ param_ f_ flows_ totflows_	$qmon_ instvar bdepartures_ pdrops_ pdepartures_	if {$pdepartures_ != 0} {		set d [expr $pdrops_*1.0/($pdrops_+$pdepartures_)]	} else {		set d 0	}	if { [$ns_ now] < $param_(meastime) } {		set time [$ns_ now]	} else {		set time [expr [$ns_ now] - $param_(meastime)]	}	if { $time == 0 } {		set thput 0	} else {		set thput [expr $bdepartures_ * 8.0 / ($param_(bw) * $time)]	}	set oprecision [set tcl_precision]	set tcl_precision 6	puts $f_ "[$ns_ now] $thput $d"	puts $f_ "Flows: $flows_ $totflows_"	set tcl_precision $oprecision	$ns_ at [expr [$ns_ now] + 10.0] "$self show-simtime"}TestSuite instproc finish { file } {	global tcl_precision	$self instvar qmon_ param_ f_	$qmon_ instvar pdrops_ pdepartures_ bdepartures_	set utlzn [expr $bdepartures_*8.0/($param_(bw)*($param_(simtime)-$param_(meastime)))]	set d [expr $pdrops_*1.0/($pdrops_+ $pdepartures_)]	set oprecision [set tcl_precision]	set tcl_precision 6	puts $f_ "Drops : $d Utilization : $utlzn"	set tcl_precision $oprecision	close $file	exec rm -f $file	exit 0}Class Test/MS -superclass TestSuiteTest/MS instproc init {} {	$self instvar adc_ est_	set adc_ MS	set est_ TimeWindow	$self next}Test/MS instproc defaults {} {	$self next	ADC/MS set backoff_ false	ADC/MS set utilization_ 1.02	Est/TimeWindow set T_ 3}Class Test/HB -superclass TestSuiteTest/HB instproc init {} {	$self instvar adc_ est_	set adc_ HB	set est_ ExpAvg	$self next}Test/HB instproc defaults {} {	$self next	ADC/HB set epsilon_ 0.999	Est/ExpAvg set w_ 0.0625}Class Test/ACTP -superclass TestSuiteTest/ACTP instproc init {} {	$self instvar adc_ est_	set adc_ ACTP	set est_ PointSample	$self next}Test/ACTP instproc defaults {} {	$self next	$self instvar param_	ADC/ACTP set s_ [expr 2e-7]	set param_(S) 2.5e4	Est set period_ [expr $param_(S) * $param_(ptime)]}Class Test/ACTO -superclass TestSuiteTest/ACTO instproc init {} {	$self instvar adc_ est_	set adc_ ACTO	set est_ PointSample	$self next}Test/ACTO instproc defaults {} {	$self next	$self instvar param_	ADC/ACTO set s_ [expr 8e-8]	set param_(S) 2.5e4	Est set period_ [expr $param_(S) * $param_(ptime)]}Class Test/Param -superclass TestSuiteTest/Param instproc init {} {	$self instvar adc_ est_	set adc_ Param	set est_ Null	$self next}Test/Param instproc defaults {} {	$self next	ADC/Param set utilization_ 2.05}Class SkelTopologySkelTopology instproc init ns {	$self next}SkelTopology instproc node? n {    $self instvar node_    if [info exists node_($n)] {	set ret $node_($n)    } else {	set ret ""    }    set ret}Class Topology/2Node -superclass SkelTopologyTopology/2Node instproc init ns {	$self next $ns	$self instvar node_	set node_(0) [$ns node]	set node_(1) [$ns node]}#new Test/$TestNameAgent/SA instproc sched-stop { decision } {        global hold simtime trace_flow        $self instvar node_ lifetime_	set T [TestSuite getinstance]	$T instvar ns_ param_ flows_ totflows_ f_        if { $decision == 1 } {                set leavetime [expr [$ns_ now] + $lifetime_]		$T flowadmit                $ns_ at [expr [$ns_ now] + $lifetime_] "$self stop;\                if { $param_(trace_flow) } { \                    puts $f_ \"Flow [$self set fid_] left @ $leavetime\" \            }; \            $ns_ detach-agent $node_ $self; \            delete [$self set trafgen_]; delete $self; $T flowdepart"        } else {                set leavetime [$ns_ now]                $ns_ at-now "if { $param_(trace_flow) } { \                    puts $f_ \"Flow [$self set fid_] left @ $leavetime\"\            }; \            $ns_ detach-agent $node_ $self; \            delete [$self set trafgen_]; delete $self"        }}TestSuite runTest

⌨️ 快捷键说明

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