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

通讯编程

开发平台:

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/simple/demo.tcl,v 1.3 1997/11/04 22:03:42 haoboy Exp $
  32. #
  33. set tcldir ../../../
  34. source $tcldir/rtp/session-scuba.tcl
  35. source $tcldir/rtp/session-rtp.tcl
  36. set ns [new Simulator]
  37. Simulator set EnableMcast_ 1
  38. Simulator set NumberInterfaces_ 1
  39. # rtcp reports
  40. $ns color 32 red
  41. # scuba reports
  42. $ns color 33 white
  43. $ns color 1 gold
  44. $ns color 2 blue
  45. $ns color 3 green
  46. $ns color 4 magenta
  47. for { set i 0 } { $i < 8 } { incr i } {
  48. set node($i) [$ns node]
  49. }
  50. $node(3) shape "square"
  51. $node(7) shape "square"
  52. set f [open out.tr w]
  53. $ns trace-all $f
  54. set nf [open out.nam w]
  55. $ns namtrace-all $nf
  56. Queue set limit_ 8
  57. proc makelinks { bw delay pairs } {
  58. global ns node
  59. foreach p $pairs {
  60. set src $node([lindex $p 0])
  61. set dst $node([lindex $p 1])
  62. $ns duplex-link $src $dst $bw $delay DropTail
  63. $ns duplex-link-op $src $dst orient [lindex $p 2]
  64. }
  65. }
  66. makelinks 1.5Mb 10ms {
  67. { 0 3 right-down }
  68. { 1 3 right }
  69. { 2 3 right-up }
  70. { 7 4 right-up }
  71. { 7 5 right }
  72. { 7 6 right-down }
  73. }
  74. makelinks 400kb 50ms {
  75. { 3 7 right }
  76. }
  77. $ns duplex-link-op $node(3) $node(7) queuePos 0.5
  78. set mproto DM
  79. set mrthandle [$ns mrtproto $mproto {}]
  80. $ns at 0.0 "$ns run-mcast"
  81. set sessbw 400kb/s
  82. foreach n { 0 1 2 4 5 6 } {
  83. set sess($n) [new Session/RTP/Scuba]
  84. $sess($n) session_bw $sessbw
  85. $sess($n) attach-node $node($n)
  86. }
  87. $ns at 1.0 {
  88. global sess
  89. foreach n { 0 1 2 4 5 6 } {
  90. $sess($n) join-group 0x8000
  91. }
  92. }
  93. foreach n { 0 1 2 } {
  94. set d [$sess($n) set dchan_]
  95. $d set class_ [expr $n]
  96. }
  97. $ns at 1.0 "trace_annotate {Starting receivers...}"
  98. # start receivers
  99. $ns at 1.1 {
  100. global sess
  101. $sess(4) start 0
  102. $sess(5) start 0
  103. $sess(6) start 0
  104. }
  105. # start senders
  106. $ns at 1.1 "trace_annotate {Starting sender 1...}"
  107. $ns at 1.1 "$sess(0) start 1"
  108. $ns at 1.2 "trace_annotate {Starting sender 2...}"
  109. $ns at 1.2 "$sess(1) start 1"
  110. $ns at 1.3 "trace_annotate {Starting sender 3...}"
  111. $ns at 1.3 "$sess(2) start 1"
  112. # 4 focus on 0
  113. $ns at 2.0 "trace_annotate {4 focussing on 0...}"
  114. $ns at 2.0 "[$sess(4) set repAgent_] set class_ 3"
  115. $ns at 2.0 "$sess(4) scuba_focus $sess(0)"
  116. # 5 focus on 1
  117. $ns at 3.0 "trace_annotate {5 focussing on 1...}"
  118. $ns at 3.0 "[$sess(4) set repAgent_] set class_ 3"
  119. $ns at 3.0 "$sess(5) scuba_focus $sess(1)"
  120. # 5 focus on 0
  121. $ns at 4.0 "trace_annotate {5 focussing on 0...}"
  122. $ns at 4.0 "$sess(5) scuba_focus $sess(0)"
  123. # 5 unfocus on 0
  124. $ns at 5.0 "trace_annotate {5 unfocussing on 0...}"
  125. $ns at 5.0 "[$sess(5) set repAgent_] set class_ 4"
  126. $ns at 5.0 "$sess(5) scuba_unfocus $sess(0)"
  127. $ns at 6.0 "finish"
  128. proc finish {} {
  129. global tcldir
  130. puts "converting output to nam format..."
  131.         global ns
  132.         $ns flush-trace
  133. puts "running nam..."
  134. exec nam out.nam &
  135.         exit 0
  136. }
  137. $ns run