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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1999 Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. #       This product includes software developed by the MASH Research
  16. #       Group at the University of California Berkeley.
  17. # 4. Neither the name of the University nor of the Research Group may be
  18. #    used to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. #
  33. # Contributed by Tom Henderson, UCB Daedalus Research Group, June 1999
  34. #
  35. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/sat-mixed.tcl,v 1.4 2001/11/06 06:20:10 tomh Exp $
  36. #
  37. # Example script that mixes geo satellites with some polar satellites:
  38. # One plane of Iridium-like satellites, one geo satellite, and two terminals 
  39. # pinging one another on it
  40. # In the script, since this is not a full constellation, the LEO satellites
  41. # eventually move out of range of the terminals and packets get dropped
  42. global ns
  43. set ns [new Simulator]
  44. ###########################################################################
  45. # Global configuration parameters                                         #
  46. ###########################################################################
  47. HandoffManager/Term set elevation_mask_ 8.2
  48. HandoffManager/Term set term_handoff_int_ 10
  49. HandoffManager set handoff_randomization_ false
  50. global opt
  51. set opt(chan)           Channel/Sat
  52. set opt(bw_down) 1.5Mb; # Downlink bandwidth (satellite to ground)
  53. set opt(bw_up) 1.5Mb; # Uplink bandwidth
  54. set opt(bw_isl) 25Mb
  55. set opt(phy)            Phy/Sat
  56. set opt(mac)            Mac/Sat
  57. set opt(ifq)            Queue/DropTail
  58. set opt(qlim) 50
  59. set opt(ll)             LL/Sat
  60. set opt(wiredRouting)   OFF
  61. set opt(alt) 780; # Polar satellite altitude (Iridium)
  62. set opt(inc) 90; # Orbit inclination w.r.t. equator
  63. # IMPORTANT This tracing enabling (trace-all) must precede link and node 
  64. #           creation.  Then following all node, link, and error model
  65. #           creation, invoke "$ns trace-all-satlinks $outfile" 
  66. set outfile [open out.tr w]
  67. $ns trace-all $outfile
  68. ###########################################################################
  69. # Set up satellite and terrestrial nodes                                  #
  70. ###########################################################################
  71. # Let's first create a single orbital plane of Iridium-like satellites
  72. # 11 satellites in a plane
  73. # Set up the node configuration
  74. $ns node-config -satNodeType polar 
  75. -llType $opt(ll) 
  76. -ifqType $opt(ifq) 
  77. -ifqLen $opt(qlim) 
  78. -macType $opt(mac) 
  79. -phyType $opt(phy) 
  80. -channelType $opt(chan) 
  81. -downlinkBW $opt(bw_down) 
  82. -wiredRouting $opt(wiredRouting)
  83. # Create nodes n0 through n10
  84. set n0 [$ns node]; set n1 [$ns node]; set n2 [$ns node]; set n3 [$ns node] 
  85. set n4 [$ns node]; set n5 [$ns node]; set n6 [$ns node]; set n7 [$ns node] 
  86. set n8 [$ns node]; set n9 [$ns node]; set n10 [$ns node]
  87. # Now provide position information for each of these nodes
  88. # Position arguments are: altitude, incl., longitude, "alpha", and plane
  89. # See documentation for definition of these fields
  90. set plane 1
  91. $n0 set-position $opt(alt) $opt(inc) 0 0 $plane 
  92. $n1 set-position $opt(alt) $opt(inc) 0 32.73 $plane
  93. $n2 set-position $opt(alt) $opt(inc) 0 65.45 $plane
  94. $n3 set-position $opt(alt) $opt(inc) 0 98.18 $plane
  95. $n4 set-position $opt(alt) $opt(inc) 0 130.91 $plane
  96. $n5 set-position $opt(alt) $opt(inc) 0 163.64 $plane
  97. $n6 set-position $opt(alt) $opt(inc) 0 196.36 $plane
  98. $n7 set-position $opt(alt) $opt(inc) 0 229.09 $plane
  99. $n8 set-position $opt(alt) $opt(inc) 0 261.82 $plane
  100. $n9 set-position $opt(alt) $opt(inc) 0 294.55 $plane
  101. $n10 set-position $opt(alt) $opt(inc) 0 327.27 $plane
  102. # This next step is specific to polar satellites
  103. # By setting the next_ variable on polar sats; handoffs can be optimized  
  104. # This step must follow all polar node creation
  105. $n0 set_next $n10; $n1 set_next $n0; $n2 set_next $n1; $n3 set_next $n2
  106. $n4 set_next $n3; $n5 set_next $n4; $n6 set_next $n5; $n7 set_next $n6
  107. $n8 set_next $n7; $n9 set_next $n8; $n10 set_next $n9
  108. # GEO satellite:  above North America-- lets put it at 100 deg. W
  109. $ns node-config -satNodeType geo
  110. set n11 [$ns node]
  111. $n11 set-position -100
  112. # Terminals:  Let's put two within the US, two around the prime meridian
  113. $ns node-config -satNodeType terminal 
  114. set n100 [$ns node]; set n101 [$ns node]
  115. $n100 set-position 37.9 -122.3; # Berkeley
  116. $n101 set-position 42.3 -71.1; # Boston
  117. set n200 [$ns node]; set n201 [$ns node]
  118. $n200 set-position 0 10 
  119. $n201 set-position 0 -10
  120. ###########################################################################
  121. # Set up links                                                            #
  122. ###########################################################################
  123. # Add any necessary ISLs or GSLs
  124. # GSLs to the geo satellite:
  125. $n100 add-gsl geo $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  126.   $opt(phy) [$n11 set downlink_] [$n11 set uplink_]
  127. $n101 add-gsl geo $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  128.   $opt(phy) [$n11 set downlink_] [$n11 set uplink_]
  129. # Attach n200 and n201 initially to a satellite on other side of the earth
  130. # (handoff will automatically occur to fix this at the start of simulation)
  131. $n200 add-gsl polar $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  132.   $opt(phy) [$n5 set downlink_] [$n5 set uplink_]
  133. $n201 add-gsl polar $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  134.   $opt(phy) [$n5 set downlink_] [$n5 set uplink_]
  135. # ISLs for the polar satellites
  136. $ns add-isl intraplane $n0 $n1 $opt(bw_isl) $opt(ifq) $opt(qlim)
  137. $ns add-isl intraplane $n1 $n2 $opt(bw_isl) $opt(ifq) $opt(qlim)
  138. $ns add-isl intraplane $n2 $n3 $opt(bw_isl) $opt(ifq) $opt(qlim)
  139. $ns add-isl intraplane $n3 $n4 $opt(bw_isl) $opt(ifq) $opt(qlim)
  140. $ns add-isl intraplane $n4 $n5 $opt(bw_isl) $opt(ifq) $opt(qlim)
  141. $ns add-isl intraplane $n5 $n6 $opt(bw_isl) $opt(ifq) $opt(qlim)
  142. $ns add-isl intraplane $n6 $n7 $opt(bw_isl) $opt(ifq) $opt(qlim)
  143. $ns add-isl intraplane $n7 $n8 $opt(bw_isl) $opt(ifq) $opt(qlim)
  144. $ns add-isl intraplane $n8 $n9 $opt(bw_isl) $opt(ifq) $opt(qlim)
  145. $ns add-isl intraplane $n9 $n10 $opt(bw_isl) $opt(ifq) $opt(qlim)
  146. $ns add-isl intraplane $n10 $n0 $opt(bw_isl) $opt(ifq) $opt(qlim)
  147. ###########################################################################
  148. # Tracing                                                                 #
  149. ###########################################################################
  150. $ns trace-all-satlinks $outfile
  151. ###########################################################################
  152. # Attach agents                                                           #
  153. ###########################################################################
  154. set udp0 [new Agent/UDP]
  155. $ns attach-agent $n100 $udp0
  156. set cbr0 [new Application/Traffic/CBR]
  157. $cbr0 attach-agent $udp0
  158. $cbr0 set interval_ 60.01
  159. set udp1 [new Agent/UDP]
  160. $ns attach-agent $n200 $udp1
  161. $udp1 set class_ 1
  162. set cbr1 [new Application/Traffic/CBR]
  163. $cbr1 attach-agent $udp1
  164. $cbr1 set interval_ 90.5
  165. set null0 [new Agent/Null]
  166. $ns attach-agent $n101 $null0
  167. set null1 [new Agent/Null]
  168. $ns attach-agent $n201 $null1
  169. $ns connect $udp0 $null0
  170. $ns connect $udp1 $null1
  171. ###########################################################################
  172. # Satellite routing                                                       #
  173. ###########################################################################
  174. set satrouteobject_ [new SatRouteObject]
  175. $satrouteobject_ compute_routes
  176. $ns at 1.0 "$cbr0 start"
  177. $ns at 305.0 "$cbr1 start"
  178. $ns at 9000.0 "finish"
  179. proc finish {} {
  180. global ns outfile 
  181. $ns flush-trace
  182. close $outfile
  183. exit 0
  184. }
  185. $ns run