📄 test-suite-jobs.tcl
字号:
## Copyright (c) 2000-2002, by the Rector and Board of Visitors of the # University of Virginia.# All rights reserved.## Redistribution and use in source and binary forms, # with or without modification, are permitted provided # that the following conditions are met:## Redistributions of source code must retain the above # copyright notice, this list of conditions and the following # disclaimer. ## Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. ## Neither the name of the University of Virginia nor the names # of its contributors may be used to endorse or promote products # derived from this software without specific prior written # permission. ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF # THE POSSIBILITY OF SUCH DAMAGE.## $Id: test-suite-jobs.tcl,v 1.1 2003/02/02 22:20:36 xuanc Exp $ # # This test suite is for validating wireless lans # To run all tests: test-all-jobs# to run individual test:# ns test-suite-jobs.tcl jobs-rate# ns test-suite-jobs.tcl jobs-lossdel## To view a list of available test to run with this script:# ns test-suite-jobs.tcl#Class TestSuite# Rate allocationClass Test/jobs-rate -superclass TestSuite# Relative guarantees, TCP trafficClass Test/jobs-lossdel -superclass TestSuite# =====================================================================# General setup#proc usage {} { global argv0 puts stderr "usage: ns $argv0 <tests> " puts "Valid Tests: jobs-rate jobs-lossdel" exit 1}proc default_options {} { global opt set opt(queue_edg1) Marker set opt(queue_edg2) Demarker set opt(queue_core) JoBS set opt(seed) 16.0 set opt(tr) temp.rands set opt(bw) 10000.0 set opt(gw_buff) 800 set opt(pktsz) 500 set opt(start_tm) 0.0 set opt(finish_tm) 10.0 set opt(hops) 2 set opt(nsources) 4 set opt(n_cl1) 1 set opt(n_cl2) 1 set opt(n_cl3) 1 set opt(n_cl4) 1 set opt(delay) 1.0 set opt(sample) 1}# =====================================================================# Other default settings#Queue/JoBS set drop_front_ falseQueue/JoBS set trace_hop_ falseQueue/JoBS set adc_resolution_type_ 0Queue/JoBS set shared_buffer_ 0Queue/JoBS set mean_pkt_size_ 4000Queue/Demarker set demarker_arrvs1_ 0Queue/Demarker set demarker_arrvs2_ 0Queue/Demarker set demarker_arrvs3_ 0Queue/Demarker set demarker_arrvs4_ 0Queue/Marker set marker_arrvs1_ 0Queue/Marker set marker_arrvs2_ 0Queue/Marker set marker_arrvs3_ 0Queue/Marker set marker_arrvs4_ 0# =====================================================================# The two tests#Test/jobs-rate instproc init {} { global opt core_node user_source user_source_agent user_sink user_sink_agent $self instvar ns_ testName_ set testName_ jobs-rate set opt(rp) jobs-rate set opt(udp_source_rate) 5000.0 $self next $self jobs-rate-topo $self traffic-setup $ns_ at 0.0 "$self record_thru" $ns_ at [expr $opt(finish_tm)+.000000001] "puts \"Finishing Simulation...\" ;" $ns_ at [expr $opt(finish_tm)+1] "$self finish"}Test/jobs-rate instproc run {} { $self instvar ns_ puts "Starting Simulation..." $ns_ run}Test/jobs-lossdel instproc init {} { global opt core_node user_source user_source_agent user_sink user_sink_agent $self instvar ns_ testName_ set testName_ jobs-lossdel set opt(rp) jobs-lossdel set opt(udp_source_rate) 2600.0 $self next $self jobs-lossdel-topo $self traffic-setup $ns_ at [expr $opt(finish_tm)+.000000001] "puts \"Finishing Simulation...\" ;" $ns_ at [expr $opt(finish_tm)+1] "$self finish"}Test/jobs-lossdel instproc run {} { $self instvar ns_ puts "Starting Simulation..." $ns_ run}## =====================================================================# Traffic generation#TestSuite instproc traffic-setup {} { global opt user_source user_source_agent user_sink user_sink_agent $self instvar ns_ for {set i 1} {$i <= $opt(nsources)} {incr i} { set user_source_agent($i) [new Agent/UDP] set user_sink_agent($i) [new Agent/LossMonitor] set user_flow($i) [new Application/Traffic/CBR] $ns_ attach-agent $user_source($i) $user_source_agent($i) $ns_ attach-agent $user_sink($i) $user_sink_agent($i) $ns_ connect $user_source_agent($i) $user_sink_agent($i) $user_source_agent($i) set packetSize_ $opt(pktsz) $user_flow($i) set rate_ [expr $opt(udp_source_rate)*1000.0] $user_flow($i) attach-agent $user_source_agent($i) $ns_ at [expr $opt(start_tm)] "$user_flow($i) start" }}# =====================================================================# Topology generation#TestSuite instproc jobs-rate-topo {} { global opt core_node user_source user_sink $self instvar ns_ set DETERM 1 for {set i 1} {$i <= $opt(hops)} {incr i} { set core_node($i) [$ns_ node] } for {set i 1} {$i <= $opt(nsources)} {incr i} { set user_source($i) [$ns_ node] set user_sink($i) [$ns_ node] } for {set i 1} {$i < $opt(hops)} {incr i} { $ns_ duplex-link $core_node($i) $core_node([expr $i+1]) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] $opt(queue_core) $ns_ queue-limit $core_node($i) $core_node([expr $i+1]) $opt(gw_buff) $ns_ queue-limit $core_node([expr $i+1]) $core_node($i) $opt(gw_buff) set l [$ns_ get-link $core_node($i) $core_node([expr $i+1])] set q [$l queue] $q init-rdcs -1 -1 -1 -1 $q init-rlcs -1 -1 -1 -1 $q init-alcs -1 -1 -1 -1 $q init-adcs -1 -1 -1 -1 $q init-arcs 4000000 3000000 2000000 1000000 $q link [$l link] $q trace-file null $q sampling-period $opt(sample) $q id $i $q initialize # It's a duplex link, so we need to do exactly the same thing on the # reverse path. set l [$ns_ get-link $core_node([expr $i+1]) $core_node($i)] set q [$l queue] $q init-rdcs -1 -1 -1 -1 $q init-rlcs -1 -1 -1 -1 $q init-alcs -1 -1 -1 -1 $q init-adcs -1 -1 -1 -1 $q init-arcs 4000000 3000000 2000000 1000000 $q link [$l link] $q trace-file null $q sampling-period $opt(sample) $q id [expr $i+$opt(hops)] $q initialize } for {set i 1} {$i <= $opt(nsources)} {incr i} { $ns_ simplex-link $user_source($i) $core_node(1) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Marker $ns_ simplex-link $core_node(1) $user_source($i) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Demarker $ns_ queue-limit $user_source($i) $core_node(1) $opt(gw_buff) $ns_ queue-limit $core_node(1) $user_source($i) $opt(gw_buff) set q [$ns_ get-queue $user_source($i) $core_node(1)] $q marker_type $DETERM if {$i == $opt(n_cl1)} { $q marker_class 1 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)} { $q marker_class 2 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)+$opt(n_cl3)} { $q marker_class 3 } else { $q marker_class 4 } set q [$ns_ get-queue $core_node(1) $user_source($i)] $q trace-file null $ns_ simplex-link $core_node($opt(hops)) $user_sink($i) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Demarker $ns_ simplex-link $user_sink($i) $core_node($opt(hops)) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Marker $ns_ queue-limit $core_node($opt(hops)) $user_sink($i) $opt(gw_buff) $ns_ queue-limit $user_sink($i) $core_node($opt(hops)) $opt(gw_buff) set q [$ns_ get-queue $core_node($opt(hops)) $user_sink($i)] $q trace-file null set q [$ns_ get-queue $user_sink($i) $core_node($opt(hops))] $q marker_type $DETERM if {$i == $opt(n_cl1)} { $q marker_class 1 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)} { $q marker_class 2 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)+$opt(n_cl3)} { $q marker_class 3 } else { $q marker_class 4 } }}TestSuite instproc jobs-lossdel-topo {} { global opt core_node user_source user_sink $self instvar ns_ set DETERM 1 Queue/JoBS set shared_buffer_ 1 Queue/JoBS set trace_hop_ true for {set i 1} {$i <= $opt(hops)} {incr i} { set core_node($i) [$ns_ node] } for {set i 1} {$i <= $opt(nsources)} {incr i} { set user_source($i) [$ns_ node] set user_sink($i) [$ns_ node] } for {set i 1} {$i < $opt(hops)} {incr i} { $ns_ duplex-link $core_node($i) $core_node([expr $i+1]) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] $opt(queue_core) $ns_ queue-limit $core_node($i) $core_node([expr $i+1]) $opt(gw_buff) $ns_ queue-limit $core_node([expr $i+1]) $core_node($i) $opt(gw_buff) set l [$ns_ get-link $core_node($i) $core_node([expr $i+1])] set q [$l queue] $q init-rdcs -1 4 4 4 $q init-rlcs -1 2 2 2 $q init-alcs 0.01 -1 -1 -1 $q init-adcs 0.005 -1 -1 -1 $q init-arcs -1 -1 -1 -1 $q link [$l link] $q trace-file $opt(tr) $q sampling-period $opt(sample) $q id $i $q initialize # It's a duplex link, so we need to do exactly the same thing on the # reverse path. set l [$ns_ get-link $core_node([expr $i+1]) $core_node($i)] set q [$l queue] $q init-rdcs -1 4 4 4 $q init-rlcs -1 2 2 2 $q init-alcs 0.01 -1 -1 -1 $q init-adcs 0.005 -1 -1 -1 $q init-arcs -1 -1 -1 -1 $q link [$l link] $q trace-file null $q sampling-period $opt(sample) $q id [expr $i+$opt(hops)] $q initialize } for {set i 1} {$i <= $opt(nsources)} {incr i} { $ns_ simplex-link $user_source($i) $core_node(1) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Marker $ns_ simplex-link $core_node(1) $user_source($i) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Demarker $ns_ queue-limit $user_source($i) $core_node(1) $opt(gw_buff) $ns_ queue-limit $core_node(1) $user_source($i) $opt(gw_buff) set q [$ns_ get-queue $user_source($i) $core_node(1)] $q marker_type $DETERM if {$i == $opt(n_cl1)} { $q marker_class 1 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)} { $q marker_class 2 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)+$opt(n_cl3)} { $q marker_class 3 } else { $q marker_class 4 } set q [$ns_ get-queue $core_node(1) $user_source($i)] $q trace-file null $ns_ simplex-link $core_node($opt(hops)) $user_sink($i) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Demarker $ns_ simplex-link $user_sink($i) $core_node($opt(hops)) [expr $opt(bw)*1000.] [expr $opt(delay)/1000.] Marker $ns_ queue-limit $core_node($opt(hops)) $user_sink($i) $opt(gw_buff) $ns_ queue-limit $user_sink($i) $core_node($opt(hops)) $opt(gw_buff) set q [$ns_ get-queue $core_node($opt(hops)) $user_sink($i)] $q trace-file null set q [$ns_ get-queue $user_sink($i) $core_node($opt(hops))] $q marker_type $DETERM if {$i == $opt(n_cl1)} { $q marker_class 1 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)} { $q marker_class 2 } elseif {$i <= $opt(n_cl1)+$opt(n_cl2)+$opt(n_cl3)} { $q marker_class 3 } else { $q marker_class 4 } }}# =====================================================================# Various helpers#Simulator instproc get-link { node1 node2 } { $self instvar link_ set id1 [$node1 id] set id2 [$node2 id] return $link_($id1:$id2)}Simulator instproc get-queue { node1 node2 } { set l [$self get-link $node1 $node2] set q [$l queue] return $q}TestSuite instproc init {} { global opt tracefd global node_ $self instvar ns_ testName_ set ns_ [new Simulator] set tracefd [open $opt(tr) w]}TestSuite instproc finish {} { $self instvar ns_ global quiet $ns_ flush-trace puts "finishing.." exit 0}TestSuite instproc record_thru {} { $self instvar ns_ global tracefd opt user_sink_agent set time 0.5 set tot_recv 0 set now [$ns_ now] for {set i 1} {$i <= $opt(nsources)} {incr i} { set recv($i) [$user_sink_agent($i) set bytes_] $user_sink_agent($i) set bytes_ 0 } puts $tracefd [format "%.2f %.2f %.2f %.2f %.2f" $now [expr 8.*$recv(1)/$time] [expr 8.*$recv(2)/$time] [expr 8.*$recv(3)/$time] [expr 8.*$recv(4)/$time]] $ns_ at [expr $now+$time] "$self record_thru"}# =====================================================================# Test launcher#proc runtest {arg} { global quiet set quiet 0 set b [llength $arg] if {$b == 1} { set test $arg } elseif {$b == 2} { set test [lindex $arg 0] if {[lindex $arg 1] == "QUIET"} { set quiet 1 } } else { usage } set t [new Test/$test] $t run}# =====================================================================# Main#global argv arg0default_optionsruntest $argv
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -