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

通讯编程

开发平台:

Visual C++

  1. # Copyright (c) 1999 Regents of the University of Southern 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. # A simple example for visualization of packet flow in wireless simulation
  33. # Kun-chan Lan kclan@isi.edu, 1999
  34. # ======================================================================
  35. # Define options
  36. # ======================================================================
  37. set opt(chan) Channel/WirelessChannel
  38. set opt(prop) Propagation/TwoRayGround
  39. set opt(netif) Phy/WirelessPhy
  40. set opt(mac) Mac/802_11
  41. set opt(ifq) Queue/DropTail/PriQueue
  42. set opt(ll) LL
  43. set opt(ant)        Antenna/OmniAntenna
  44. set opt(x) 670   ;# X dimension of the topography
  45. set opt(y) 670   ;# Y dimension of the topography
  46. set opt(ifqlen) 50       ;# max packet in ifq
  47. set opt(seed) 0.0
  48. set opt(tr) pktdemo.tr    ;# trace file
  49. set opt(nam)            pktdemo.nam   ;# nam trace file
  50. set opt(adhocRouting)   DSDV
  51. set opt(nn)             5             ;# how many nodes are simulated
  52. set opt(stop) 90.0 ;# simulation time
  53. # =====================================================================
  54. # Other default settings
  55. LL set mindelay_ 50us
  56. LL set delay_ 25us
  57. LL set bandwidth_ 0 ;# not used
  58. Agent/Null set sport_ 0
  59. Agent/Null set dport_ 0
  60. Agent/CBR set sport_ 0
  61. Agent/CBR set dport_ 0
  62. Agent/TCPSink set sport_ 0
  63. Agent/TCPSink set dport_ 0
  64. Agent/TCP set sport_ 0
  65. Agent/TCP set dport_ 0
  66. Agent/TCP set packetSize_ 512
  67. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  68. # unity gain, omni-directional antennas
  69. # set up the antennas to be centered in the node and 1.5 meters above it
  70. Antenna/OmniAntenna set X_ 0
  71. Antenna/OmniAntenna set Y_ 0
  72. Antenna/OmniAntenna set Z_ 1.5
  73. Antenna/OmniAntenna set Gt_ 1.0
  74. Antenna/OmniAntenna set Gr_ 1.0
  75. # Initialize the SharedMedia interface with parameters to make
  76. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  77. Phy/WirelessPhy set CPThresh_ 10.0
  78. Phy/WirelessPhy set CSThresh_ 1.559e-11
  79. Phy/WirelessPhy set RXThresh_ 3.652e-10
  80. Phy/WirelessPhy set Rb_ 2*1e6
  81. Phy/WirelessPhy set Pt_ 0.2818
  82. Phy/WirelessPhy set freq_ 914e+6 
  83. Phy/WirelessPhy set L_ 1.0
  84. # ======================================================================
  85. # Main Program
  86. # ======================================================================
  87. #
  88. # Initialize Global Variables
  89. #
  90. # create simulator instance
  91. set ns_ [new Simulator]
  92. # set wireless channel, radio-model and topography objects
  93. #set wchan [new $opt(chan)]
  94. #set wprop [new $opt(prop)]
  95. set wtopo [new Topography]
  96. # create trace object for ns and nam
  97. set tracefd [open $opt(tr) w]
  98. set namtrace    [open $opt(nam) w]
  99. $ns_ trace-all $tracefd
  100. $ns_ namtrace-all-wireless $namtrace $opt(x) $opt(y)
  101. # define topology
  102. $wtopo load_flatgrid $opt(x) $opt(y)
  103. #$wprop topography $wtopo
  104. #
  105. # Create God
  106. #
  107. set god_ [create-god $opt(nn)]
  108. #
  109. # define how node should be created
  110. #
  111. #global node setting
  112. $ns_ node-config -adhocRouting $opt(adhocRouting) 
  113.  -llType $opt(ll) 
  114.  -macType $opt(mac) 
  115.  -ifqType $opt(ifq) 
  116.  -ifqLen $opt(ifqlen) 
  117.  -antType $opt(ant) 
  118.  -propType $opt(prop) 
  119.  -phyType $opt(netif) 
  120.  -channelType $opt(chan) 
  121.  -topoInstance $wtopo 
  122.  -agentTrace ON 
  123.                  -routerTrace OFF 
  124.                  -macTrace OFF 
  125. #
  126. #  Create the specified number of nodes [$opt(nn)] and "attach" them
  127. #  to the channel. 
  128. for {set i 0} {$i < $opt(nn) } {incr i} {
  129. set node_($i) [$ns_ node]
  130. $node_($i) random-motion 0 ;# disable random motion
  131. }
  132. # Define node movement model
  133. #
  134. puts "Loading connection pattern..."
  135. #
  136. # nodes: 5, pause: 2.00, max speed: 10.00  max x = 670.00, max y: 670.00
  137. #
  138. $node_(0) set X_ 422.716707738489
  139. $node_(0) set Y_ 589.707335765875
  140. $node_(0) set Z_ 0.000000000000
  141. $node_(1) set X_ 571.192740186325
  142. $node_(1) set Y_ 276.384818286195
  143. $node_(1) set Z_ 0.000000000000
  144. $node_(2) set X_ 89.641181272212
  145. $node_(2) set Y_ 439.333721576041
  146. $node_(2) set Z_ 0.000000000000
  147. $node_(3) set X_ 481.858918255772
  148. $node_(3) set Y_ 312.839552218736
  149. $node_(3) set Z_ 0.000000000000
  150. $node_(4) set X_ 404.354417812321
  151. $node_(4) set Y_ 174.700530392536
  152. $node_(4) set Z_ 0.000000000000
  153. $god_ set-dist 0 1 16777215
  154. $god_ set-dist 0 2 16777215
  155. $god_ set-dist 0 3 16777215
  156. $god_ set-dist 0 4 16777215
  157. $god_ set-dist 1 2 16777215
  158. $god_ set-dist 1 3 1
  159. $god_ set-dist 1 4 1
  160. $god_ set-dist 2 3 16777215
  161. $god_ set-dist 2 4 16777215
  162. $god_ set-dist 3 4 1
  163. $ns_ at 2.000000000000 "$node_(0) setdest 251.814462320539 525.668444673569 4.321643209007"
  164. $ns_ at 2.000000000000 "$node_(1) setdest 258.446979634068 108.386939063715 8.944551343066"
  165. $ns_ at 2.000000000000 "$node_(2) setdest 71.986866627739 533.267476248005 0.544384676257"
  166. $ns_ at 2.000000000000 "$node_(3) setdest 634.708039841038 468.026171380176 4.714370176280"
  167. $ns_ at 2.000000000000 "$node_(4) setdest 296.110313540578 636.039939161363 1.093403720748"
  168. $ns_ at 23.463858803761 "$god_ set-dist 1 3 2"
  169. $ns_ at 25.330489080195 "$god_ set-dist 1 3 16777215"
  170. $ns_ at 25.330489080195 "$god_ set-dist 3 4 16777215"
  171. $ns_ at 28.014970660896 "$god_ set-dist 0 2 1"
  172. $ns_ at 41.690257555628 "$node_(1) setdest 258.446979634068 108.386939063715 0.000000000000"
  173. $ns_ at 43.690257555628 "$node_(1) setdest 458.034484352038 555.578911026289 7.384449428202"
  174. $ns_ at 44.230770051977 "$node_(0) setdest 251.814462320539 525.668444673569 0.000000000000"
  175. $ns_ at 46.230770051977 "$node_(0) setdest 29.583605260695 71.653642749196 4.369757451990"
  176. $ns_ at 48.203506338157 "$node_(3) setdest 634.708039841038 468.026171380176 0.000000000000"
  177. $ns_ at 50.203506338157 "$node_(3) setdest 168.404464525783 293.835434220046 8.837958163505"
  178. $ns_ at 61.146282049441 "$god_ set-dist 1 3 2"
  179. $ns_ at 61.146282049441 "$god_ set-dist 3 4 1"
  180. $ns_ at 61.940183593125 "$god_ set-dist 0 1 1"
  181. $ns_ at 61.940183593125 "$god_ set-dist 0 3 3"
  182. $ns_ at 61.940183593125 "$god_ set-dist 0 4 2"
  183. $ns_ at 61.940183593125 "$god_ set-dist 1 2 2"
  184. $ns_ at 61.940183593125 "$god_ set-dist 2 3 4"
  185. $ns_ at 61.940183593125 "$god_ set-dist 2 4 3"
  186. $ns_ at 65.320001199434 "$god_ set-dist 0 3 2"
  187. $ns_ at 65.320001199434 "$god_ set-dist 1 3 1"
  188. $ns_ at 65.320001199434 "$god_ set-dist 2 3 3"
  189. $ns_ at 72.479833272291 "$god_ set-dist 0 3 1"
  190. $ns_ at 72.479833272291 "$god_ set-dist 2 3 2"
  191. $ns_ at 74.141501617339 "$god_ set-dist 0 4 1"
  192. $ns_ at 74.141501617339 "$god_ set-dist 2 4 2"
  193. $ns_ at 91.315105963178 "$god_ set-dist 0 1 2"
  194. $ns_ at 91.315105963178 "$god_ set-dist 1 2 3"
  195. $ns_ at 93.313427973009 "$god_ set-dist 1 2 2"
  196. $ns_ at 93.313427973009 "$god_ set-dist 2 3 1"
  197. $ns_ at 98.710174388350 "$god_ set-dist 1 2 3"
  198. $ns_ at 98.710174388350 "$god_ set-dist 1 3 2"
  199. $ns_ at 105.625684740133 "$god_ set-dist 0 1 16777215"
  200. $ns_ at 105.625684740133 "$god_ set-dist 1 2 16777215"
  201. $ns_ at 105.625684740133 "$god_ set-dist 1 3 16777215"
  202. $ns_ at 105.625684740133 "$god_ set-dist 1 4 16777215"
  203. $ns_ at 106.526073618179 "$node_(3) setdest 168.404464525783 293.835434220046 0.000000000000"
  204. $ns_ at 108.526073618179 "$node_(3) setdest 640.711745744611 202.311298064598 9.940100763372"
  205. $ns_ at 110.006636507140 "$node_(1) setdest 458.034484352038 555.578911026289 0.000000000000"
  206. $ns_ at 110.761159202811 "$god_ set-dist 0 4 2"
  207. $ns_ at 112.006636507140 "$node_(1) setdest 219.327100186826 560.573034522603 0.164055503041"
  208. $ns_ at 112.763789530447 "$god_ set-dist 2 3 2"
  209. $ns_ at 112.763789530447 "$god_ set-dist 2 4 3"
  210. $ns_ at 115.605147677116 "$god_ set-dist 0 2 16777215"
  211. $ns_ at 115.605147677116 "$god_ set-dist 2 3 16777215"
  212. $ns_ at 115.605147677116 "$god_ set-dist 2 4 16777215"
  213. $ns_ at 126.409917266767 "$god_ set-dist 0 3 16777215"
  214. $ns_ at 126.409917266767 "$god_ set-dist 0 4 16777215"
  215. $ns_ at 138.496739882231 "$god_ set-dist 1 3 2"
  216. $ns_ at 138.496739882231 "$god_ set-dist 1 4 1"
  217. $ns_ at 151.316448327659 "$god_ set-dist 1 3 16777215"
  218. $ns_ at 151.316448327659 "$god_ set-dist 3 4 16777215"
  219. $ns_ at 156.925318894661 "$node_(3) setdest 640.711745744611 202.311298064598 0.000000000000"
  220. $ns_ at 158.925318894661 "$node_(3) setdest 487.816263862197 607.947164671046 3.999957695392"
  221. $ns_ at 161.909020998556 "$node_(0) setdest 29.583605260695 71.653642749196 0.000000000000"
  222. $ns_ at 163.909020998556 "$node_(0) setdest 488.362330344042 405.686525544012 6.767689225264"
  223. $ns_ at 177.571384787193 "$node_(2) setdest 71.986866627739 533.267476248005 0.000000000000"
  224. $ns_ at 179.571384787193 "$node_(2) setdest 305.038606222002 613.855043777391 5.995840465332"
  225. $ns_ at 187.725197579176 "$god_ set-dist 1 3 2"
  226. $ns_ at 187.725197579176 "$god_ set-dist 3 4 1"
  227. $ns_ at 193.657167555999 "$god_ set-dist 0 1 2"
  228. $ns_ at 193.657167555999 "$god_ set-dist 0 3 2"
  229. $ns_ at 193.657167555999 "$god_ set-dist 0 4 1"
  230. $ns_ at 198.286255168888 "$god_ set-dist 1 3 1"
  231. # Define traffic model
  232. #
  233. puts "Loading scenario file..."
  234. #
  235. # nodes: 5, max conn: 8, send rate: 0.25, seed: 1.0
  236. #
  237. #
  238. # 2 connecting to 3 at time 40.557023746220864
  239. #
  240. set udp_(0) [new Agent/UDP]
  241. $ns_ attach-agent $node_(2) $udp_(0)
  242. set null_(0) [new Agent/Null]
  243. $ns_ attach-agent $node_(3) $null_(0)
  244. set cbr_(0) [new Application/Traffic/CBR]
  245. $cbr_(0) set packetSize_ 512
  246. $cbr_(0) set interval_ 0.05
  247. $cbr_(0) set random_ 1
  248. $cbr_(0) set maxpkts_ 10000
  249. $cbr_(0) attach-agent $udp_(0)
  250. $ns_ connect $udp_(0) $null_(0)
  251. $ns_ at 40.557023746220864 "$cbr_(0) start"
  252. #
  253. # 2 connecting to 4 at time 42.898102734190459
  254. #
  255. set udp_(1) [new Agent/UDP]
  256. $ns_ attach-agent $node_(2) $udp_(1)
  257. set null_(1) [new Agent/Null]
  258. $ns_ attach-agent $node_(4) $null_(1)
  259. set cbr_(1) [new Application/Traffic/CBR]
  260. $cbr_(1) set packetSize_ 512
  261. $cbr_(1) set interval_ 0.05
  262. $cbr_(1) set random_ 1
  263. $cbr_(1) set maxpkts_ 10000
  264. $cbr_(1) attach-agent $udp_(1)
  265. $ns_ connect $udp_(1) $null_(1)
  266. $ns_ at 42.898102734190459 "$cbr_(1) start"
  267. #
  268. # 0 connecting to 4 at time 45.898102734190459
  269. #
  270. set udp_(2) [new Agent/UDP]
  271. $ns_ attach-agent $node_(0) $udp_(2)
  272. set null_(2) [new Agent/Null]
  273. $ns_ attach-agent $node_(4) $null_(2)
  274. set cbr_(2) [new Application/Traffic/CBR]
  275. $cbr_(2) set packetSize_ 512
  276. $cbr_(2) set interval_ 0.05
  277. $cbr_(2) set random_ 1
  278. $cbr_(2) set maxpkts_ 10000
  279. $cbr_(2) attach-agent $udp_(2)
  280. $ns_ connect $udp_(2) $null_(2)
  281. $ns_ at 45.898102734190459 "$cbr_(2) start"
  282. #
  283. # nodes: 5, max conn: 8, send rate: 0.0, seed: 1.0
  284. #
  285. # 1 connecting to 3 at time 80.557023746220864
  286. #
  287. set tcp_(0) [$ns_ create-connection  TCP $node_(1) TCPSink $node_(3) 0]
  288. $tcp_(0) set window_ 32
  289. $tcp_(0) set packetSize_ 512
  290. set ftp_(0) [$tcp_(0) attach-source FTP]
  291. $ns_ at 80.557023746220864 "$ftp_(0) start"
  292. #
  293. # 2 connecting to 0 at time 45.557023746220864
  294. #
  295. set tcp_(1) [$ns_ create-connection  TCP $node_(2) TCPSink $node_(0) 0]
  296. $tcp_(1) set window_ 32
  297. $tcp_(1) set packetSize_ 512
  298. set ftp_(1) [$tcp_(1) attach-source FTP]
  299. $ns_ at 45.557023746220864 "$ftp_(1) start"
  300. #
  301. # 1 connecting to 4 at time 50.898102734190459
  302. #
  303. set tcp_(2) [$ns_ create-connection  TCP $node_(1) TCPSink $node_(4) 0]
  304. $tcp_(2) set window_ 32
  305. $tcp_(2) set packetSize_ 512
  306. set ftp_(2) [$tcp_(2) attach-source FTP]
  307. $ns_ at 50.898102734190459 "$ftp_(2) start"
  308. #
  309. # Define node initial position in nam
  310. for {set i 0} {$i < $opt(nn)} {incr i} {
  311.     # 20 defines the node size in nam, must adjust it according to your scenario
  312.     # The function must be called after mobility model is defined
  313.     
  314.     $ns_ initial_node_pos $node_($i) 20
  315. }
  316. #
  317. # Tell nodes when the simulation ends
  318. #
  319. for {set i 0} {$i < $opt(nn) } {incr i} {
  320.     $ns_ at $opt(stop).000000001 "$node_($i) reset";
  321. }
  322. # tell nam the simulation stop time
  323. $ns_ at  $opt(stop) "$ns_ nam-end-wireless $opt(stop)"
  324. $ns_ at  $opt(stop).000000001 "puts "NS EXITING..." ; $ns_ halt"
  325. puts "Starting Simulation..."
  326. $ns_ run