helper.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. REDPDSim instproc init { ns redpdq redpdflowmon redpdlink id enable } { 
  2. $self instvar ns_
  3. set ns_ $ns
  4. $self instvar last_reward_ last_detect_
  5. # $self instvar Reward_interval_ reward_pending_
  6. $self instvar detect_pending_
  7. $self instvar id_
  8. set id_ $id
  9. #for testing identification
  10. global testIdent_
  11. $self instvar testIdentOnly_ counter_
  12. set testIdentOnly_ $testIdent_
  13. set counter_ 0
  14. $self instvar verbose_
  15. global verbosity_
  16. set verbose_ $verbosity_ ; #-1 means no messages
  17. $self instvar redpdq_ redpdflowmon_ redpdlink_
  18. set redpdq_ $redpdq
  19. set redpdflowmon_ $redpdflowmon
  20. set redpdlink_ $redpdlink
  21. # the amount of history to be kept for each monitored flow
  22. $self instvar Hist_Max_ 
  23. set Hist_Max_ 5
  24. set MinTimeToUnmonitor_ 15
  25. set MaxDropRateToUnmonitor_ 0.005
  26. #maximum reduction in probability in one step
  27. $self instvar maxPReduction_ maxPReductionUnresp_
  28. set maxPReduction_ 0.05
  29. set maxPReductionUnresp_ 0.05
  30. #whether unresponsive testing is ON
  31. $self instvar unresponsiveTestOn_
  32. global unresponsive_test_
  33. set unresponsiveTestOn_ $unresponsive_test_
  34. #set MaxDropList_ to infinity (greater than total number of flows) to get infinite memory list. 
  35. $self instvar MaxDropList_ 
  36. set MaxDropList_ 50
  37. #the lists - number of lists, "regular", history
  38. $self instvar MaxHighDRFlowHist_ XinRegular_ high_dr_flow_hist_
  39. global listMode_
  40. if {$testIdent_ == 1 && $listMode_ == "single"} {
  41. set MaxHighDRFlowHist_ 1
  42. set XinRegular_ 1
  43. } else {
  44. set MaxHighDRFlowHist_ 5
  45. set XinRegular_ 3
  46. }
  47. #the number of elements in the drop rate history at the router
  48. $self instvar dropRateHist_  drop_rate_list_ avg_drop_rate_
  49. set dropRateHist_ 8
  50. set avg_drop_rate_ -1
  51. set detect_pending_ false
  52. set reward_pending_ false
  53. set last_reward_ 0.0
  54. set last_detect_ 0.0
  55. #all 3 quantities below in seconds
  56. $self instvar Mintime_ Maxtime_ TargetRTT_
  57. global target_rtt_ 
  58. set TargetRTT_ $target_rtt_
  59. set Mintime_  [expr 2*$TargetRTT_] 
  60. set Maxtime_  [expr 10*$TargetRTT_]
  61. $self instvar BList_ Bindex_ minBtoConsider_ minTimetoConsider_
  62. set Bindex_ 0
  63. set minBtoConsider_ 4
  64. set minTimetoConsider_ 0.400
  65. for {set i 0} {$i < $MaxHighDRFlowHist_} {incr i} {
  66.     set BList_($i) 0
  67. }
  68. #turn to -1 to switch the test off.
  69. $self instvar P_testTFRp_ 
  70. set P_testTFRp_ [$redpdq_ set P_testFRp_]
  71. if { $enable == "true" || $enable == 1 } {
  72.     # start detect after 11s of simulation start
  73.     $self sched-detect-reward 10.1
  74. } else {
  75.     $self sched-print-stats 0.1
  76.     puts stderr "(red-pd disabled)"
  77. }
  78. }      
  79. REDPDSim instproc monitor-link {} {
  80. $self instvar redpdlink_
  81. set fmon [new QueueMonitor/ED/Flowmon]
  82. set cl [new Classifier/Hash/Fid 33]
  83. $fmon classifier $cl
  84. $cl proc unknown-flow { src dst fid } {
  85. set nflow [new QueueMonitor/ED/Flow]
  86. set slot [$self installNext $nflow]
  87. ## puts "here1"
  88. $self set-hash auto $src $dst $fid $slot
  89. }
  90. $cl proc no-slot slotnum {
  91. puts stderr "classifier $self, no-slot for slotnum $slotnum"
  92. }
  93. $redpdlink_ attach-monitors [new SnoopQueue/In] [new SnoopQueue/Out] 
  94. [new SnoopQueue/Drop] $fmon
  95. return $fmon
  96. }
  97. REDPDSim instproc frac { num denom } {
  98. if { $denom == 0 } {
  99. return 0.0
  100. }
  101. return [expr double($num) / $denom]
  102. }
  103. REDPDSim instproc vprint args {
  104. $self instvar verbose_ id_
  105. set level [lindex $args 0]
  106. set a [lrange $args 1 end]
  107. if { $level <= $verbose_ } {
  108. $self instvar ns_
  109. puts "[$ns_ now] ($id_) $a"
  110. flush stdout
  111. }
  112. }
  113. REDPDSim instproc vprint-nonewline args {
  114. $self instvar verbose_ id_
  115. set level [lindex $args 0]
  116. set a [lrange $args 1 end]
  117. if { $level <= $verbose_ } {
  118. $self instvar ns_
  119. puts -nonewline "[$ns_ now] ($id_) $a"
  120. flush stdout
  121. }
  122. }
  123. #
  124. #generic function to print a list of lists 
  125. #
  126. REDPDSim instproc printListOfLists {level listOfLists} {
  127.     $self instvar verbose_
  128.     if { $level <= $verbose_ } {
  129. $self instvar ns_
  130.      foreach i $listOfLists {
  131.     puts -nonewline "{ "
  132.     foreach j $i {
  133. puts -nonewline "$j "
  134.     }
  135.     puts -nonewline " } "
  136. }
  137. puts ""
  138. flush stdout
  139.     }
  140. }