📄 util.tcl
字号:
# configure RED parametersQueue/RED set setbit_ trueQueue/RED set drop-tail_ falseQueue/RED set fracthresh_ trueQueue/RED set fracminthresh_ 0.15Queue/RED set fracmaxthresh_ 0.6Queue/RED set q_weight_ 0.01Queue/RED set wait_ falseQueue/RED set linterm_ 10#Queue/RED set linterm_ 5Queue set interleave_ falseQueue set acksfirst_ falseQueue set filteracks_ falseQueue set replace_head_ falseQueue set ackfromfront_ falseQueue set priority_drop_ falseQueue set random_drop_ falseAgent/TCP set disable_ecn_ 0Agent/TCP set restart_bugfix_ trueAgent/TCP/Fack set ss-div4 0Agent/TCP/Fack set rampdown 0proc plotgraph {graph connGraphFlag midtime { qtraceflag false } } { global env upvar $connGraphFlag graphFlag exec gawk --lint -f ../../../ex/asym/tcp-trace.awk tcp-raw.tr exec gawk --lint -f ../../../ex/asym/seq.awk out.tr exec gawk --lint -v mid=$midtime -f ../../../ex/asym/tcp.awk tcp.tr exec gawk --lint -f ../../../ex/asym/tcp-burst.awk tcp.tr if { $qtraceflag } { exec gawk --lint -f ../../../ex/asym/queue.awk q.tr } set if [open index.out r] while {[gets $if i] >= 0} { if {$graph || $graphFlag($i)} { set seqfile [format "seq-%s.out" $i] set ackfile [format "ack-%s.out" $i] set cwndfile [format "cwnd-%s.out" $i] set ssthreshfile [format "ssthresh-%s.out" $i] set srttfile [format "srtt-%s.out" $i] set rttvarfile [format "rttvar-%s.out" $i] exec xgraph -display $env(DISPLAY) -bb -tk -m -x time -y seqno $seqfile $ackfile & exec xgraph -display $env(DISPLAY) -bb -tk -m -x time -y window $cwndfile & } } close $if if { $qtraceflag } { set qif [open qindex.out r] while {[gets $qif i] >= 0} { exec xgraph -display $env(DISPLAY) -bb -tk -m -x time -y "# packets" $i & } close $qif }}proc monitor_queue {ns n0 n1 queuetrace sampleInterval} { set id0 [$n0 id] set id1 [$n1 id] set l01 [$ns set link_($id0:$id1)] $ns monitor-queue $n0 $n1 $queuetrace $sampleInterval $l01 set qBytesEstimate_ 0 $ns at [$ns now] "$l01 queue-sample-timeout"}proc trace_queue {ns n0 n1 queuetrace} { set id0 [$n0 id] set id1 [$n1 id] set l01 [$ns set link_($id0:$id1)] $ns monitor-queue $n0 $n1 $queuetrace $ns at [$ns now] "$l01 start-tracing"}proc createTcpSource { type { maxburst 0 } { tcpTick 0.1 } { window 100 } } { set tcp0 [new Agent/$type] puts "$type $maxburst" $tcp0 set class_ 1 $tcp0 set maxburst_ $maxburst $tcp0 set tcpTick_ $tcpTick $tcp0 set window_ $window $tcp0 set maxcwnd_ $window $tcp0 set ecn_ 1 $tcp0 set g_ 0.125 return $tcp0} proc setupTcpTracing { tcp0 tcptrace } { $tcp0 attach $tcptrace $tcp0 trace "t_seqno_" $tcp0 trace "rtt_" $tcp0 trace "srtt_" $tcp0 trace "rttvar_" $tcp0 trace "backoff_" $tcp0 trace "dupacks_" $tcp0 trace "ack_" $tcp0 trace "cwnd_" $tcp0 trace "ssthresh_" $tcp0 trace "maxseq_" $tcp0 trace "exact_srtt_"}proc setupGraphing { tcp connGraph connGraphFlag} { upvar $connGraphFlag graphFlag set saddr [expr [$tcp set addr_]/256] set sport [expr [$tcp set addr_]%256] set daddr [expr [$tcp set dst_]/256] set dport [expr [$tcp set dst_]%256] set conn [format "%d,%d-%d,%d" $saddr $sport $daddr $dport] set graphFlag($conn) $connGraph}proc createTcpSink { type sinktrace { ackSize 40 } { maxdelack 25 } } { set sink0 [new Agent/$type] $sink0 set packetSize_ $ackSize if {[string first "Asym" $type] != -1} { $sink0 set maxdelack_ $maxdelack } $sink0 attach $sinktrace return $sink0}proc createFtp { ns n0 tcp0 n1 sink0 } { puts "creating ftp $n0 $n1" $ns attach-agent $n0 $tcp0 $ns attach-agent $n1 $sink0 $ns connect $tcp0 $sink0 set ftp0 [new Source/FTP] $ftp0 set agent_ $tcp0 return $ftp0}proc configQueue { ns n0 n1 type qtrace rtrace { size -1 } { nonfifo 0 } { acksfirst false } { filteracks false } { replace_head false } { priority_drop false } { random_drop false } { reconsacks false } } { if { $size >= 0 } { $ns queue-limit $n0 $n1 $size } set id0 [$n0 id] set id1 [$n1 id] set l01 [$ns set link_($id0:$id1)] set q01 [$l01 set queue_] if {$nonfifo} { set spq [new PacketQueue/Semantic] $spq set acksfirst_ $acksfirst puts "filteracks $filteracks reconsacks $reconsacks" $spq set filteracks_ $filteracks $spq set replace_head_ $replace_head $spq set priority_drop_ $priority_drop puts "rand $random_drop" $spq set random_drop_ $random_drop if { $reconsacks == "true"} { set recons [new AckReconsControllerClass] # Set queue_ of controller. This is # used by the individual reconstructors $recons set queue_ $q01 $spq set reconsAcks_ 1 $spq ackrecons $recons } $q01 packetqueue-attach $spq } if {[string first "RED" $type] != -1} { configREDQueue $ns $n0 $n1 [$q01 set q_weight_] 1 }# $q01 trace $trace if { $qtrace != 0 } { trace_queue $ns $n0 $n1 $qtrace } $q01 reset}proc configREDQueue { ns n0 n1 { q_weight -1 } { fracthresh 0 } { fracminthresh 0.4 } { fracmaxthresh 0.8} } { puts "Configuring reverse RED gateway" set id0 [$n0 id] set id1 [$n1 id] set l01 [$ns set link_($id0:$id1)] set q01 [$l01 set queue_] if {$q_weight >= 0} { $q01 set q_weight_ $q_weight } if { $fracthresh } { set lim [$q01 set limit_] $q01 set thresh_ [expr $fracminthresh*$lim] $q01 set maxthresh_ [expr $fracmaxthresh*$lim] } $q01 set setbit_ true}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -