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

📄 util.tcl

📁 跑leach需要的
💻 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 + -