📄 rmcc-4.tcl
字号:
# Multiple RM flows scenario competing with multiple TCP scenario# # RM sender 1 # topology: . o o RM recv 1# . \ 0 1 / # RM send N o---o-----------o--o RM recv N# /| B/N link |\# / | | \ # o o o o TCP recv 1# TCP sender 1 # ... TCP receiver N# TCP sender N ## start N number of rm flows and TCP flows randomly# after steady state is attained measure thruput ans compare## usage: ns rmcc-4.tclsource rmcc.tclproc get_rand_time {first last number} { set times "" set interval [expr $last - $first] set maxrval [expr pow(2,31)] set intrval [expr $interval/$maxrval] for { set i 0 } { $i < $number } { incr i } { set randtime [expr ([ns-random] * $intrval) + $first] # XXX include only 6 decimals (i.e. usec) lappend times [format "%.1f" $randtime] } return $times}ScenLib/RM instproc random_start_rm {start stop} { global ns n num #create mcast trees set i [expr $num*2] set t [expr $num * 3] while {$i < $t} { lappend R $i incr i } for {set i 0} {$i < $num} {incr i} { set time [get_rand_time $start $stop 1] set st [expr $time - 1] if {$st < 0} { set st 0} set sw [expr $st - 0.7] if {$sw < 0} { set sw 0} #puts "time = $time" eval $self create_mcast $i $sw $st $time $R #puts "mcast $i to $R" }}ScenLib/RM instproc random_start_tcp {start stop} { global ns n num set start [expr $num*2] set end [expr $num*4] set i $num set j [expr $num*3] while {$i < $start || $j < $end} { set time [get_rand_time $start $stop 1] $self create_tcp $i $j $time #puts "$self create_tcp $i $j $time" incr i incr j }}ScenLib/RM instproc make_topo3 {} { global ns tcp_model num n opts #make the bottleneck link set n(l) [$ns node] set n(r) [$ns node] set num $opts(clientNum) ;#N actual number flows setup $ns duplex-link $n(l) $n(r) [expr $num * 0.5]Mbps \ $opts(bottleneckDelay) DropTail $ns queue-limit $n(l) $n(r) [expr $num * 10] #make N number of TCP connections #set seed 12345 #set params "-print-drop-rate 1 -debug 0 -trace-filename out" #set p1 "-bottle-queue-length $opts(bottleneckQSize) \ #-bottle-queue-method DropTail" #set p2 "-client-arrival-rate 120 \ # -bottle-bw $opts(bottleneckBW) \ #-bottle-delay $opts(bottleneckDelay) \ #-ns-random-seed $seed" #set p2a "-source-tcp-method TCP/Reno -sink-ack-method \ # TCPSink/DelAck" #set p3 "-client-mouse-chance 90 -client-mouse-packets 10" #set p4 "-client-bw 100Mb -node-number $num -client-reverse-chance 10" #set p5 "-initial-client-count 0" #set p6 "-duration 10 graph-results 1 graph-join-queueing 0 -graph-scale 2" #set tcp_model [eval new TrafficGen/ManyTCP $params $p1 $p2 \ # $p2a $p3 $p4 $p5 $p6] #now create client nodes on left of bottleneck for {set i 0} {$i < [expr $num*2]} {incr i} { set n($i) [$ns node] $ns duplex-link $n($i) $n(l) 10Mb 5ms DropTail } # do same for right of B/N link for {set i [expr $num*2]} {$i < [expr $num * 4]} {incr i} { set n($i) [$ns node] $ns duplex-link $n(r) $n($i) [expr $num * 5]Mb \ 5ms DropTail } }ScenLib/RM instproc add_flowmon { time } { global num n t #make sure the flow monitors are dumped at the right time $self make_flowmon $time $n(r) $n([expr $num*2]) flowStats_1_$num.$t \ $n(r) $n([expr $num * 3]) \ flowStats_1_[expr $num + 1].$t \ } proc run {} { global ns n num set test_scen [new ScenLib/RM] $test_scen make_topo3 #random start tcp and rm connections between 0 and 10s. $test_scen random_start_tcp 0.0 10.0 $test_scen random_start_rm 0.0 10.0 $test_scen add_flowmon 30.0 $test_scen dump_flowmon $n(r) $n([expr $num*2]) 60.0 ;# rm flow $test_scen dump_flowmon $n(r) $n([expr $num*3]) 60.0 ;#tcp flow $ns at 60.0 "finish" $ns run}global argv prog opts t mflagset mflag 0if [string match {*.tcl} $argv0] { set prog [string range $argv0 0 [expr [string length $argv0] - 5]]} else { set prog $argv0}process_args $argvset t $progrun
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -