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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1996 Regents of the University of California.
  3. # All rights reserved.
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. #    notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. #    notice, this list of conditions and the following disclaimer in the
  11. #    documentation and/or other materials provided with the distribution.
  12. # 3. All advertising materials mentioning features or use of this software
  13. #    must display the following acknowledgement:
  14. #  This product includes software developed by the MASH Research
  15. #  Group at the University of California Berkeley.
  16. # 4. Neither the name of the University nor of the Research Group may be
  17. #    used to endorse or promote products derived from this software without
  18. #    specific prior written permission.
  19. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  20. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  23. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  25. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  28. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  29. # SUCH DAMAGE.
  30. #
  31. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/rlm/misc.tcl,v 1.1 1998/02/20 20:46:46 bajaj Exp $
  32. #
  33. proc uniform01 {} {
  34. return [expr double(([ns-random] % 10000000) + 1) / 1e7]
  35. }
  36. proc uniform { a b } {
  37. return [expr ($b - $a) * [uniform01] + $a]
  38. }
  39. proc exponential mean {
  40. return [expr - $mean * log([uniform01])]
  41. }
  42. proc trunc_exponential lambda {
  43. while 1 {
  44. set u [exponential $lambda]
  45. if { $u < [expr 4 * $lambda] } {
  46. return $u
  47. }
  48. }
  49. }
  50. proc sched { delay proc } {
  51. global sim
  52. return [$sim at [expr [$sim now] + $delay] $proc]
  53. }
  54. proc set_timer { which mmg delay } {
  55. global rlm_tid
  56. set v $which:$mmg
  57. if [info exists rlm_tid($v)] {
  58. puts "timer botched ($v)"
  59. exit -1
  60.         }
  61. set rlm_tid($v) [sched $delay "trigger_timer $which $mmg"]
  62. }
  63. proc trigger_timer { which mmg } {
  64. global rlm_tid
  65. unset rlm_tid($which:$mmg)
  66. $mmg trigger_$which
  67. }
  68. #
  69. # cancel s-timer on flow $mmg
  70. # e.g., because we experienced loss
  71. #
  72. proc cancel_timer { which mmg } {
  73. global rlm_tid
  74. set v $which:$mmg
  75. if [info exists rlm_tid($v)] {
  76. #XXX cancel
  77. global sim
  78. $sim at $rlm_tid($v)
  79. unset rlm_tid($v)
  80. }
  81. }
  82. proc alloc_trace {} {
  83. global all_trace
  84. set t [new trace]
  85. lappend all_trace $t
  86. return $t
  87. }
  88. proc flush_all_trace {} {
  89. global all_trace
  90. if [info exists all_trace] {
  91. foreach t $all_trace {
  92. $t flush
  93. }
  94. }
  95. }