wireless.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.tcl,v 1.8 2002/12/23 19:16:30 difa 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 ;# for dsdv
  45. set opt(ifq) CMUPriQueue ;# for dsr
  46. set opt(ll) LL
  47. set opt(ant)            Antenna/OmniAntenna
  48. set opt(x) 670 ;# X dimension of the topography
  49. set opt(y) 670 ;# Y dimension of the topography
  50. set opt(cp) "../mobility/scene/cbr-50-10-4-512"
  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)             dsr ;# routing protocol script (dsr or dsdv)
  58. set opt(lm)             "off" ;# log movement
  59. # ======================================================================
  60. set AgentTrace ON
  61. set RouterTrace ON
  62. set MacTrace OFF
  63. LL set mindelay_ 50us
  64. LL set delay_ 25us
  65. LL set bandwidth_ 0 ;# not used
  66. Agent/Null set sport_ 0
  67. Agent/Null set dport_ 0
  68. Agent/CBR set sport_ 0
  69. Agent/CBR set dport_ 0
  70. Agent/TCPSink set sport_ 0
  71. Agent/TCPSink set dport_ 0
  72. Agent/TCP set sport_ 0
  73. Agent/TCP set dport_ 0
  74. Agent/TCP set packetSize_ 1460
  75. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  76. # unity gain, omni-directional antennas
  77. # set up the antennas to be centered in the node and 1.5 meters above it
  78. Antenna/OmniAntenna set X_ 0
  79. Antenna/OmniAntenna set Y_ 0
  80. Antenna/OmniAntenna set Z_ 1.5
  81. Antenna/OmniAntenna set Gt_ 1.0
  82. Antenna/OmniAntenna set Gr_ 1.0
  83. # Initialize the SharedMedia interface with parameters to make
  84. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  85. Phy/WirelessPhy set CPThresh_ 10.0
  86. Phy/WirelessPhy set CSThresh_ 1.559e-11
  87. Phy/WirelessPhy set RXThresh_ 3.652e-10
  88. Phy/WirelessPhy set Rb_ 2*1e6
  89. Phy/WirelessPhy set Pt_ 0.2818
  90. Phy/WirelessPhy set freq_ 914e+6 
  91. Phy/WirelessPhy set L_ 1.0
  92. # ======================================================================
  93. proc usage { argv0 }  {
  94. puts "Usage: $argv0"
  95. puts "tmandatory arguments:"
  96. puts "tt[-x MAXX] [-y MAXY]"
  97. puts "toptional arguments:"
  98. puts "tt[-cp conn pattern] [-sc scenario] [-nn nodes]"
  99. puts "tt[-seed seed] [-stop sec] [-tr tracefile]n"
  100. }
  101. proc getopt {argc argv} {
  102. global opt
  103. lappend optlist cp nn seed sc stop tr x y
  104. for {set i 0} {$i < $argc} {incr i} {
  105. set arg [lindex $argv $i]
  106. if {[string range $arg 0 0] != "-"} continue
  107. set name [string range $arg 1 end]
  108. set opt($name) [lindex $argv [expr $i+1]]
  109. }
  110. }
  111. #proc cmu-trace { ttype atype node } {
  112. # global ns_ tracefd
  113. #
  114. #        puts ABC
  115. # if { $tracefd == "" } {
  116. # return ""
  117. # }
  118. # puts BCD
  119. # set T [new CMUTrace/$ttype $atype]
  120. # $T target [$ns_ set nullAgent_]
  121. # $T attach $tracefd
  122. #        $T set src_ [$node id]
  123. #
  124. #        $T node $node
  125. #
  126. # return $T
  127. #}
  128. proc log-movement {} {
  129.     global logtimer ns_ ns
  130.     set ns $ns_
  131.     source ../mobility/timer.tcl
  132.     Class LogTimer -superclass Timer
  133.     LogTimer instproc timeout {} {
  134. global opt node_;
  135. for {set i 0} {$i < $opt(nn)} {incr i} {
  136.     $node_($i) log-movement
  137. }
  138. $self sched 0.1
  139.     }
  140.     set logtimer [new LogTimer]
  141.     $logtimer sched 0.1
  142. }
  143. # ======================================================================
  144. # Main Program
  145. # ======================================================================
  146. getopt $argc $argv
  147. #
  148. # Source External TCL Scripts
  149. #
  150. #source ../lib/ns-mobilenode.tcl
  151. #if { $opt(rp) != "" } {
  152. #source ../mobility/$opt(rp).tcl
  153. #} elseif { [catch { set env(NS_PROTO_SCRIPT) } ] == 1 } {
  154. #puts "nenvironment variable NS_PROTO_SCRIPT not set!n"
  155. #exit
  156. #} else {
  157. #puts "n*** using script $env(NS_PROTO_SCRIPT)nn";
  158.         #source $env(NS_PROTO_SCRIPT)
  159. #}
  160. #source ../lib/ns-cmutrace.tcl
  161. source ../lib/ns-bsnode.tcl
  162. source ../mobility/com.tcl
  163. # do the get opt again incase the routing protocol file added some more
  164. # options to look for
  165. getopt $argc $argv
  166. if { $opt(x) == 0 || $opt(y) == 0 } {
  167. usage $argv0
  168. exit 1
  169. }
  170. if {$opt(seed) > 0} {
  171. puts "Seeding Random number generator with $opt(seed)n"
  172. ns-random $opt(seed)
  173. }
  174. #
  175. # Initialize Global Variables
  176. #
  177. set ns_ [new Simulator]
  178. set chan [new $opt(chan)]
  179. set prop [new $opt(prop)]
  180. set topo [new Topography]
  181. set tracefd [open $opt(tr) w]
  182. $topo load_flatgrid $opt(x) $opt(y)
  183. $prop topography $topo
  184. #
  185. # Create God
  186. #
  187. set god_ [create-god $opt(nn)]
  188. #
  189. # log the mobile nodes movements if desired
  190. #
  191. if { $opt(lm) == "on" } {
  192.     log-movement
  193. }
  194. #
  195. #  Create the specified number of nodes $opt(nn) and "attach" them
  196. #  the channel.
  197. #  Each routing protocol script is expected to have defined a proc
  198. #  create-mobile-node that builds a mobile node and inserts it into the
  199. #  array global $node_($i)
  200. #
  201. if { [string compare $opt(rp) "dsr"] == 0} { 
  202. for {set i 0} {$i < $opt(nn) } {incr i} {
  203. dsr-create-mobile-node $i
  204. }
  205. } elseif { [string compare $opt(rp) "dsdv"] == 0} { 
  206. for {set i 0} {$i < $opt(nn) } {incr i} {
  207. dsdv-create-mobile-node $i
  208. }
  209. }
  210. #
  211. # Source the Connection and Movement scripts
  212. #
  213. if { $opt(cp) == "" } {
  214. puts "*** NOTE: no connection pattern specified."
  215.         set opt(cp) "none"
  216. } else {
  217. puts "Loading connection pattern..."
  218. source $opt(cp)
  219. }
  220. #
  221. # Tell all the nodes when the simulation ends
  222. #
  223. for {set i 0} {$i < $opt(nn) } {incr i} {
  224.     $ns_ at $opt(stop).000000001 "$node_($i) reset";
  225. }
  226. $ns_ at $opt(stop).00000001 "puts "NS EXITING..." ; $ns_ halt"
  227. if { $opt(sc) == "" } {
  228. puts "*** NOTE: no scenario file specified."
  229.         set opt(sc) "none"
  230. } else {
  231. puts "Loading scenario file..."
  232. source $opt(sc)
  233. puts "Load complete..."
  234. }
  235. puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) rp $opt(rp)"
  236. puts $tracefd "M 0.0 sc $opt(sc) cp $opt(cp) seed $opt(seed)"
  237. puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"
  238. puts "Starting Simulation..."
  239. $ns_ run