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

通讯编程

开发平台:

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/grid2.tcl,v 1.2 2000/08/18 18:34:04 haoboy Exp $
  33. #
  34. # Ported from CMU/Monarch's code, nov'98 -Padma.
  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/802_11
  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(sc) "../mobility/scene/scen-670x670-50-600-20-0"
  51. set opt(ifqlen) 50 ;# max packet in ifq
  52. set opt(nn) 50 ;# number of nodes
  53. set opt(seed) 0.0
  54. set opt(stop) 1000.0 ;# simulation time
  55. set opt(tr) grid2.tr ;# trace file
  56. set opt(rp)             dsdv            ;# routing protocol script
  57. set opt(lm)             "off"           ;# log movement
  58. set opt(gkeeper) 0 ;# gridkeeper = 0: do use gridkeeper
  59. set opt(radius) 0 ;# node range, used only if 
  60. ;# opt(gkeeper) = 1
  61. # ======================================================================
  62. set AgentTrace ON
  63. set RouterTrace ON
  64. set MacTrace OFF
  65. LL set mindelay_ 50us
  66. LL set delay_ 25us
  67. LL set bandwidth_ 0 ;# not used
  68. Agent/Null set sport_ 0
  69. Agent/Null set dport_ 0
  70. Agent/CBR set sport_ 0
  71. Agent/CBR set dport_ 0
  72. Agent/TCPSink set sport_ 0
  73. Agent/TCPSink set dport_ 0
  74. Agent/TCP set sport_ 0
  75. Agent/TCP set dport_ 0
  76. Agent/TCP set packetSize_ 1460
  77. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  78. # unity gain, omni-directional antennas
  79. # set up the antennas to be centered in the node and 1.5 meters above it
  80. Antenna/OmniAntenna set X_ 0
  81. Antenna/OmniAntenna set Y_ 0
  82. Antenna/OmniAntenna set Z_ 1.5
  83. Antenna/OmniAntenna set Gt_ 1.0
  84. Antenna/OmniAntenna set Gr_ 1.0
  85. # Initialize the SharedMedia interface with parameters to make
  86. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  87. Phy/WirelessPhy set CPThresh_ 10.0
  88. Phy/WirelessPhy set CSThresh_ 1.559e-11
  89. Phy/WirelessPhy set RXThresh_ 3.652e-10
  90. Phy/WirelessPhy set Rb_ 2*1e6
  91. Phy/WirelessPhy set Pt_ 0.2818
  92. Phy/WirelessPhy set freq_ 914e+6 
  93. Phy/WirelessPhy set L_ 1.0
  94. # ======================================================================
  95. proc usage { argv0 }  {
  96. puts "Usage: $argv0"
  97. puts "tmandatory arguments:"
  98. puts "tt[-x MAXX] [-y MAXY]"
  99. puts "toptional arguments:"
  100. puts "tt[-cp conn pattern] [-sc scenario] [-nn nodes]"
  101. puts "tt[-seed seed] [-stop sec] [-tr tracefile]n"
  102. }
  103. proc getopt {argc argv} {
  104. global opt
  105. lappend optlist cp nn seed sc stop tr x y
  106. for {set i 0} {$i < $argc} {incr i} {
  107. set arg [lindex $argv $i]
  108. if {[string range $arg 0 0] != "-"} continue
  109. set name [string range $arg 1 end]
  110. set opt($name) [lindex $argv [expr $i+1]]
  111. }
  112. }
  113. proc cmu-trace { ttype atype node } {
  114. global ns_ tracefd
  115. if { $tracefd == "" } {
  116. return ""
  117. }
  118. set T [new CMUTrace/$ttype $atype]
  119. $T target [$ns_ set nullAgent_]
  120. $T attach $tracefd
  121.         $T set src_ [$node id]
  122.         $T node $node
  123. return $T
  124. }
  125. proc log-movement {} {
  126.     global logtimer ns_ ns
  127.     set ns $ns_
  128.     source ../mobility/timer.tcl
  129.     Class LogTimer -superclass Timer
  130.     LogTimer instproc timeout {} {
  131. global opt node_;
  132. for {set i 0} {$i < $opt(nn)} {incr i} {
  133.     $node_($i) log-movement
  134. }
  135. $self sched 0.1
  136.     }
  137.     set logtimer [new LogTimer]
  138.     $logtimer sched 0.1
  139. }
  140. # Grid keeper process
  141. proc create_gridkeeper {} {
  142. global gkeeper opt node_
  143. set gkeeper [new GridKeeper]
  144. #initialize the gridkeeper
  145. $gkeeper dimension $opt(x) $opt(y)
  146. #
  147. # add mobile node into the gridkeeper, must be added after
  148. # scenario file
  149. #
  150. for {set i 0} {$i < $opt(nn) } {incr i} {
  151.     $gkeeper addnode $node_($i)
  152.     $node_($i) radius 150
  153. }
  154. #dump grid info
  155. #$gkeeper dump
  156. }
  157. # ======================================================================
  158. # Main Program
  159. # ======================================================================
  160. getopt $argc $argv
  161. #
  162. # Source External TCL Scripts
  163. #
  164. #source ../lib/ns-mobilenode.tcl
  165. #if { $opt(rp) != "" } {
  166. #source ../mobility/$opt(rp).tcl
  167. #} elseif { [catch { set env(NS_PROTO_SCRIPT) } ] == 1 } {
  168. #puts "nenvironment variable NS_PROTO_SCRIPT not set!n"
  169. #exit
  170. #} else {
  171. #puts "n*** using script $env(NS_PROTO_SCRIPT)nn";
  172.         #source $env(NS_PROTO_SCRIPT)
  173. #}
  174. #source ../lib/ns-cmutrace.tcl
  175. source ../lib/ns-bsnode.tcl
  176. source ../mobility/com.tcl
  177. # do the get opt again incase the routing protocol file added some more
  178. # options to look for
  179. getopt $argc $argv
  180. if { $opt(x) == 0 || $opt(y) == 0 } {
  181. usage $argv0
  182. exit 1
  183. }
  184. if {$opt(seed) > 0} {
  185. puts "Seeding Random number generator with $opt(seed)n"
  186. ns-random $opt(seed)
  187. }
  188. #
  189. # Initialize Global Variables
  190. #
  191. set ns_ [new Simulator]
  192. set chan [new $opt(chan)]
  193. set prop [new $opt(prop)]
  194. set topo [new Topography]
  195. set tracefd [open $opt(tr) w]
  196. $topo load_flatgrid $opt(x) $opt(y)
  197. $prop topography $topo
  198. #
  199. # Create God
  200. #
  201. create-god $opt(nn)
  202. #
  203. # log the mobile nodes movements if desired
  204. #
  205. if { $opt(lm) == "on" } {
  206.     log-movement
  207. }
  208. #
  209. #  Create the specified number of nodes $opt(nn) and "attach" them
  210. #  the channel.
  211. #  Each routing protocol script is expected to have defined a proc
  212. #  create-mobile-node that builds a mobile node and inserts it into the
  213. #  array global $node_($i)
  214. #
  215. if { [string compare $opt(rp) "dsr"] == 0} { 
  216. for {set i 0} {$i < $opt(nn) } {incr i} {
  217. dsr-create-mobile-node $i
  218. }
  219. } elseif { [string compare $opt(rp) "dsdv"] == 0} { 
  220. for {set i 0} {$i < $opt(nn) } {incr i} {
  221. dsdv-create-mobile-node $i
  222. }
  223. }
  224. #
  225. # Source the Connection and Movement scripts
  226. #
  227. if { $opt(cp) == "" } {
  228. puts "*** NOTE: no connection pattern specified."
  229.         set opt(cp) "none"
  230. } else {
  231. puts "Loading connection pattern..."
  232. source $opt(cp)
  233. }
  234. #
  235. # trace node movement in nam format
  236. #
  237. set nf [open gridkeeper.nam w]
  238. $ns_ namtrace-all-wireless $nf $opt(x) $opt(y)
  239. #
  240. # Tell all the nodes when the simulation ends
  241. #
  242. for {set i 0} {$i < $opt(nn) } {incr i} {
  243.     $ns_ at $opt(stop).000000001 "$node_($i) reset";
  244. }
  245. $ns_ at $opt(stop) "$ns_ flush-trace; close $nf"
  246. $ns_ at $opt(stop).00000001 "puts "NS EXITING..." ; $ns_ halt"
  247. if { $opt(sc) == "" } {
  248. puts "*** NOTE: no scenario file specified."
  249.         set opt(sc) "none"
  250. } else {
  251. puts "Loading scenario file..."
  252. source $opt(sc)
  253. puts "Load complete..."
  254. }
  255. #enable node trace in nam
  256. for {set i 0} {$i < $opt(nn)} {incr i} {
  257.     $node_($i) namattach $nf
  258. # 20 defines the node size in nam, must adjust it according to your scenario
  259.     $ns_ initial_node_pos $node_($i) 20
  260. }
  261. #
  262. # Create GridKeeper: OPTIONAL
  263. #
  264. create_gridkeeper
  265. puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) rp $opt(rp)"
  266. puts $tracefd "M 0.0 sc $opt(sc) cp $opt(cp) seed $opt(seed)"
  267. puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"
  268. puts "Starting Simulation..."
  269. $ns_ run