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

通讯编程

开发平台:

Visual C++

  1. # defaults
  2. set ns_tcp(maxburst) 0
  3. set ns_tcp(maxcwnd) 0
  4. set ns_tcp(window) 20
  5. set ns_tcp(window-init) 1
  6. set ns_tcp(window-option) 1
  7. set ns_tcp(window-constant) 4
  8. set ns_tcp(window-thresh) 0.002
  9. set ns_tcp(overhead) 0
  10. set ns_tcp(ecn) 0
  11. set ns_tcp(packet-size) 1000
  12. set ns_tcp(bug-fix) true
  13. set ns_tcp(tcp-tick) 0.1
  14. # These parameters have all been verified: window, window-init,
  15. #   packet-size, bug-fix (tcp, tcp-reno), overhead (tcp but not tcp-reno), 
  16. #   ecn (tcp, tcp-reno, tcp-sink, and tcp-sink-da).  
  17. #   The "overhead" option has not been implemented for tcp-reno.
  18. # The following parameters are for obscure options probably only of interest 
  19. #  to Sally, and have not been tested in the new simulator: window-option, 
  20. #  window-constant, window-thresh.
  21. set ns_red(bytes) false
  22. set ns_red(thresh) 5
  23. set ns_red(maxthresh) 15
  24. set ns_red(mean_pktsize) 500
  25. set ns_red(q_weight) 0.002
  26. set ns_red(wait) true
  27. set ns_red(linterm) 50
  28. set ns_red(setbit) false
  29. set ns_red(drop-tail) false
  30. set ns_red(doubleq) false
  31. set ns_red(dqthresh) 50
  32. set ns_red(subclasses) 1
  33. # These parameters have all been verified: thresh, maxthresh, q_weight,
  34. #  linterm, setbit.
  35. # These parameters are for obscure options probably only of interest to
  36. #  Sally, and have not been tested in the new simulator: doubleq, dqthresh.
  37. # These parameters have not been tested: bytes, mean_pktsize, wait, drop-tail.
  38. # These parameters below are only used for RED queues with RED subclasses.
  39. set ns_red(thresh1) 5
  40. set ns_red(maxthresh1) 15
  41. set ns_red(mean_pktsize1) 500
  42. set ns_cbq(algorithm) 0
  43. set ns_cbq(max-pktsize) 1024
  44. set ns_class(priority) 0
  45. set ns_class(depth) 0
  46. set ns_class(allotment) 0.0
  47. set ns_class(maxidle) 4ms
  48. set ns_class(minidle) -0.2ms
  49. set ns_class(extradelay) 0
  50. set ns_class(plot) false
  51. # These parameters have all been verified: priority, depth, allotment,
  52. #  maxidle, minidle, extradelay.
  53. set ns_sink(packet-size) 40
  54. set ns_delsink(interval) 100ms
  55. set ns_sacksink(max-sack-blocks) 3
  56. set ns_cbr(interval) 3.75ms
  57. set ns_cbr(random) 0
  58. set ns_cbr(packet-size) 210
  59. set ns_rlm(interval) 3.75ms
  60. set ns_rlm(packet-size) 210
  61. set ns_source(maxpkts) 0
  62. set ns_telnet(interval) 1000ms
  63. set ns_bursty(interval) 0
  64. set ns_bursty(burst-size) 2
  65. set ns_message(packet-size) 40
  66. #XXX
  67. set ns_delay(bandwidth) 1.5Mb
  68. set ns_delay(delay) 100ms
  69. set ns_queue(limit) 50
  70. set ns_lossy_uniform(loss_prob) 0.00
  71. # These packets have all been verified: link(bandwidth), link(delay),
  72. #  link(queue-limit), telnet(interval), delsink(interval).
  73. proc ns_connect { src sink } {
  74. $src connect [$sink addr] [$sink port]
  75. $sink connect [$src addr] [$src port]
  76. }
  77. proc ns_duplex { n1 n2 bw delay type } {
  78. set link0 [ns link $n1 $n2 $type]
  79. $link0 set bandwidth $bw
  80. $link0 set delay $delay
  81. set link1 [ns link $n2 $n1 $type]
  82. $link1 set bandwidth $bw
  83. $link1 set delay $delay
  84. return "$link0 $link1"
  85. }
  86. #
  87. # Create a source/sink connection pair and return the source agent.
  88. proc ns_create_connection { srcType srcNode sinkType sinkNode class } {
  89. set src [ns agent $srcType $srcNode]
  90. set sink [ns agent $sinkType $sinkNode]
  91. $src set class $class
  92. $sink set class $class
  93. ns_connect $src $sink
  94. return $src
  95. }
  96. #
  97. # Create a Reno TCP connection with the source/sink pair.  
  98. #   Maximum window $window, start time $start, class $class.
  99. #
  100. proc ns_create_reno { tcpSrc tcpDst window start class} {
  101.         set tcp [ns_create_connection tcp-reno $tcpSrc tcp-sink $tcpDst $class]
  102.         $tcp set window $window
  103.         set ftp [$tcp source ftp]
  104.         ns at $start "$ftp start"
  105. return $tcp
  106. }
  107. #
  108. # Create a source/sink connection pair for a CBR connection, and return
  109. #   the source agent.
  110. #
  111. proc ns_create_cbr { srcNode sinkNode pktSize interval class } {
  112. set src [ns agent cbr $srcNode]
  113. set sink [ns agent loss-monitor $sinkNode]
  114.         $src set interval $interval
  115.         $src set packet-size $pktSize
  116.         $src set class $class
  117.         ns_connect $src $sink
  118. return $src
  119. }
  120. #
  121. # Procedure for backward compatibility with old ns commands.
  122. # Preferred approach is to allocate objects with the "new" command.
  123. #
  124. proc ns { cmd args } {
  125. global ns_compat
  126. if { $cmd == "node" } {
  127. if ![info exists ns_compat(route-logic)] {
  128. set ns_compat(route-logic) [new route-logic]
  129. }
  130. set node [new node]
  131. $ns_compat(route-logic) insert $node
  132. return $node
  133. }
  134. if { $cmd == "link" } {
  135. if { [llength $args] == 3 } {
  136. set src [lindex $args 0]
  137. set dst [lindex $args 1]
  138. set type [lindex $args 2]
  139. set L [new link $type]
  140. $L install $src $dst
  141. set ns_compat(link:$src:$dst) $L
  142. return $L
  143. }
  144. if { [llength $args] == 2 } {
  145. set src [lindex $args 0]
  146. set dst [lindex $args 1]
  147. return $ns_compat(link:$src:$dst)
  148. }
  149. if { $args == "" } {
  150. set L ""
  151. foreach v [array names ns_compat] {
  152. if [string match link:* $v] {
  153. lappend L $ns_compat($v)
  154. }
  155. }
  156. return $L
  157. }
  158. }
  159. if { $cmd == "agent" } {
  160. if { [llength $args] == 2 } {
  161. set type [lindex $args 0]
  162. set node [lindex $args 1]
  163. set agent [new agent $type]
  164. $agent node $node
  165. return $agent
  166. }
  167. }
  168. if { $cmd == "trace" } {
  169. set trace [new trace]
  170. return $trace
  171. }
  172. if { $cmd == "at" } {
  173. eval ns-at $args
  174. return
  175. }
  176. if { $cmd == "now" } {
  177. return [ns-now]
  178. }
  179. if { $cmd == "random" } {
  180. return [eval ns-random $args]
  181. }
  182. if { $cmd == "run" } {
  183. $ns_compat(route-logic) compute-routes
  184. ns-run
  185. return
  186. }
  187. puts stderr "ns: backward compat doesn't handle 'ns $cmd $args'"
  188. exit 1
  189. }
  190. #
  191. # XXX hack: the Tcl class calls "tkerror" when it hits an
  192. # error evaluating a tcl stub (e.g., from an ns-at command).
  193. # Dump a stack trace and exit.
  194. proc tkerror s {
  195. global errorInfo
  196. puts stderr "ns: tcl eval error"
  197. puts stderr $errorInfo
  198. exit 1
  199. }
  200. ##########################################################################
  201. # CBQ  #
  202. ##########################################################################
  203. #
  204. # Create a CBQ (class-based queueing) class with the specified parameters.
  205. #
  206. proc ns_create_class { parent borrow allot maxIdle minIdle priority depth extraDelay} { 
  207.         set class [new class]
  208.         set class1 [ns_class_params $class $parent $borrow $allot $maxIdle 
  209.   $minIdle $priority $depth $extraDelay 0]
  210.         return $class1 
  211. }
  212. # "Mbps" gives the link bandwidth in Mbps.
  213. proc ns_create_class1 { parent borrow allot maxIdle minIdle priority depth extraDelay Mbps} {
  214.         set class [new class]
  215.         set class1 [ns_class_params $class $parent $borrow $allot $maxIdle 
  216.            $minIdle $priority $depth $extraDelay $Mbps]
  217.         return $class1
  218. }  
  219. #
  220. # Assign the following parameters to the CBQ class.
  221. #
  222. proc ns_class_params { class parent borrow allot maxIdle minIdle priority depth extraDelay Mbps} {  
  223.         $class parent $parent
  224.         $class borrow $borrow
  225.         $class set allotment $allot
  226.         $class set maxidle $maxIdle
  227.         $class set minidle $minIdle
  228.         $class set priority $priority
  229.         $class set depth $depth
  230.         $class set extradelay $extraDelay
  231.         set class1 [ns_class_maxIdle $class $allot $maxIdle $priority $Mbps]
  232.         set class2 [ns_class_minIdle $class $allot $minIdle $Mbps]
  233.         return $class2  
  234. }
  235. #
  236. # If $maxIdle is "auto", set maxIdle to Max[t(1/p-1)(1-g^n)/g^n, t(1-g)].
  237. # For p = allotment, t = packet transmission time, g = weight for EWMA.
  238. #
  239. proc ns_class_maxIdle { class allot maxIdle priority Mbps } {
  240.         if { $maxIdle == "auto" } {
  241. set g 0.9375
  242. set n [expr 8 * $priority]
  243. set gTOn [expr pow($g, $n)]
  244. set first [expr ((1/$allot) - 1) * (1-$gTOn) / $gTOn ]
  245. set second [expr (1 - $g)]
  246. set t [expr (1000 * 8)/($Mbps * 1000000) ]
  247. if { $first > $second } {
  248.    $class set maxidle [expr $t * $first]
  249. } else {
  250. $class set maxidle [expr $t * $second]
  251. }
  252. } else {
  253. $class set maxidle $maxIdle
  254. }
  255. return $class
  256. }
  257. #
  258. # If $minIdle is "auto", set minIdle to t(1/p-1).
  259. # For p = allotment, t = packet transmission time.
  260. #
  261. proc ns_class_minIdle { class allot minIdle Mbps } {
  262. if { $minIdle == "auto" } {
  263. set t [expr -(8000 * 8)/($Mbps * 1000000) ]
  264. $class set minidle [expr $t / $allot]
  265. } else {
  266. $class set minidle $minIdle
  267. }
  268. return $class
  269. }