📄 parking_lot_topo.tcl
字号:
foreach queue "[set q$i] [set rq$i]" { set-red-params $queue $qMinTh $qMaxTh $qWeight $qLinterm } } "Vq" { foreach link "[set l$i] [set rl$i]" { set queue [$link queue] $queue set ecnlim_ 0.98 $queue set limit_ $qSize $queue link_capacity_bits [[$link set link_] set bandwidth_]; $queue set queue_in_bytes_ 1 $queue set buflim_ 1000 $queue set alpha_ 0.15 } } "REM" { foreach link "[set l$i] [set rl$i]" { set queue [$link queue] $queue set reminw_ 0.01 $queue set remgamma_ 0.001 $queue set remphi_ 1.001 set cap_in_bits [[$link set link_] set bandwidth_] $queue set remupdtime_ [expr 0.01 / ($cap_in_bits/8000000.0)] $queue set rempktsize_ 1000 $queue set rempbo_ [expr $qSize * 0.33] } } "DropTail" { } "XCP" { foreach link "[set l$i] [set rl$i]" { set queue [$link queue] #set-red-params $queue $qMinTh $qMaxTh $qWeight $qLinterm $queue set-link-capacity [[$link set link_] set bandwidth_]; } } "CSFQ" { foreach link "[set l$i]" { set queue [$link queue] set ff 0 while {$ff < $nAllHopsTCPs} { # Second argument is the flow's wait $queue init-flow $ff 1.0 [expr 1000 * $delay * 2 * 4] incr ff } set j [expr (1000 * $i) + 1000 ]; while { $j < [expr [lindex $nTCPsPerHop_list $i] + ($i + 1) * 1000] } { $queue init-flow $j 1.0 [expr 1000 * $delay * 2 * 4] incr j } set kLink [expr 1000 * $delay * 2 * 4] set queueSize [expr $qSize * 1000 * 8] set qsizeThresh [expr $queueSize * 0.4] $queue init-link 1 $kLink $queueSize $qsizeThresh [[$link set link_] set bandwidth_] } foreach link "[set rl$i]" { set queue [$link queue] set ff $nAllHopsTCPs while {$ff < [expr $rTCPs + $nAllHopsTCPs ] } { # Second argument is the flow's wait $queue init-flow $ff 1.0 [expr 1000 * $delay * 2 * 4] incr ff } set kLink [expr 1000 * $delay * 2 * 4] set queueSize [expr $qSize * 1000 * 8] set qsizeThresh [expr $queueSize * 0.7] $queue init-link 1 $kLink $queueSize $qsizeThresh [[$link set link_] set bandwidth_] } } default {} } incr i}# Create sources: 1) Long TCPsset i 0while { $i < $nAllHopsTCPs } { set StartTime [expr [$rtg integer 1000] * 0.001 * (0.01 * $numHops * $delay) + $SimStartTime] if {$qType == "XCP" } { set rcvr_TCP [new Agent/XCPSink] $ns attach-agent [set n$numHops] $rcvr_TCP set src$i [new GeneralSender $i $n0 $rcvr_TCP "$StartTime TCP/Reno/XCP"] puts "starttime=$StartTime" } else { set rcvr_TCP [new Agent/TCPSink] $ns attach-agent [set n$numHops] $rcvr_TCP set src$i [new GeneralSender $i $n0 $rcvr_TCP "$StartTime TCP/Reno"] } [[set src$i] set tcp_] set window_ [expr $qSize * 10] incr i}# 2) jth Hop TCPs; start at j*1000set i 0;while {$i < $numHops} { set j [expr (1000 * $i) + 1000 ]; while { $j < [expr [lindex $nTCPsPerHop_list $i] + ($i + 1) * 1000] } { set StartTime [expr [lindex $StartTime_list $i]+[$rtg integer 1000] * 0.001 * (0.01 * $numHops * $delay)+ $SimStartTime] if {$qType == "XCP" } { set rcvr_TCP [new Agent/XCPSink] $ns attach-agent [set n[expr $i + 1]] $rcvr_TCP set src$j [new GeneralSender $j [set n$i] $rcvr_TCP "$StartTime TCP/Reno/XCP"] puts "starttime=$StartTime" } else { set rcvr_TCP [new Agent/TCPSink] $ns attach-agent [set n[expr $i + 1]] $rcvr_TCP set src$j [new GeneralSender $j [set n$i] $rcvr_TCP "$StartTime TCP/Reno"] } [[set src$j] set tcp_] set window_ [expr $qSize * 10] incr j } incr i}# 3) reverse TCP; ids follow directly allhops TCPsset i 0while {$i < $numHops} { set l 0 while { $l < $rTCPs} { set s [expr $l + $nAllHopsTCPs + ( $i * $rTCPs ) ] #puts "s=$s rTCPs=$rTCPs l=$l All=$nAllHopsTCPs" set StartTime [expr [$rtg integer 1000] * 0.001 * (0.01 * $numHops * $delay)+ 0.0] if {$qType == "XCP" } { set rcvr_TCP [new Agent/XCPSink] $ns attach-agent [set n$i] $rcvr_TCP set src$s [new GeneralSender $s [set n[expr $i + 1]] $rcvr_TCP "$StartTime TCP/Reno/XCP"] puts "starttime=$StartTime" } else { set rcvr_TCP [new Agent/TCPSink] $ns attach-agent [set n$i] $rcvr_TCP set src$s [new GeneralSender $s [set n[expr $i + 1]] $rcvr_TCP "$StartTime TCP/Reno"] } [[set src$s] set tcp_] set window_ [expr $qSize * 10] incr l } incr i}#---------- Trace --------------------## General#set f_all [open TR/out.tr w]#$ns trace-queue $n0 $n1 $f_all#$ns trace-queue $n1 $n2 $f_all#$ns trace-queue $n2 $n3 $f_all#$ns trace-queue $n3 $n4 $f_all#$ns trace-queue $n4 $n5 $f_all#$ns trace-queue $n5 $n6 $f_all#$ns trace-queue $n6 $n7 $f_all#$ns trace-queue $n7 $n8 $f_all#$ns trace-queue $n8 $n9 $f_all# Trace sourcesforeach i $tracedXCPs { [set src$i] trace-xcp "cwnd seqno"}# Trace Queuesset i 0;while { $i < $numHops } { set qtype [lindex $qType_list $i] foreach queue_name "q$i rq$i" { set queue [set "$queue_name"] switch $qtype { "DropTail" {} "Vq" {} "REM" {} "CSFQ" {} #"RED/XCP" {} default { #RED and XCP global "ft_red_$queue_name" set "ft_red_$queue_name" [open TR/ft_red_[set queue_name].tr w] $queue attach [set ft_red_$queue_name] #$queue trace curq_ #$queue trace ave_ #$queue trace prob1_ } } } #The following is done in the Queue Class foreach queue_name "q$i" { puts "attaching a file to $queue_name $qType" set queue [set "$queue_name"] $queue queue-sample-everyrtt $qEffective_RTT #global ft_trace_$queue_name #set ft_trace_$queue_name [open TR/ft_trace_[set queue_name].tr w] #$queue queue-attach [set ft_trace_$queue_name] #$queue queue-trace-drops #$queue queue-trace-curq } ### Trace Utilization #[set q$i] queue-set-link-capacity [[[$ns link [set n$i] [set n[expr $i +1]]] set link_] set bandwidth_] incr i}#---------------- Run the simulation ------------------------#set files "f_all ";set i 0;while { $i < $numHops } { set files "$files ft_trace_q$i ft_trace_rq$i ft_q$i ft_rq$i ft_red_q$i ft_red_rq$i " incr i}foreach i $tracedXCPs { set file [set src$i tcpTrace_] set files "$files $file"}proc finish {} { global ns if {[info exists f]} { $ns flush-trace close $f } $ns halt}$ns at $SimStopTime "finish"$ns runflush-files $files#----------------- Post Processing---------------------------#if { $PostProcess } { #--- Traced Flows set TraceName "Flows --$qType-QS$qSize" plot-xcp $TraceName $tracedXCPs 0.0 "cwnd_" plot-xcp $TraceName $tracedXCPs 0.0 "t_seqno_"}if { $PostProcess } { #---- Queue 1 - Data set i 0; foreach i $tracedQueues { puts "Q$i" set TraceName "q$i--QS$qSize-Max$qMaxTh-Min$qMinTh" switch $qType { "DropTail" {} "Vq" { #plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "vq_len" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "virtual_cap" } "XCP" { plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "input_traffic_bytes_ BTA_ BTF_" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "BTA_not_allocated BTF_not_reclaimed" plot-red-queue1 $TraceName 0 TR/ft_red_q$i.tr plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "Queue_bytes_" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "avg_rtt_ Tq_" } "RED" { plot-red-queue1 $TraceName 0 TR/ft_red_q$i.tr } "CSFQ" { plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "rateAlpha_ rateTotal_" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "congested_" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "alpha_" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "qsizeCrt_" plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "label" } default {} } queue-plot $TraceName 0 [set ft_trace_q$i] TR/ft_trace_q$i.tr plot-function-of-time $TraceName 0 TR/ft_trace_q$i.tr "u" incr i }}set i 0 while { $i < $numHops} { puts " q$i drops = [[set q$i] queue-read-drops]" puts " r$i drops = [[set rq$i] queue-read-drops]" incr i}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -