📄 test1.tcl
字号:
#source ../../../lan/ns-lan.tclsource ../../../ex/asym/util.tclsource ../../../ex/tcp-fs/web.tclQueue/RED set q_weight_ 0.1# set up simulationset ns [new Simulator]set numsrc 31set numdst 31for {set i 0} {$i < $numsrc} {incr i} { set n(0$i) [$ns node]}set n(1) [$ns node]set n(2) [$ns node]for {set i 0} {$i < $numdst} {incr i} { set n(3$i) [$ns node]}set dir "."set trace_opened 0set graph 0set phttpAllFlag 0set httpseqAllFlag 0set connGraphFlag("") 0set maxdelack 25set maxburst 0set upwin 0set tcpTick 0.1set ackSize 40set fbw 1.5Mbset rbw 28.8Kbset fqsize -1set rqsize -1set qsize 10set fgw "DropTail"set rgw "DropTail"set acksfirst falseset filteracks falseset replace_head falseset midtime 0set window 100set burstwin 0set webwin 0set nonfifo 0set priority_drop falseset random_drop falseset random_ecn falseset count_bytes_acked falseset fixed_period 0set fixed_period_except_first 0set fgw_q_weight -1set rgw_q_weight -1set burstsz 5set firstburstsz 0set pause 5set monitorq 0set donttrace 0set traceq 0set duration 30set delay 50msset seed -1set topology "fs"set turnontime -1set turnofftime -1set schedDisp $FINE_ROUND_ROBINset overhead 0set f 0set tcptrace 0set sinktrace 0set redtrace 0set queuetrace 0set numimg 4set reqsize 0.3set htmlsize 1set imgsize 10proc finish {ns traceall tcptrace redtrace queuetrace graph connGraphFlag midtime turnontime turnofftime { qtraceflag false } } { upvar $connGraphFlag graphFlag global dir global qm global donttrace puts stderr "[$qm(12) set pdrops_] [$qm(21) set pdrops_] " if {!$donttrace} { $ns flush-trace close $traceall flush $tcptrace close $tcptrace flush $redtrace close $redtrace flush $queuetrace close $queuetrace processtrace $midtime $turnontime $turnofftime $qtraceflag $dir }# plotgraph $graph graphFlag $midtime $turnontime $turnofftime $qtraceflag $dir exit 0}proc burst_finish { ns ftp burstsz pause } { $ns at [expr [$ns now] + $pause] "$ftp producemore $burstsz"}proc periodic_burst { ns ftp burstsz pause } { $ftp producemore $burstsz $ns at [expr [$ns now] + $pause] "periodic_burst $ns $ftp $burstsz $pause"}# read user options and act accordinglyset count 0while {$count < $argc} { set arg [lindex $argv $count] incr count 2 switch -exact '$arg' { '-null' { incr count -1 continue } '-graph' { set graph 1 incr count -1 continue } '-phttp' { set phttpAllFlag 1 incr count -1 continue } '-httpseq' { set httpseqAllFlag 1 incr count -1 continue } '-red' { set fgw "RED" set rgw "RED" incr count -1 continue } '-sred' { set fgw "RED/Semantic" set rgw "RED/Semantic" incr count -1 continue } '-pred' { set fgw "PRED" incr count -1 continue } '-nonfifo' { set nonfifo 1 incr count -1 continue } '-pdrop' { set priority_drop true incr count -1 continue } '-rdrop' { set random_drop true incr count -1 continue } '-recn' { set random_ecn true incr count -1 continue } '-cba' { set count_bytes_acked true incr count -1 continue } '-fp' { set fixed_period 1 incr count -1 continue } '-fpef' { set fixed_period_except_first 1 incr count -1 continue } '-acksfirst' { set acksfirst true incr count -1 continue } '-filteracks' { set filteracks true incr count -1 continue } '-replace_head' { set replace_head true incr count -1 continue } '-noflr' { Agent/TCP set fast_loss_recov_ false incr count -1 continue } '-nofrt' { Agent/TCP set fast_reset_timer_ false incr count -1 continue } '-fixediw' { Agent/TCP/Session set fixedIw_ true incr count -1 continue } '-proxy' { Agent/TCP/Session set proxyopt_ true incr count -1 continue } '-monitorq' { set monitorq 1 incr count -1 continue } '-donttrace' { set donttrace 1 incr count -1 continue } '-traceq' { if {[regexp {^[0-9]} [expr $count -1]]} { set fromNode [lindex $argv [expr $count -1]] set toNode [lindex $argv $count] set traceqFromNode($fromNode,$toNode) $fromNode set traceqToNode($fromNode,$toNode) $toNode incr count 1 } else { set traceq 1 incr count -1 } continue } '-numimg' { set numimg [lindex $argv [expr $count-1]] continue } '-reqsz' { set reqsize [lindex $argv [expr $count-1]] continue } '-htmlsz' { set htmlsize [lindex $argv [expr $count-1]] continue } '-imgsz' { set imgsize [lindex $argv [expr $count-1]] continue } '-mda' { set maxdelack [lindex $argv [expr $count-1]] continue } '-mb' { set maxburst [lindex $argv [expr $count-1]] continue } '-acksz' { set ackSize [lindex $argv [expr $count-1]] continue } '-tk' { set tcpTick [lindex $argv [expr $count-1]] Agent/TCP/Session set tcpTick_ [lindex $argv [expr $count-1]] continue } '-fbw' { set fbw [lindex $argv [expr $count-1]] continue } '-rbw' { set rbw [lindex $argv [expr $count-1]] continue } '-fq' { set fqsize [lindex $argv [expr $count-1]] continue } '-rq' { set rqsize [lindex $argv [expr $count-1]] continue } '-q' { set qsize [lindex $argv [expr $count-1]] Queue set limit_ $qsize continue } '-bs' { set burstsz [lindex $argv [expr $count-1]] continue } '-fbs' { set firstburstsz [lindex $argv [expr $count-1]] continue } '-pause' { set pause [lindex $argv [expr $count-1]] continue } '-win' { set window [lindex $argv [expr $count-1]] continue } '-bwin' { set burstwin [lindex $argv [expr $count-1]] continue } '-webwin' { set webwin [lindex $argv [expr $count-1]] continue } '-upwin' { set upwin [lindex $argv [expr $count-1]] continue } '-redwt' { set fgw_q_weight [lindex $argv [expr $count-1]] set rgw_q_weight [lindex $argv [expr $count-1]] continue } '-dur' { set duration [lindex $argv [expr $count-1]] continue } '-del' { set delay [lindex $argv [expr $count-1]] continue } '-src' { set src $n([lindex $argv [expr $count-1]]) continue } '-dst' { set dst $n([lindex $argv [expr $count-1]]) continue } '-ton' { set turnontime [lindex $argv [expr $count-1]] continue } '-toff' { set turnofftime [lindex $argv [expr $count-1]] continue } '-dir' { set dir [lindex $argv [expr $count-1]] continue } '-seed' { set seed [lindex $argv [expr $count-1]] continue } '-topo' { set topology [lindex $argv [expr $count-1]] continue } '-sched' { set sched [lindex $argv [expr $count-1]] switch -exact '$sched' { 'frr' {set schedDisp $FINE_ROUND_ROBIN} 'crr' {set schedDisp $COARSE_ROUND_ROBIN} 'rand' {set schedDisp $RANDOM} 'null' {} } continue } '-overhead' { Agent/TCP set overhead_ [lindex $argv [expr $count-1]] continue } default { incr count -2 } } if {!$trace_opened && !$donttrace} { # set up trace files set f [open $dir/out.tr w] $ns trace-all $f set tcptrace [open $dir/tcp-raw.tr w] set sinktrace [open $dir/sink.tr w] set redtrace [open $dir/red.tr w] set queuetrace [open $dir/q.tr w] set trace_opened 1 } if {$turnontime == -1} { set turnontime 0 } if {$turnofftime == -1} { set turnofftime $duration } set burstflag 0 set webFlag false set phttpFlag 0 set httpseqFlag 0 set direction "" while {$count < $argc} { set arg [lindex $argv $count] incr count 1 switch -exact '$arg' { '-burst' { set burstflag 1 continue } '-dn' { set direction "down" continue } '-up' { set direction "up" continue } '-web' { set webFlag true continue } '-phttp' { set phttpFlag 1 continue } '-httpseq' { set httpseqFlag 1 continue } default { incr count -1 break } } } if { $direction == "down" } { set src $n(00) set dst $n(30) } elseif { $direction == "up" } { set src $n(30) set dst $n(00) } else { } set arg [lindex $argv $count] set slow_start_restart true set fs_enable false set srctype "TCP/Fack" set sinktype "TCPSink" set sessionFlag false switch -exact '$arg' { '-null' { } '-tahoe' { set srctype "TCP" } '-tahoefs' { set srctype "TCP/FS" set slow_start_restart false set fs_enable true } '-reno' { set srctype "TCP/Reno" } '-renofs' { set srctype "TCP/Reno/FS" set slow_start_restart false set fs_enable true } '-newreno' { set srctype "TCP/Newreno" } '-newrenofs' { set srctype "TCP/Newreno/FS" set slow_start_restart false set fs_enable true } '-fack' { set srctype "TCP/Fack" set sinktype "TCPSink/Sack1" } '-fackfs' { set srctype "TCP/Fack/FS" set sinktype "TCPSink/Sack1" set slow_start_restart false set fs_enable true } '-renoasym' { set srctype "TCP/Reno/Asym" set sinktype "TCPSink/Asym" } '-newrenoasym' { set srctype "TCP/Newreno/Asym" set sinktype "TCPSink/Asym" } '-newrenoasymfs' { set srctype "TCP/Newreno/Asym/FS" set sinktype "TCPSink/Asym" set slow_start_restart false set fs_enable true } '-int' { set srctype "TCP/Int" set sessionFlag true } '-intfs' { set srctype "TCP/Int" set sessionFlag true set slow_start_restart false set fs_enable true } default { incr count -1 } } set randTime 0 incr count 1 set arg [lindex $argv $count] set startTime $arg incr count 1 set connGraph 0 set arg [lindex $argv $count] if { $arg == "-graph" } { set connGraph 1 incr count 1 } elseif { $arg == "-rand" } { incr count 1 set arg [lindex $argv $count] set randTime $arg incr count 1 } if {($direction == "up") && ($upwin > 0)} { set win $upwin } elseif {($burstflag == 1) && ($burstwin > 0)} { set win $burstwin } elseif {$webFlag && $webwin > 0} { set win $webwin } else { set win $window } if {$webFlag} { set web [new WebCS $ns $src $dst "$srctype $maxburst $tcpTick $win $slow_start_restart $fs_enable" $tcptrace "$sinktype $sinktrace" [expr $phttpAllFlag || $phttpFlag] [expr $httpseqAllFlag || $httpseqFlag] $sessionFlag "$count_bytes_acked $schedDisp $fs_enable"] $web set finish_ "finish $ns $f $tcptrace $redtrace $queuetrace $graph connGraphFlag 0 $turnontime $turnofftime [expr $monitorq || $traceq]" $ns at $startTime "$web start" } else { set tcp [createTcpSource $srctype $maxburst $tcpTick $win $slow_start_restart $fs_enable] set sink [createTcpSink $sinktype $sinktrace] set ftp [createFtp $ns $src $tcp $dst $sink] set newSessionFlag false if {$sessionFlag} { set newSessionFlag [setupTcpSession $tcp $count_bytes_acked $schedDisp $fs_enable] # set d [expr ([$tcp set dst_]/256)*256] # set session [[$tcp set node_] getTcpSession $d] } setupTcpTracing $tcp $tcptrace $newSessionFlag setupGraphing $tcp $connGraph connGraphFlag $newSessionFlag if { $burstflag == 0 } { $ns at $startTime "$ftp start" } elseif { $fixed_period } { if {$firstburstsz > 0} { $ns at $startTime "$ftp produce $firstburstsz" } else { $ns at $startTime "$ftp produce $burstsz" } $ns at [expr $startTime+$pause] "periodic_burst $ns $ftp $burstsz $pause" } elseif { $fixed_period_except_first } { if {$firstburstsz > 0} { $ns at $startTime "$ftp produce $firstburstsz" } else { $ns at $startTime "$ftp produce $burstsz" } $ns at [expr $pause+$randTime] "periodic_burst $ns $ftp $burstsz $pause" } else { $tcp proc done {} "burst_finish $ns $ftp $burstsz $pause" if {$firstburstsz > 0} { $ns at $startTime "$ftp produce $firstburstsz" } else { $ns at $startTime "$ftp produce $burstsz" } } set ok 1 while {$ok == 1 && $count < $argc} { set arg [lindex $argv $count] switch -exact '$arg' { '-at' { incr count 1 set time [lindex $argv $count] incr count 1 set cmd [lindex $argv $count] incr count 1 $ns at $time "$tcp $cmd" } default { set ok 0 } } } }}# seed random number generatorif {$seed >= 0} { ns-random $seed}if {$topology == "fs"} { # topology # # # n00 n30 # \ / # \ 10Mb, 1ms / 10Mb, 1ms # \ / # \ 1Mb, 50ms / # n1 ------------ n2 # / \ # / \ # / 10Mb, 1ms \ 10Mb, 1ms # / \ # n01 n31 for {set i 0} {$i < $numsrc} {incr i 1} { $ns duplex-link $n(0$i) $n(1) 10Mb 1ms DropTail } $ns duplex-link $n(1) $n(2) $fbw $delay $fgw for {set i 0} {$i < $numdst} {incr i 1} { $ns duplex-link $n(2) $n(3$i) 10Mb 1ms DropTail } # configure forward bottleneck queue configQueue $ns $n(1) $n(2) $fgw $queuetrace $fqsize $nonfifo false false false $priority_drop $random_drop $random_ecn configQueue $ns $n(2) $n(1) $rgw $queuetrace $rqsize $nonfifo false false false $priority_drop $random_drop $random_ecn set l(12) [$ns link $n(1) $n(2)] set qm(12) [$l(12) set qMonitor_] set l(21) [$ns link $n(2) $n(1)] set qm(21) [$l(21) set qMonitor_] #configQueue $ns $n(1) $n(2) $fgw 0 $fqsize $nonfifo false false false $priority_drop $random_drop $random_ecn configREDQueue $ns $n(1) $n(2) $redtrace $fgw_q_weight 1 0.15 0.6 configREDQueue $ns $n(2) $n(1) $redtrace $rgw_q_weight 1 0.15 0.6} elseif {$topology == "asym"} { # topology # # 10Mb, 1ms 10Mb, 2ms 10Mb, 1ms # n00 ------------ n1 ------------ n2 ------------ n30 # 28.8Kb, 50ms # for {set i 0} {$i < $numsrc} {incr i 1} { $ns duplex-link $n(0$i) $n(1) 10Mb 1ms DropTail } $ns simplex-link $n(1) $n(2) 10Mb 2ms DropTail $ns simplex-link $n(2) $n(1) $rbw 50ms $rgw for {set i 0} {$i < $numdst} {incr i 1} { $ns duplex-link $n(2) $n(3$i) 10Mb 1ms DropTail } # configure reverse bottleneck queue configQueue $ns $n(2) $n(1) $rgw 0 $rqsize $nonfifo $acksfirst $filteracks $replace_head configREDQueue $ns $n(2) $n(1) $redtrace $rgw_q_weight}# trace queuesforeach i [array names traceqFromNode] { trace_queue $ns $n($traceqFromNode($i)) $n($traceqToNode($i)) $queuetrace set traceq 1} #end simulation$ns at $duration "finish $ns $f $tcptrace $redtrace $queuetrace $graph connGraphFlag 0 $turnontime $turnofftime [expr $monitorq || $traceq]"$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -