📄 helper.tcl
字号:
REDPDSim instproc init { ns redpdq redpdflowmon redpdlink id enable } { $self instvar ns_ set ns_ $ns $self instvar last_reward_ last_detect_# $self instvar Reward_interval_ reward_pending_ $self instvar detect_pending_ $self instvar id_ set id_ $id #for testing identification global testIdent_ $self instvar testIdentOnly_ counter_ set testIdentOnly_ $testIdent_ set counter_ 0 $self instvar verbose_ global verbosity_ set verbose_ $verbosity_ ; #-1 means no messages $self instvar redpdq_ redpdflowmon_ redpdlink_ set redpdq_ $redpdq set redpdflowmon_ $redpdflowmon set redpdlink_ $redpdlink # the amount of history to be kept for each monitored flow $self instvar Hist_Max_ set Hist_Max_ 5 set MinTimeToUnmonitor_ 15 set MaxDropRateToUnmonitor_ 0.005 #maximum reduction in probability in one step $self instvar maxPReduction_ maxPReductionUnresp_ set maxPReduction_ 0.05 set maxPReductionUnresp_ 0.05 #whether unresponsive testing is ON $self instvar unresponsiveTestOn_ global unresponsive_test_ set unresponsiveTestOn_ $unresponsive_test_ #set MaxDropList_ to infinity (greater than total number of flows) to get infinite memory list. $self instvar MaxDropList_ set MaxDropList_ 50 #the lists - number of lists, "regular", history $self instvar MaxHighDRFlowHist_ XinRegular_ high_dr_flow_hist_ global listMode_ if {$testIdent_ == 1 && $listMode_ == "single"} { set MaxHighDRFlowHist_ 1 set XinRegular_ 1 } else { set MaxHighDRFlowHist_ 5 set XinRegular_ 3 } #the number of elements in the drop rate history at the router $self instvar dropRateHist_ drop_rate_list_ avg_drop_rate_ set dropRateHist_ 8 set avg_drop_rate_ -1 set detect_pending_ false set reward_pending_ false set last_reward_ 0.0 set last_detect_ 0.0 #all 3 quantities below in seconds $self instvar Mintime_ Maxtime_ TargetRTT_ global target_rtt_ set TargetRTT_ $target_rtt_ set Mintime_ [expr 2*$TargetRTT_] set Maxtime_ [expr 10*$TargetRTT_] $self instvar BList_ Bindex_ minBtoConsider_ minTimetoConsider_ set Bindex_ 0 set minBtoConsider_ 4 set minTimetoConsider_ 0.400 for {set i 0} {$i < $MaxHighDRFlowHist_} {incr i} { set BList_($i) 0 } #turn to -1 to switch the test off. $self instvar P_testTFRp_ set P_testTFRp_ [$redpdq_ set P_testFRp_] if { $enable == "true" || $enable == 1 } { # start detect after 11s of simulation start $self sched-detect-reward 10.1 } else { $self sched-print-stats 0.1 puts stderr "(red-pd disabled)" }} REDPDSim instproc monitor-link {} { $self instvar redpdlink_ set fmon [new QueueMonitor/ED/Flowmon] set cl [new Classifier/Hash/Fid 33] $fmon classifier $cl $cl proc unknown-flow { src dst fid } { set nflow [new QueueMonitor/ED/Flow] set slot [$self installNext $nflow] ## puts "here1" $self set-hash auto $src $dst $fid $slot } $cl proc no-slot slotnum { puts stderr "classifier $self, no-slot for slotnum $slotnum" } $redpdlink_ attach-monitors [new SnoopQueue/In] [new SnoopQueue/Out] \ [new SnoopQueue/Drop] $fmon return $fmon}REDPDSim instproc frac { num denom } { if { $denom == 0 } { return 0.0 } return [expr double($num) / $denom]}REDPDSim instproc vprint args { $self instvar verbose_ id_ set level [lindex $args 0] set a [lrange $args 1 end] if { $level <= $verbose_ } { $self instvar ns_ puts "[$ns_ now] ($id_) $a" flush stdout }}REDPDSim instproc vprint-nonewline args { $self instvar verbose_ id_ set level [lindex $args 0] set a [lrange $args 1 end] if { $level <= $verbose_ } { $self instvar ns_ puts -nonewline "[$ns_ now] ($id_) $a" flush stdout }}##generic function to print a list of lists #REDPDSim instproc printListOfLists {level listOfLists} { $self instvar verbose_ if { $level <= $verbose_ } { $self instvar ns_ foreach i $listOfLists { puts -nonewline "{ " foreach j $i { puts -nonewline "$j " } puts -nonewline " } " } puts "" flush stdout }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -