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

通讯编程

开发平台:

Visual C++

  1. #! /bin/sh
  2. #
  3. # Copyright (c) 2003-2004 Samsung Advanced Institute of Technology and
  4. # The City University of New York. All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms, with or without
  7. # modification, are permitted provided that the following conditions
  8. # are met:
  9. # 1. Redistributions of source code must retain the above copyright
  10. #    notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. #    notice, this list of conditions and the following disclaimer in the
  13. #    documentation and/or other materials provided with the distribution.
  14. # 3. All advertising materials mentioning features or use of this software
  15. #    must display the following acknowledgement:
  16. #      This product includes software developed by the Joint Lab of Samsung 
  17. #      Advanced Institute of Technology and The City University of New York.
  18. # 4. Neither the name of Samsung Advanced Institute of Technology nor of 
  19. #    The City University of New York may be used to endorse or promote 
  20. #    products derived from this software without specific prior written 
  21. #    permission.
  22. #
  23. # THIS SOFTWARE IS PROVIDED BY THE JOINT LAB OF SAMSUNG ADVANCED INSTITUTE
  24. # OF TECHNOLOGY AND THE CITY UNIVERSITY OF NEW YORK ``AS IS'' AND ANY EXPRESS 
  25. # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  26. # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 
  27. # NO EVENT SHALL SAMSUNG ADVANCED INSTITUTE OR THE CITY UNIVERSITY OF NEW YORK 
  28. # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  29. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
  30. # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  31. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  32. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  33. # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. remove-all-packet-headers       ; # removes all except common
  35. add-packet-header Flags IP RTP TCP ARP LL Mac LRWPAN AODV ;
  36. # hdrs reqd for validation
  37. # FOR UPDATING GLOBAL DEFAULTS:
  38. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  39. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  40. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  41. Class TestSuite
  42. Class Test/wpan -superclass TestSuite
  43. proc usage {} {
  44. global argv0
  45. puts stderr "usage: ns $argv0 <test> "
  46. exit 1
  47. }
  48. proc default_values {} {
  49. global val
  50. set val(chan)           Channel/WirelessChannel    ;# channel type
  51. set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  52. set val(netif)          Phy/WirelessPhy/802_15_4
  53. set val(mac)            Mac/802_15_4
  54. set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  55. set val(ll)             LL                         ;# link layer type
  56. set val(ant)            Antenna/OmniAntenna        ;# antenna model
  57. set val(ifqlen)         50                         ;# max packet in ifq
  58. set val(nn)             21                         ;# number of mobilenodes
  59. set val(rp)             AODV                       ;# routing
  60. set val(x)              50
  61. set val(y)              50
  62. set val(tr)             temp.rands                 ;# trace file
  63. set val(traffic)        mix                        ;# traffic (mix/cbr/poisson/ftp)
  64. # For propagation model 'TwoRayGround'
  65. set dist(5m)  7.69113e-06
  66. set dist(9m)  2.37381e-06
  67. set dist(10m) 1.92278e-06
  68. set dist(11m) 1.58908e-06
  69. set dist(12m) 1.33527e-06
  70. set dist(13m) 1.13774e-06
  71. set dist(14m) 9.81011e-07
  72. set dist(15m) 8.54570e-07
  73. set dist(16m) 7.51087e-07
  74. set dist(20m) 4.80696e-07
  75. set dist(25m) 3.07645e-07
  76. set dist(30m) 2.13643e-07
  77. set dist(35m) 1.56962e-07
  78. set dist(40m) 1.20174e-07
  79. Phy/WirelessPhy set CSThresh_ $dist(12m)
  80. Phy/WirelessPhy set RXThresh_ $dist(12m)
  81. }
  82. TestSuite instproc topology {} {
  83. global node_
  84. $node_(0) set X_ 20.0 
  85. $node_(0) set Y_ 25.0 
  86. $node_(0) set Z_ 0.0 
  87. $node_(1) set X_ 10.0 
  88. $node_(1) set Y_ 25.0
  89. $node_(1) set Z_ 0.0 
  90. $node_(2) set X_ 10.0 
  91. $node_(2) set Y_ 15.0 
  92. $node_(2) set Z_ 0.0 
  93. $node_(3) set X_ 10.0 
  94. $node_(3) set Y_ 5.0 
  95. $node_(3) set Z_ 0.0 
  96. $node_(4) set X_ 0.0 
  97. $node_(4) set Y_ 15.0 
  98. $node_(4) set Z_ 0.0 
  99. $node_(5) set X_ 0.0 
  100. $node_(5) set Y_ 25.0 
  101. $node_(5) set Z_ 0.0 
  102. $node_(6) set X_ 0.0 
  103. $node_(6) set Y_ 35.0 
  104. $node_(6) set Z_ 0.0
  105.  
  106. $node_(7) set X_ 10.0 
  107. $node_(7) set Y_ 35.0 
  108. $node_(7) set Z_ 0.0 
  109. $node_(8) set X_ 10.0 
  110. $node_(8) set Y_ 45.0 
  111. $node_(8) set Z_ 0.0
  112.  
  113. $node_(9) set X_ 20.0
  114. $node_(9) set Y_ 35.0 
  115. $node_(9) set Z_ 0.0
  116.  
  117. $node_(10) set X_ 20.0 
  118. $node_(10) set Y_ 45.0 
  119. $node_(10) set Z_ 0.0 
  120. $node_(11) set X_ 30.0 
  121. $node_(11) set Y_ 35.0 
  122. $node_(11) set Z_ 0.0 
  123. $node_(12) set X_ 30.0 
  124. $node_(12) set Y_ 45.0 
  125. $node_(12) set Z_ 0.0 
  126. $node_(13) set X_ 30.0 
  127. $node_(13) set Y_ 25.0 
  128. $node_(13) set Z_ 0.0 
  129. $node_(14) set X_ 40.0 
  130. $node_(14) set Y_ 25.0 
  131. $node_(14) set Z_ 0.0 
  132. $node_(15) set X_ 40.0 
  133. $node_(15) set Y_ 35.0 
  134. $node_(15) set Z_ 0.0 
  135. $node_(16) set X_ 30.0 
  136. $node_(16) set Y_ 15.0 
  137. $node_(16) set Z_ 0.0 
  138. $node_(17) set X_ 40.0 
  139. $node_(17) set Y_ 15.0 
  140. $node_(17) set Z_ 0.0 
  141. $node_(18) set X_ 30.0 
  142. $node_(18) set Y_ 5.0 
  143. $node_(18) set Z_ 0.0 
  144. $node_(19) set X_ 20.0 
  145. $node_(19) set Y_ 15.0 
  146. $node_(19) set Z_ 0.0 
  147. $node_(20) set X_ 20.0 
  148. $node_(20) set Y_ 5.0 
  149. $node_(20) set Z_ 0.0
  150. }
  151. TestSuite instproc cbrtraffic { src dst interval starttime } {
  152. global node_
  153. $self instvar ns_
  154. set udp_($src) [new Agent/UDP]
  155. eval $ns_ attach-agent $node_($src) $udp_($src)
  156. set null_($dst) [new Agent/Null]
  157. eval $ns_ attach-agent $node_($dst) $null_($dst)
  158. set cbr_($src) [new Application/Traffic/CBR]
  159. eval $cbr_($src) set packetSize_ 80
  160. eval $cbr_($src) set interval_ $interval
  161. eval $cbr_($src) set random_ 0
  162. #eval $cbr_($src) set maxpkts_ 10000
  163. eval $cbr_($src) attach-agent $udp_($src)
  164. eval $ns_ connect $udp_($src) $null_($dst)
  165. $ns_ at $starttime "$cbr_($src) start"
  166. }
  167. TestSuite instproc poissontraffic { src dst interval starttime } {
  168. global node_
  169. $self instvar ns_
  170. set udp($src) [new Agent/UDP]
  171. eval $ns_ attach-agent $node_($src) $udp($src)
  172. set null($dst) [new Agent/Null]
  173. eval $ns_ attach-agent $node_($dst) $null($dst)
  174. set expl($src) [new Application/Traffic/Exponential]
  175. eval $expl($src) set packetSize_ 70
  176. eval $expl($src) set burst_time_ 0
  177. eval $expl($src) set idle_time_ [expr $interval*1000.0-70.0/100]ms ;# idle_time + pkt_tx_time = interval
  178. eval $expl($src) set rate_ 100k
  179. eval $expl($src) attach-agent $udp($src)
  180. eval $ns_ connect $udp($src) $null($dst)
  181. $ns_ at $starttime "$expl($src) start"
  182. }
  183. TestSuite instproc ftptraffic { src dst starttime } {
  184. global node_
  185. $self instvar ns_
  186. set tcp($src) [new Agent/TCP]
  187. eval $tcp($src) set packetSize_ 60
  188. set sink($dst) [new Agent/TCPSink]
  189. eval $ns_ attach-agent $node_($src) $tcp($src)
  190. eval $ns_ attach-agent $node_($dst) $sink($dst)
  191. eval $ns_ connect $tcp($src) $sink($dst)
  192. set ftp($src) [new Application/FTP]
  193. eval $ftp($src) attach-agent $tcp($src)
  194. $ns_ at $starttime "$ftp($src) start"
  195. }
  196. TestSuite instproc init {} {
  197. global val tracefd topo
  198. $self instvar ns_
  199. set ns_ [new Simulator]
  200. set tracefd     [open ./$val(tr) w]
  201. $ns_ trace-all $tracefd
  202. set topo       [new Topography]
  203. $topo load_flatgrid $val(x) $val(y)
  204. }
  205. TestSuite instproc finish {} {
  206. $self instvar ns_
  207. global tracefd
  208. $ns_ flush-trace
  209. close $tracefd
  210. exit 0
  211. }
  212. Test/wpan instproc init {} {
  213. global val node_ god_ chan topo
  214. $self instvar ns_ testName_
  215. set testName_ wpan
  216. $self next
  217. set god_ [create-god $val(nn)]
  218. set chan [new $val(chan)]
  219. # configure node
  220. $ns_ node-config -adhocRouting $val(rp) 
  221. -llType $val(ll) 
  222. -macType $val(mac) 
  223. -ifqType $val(ifq) 
  224. -ifqLen $val(ifqlen) 
  225. -antType $val(ant) 
  226. -propType $val(prop) 
  227. -phyType $val(netif) 
  228. -topoInstance $topo 
  229. -agentTrace OFF 
  230. -routerTrace OFF 
  231. -macTrace ON 
  232. -movementTrace OFF 
  233.                 #-energyModel "EnergyModel" 
  234.                 #-initialEnergy 1 
  235.                 #-rxPower 0.3 
  236.                 #-txPower 0.3 
  237. -channel $chan
  238. for {set i 0} {$i < $val(nn) } {incr i} {
  239. set node_($i) [$ns_ node]
  240. $node_($i) random-motion 0
  241. }
  242. $self topology
  243. # === actual test begins here =======================
  244. set appTime1          10.3
  245. set appTime2          10.6
  246. set stopTime            100
  247. # start PAN coordinator (beacon enabled):
  248. #  -- active channel scan and channel selection
  249. #  -- PAN coordinator startup
  250. #  -- beacon transmission
  251. $ns_ at 0.0 "$node_(0) sscs startPANCoord 1" ;# startPANCoord <txBeacon=1> <BO=3> <SO=3>
  252. # start non-beacon enabled coordinator:
  253. #  -- active channel scan
  254. #  -- channel selection and coordinator selection
  255. #  -- association
  256. #  -- beacon tracking and synchronization
  257. $ns_ at 0.3 "$node_(1) sscs startDevice 1 1"  ;# startDevice <isFFD=1> <assoPermit=1> <txBeacon=0> <BO=3> <SO=3>
  258. $ns_ at 1.3 "$node_(9) sscs startDevice 1 1"
  259. $ns_ at 1.7 "$node_(13) sscs startDevice 1 1"
  260. $ns_ at 2.3 "$node_(19) sscs startDevice 1 1"
  261. # start beacon enabled coordinator:
  262. #  -- active channel scan
  263. #  -- channel selection and coordinator selection
  264. #  -- association
  265. #  -- beacon tracking and synchronization
  266. #  -- beacon transmission
  267. $ns_ at 3.3 "$node_(2) sscs startDevice 1 1 1"
  268. $ns_ at 3.5 "$node_(7) sscs startDevice 1 1 1"
  269. $ns_ at 3.6 "$node_(11) sscs startDevice 1 1 1"
  270. $ns_ at 3.8 "$node_(16) sscs startDevice 1 1 1"
  271. # start RFD (leaf node)
  272. $ns_ at 4.3 "$node_(3) sscs startDevice 0 0"
  273. # start non-beacon enabled coordinator
  274. $ns_ at 4.5 "$node_(6) sscs startDevice 1 1"
  275. # start FFD not supporting association
  276. $ns_ at 4.8 "$node_(12) sscs startDevice 1 0"
  277. $ns_ at 5.1 "$node_(17) sscs startDevice 1 0"
  278. # start non-beacon enabled coordinator
  279. $ns_ at 5.6 "$node_(20) sscs startDevice 1 1"
  280. $ns_ at 5.8 "$node_(5) sscs startDevice 1 1"
  281. $ns_ at 6.0 "$node_(10) sscs startDevice 1 1"
  282. $ns_ at 6.3 "$node_(14) sscs startDevice 1 1"
  283. # start FFD not supporting association
  284. $ns_ at 6.8 "$node_(18) sscs startDevice 1 0"
  285. # start RFD (leaf node)
  286. $ns_ at 7.0 "$node_(4) sscs startDevice 0 0"
  287. $ns_ at 7.3 "$node_(8) sscs startDevice 0 0"
  288. $ns_ at 7.7 "$node_(15) sscs startDevice 0 0"
  289. # stop beacon transmission (become non-beacon enabled coordinator)
  290. $ns_ at $appTime1 "$node_(0) sscs stopBeacon"
  291. $ns_ at $appTime1 "$node_(16) sscs stopBeacon"
  292. # change beacon order and superframe order
  293. $ns_ at $appTime1 "$node_(2) sscs startBeacon 4 4"
  294. $ns_ at $appTime1 "$node_(7) sscs startBeacon 4 4"
  295. # setup cbr/poisson/mix traffic flows between nodes:
  296. #  -- LQD
  297. #  -- CCA, CSMA/CA and slotted CSMA/CA
  298. #  -- filtering
  299. if { ("$val(traffic)" == "mix") || ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
  300.    if { "$val(traffic)" == "mix" } {
  301.     set trafficName "cbr + poisson"
  302.     set traffic1 cbr
  303.     set traffic2 poisson
  304.    } else {
  305.     set trafficName $val(traffic)
  306.     set traffic1 $val(traffic)
  307.     set traffic2 $val(traffic)
  308.    }
  309.    $self ${traffic1}traffic 3 18 0.2 $appTime1
  310.    $self ${traffic2}traffic 9 17 0.2 $appTime2
  311. }
  312. # setup ftp traffic flows between nodes:
  313. #  -- LQD
  314. #  -- CCA, CSMA/CA and slotted CSMA/CA
  315. #  -- filtering
  316. if { "$val(traffic)" == "ftp" } {
  317.    $self ftptraffic 3 18 $appTime1
  318.    $self ftptraffic 9 17 $appTime2
  319. }
  320. # failure handling
  321. #  -- orphaning
  322. #  -- coordinator realignment
  323. #  -- reassociation
  324. $ns_ at [expr $appTime1 + 2.0] "Mac/802_15_4 wpanCmd link-down 0 19"
  325. $ns_ at [expr $appTime2 + 3.0] "$node_(2) node-down"
  326. $ns_ at [expr $appTime1 + 8.0] "Mac/802_15_4 wpanCmd link-up 0 19"
  327. $ns_ at [expr $appTime2 + 10.0] "$node_(2) node-up"
  328. # begin to use indrect data transmission
  329. $ns_ at [expr $appTime1 + 60.0] "Mac/802_15_4 wpanCmd txOption 4" ;# 0x02=GTS; 0x04=Indirect; 0x00=Direct (only for 802.15.4-unaware upper layer app. packet)
  330. # tell nodes when the simulation ends
  331. for {set i 0} {$i < $val(nn) } {incr i} {
  332.     $ns_ at $stopTime "$node_($i) reset";
  333. }
  334. $ns_ at $stopTime.1 "$self finish"
  335. }
  336. Test/wpan instproc run {} {
  337. $self instvar ns_
  338. $ns_ run
  339. }
  340. proc runtest {arg} {
  341. global quiet
  342. set quiet 0
  343. set b [llength $arg]
  344. if {$b == 1} {
  345. set test $arg
  346. } elseif {$b == 2} {
  347. set test [lindex $arg 0]
  348. if {[lindex $arg 1] == "QUIET"} {
  349. set quiet 1
  350. }
  351. } else {
  352. usage
  353. }
  354. set t [new Test/$test]
  355. $t run
  356. }
  357. global argv arg0
  358. default_values
  359. runtest $argv