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

通讯编程

开发平台:

Visual C++

  1. # Copyright (c) 1997 Regents of the University of California.
  2. # All rights reserved.
  3. #
  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 Computer Systems
  15. #      Engineering Group at Lawrence Berkeley Laboratory.
  16. # 4. Neither the name of the University nor of the Laboratory may be used
  17. #    to endorse or promote products derived from this software without
  18. #    specific prior written permission.
  19. #
  20. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. # SUCH DAMAGE.
  31. #
  32. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/wireless-landmark.tcl,v 1.2 2000/08/18 18:34:04 haoboy Exp $
  33. #
  34. # API based on CMU/Monarch's code
  35. # ======================================================================
  36. # Default Script Options
  37. # ======================================================================
  38. set opt(chan) Channel/WirelessChannel
  39. set opt(prop) Propagation/TwoRayGround
  40. #set opt(netif) NetIf/SharedMedia
  41. set opt(netif) Phy/WirelessPhy
  42. #set opt(mac) Mac/802_11
  43. set opt(mac) Mac
  44. set opt(ifq) Queue/DropTail/PriQueue
  45. set opt(ll) LL
  46. set opt(ant)            Antenna/OmniAntenna
  47. set opt(x) 670 ;# X dimension of the topography
  48. set opt(y) 670 ;# Y dimension of the topography
  49. #set opt(cp) "../mobility/scene/cbr-50-10-4-512"
  50. set opt(cp) ""
  51. set opt(sc) "../mobility/scene/scen-670x670-50-600-20-0"
  52. set opt(ifqlen) 50 ;# max packet in ifq
  53. set opt(nn) 50 ;# number of nodes
  54. set opt(seed) 0.0
  55. set opt(stop) 1000.0 ;# simulation time
  56. set opt(tr) out.tr ;# trace file
  57. set opt(rp)             landmark            ;# routing protocol script
  58. set opt(lm)             "off"           ;# log movement
  59. set opt(energymodel)    EnergyModel     ;
  60. set opt(initialenergy)  10000               ;# Initial energy in Joules
  61. # Landmark specific parameters
  62. set opt(num_tags)       6000  ; # Number of tags
  63. set opt(update-period)  400   ; # Period of Hierarchy updates
  64. # ======================================================================
  65. set AgentTrace ON
  66. set RouterTrace ON
  67. set MacTrace OFF
  68. LL set mindelay_ 50us
  69. LL set delay_ 25us
  70. LL set bandwidth_ 0 ;# not used
  71. Agent/Null set sport_ 0
  72. Agent/Null set dport_ 0
  73. Agent/CBR set sport_ 0
  74. Agent/CBR set dport_ 0
  75. Agent/TCPSink set sport_ 0
  76. Agent/TCPSink set dport_ 0
  77. Agent/TCP set sport_ 0
  78. Agent/TCP set dport_ 0
  79. Agent/TCP set packetSize_ 1460
  80. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  81. # unity gain, omni-directional antennas
  82. # set up the antennas to be centered in the node and 1.5 meters above it
  83. Antenna/OmniAntenna set X_ 0
  84. Antenna/OmniAntenna set Y_ 0
  85. Antenna/OmniAntenna set Z_ 1.5
  86. Antenna/OmniAntenna set Gt_ 1.0
  87. Antenna/OmniAntenna set Gr_ 1.0
  88. # Initialize the SharedMedia interface with parameters to make
  89. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  90. Phy/WirelessPhy set CPThresh_ 10.0
  91. Phy/WirelessPhy set CSThresh_ 1.559e-11
  92. Phy/WirelessPhy set RXThresh_ 3.652e-10
  93. Phy/WirelessPhy set Rb_ 2*1e6
  94. Phy/WirelessPhy set Pt_ 0.2818
  95. Phy/WirelessPhy set freq_ 914e+6 
  96. Phy/WirelessPhy set L_ 1.0
  97. # ======================================================================
  98. proc usage { argv0 }  {
  99. puts "Usage: $argv0"
  100. puts "tmandatory arguments:"
  101. puts "tt[-x MAXX] [-y MAXY]"
  102. puts "toptional arguments:"
  103. puts "tt[-cp conn pattern] [-sc scenario] [-nn nodes]"
  104. puts "tt[-seed seed] [-stop sec] [-tr tracefile]n"
  105. }
  106. proc getopt {argc argv} {
  107. global opt
  108. lappend optlist cp nn seed sc stop tr x y
  109. for {set i 0} {$i < $argc} {incr i} {
  110. set arg [lindex $argv $i]
  111. if {[string range $arg 0 0] != "-"} continue
  112. set name [string range $arg 1 end]
  113. set opt($name) [lindex $argv [expr $i+1]]
  114. }
  115. }
  116. #proc cmu-trace { ttype atype node } {
  117. # global ns_ tracefd
  118. #
  119. #        puts ABC
  120. # if { $tracefd == "" } {
  121. # return ""
  122. # }
  123. # puts BCD
  124. # set T [new CMUTrace/$ttype $atype]
  125. # $T target [$ns_ set nullAgent_]
  126. # $T attach $tracefd
  127. #        $T set src_ [$node id]
  128. #
  129. #        $T node $node
  130. #
  131. # return $T
  132. #}
  133. proc log-movement {} {
  134.     global logtimer ns_ ns
  135.     set ns $ns_
  136.     source ../mobility/timer.tcl
  137.     Class LogTimer -superclass Timer
  138.     LogTimer instproc timeout {} {
  139. global opt node_;
  140. for {set i 0} {$i < $opt(nn)} {incr i} {
  141.     $node_($i) log-movement
  142. }
  143. $self sched 0.1
  144.     }
  145.     set logtimer [new LogTimer]
  146.     $logtimer sched 0.1
  147. }
  148. # ======================================================================
  149. # Main Program
  150. # ======================================================================
  151. getopt $argc $argv
  152. #
  153. # Source External TCL Scripts
  154. #
  155. #source ../lib/ns-mobilenode.tcl
  156. #if { $opt(rp) != "" } {
  157. #source ../mobility/$opt(rp).tcl
  158. #} elseif { [catch { set env(NS_PROTO_SCRIPT) } ] == 1 } {
  159. #puts "nenvironment variable NS_PROTO_SCRIPT not set!n"
  160. #exit
  161. #} else {
  162. #puts "n*** using script $env(NS_PROTO_SCRIPT)nn";
  163.         #source $env(NS_PROTO_SCRIPT)
  164. #}
  165. #source ../lib/ns-cmutrace.tcl
  166. source ../lib/ns-bsnode.tcl
  167. source ../mobility/com.tcl
  168. source ../mobility/landmark.tcl
  169. # do the get opt again incase the routing protocol file added some more
  170. # options to look for
  171. getopt $argc $argv
  172. if { $opt(x) == 0 || $opt(y) == 0 } {
  173. usage $argv0
  174. exit 1
  175. }
  176. if {$opt(seed) > 0} {
  177. puts "Seeding Random number generator with $opt(seed)n"
  178. ns-random $opt(seed)
  179. }
  180. #
  181. # Initialize Global Variables
  182. #
  183. set ns_ [new Simulator]
  184. set chan [new $opt(chan)]
  185. set prop [new $opt(prop)]
  186. set topo [new Topography]
  187. set tracefd [open $opt(tr) w]
  188. $topo load_flatgrid $opt(x) $opt(y)
  189. $prop topography $topo
  190. #
  191. # Create God
  192. #
  193. set god_ [create-god $opt(nn)]
  194. #
  195. # log the mobile nodes movements if desired
  196. #
  197. if { $opt(lm) == "on" } {
  198.     log-movement
  199. }
  200. #
  201. #  Create the specified number of nodes $opt(nn) and "attach" them
  202. #  the channel.
  203. #  Each routing protocol script is expected to have defined a proc
  204. #  create-mobile-node that builds a mobile node and inserts it into the
  205. #  array global $node_($i)
  206. #
  207. if { [string compare $opt(rp) "dsr"] == 0} { 
  208. for {set i 0} {$i < $opt(nn) } {incr i} {
  209. dsr-create-mobile-node $i
  210. }
  211. } elseif { [string compare $opt(rp) "dsdv"] == 0} { 
  212. for {set i 0} {$i < $opt(nn) } {incr i} {
  213. dsdv-create-mobile-node $i
  214. }
  215. } elseif { [string compare $opt(rp) "landmark"] == 0} {
  216. # Create specified number of tags 
  217. set tag_dbase [new TagDbase]
  218. set x_min 0
  219. set x_max $opt(x)
  220. set y_min 0
  221. set y_max $opt(y)
  222. $tag_dbase create_database $x_min $x_max $y_min $y_max $opt(num_tags)
  223. for {set i 0} {$i < $opt(nn) } {incr i} {
  224. landmark-create-mobile-node $i $tag_dbase
  225. }
  226. }
  227. #
  228. # Source the Connection and Movement scripts
  229. #
  230. if { $opt(cp) == "" } {
  231. puts "*** NOTE: no connection pattern specified."
  232.         set opt(cp) "none"
  233. } else {
  234. puts "Loading connection pattern..."
  235. source $opt(cp)
  236. }
  237. #
  238. # Tell all the nodes when the simulation ends
  239. #
  240. for {set i 0} {$i < $opt(nn) } {incr i} {
  241.     $ns_ at $opt(stop).000000001 "$node_($i) reset";
  242. }
  243. $ns_ at $opt(stop).00000001 "puts "NS EXITING..." ; $ns_ halt"
  244. if { $opt(sc) == "" } {
  245. puts "*** NOTE: no scenario file specified."
  246.         set opt(sc) "none"
  247. } else {
  248. puts "Loading scenario file..."
  249. source $opt(sc)
  250. puts "Load complete..."
  251. }
  252. puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) rp $opt(rp)"
  253. puts $tracefd "M 0.0 sc $opt(sc) cp $opt(cp) seed $opt(seed)"
  254. puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"
  255. puts "Starting Simulation..."
  256. $ns_ run