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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) @ 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/ex/scuba/complete/demo.tcl,v 1.4 1997/11/29 07:11:00 elan Exp $
  32. #
  33. set tcldir ../../../
  34. source $tcldir/rtp/session-scuba.tcl
  35. source $tcldir/rtp/session-rtp.tcl
  36. proc flash_annotate { start duration msg } {
  37. global ns
  38. $ns at $start "trace_annotate {$msg}"
  39. # $ns at [expr $start+$duration] "trace_annotate  {}"
  40. }
  41. set ns [new Simulator]
  42. Simulator set EnableMcast_ 1
  43. Simulator set NumberInterfaces_ 1
  44. # rtcp reports
  45. $ns color 32 red
  46. # scuba reports
  47. $ns color 33 green
  48. $ns color 1 gold
  49. $ns color 2 blue
  50. $ns color 3 orange
  51. $ns color 4 magenta
  52. for { set i 0 } { $i < 8 } { incr i } {
  53. set node($i) [$ns node]
  54. }
  55. $node(3) shape "square"
  56. $node(7) shape "square"
  57. set f [open out.tr w]
  58. $ns trace-all $f
  59. set nf [open out.nam w]
  60. $ns namtrace-all $nf
  61. Queue set limit_ 8
  62. proc makelinks { bw delay pairs } {
  63.         global ns node
  64.         foreach p $pairs {
  65.                 set src $node([lindex $p 0])
  66.                 set dst $node([lindex $p 1])
  67.                 $ns duplex-link $src $dst $bw $delay DropTail
  68.                 $ns duplex-link-op $src $dst orient [lindex $p 2]
  69.         }
  70. }
  71. makelinks 1.5Mb 10ms {
  72.         { 0 3 right-down }
  73.         { 1 3 right }
  74.         { 2 3 right-up }
  75.         { 7 4 right-up }
  76.         { 7 5 right }
  77.         { 7 6 right-down }
  78. }
  79. makelinks 400kb 50ms {
  80. { 3 7 right }
  81. }
  82. $ns duplex-link-op $node(3) $node(7) queuePos 0.5
  83. set mproto DM
  84. set mrthandle [$ns mrtproto $mproto {}]
  85. #for { set i 0 } { $i < 8 } { incr i } {
  86. # set dm($i) [new DM $ns $node($i)]
  87. #}
  88. $ns at 0.0 "$ns run-mcast"
  89. set sessbw 400kb/s
  90. foreach n { 0 1 2 4 5 6 } {
  91. set sess($n) [new Session/RTP]
  92. $sess($n) session_bw $sessbw
  93. $sess($n) attach-node $node($n)
  94. }
  95. $ns at 0.1 {
  96. global sess
  97. foreach n { 0 1 2 4 5 6 } {
  98. $sess($n) join-group 0x8000
  99. }
  100. }
  101. foreach n { 0 1 2 } {
  102. set d [$sess($n) set dchan_]
  103. $d set class_ [expr $n]
  104. }
  105. flash_annotate 0 0.20 "Equal bandwidth - Saturate"
  106. flash_annotate 0.25 0.1 "Starting Receivers..."
  107. # start receivers
  108. $ns at 0.25 {
  109. global sess
  110. $sess(4) start
  111. $sess(5) start
  112. $sess(6) start
  113. }
  114. # start senders
  115. flash_annotate 0.5 0.2 "Starting sender 0 at 200kb/s..."
  116. $ns at 0.5 "$sess(0) start"
  117. $ns at 0.5 "$sess(0) transmit 200kb/s"
  118. flash_annotate 1.0 0.2 "Starting sender 1 at 200kb/s..."
  119. $ns at 1.0 "$sess(1) start"
  120. $ns at 1.0 "$sess(1) transmit 200kb/s"
  121. flash_annotate 1.5 0.2 "Starting sender 2 at 200kb/s..."
  122. $ns at 1.5 "$sess(2) start"
  123. $ns at 1.5 "$sess(2) transmit 200kb/s"
  124. $ns at 1.75 {
  125. global sess
  126. foreach n { 0 1 2 } {
  127. $sess($n) stop
  128. }
  129. }
  130. $ns at 2.0 "trace_annotate {End}"
  131. $ns at 2.5 "trace_annotate {Equal Bandwidth - No Saturation}"
  132. # start senders
  133. flash_annotate 3.0 0.2 "Starting sender 0 at 130kb/s..."
  134. $ns at 3.0 "$sess(0) start"
  135. $ns at 3.0 "$sess(0) transmit 130kb/s"
  136. flash_annotate 3.5 0.2 "Starting sender 1 at 130kb/s..."
  137. $ns at 3.5 "$sess(1) start"
  138. $ns at 3.5 "$sess(1) transmit 130kb/s"
  139. flash_annotate 4.0 0.2 "Starting sender 2 at 130kb/s..."
  140. $ns at 4.0 "$sess(2) start"
  141. $ns at 4.0 "$sess(2) transmit 130kb/s"
  142. $ns at 4.5 {
  143. global sess
  144. foreach n { 0 1 2 } {
  145. $sess($n) stop
  146. }
  147. }
  148. $ns at 5.0 "trace_annotate {End}"
  149. set scuba_sim_time 5.5
  150. $ns at $scuba_sim_time "scuba_sim $scuba_sim_time"
  151. $ns at [expr $scuba_sim_time + 4.7] "finish"
  152. proc scuba_sim { start } {
  153. global ns sess node sessbw
  154. flash_annotate $start 0.2 {SCUBA}
  155. foreach n { 0 1 2 4 5 6 } {
  156. set sess($n) [new Session/RTP/Scuba]
  157. $sess($n) session_bw $sessbw
  158. $sess($n) attach-node $node($n)
  159. }
  160. set t [expr $start+0.5]
  161. $ns at $t {
  162. global sess
  163. foreach n { 0 1 2 4 5 6 } {
  164. $sess($n) join-group 0x8000
  165. }
  166. }
  167. foreach n { 0 1 2 } {
  168. set d [$sess($n) set dchan_]
  169. $d set class_ [expr $n]
  170. }
  171. flash_annotate $t 0.2 {Starting receivers...}
  172. # start receivers
  173. $ns at $t {
  174. global sess
  175. $sess(4) start 0 1
  176. $sess(5) start 0 1
  177. $sess(6) start 0 1
  178. }
  179. # start senders
  180. flash_annotate [expr $start+1.1] 0.05 "Starting sender 0..."
  181. $ns at [expr $start+1.1] "$sess(0) start 1 0"
  182. flash_annotate [expr $start+1.2] 0.05 "Starting sender 1..."
  183. $ns at [expr $start+1.2] "$sess(1) start 1 0"
  184. flash_annotate [expr $start+1.3] 0.05 "Starting sender 2..."
  185. $ns at [expr $start+1.3] "$sess(2) start 1 0"
  186. # 4 focus on 0
  187. flash_annotate [expr $start+1.5] 0.1 "4 focussing on 0..."
  188. $ns at [expr $start+1.5] "[$sess(4) set repAgent_] set class_ 4"
  189. $ns at [expr $start+1.5] "$sess(4) scuba_focus $sess(0)"
  190. $ns at [expr $start+1.55] "[$sess(4) set repAgent_] set class_ 33"
  191. # 5 focus on 1
  192. flash_annotate [expr $start+2.0] 0.1 "5 focussing on 1..."
  193. $ns at [expr $start+2.0] "[$sess(5) set repAgent_] set class_ 4"
  194. $ns at [expr $start+2.0] "$sess(5) scuba_focus $sess(1)"
  195. $ns at [expr $start+2.05] "[$sess(5) set repAgent_] set class_ 33"
  196. # 5 focus on 0
  197. flash_annotate [expr $start+2.5] 0.1 "5 focussing on 0..."
  198. $ns at [expr $start+2.5] "[$sess(5) set repAgent_] set class_ 4"
  199. $ns at [expr $start+2.5] "$sess(5) scuba_focus $sess(0)"
  200. $ns at [expr $start+2.55] "[$sess(5) set repAgent_] set class_ 33"
  201. # 5 unfocus on 0
  202. flash_annotate [expr $start+3.0] 0.1 "5 unfocussing off 0..."
  203. $ns at [expr $start+3.0] "[$sess(5) set repAgent_] set class_ 4"
  204. $ns at [expr $start+3.0] "$sess(5) scuba_unfocus $sess(0)"
  205. $ns at [expr $start+3.05] "[$sess(5) set repAgent_] set class_ 33"
  206. # 4,5 unfocus on 1,0  and focus on 2
  207. flash_annotate [expr $start+3.5] 0.1 "4,5 unfocussing off 1,0 and focus on 2..."
  208. $ns at [expr $start+3.5] "[$sess(5) set repAgent_] set class_ 4"
  209. $ns at [expr $start+3.5] "[$sess(4) set repAgent_] set class_ 4"
  210. $ns at [expr $start+3.5] "$sess(5) scuba_unfocus $sess(1)"
  211. $ns at [expr $start+3.5] "$sess(4) scuba_unfocus $sess(0)"
  212. $ns at [expr $start+3.5] "$sess(5) scuba_focus $sess(2)"
  213. $ns at [expr $start+3.5] "$sess(4) scuba_focus $sess(2)"
  214. $ns at [expr $start+3.55] "[$sess(5) set repAgent_] set class_ 33"
  215. $ns at [expr $start+3.55] "[$sess(4) set repAgent_] set class_ 33"
  216. }
  217. proc finish {} {
  218. trace_annotate "End Simulation"
  219. global tcldir
  220. puts "converting output to nam format..."
  221.         global ns
  222.         $ns flush-trace
  223. puts "running nam..."
  224. exec /usr/local/src/nam-1/nam out.nam &
  225.         exit 0
  226. }
  227. $ns run