wireless-test.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-test.tcl,v 1.5 2000/08/18 18:34:04 haoboy Exp $
  33. #
  34. # A simple wireless example file that simulates a 3-mobilenode 
  35. # topology. Traffic used are CBR and TCP flows.
  36. # ======================================================================
  37. # Default Script Options
  38. # ======================================================================
  39. set opt(chan) Channel/WirelessChannel
  40. set opt(prop) Propagation/TwoRayGround
  41. #set opt(netif) NetIf/SharedMedia
  42. set opt(netif) Phy/WirelessPhy
  43. #set opt(mac) Mac/802_11
  44. set opt(mac) Mac/802_11
  45. set opt(ifq) Queue/DropTail/PriQueue
  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-3-test"
  51. set opt(sc) "../mobility/scene/scen-3-test"
  52. set opt(ifqlen) 50 ;# max packet in ifq
  53. set opt(nn) 3 ;# number of nodes
  54. set opt(seed) 0.0
  55. set opt(stop) 2000.0 ;# simulation time
  56. set opt(tr) out-test.tr ;# trace file
  57. set opt(rp)             dsr          ;# routing protocol script
  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. if { $tracefd == "" } {
  114. return ""
  115. }
  116. set T [new CMUTrace/$ttype $atype]
  117. $T target [$ns_ set nullAgent_]
  118. $T attach $tracefd
  119.         $T set src_ [$node id]
  120.         $T node $node
  121. return $T
  122. }
  123. proc create-god { nodes } {
  124. global ns_ god_ tracefd
  125. set god_ [new God]
  126. $god_ num_nodes $nodes
  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. # do the get opt again incase the routing protocol file added some more
  162. # options to look for
  163. getopt $argc $argv
  164. if { $opt(x) == 0 || $opt(y) == 0 } {
  165. usage $argv0
  166. exit 1
  167. }
  168. if {$opt(seed) > 0} {
  169. puts "Seeding Random number generator with $opt(seed)n"
  170. ns-random $opt(seed)
  171. }
  172. #
  173. # Initialize Global Variables
  174. #
  175. set ns_ [new Simulator]
  176. set chan [new $opt(chan)]
  177. set prop [new $opt(prop)]
  178. set topo [new Topography]
  179. set tracefd [open $opt(tr) w]
  180. set nf [open nam-out-test.nam w]
  181. set f [open trace-out-test.tr w]
  182. $ns_ namtrace-all-wireless $nf $opt(x) $opt(y)
  183. $ns_ trace-all $f
  184. $topo load_flatgrid $opt(x) $opt(y)
  185. $prop topography $topo
  186. #
  187. # Create God
  188. #
  189. create-god $opt(nn)
  190. #
  191. # log the mobile nodes movements if desired
  192. #
  193. if { $opt(lm) == "on" } {
  194.     log-movement
  195. }
  196. #
  197. #  Create the specified number of nodes $opt(nn) and "attach" them
  198. #  the channel.
  199. #  Each routing protocol script is expected to have defined a proc
  200. #  create-mobile-node that builds a mobile node and inserts it into the
  201. #  array global $node_($i)
  202. #
  203. if { [string compare $opt(rp) "dsr"] == 0} { 
  204. for {set i 0} {$i < $opt(nn) } {incr i} {
  205. dsr-create-mobile-node $i
  206. }
  207. } elseif { [string compare $opt(rp) "dsdv"] == 0} { 
  208. for {set i 0} {$i < $opt(nn) } {incr i} {
  209. dsdv-create-mobile-node $i
  210. }
  211. }
  212. #enable node trace in nam
  213. for {set i 0} {$i < $opt(nn)} {incr i} {
  214.     $node_($i) namattach $nf
  215. # 20 defines the node size in nam, must adjust it according to your scenario
  216.    $ns_ initial_node_pos $node_($i) 20
  217. }
  218. #
  219. # Source the Connection and Movement scripts
  220. #
  221. if { $opt(cp) == "" } {
  222. puts "*** NOTE: no connection pattern specified."
  223.         set opt(cp) "none"
  224. } else {
  225. puts "Loading connection pattern..."
  226. source $opt(cp)
  227. }
  228. #
  229. # Tell all the nodes when the simulation ends
  230. #
  231. for {set i } {$i < $opt(nn) } {incr i} {
  232.     $ns_ at $opt(stop).000000001 "$node_($i) reset";
  233. }
  234. $ns_ at $opt(stop).1 "puts "NS EXITING..." ; $ns_ halt"
  235. $ns_ at $opt(stop) "stop"
  236. if { $opt(sc) == "" } {
  237. puts "*** NOTE: no scenario file specified."
  238.         set opt(sc) "none"
  239. } else {
  240. puts "Loading scenario file..."
  241. source $opt(sc)
  242. puts "Load complete..."
  243. }
  244. puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) rp $opt(rp)"
  245. puts $tracefd "M 0.0 sc $opt(sc) cp $opt(cp) seed $opt(seed)"
  246. puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"
  247. puts "Starting Simulation..."
  248. $ns_ run
  249. proc stop {} {
  250.     global ns_ f nf
  251.     $ns_ flush-trace
  252.     close $f
  253.     close $nf
  254. }