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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Contributed by Tom Henderson, November 2001 
  3. #
  4. # Extension of the sat-mixed.tcl script to support integration of
  5. # non-satellite nodes (wired and satellite nodes).  See the documentation
  6. # for usage instructions.  
  7. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/sat-wired.tcl,v 1.1 2001/11/06 06:13:24 tomh Exp $
  8. global ns
  9. set ns [new Simulator]
  10. # Note:  Even though "Static" is normally reserved for static
  11. #        topologies, the satellite code will trigger a recalculation
  12. #        of the routing tables whenever the topology changes.
  13. #  Therefore, it is not so much "static" as "omniscient", in that
  14. #        topology changes are known instantly throughout the topology.
  15. #        See documentation for discussion of dynamic routing protocols.
  16. $ns rtproto Static
  17. ###########################################################################
  18. # Global configuration parameters                                         #
  19. ###########################################################################
  20. HandoffManager/Term set elevation_mask_ 8.2
  21. HandoffManager/Term set term_handoff_int_ 10
  22. HandoffManager set handoff_randomization_ false
  23. global opt
  24. set opt(chan)           Channel/Sat
  25. set opt(bw_down) 1.5Mb; # Downlink bandwidth (satellite to ground)
  26. set opt(bw_up) 1.5Mb; # Uplink bandwidth
  27. set opt(bw_isl) 25Mb
  28. set opt(phy)            Phy/Sat
  29. set opt(mac)            Mac/Sat
  30. set opt(ifq)            Queue/DropTail
  31. set opt(qlim) 50
  32. set opt(ll)             LL/Sat
  33. set opt(wiredRouting) ON
  34. set opt(alt) 780; # Polar satellite altitude (Iridium)
  35. set opt(inc) 90; # Orbit inclination w.r.t. equator
  36. # IMPORTANT This tracing enabling (trace-all) must precede link and node 
  37. #           creation.  Then following all node, link, and error model
  38. #           creation, invoke "$ns trace-all-satlinks $outfile" 
  39. set outfile [open out.tr w]
  40. $ns trace-all $outfile
  41. ###########################################################################
  42. # Set up satellite and terrestrial nodes                                  #
  43. ###########################################################################
  44. # Let's first create a single orbital plane of Iridium-like satellites
  45. # 11 satellites in a plane
  46. # Set up the node configuration
  47. $ns node-config -satNodeType polar 
  48. -llType $opt(ll) 
  49. -ifqType $opt(ifq) 
  50. -ifqLen $opt(qlim) 
  51. -macType $opt(mac) 
  52. -phyType $opt(phy) 
  53. -channelType $opt(chan) 
  54. -downlinkBW $opt(bw_down) 
  55. -wiredRouting $opt(wiredRouting)
  56. # Create nodes n0 through n10
  57. set n0 [$ns node]; set n1 [$ns node]; set n2 [$ns node]; set n3 [$ns node] 
  58. set n4 [$ns node]; set n5 [$ns node]; set n6 [$ns node]; set n7 [$ns node] 
  59. set n8 [$ns node]; set n9 [$ns node]; set n10 [$ns node]
  60. # Now provide position information for each of these nodes
  61. # Position arguments are: altitude, incl., longitude, "alpha", and plane
  62. # See documentation for definition of these fields
  63. set plane 1
  64. $n0 set-position $opt(alt) $opt(inc) 0 0 $plane 
  65. $n1 set-position $opt(alt) $opt(inc) 0 32.73 $plane
  66. $n2 set-position $opt(alt) $opt(inc) 0 65.45 $plane
  67. $n3 set-position $opt(alt) $opt(inc) 0 98.18 $plane
  68. $n4 set-position $opt(alt) $opt(inc) 0 130.91 $plane
  69. $n5 set-position $opt(alt) $opt(inc) 0 163.64 $plane
  70. $n6 set-position $opt(alt) $opt(inc) 0 196.36 $plane
  71. $n7 set-position $opt(alt) $opt(inc) 0 229.09 $plane
  72. $n8 set-position $opt(alt) $opt(inc) 0 261.82 $plane
  73. $n9 set-position $opt(alt) $opt(inc) 0 294.55 $plane
  74. $n10 set-position $opt(alt) $opt(inc) 0 327.27 $plane
  75. # This next step is specific to polar satellites
  76. # By setting the next_ variable on polar sats; handoffs can be optimized  
  77. # This step must follow all polar node creation
  78. $n0 set_next $n10; $n1 set_next $n0; $n2 set_next $n1; $n3 set_next $n2
  79. $n4 set_next $n3; $n5 set_next $n4; $n6 set_next $n5; $n7 set_next $n6
  80. $n8 set_next $n7; $n9 set_next $n8; $n10 set_next $n9
  81. # GEO satellite:  above North America-- lets put it at 100 deg. W
  82. $ns node-config -satNodeType geo
  83. set n11 [$ns node]
  84. $n11 set-position -100
  85. # Terminals:  Let's put two within the US, two around the prime meridian
  86. $ns node-config -satNodeType terminal 
  87. set n100 [$ns node]; set n101 [$ns node]
  88. $n100 set-position 37.9 -122.3; # Berkeley
  89. $n101 set-position 42.3 -71.1; # Boston
  90. set n200 [$ns node]; set n201 [$ns node]
  91. $n200 set-position 0 10 
  92. $n201 set-position 0 -10
  93. ###########################################################################
  94. # Set up links                                                            #
  95. ###########################################################################
  96. # Add any necessary ISLs or GSLs
  97. # GSLs to the geo satellite:
  98. $n100 add-gsl geo $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  99.   $opt(phy) [$n11 set downlink_] [$n11 set uplink_]
  100. $n101 add-gsl geo $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  101.   $opt(phy) [$n11 set downlink_] [$n11 set uplink_]
  102. # Attach n200 and n201 initially to a satellite on other side of the earth
  103. # (handoff will automatically occur to fix this at the start of simulation)
  104. $n200 add-gsl polar $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  105.   $opt(phy) [$n5 set downlink_] [$n5 set uplink_]
  106. $n201 add-gsl polar $opt(ll) $opt(ifq) $opt(qlim) $opt(mac) $opt(bw_up) 
  107.   $opt(phy) [$n5 set downlink_] [$n5 set uplink_]
  108. # ISLs for the polar satellites
  109. $ns add-isl intraplane $n0 $n1 $opt(bw_isl) $opt(ifq) $opt(qlim)
  110. $ns add-isl intraplane $n1 $n2 $opt(bw_isl) $opt(ifq) $opt(qlim)
  111. $ns add-isl intraplane $n2 $n3 $opt(bw_isl) $opt(ifq) $opt(qlim)
  112. $ns add-isl intraplane $n3 $n4 $opt(bw_isl) $opt(ifq) $opt(qlim)
  113. $ns add-isl intraplane $n4 $n5 $opt(bw_isl) $opt(ifq) $opt(qlim)
  114. $ns add-isl intraplane $n5 $n6 $opt(bw_isl) $opt(ifq) $opt(qlim)
  115. $ns add-isl intraplane $n6 $n7 $opt(bw_isl) $opt(ifq) $opt(qlim)
  116. $ns add-isl intraplane $n7 $n8 $opt(bw_isl) $opt(ifq) $opt(qlim)
  117. $ns add-isl intraplane $n8 $n9 $opt(bw_isl) $opt(ifq) $opt(qlim)
  118. $ns add-isl intraplane $n9 $n10 $opt(bw_isl) $opt(ifq) $opt(qlim)
  119. $ns add-isl intraplane $n10 $n0 $opt(bw_isl) $opt(ifq) $opt(qlim)
  120. ###########################################################################
  121. # Set up wired nodes                                                      #
  122. ###########################################################################
  123. # Connect $n300 <-> $n301 <-> $n302 <-> $n100 <-> $n11 <-> $n101 <-> $n303
  124. #                      ^                   ^
  125. #                      |___________________|    
  126. #
  127. # Packets from n303 to n300 should bypass n302 (node #18 in the trace)
  128. # (i.e., these packets should take the following path:  19,13,11,12,17,16)
  129. #
  130. $ns unset satNodeType_
  131. set n300 [$ns node]; # node 16 in trace
  132. set n301 [$ns node]; # node 17 in trace
  133. set n302 [$ns node]; # node 18 in trace
  134. set n303 [$ns node]; # node 19 in trace
  135. $ns duplex-link $n300 $n301 5Mb 2ms DropTail; # 16 <-> 17
  136. $ns duplex-link $n301 $n302 5Mb 2ms DropTail; # 17 <-> 18
  137. $ns duplex-link $n302 $n100 5Mb 2ms DropTail; # 18 <-> 11
  138. $ns duplex-link $n303 $n101 5Mb 2ms DropTail; # 19 <-> 13
  139. $ns duplex-link $n301 $n100 5Mb 2ms DropTail; # 17 <-> 11
  140. ###########################################################################
  141. # Tracing                                                                 #
  142. ###########################################################################
  143. $ns trace-all-satlinks $outfile
  144. ###########################################################################
  145. # Attach agents                                                           #
  146. ###########################################################################
  147. set udp0 [new Agent/UDP]
  148. $ns attach-agent $n100 $udp0
  149. set cbr0 [new Application/Traffic/CBR]
  150. $cbr0 attach-agent $udp0
  151. $cbr0 set interval_ 60.01
  152. set udp1 [new Agent/UDP]
  153. $ns attach-agent $n200 $udp1
  154. $udp1 set class_ 1
  155. set cbr1 [new Application/Traffic/CBR]
  156. $cbr1 attach-agent $udp1
  157. $cbr1 set interval_ 90.5
  158. set null0 [new Agent/Null]
  159. $ns attach-agent $n101 $null0
  160. set null1 [new Agent/Null]
  161. $ns attach-agent $n201 $null1
  162. $ns connect $udp0 $null0
  163. $ns connect $udp1 $null1
  164. ###########################################################################
  165. # Set up connection between wired nodes                                   #
  166. ###########################################################################
  167. set udp2 [new Agent/UDP]
  168. $ns attach-agent $n303 $udp2
  169. set cbr2 [new Application/Traffic/CBR]
  170. $cbr2 attach-agent $udp2
  171. $cbr2 set interval_ 300
  172. set null2 [new Agent/Null]
  173. $ns attach-agent $n300 $null2
  174. $ns connect $udp2 $null2
  175. $ns at 10.0 "$cbr2 start"
  176. ###########################################################################
  177. # Satellite routing                                                       #
  178. ###########################################################################
  179. set satrouteobject_ [new SatRouteObject]
  180. $satrouteobject_ compute_routes
  181. #$satrouteobject_ set wiredRouting_ true
  182. $ns at 1.0 "$cbr0 start"
  183. $ns at 305.0 "$cbr1 start"
  184. #$ns at 0.9 "$cbr1 start"
  185. $ns at 9000.0 "finish"
  186. proc finish {} {
  187. global ns outfile 
  188. $ns flush-trace
  189. close $outfile
  190. exit 0
  191. }
  192. $ns run