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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1998,2000 University of Southern California.
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. # $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-wireless-tdma.tcl,v 1.6 2005/06/14 19:43:49 haldar Exp $
  17. # This test suite is for validating wireless TDMA mac layer protocol 
  18. # To run all tests: test-all-wireless-tdma
  19. # to run individual test:
  20. # ns test-suite-wireless-tdma.tcl dsdv
  21. # ns test-suite-wireless-tdma.tcl dsr
  22. #
  23. # To view a list of available test to run with this script:
  24. # ns test-suite-wireless-tdma.tcl
  25. Class TestSuite
  26. # wireless model using destination sequence distance vector
  27. Class Test/dsdv -superclass TestSuite
  28. # wireless model using dynamic source routing
  29. Class Test/dsr -superclass TestSuite
  30. proc usage {} {
  31. global argv0
  32. puts stderr "usage: ns $argv0 <tests> "
  33. puts "Valid Tests: dsdv dsr"
  34. exit 1
  35. }
  36. proc default_options {} {
  37. global opt
  38. set opt(chan) Channel/WirelessChannel
  39. set opt(prop) Propagation/TwoRayGround
  40. set opt(netif) Phy/WirelessPhy
  41. set opt(mac) Mac/Tdma
  42. set opt(ifq) Queue/DropTail/PriQueue
  43. set opt(ll) LL
  44. set opt(ant)    Antenna/OmniAntenna
  45. set opt(x) 670 ;# X dimension of the topography
  46. set opt(y) 670;# Y dimension of the topography
  47. set opt(ifqlen) 50       ;# max packet in ifq
  48. set opt(seed) 0.0
  49. set opt(tr) temp.rands    ;# trace file
  50. set opt(lm)     "off"          ;# log movement
  51. set opt(energy) EnergyModel
  52. }
  53. # =====================================================================
  54. # Other default settings
  55. set AgentTrace ON
  56. set RouterTrace OFF
  57. set MacTrace OFF
  58. #Mac/Tdma set slot_packet_len_ 512
  59. #Mac/Tdma set max_node_num_ 50
  60. LL set mindelay_ 50us
  61. LL set delay_ 25us
  62. LL set bandwidth_ 0 ;# not used
  63. Agent/Null set sport_ 0
  64. Agent/Null set dport_ 0
  65. Agent/CBR set sport_ 0
  66. Agent/CBR set dport_ 0
  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.28183815
  82. Phy/WirelessPhy set freq_ 914e+6 
  83. Phy/WirelessPhy set L_ 1.0
  84. # =====================================================================
  85. TestSuite instproc init {} {
  86. global opt tracefd topo chan prop 
  87. global node_ god_ 
  88. $self instvar ns_ testName_
  89. set ns_         [new Simulator]
  90. if {[string compare $testName_ "dsdv"] && 
  91. [string compare $testName_ "dsr"]} {
  92. $ns_ set-address-format hierarchical
  93. AddrParams set domain_num_ 3
  94. lappend cluster_num 2 1 1
  95. AddrParams set cluster_num_ $cluster_num
  96. lappend eilastlevel 1 1 4 1
  97. AddrParams set nodes_num_ $eilastlevel
  98.         } 
  99. #set chan [new $opt(chan)]
  100. #set prop [new $opt(prop)]
  101. set topo [new Topography]
  102. set tracefd [open $opt(tr) w]
  103. $topo load_flatgrid $opt(x) $opt(y)
  104. #$prop topography $topo
  105. $ns_ trace-all $tracefd
  106. #
  107. # Create God
  108. #
  109. $self create-god $opt(nn)
  110. #
  111. # log the mobile nodes movements if desired
  112. #
  113. if { $opt(lm) == "on" } {
  114. $self log-movement
  115. }
  116. puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y) rp:$opt(rp)"
  117. puts $tracefd "M 0.0 sc:$opt(sc) cp:$opt(cp) seed:$opt(seed)"
  118. puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  119. }
  120. Test/dsdv instproc init {} {
  121.     global opt topo node_ god_
  122.     $self instvar ns_ testName_
  123.     set testName_       dsdv
  124.     set opt(rp)         DSDV
  125.     set opt(cp) "../mobility/scene/cbr-50-20-4-512" 
  126.     set opt(sc) "../mobility/scene/scen-670x670-50-600-20-0" ;
  127.     set opt(nn) 50       
  128.     set opt(stop)       1000.0
  129.     
  130. $self next
  131. $ns_ node-config -adhocRouting $opt(rp) 
  132. -llType $opt(ll) 
  133. -macType $opt(mac) 
  134. -ifqType $opt(ifq) 
  135. -ifqLen $opt(ifqlen) 
  136. -antType $opt(ant) 
  137. -propType $opt(prop) 
  138. -phyType $opt(netif) 
  139. -channel [new $opt(chan)] 
  140. -topoInstance $topo 
  141. -energyModel $opt(energy) 
  142. -macTrace ON 
  143. -rxPower 0.3 
  144. -txPower 0.6 
  145. -initialEnergy 0.455
  146. for {set i 0} {$i < $opt(nn) } {incr i} {
  147. set node_($i) [$ns_ node]
  148. $node_($i) random-motion 0 ;# disable random motion
  149. }
  150. puts "Loading connection pattern..."
  151. source $opt(cp)
  152. puts "Loading scenario file..."
  153. source $opt(sc)
  154. puts "Load complete..."
  155. #
  156. # Tell all the nodes when the simulation ends
  157. #
  158. for {set i 0} {$i < $opt(nn) } {incr i} {
  159. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  160. }
  161. $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;" 
  162. $ns_ at $opt(stop).1 "$self finish"
  163. }
  164. Test/dsdv instproc run {} {
  165. $self instvar ns_
  166. puts "Starting Simulation..."
  167. $ns_ run
  168. }
  169. Test/dsr instproc init {} {
  170. global opt topo node_ god_
  171. $self instvar ns_ testName_
  172. set testName_       dsr
  173. set opt(rp)         DSR
  174. set opt(ifq)        CMUPriQueue
  175. set opt(cp)         "../mobility/scene/cbr-50-20-4-512"
  176. set opt(sc)         "../mobility/scene/scen-670x670-50-600-20-0" ;
  177. set opt(nn)         50
  178. set opt(stop)       1000.0
  179. $self next
  180. $ns_ node-config -adhocRouting $opt(rp) 
  181.     -llType $opt(ll) 
  182.     -macType $opt(mac) 
  183.     -ifqType $opt(ifq) 
  184.     -ifqLen $opt(ifqlen) 
  185.     -antType $opt(ant) 
  186.     -propType $opt(prop) 
  187.     -phyType $opt(netif) 
  188.     -channel [new $opt(chan)] 
  189.     -topoInstance $topo 
  190.     -energyModel $opt(energy) 
  191.     -macTrace ON 
  192.     -rxPower 0.3 
  193.     -txPower 0.6 
  194.     -initialEnergy 0.455
  195. for {set i 0} {$i < $opt(nn) } {incr i} {
  196. set node_($i) [$ns_ node]
  197. $node_($i) random-motion 0 ;# disable random motion
  198. }
  199. puts "Loading connection pattern..."
  200. source $opt(cp)
  201. puts "Loading scenario file..."
  202. source $opt(sc)
  203. puts "Load complete..."
  204. #
  205. # Tell all the nodes when the simulation ends
  206. #
  207. for {set i 0} {$i < $opt(nn) } {incr i} {
  208. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  209. }
  210. $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  211. $ns_ at $opt(stop).1 "$self finish"
  212. }
  213. TestSuite instproc finish-dsr {} {
  214. $self instvar ns_
  215. global quiet opt
  216. $ns_ flush-trace
  217.         
  218.         set tracefd [open $opt(tr) r]
  219.         set tracefd2    [open $opt(tr).w w]
  220.         while { [eof $tracefd] == 0 } {
  221.     set line [gets $tracefd]
  222.     set items [split $line " "]
  223.     set time [lindex $items 1]
  224.     
  225.     set times [split $time "."]
  226.     set time1 [lindex $times 0]
  227.     set time2 [lindex $times 1]
  228.     set newtime2 [string range $time2 0 3]
  229.     set time $time1.$newtime2
  230.     
  231.     set newline [lreplace $line 1 1 $time] 
  232.     puts $tracefd2 $newline
  233. }
  234. close $tracefd
  235. close $tracefd2
  236. exec mv $opt(tr).w $opt(tr)
  237. puts "finish.."
  238. exit 0
  239. }
  240. Test/dsr instproc run {} {
  241.     $self instvar ns_
  242.     puts "Starting Simulation..."
  243.     $ns_ run
  244. }
  245. proc cmu-trace { ttype atype node } {
  246. global ns tracefd
  247.     
  248.         set ns [Simulator instance]
  249. if { $tracefd == "" } {
  250. return ""
  251. }
  252. set T [new CMUTrace/$ttype $atype]
  253. $T target [$ns set nullAgent_]
  254. $T attach $tracefd
  255.         $T set src_ [$node id]
  256.         $T node $node
  257. return $T
  258. }
  259. TestSuite instproc finish {} {
  260. $self instvar ns_
  261. global quiet
  262. $ns_ flush-trace
  263.         #if { !$quiet } {
  264.         #        puts "running nam..."
  265.         #        exec nam temp.rands.nam &
  266.         #}
  267. #puts "finishing.."
  268. puts "finishing.."
  269. exit 0
  270. }
  271. TestSuite instproc create-god { nodes } {
  272. global tracefd god_
  273. $self instvar ns_
  274. set god_ [new God]
  275. $god_ num_nodes $nodes
  276. }
  277. TestSuite instproc log-movement {} {
  278. global ns
  279. $self instvar logtimer_ ns_
  280. set ns $ns_
  281. source ../mobility/timer.tcl
  282. Class LogTimer -superclass Timer
  283. LogTimer instproc timeout {} {
  284. global opt node_;
  285. for {set i 0} {$i < $opt(nn)} {incr i} {
  286. $node_($i) log-movement
  287. }
  288. $self sched 0.1
  289. }
  290. set logtimer_ [new LogTimer]
  291. $logtimer_ sched 0.1
  292. }
  293. proc runtest {arg} {
  294. global quiet
  295. set quiet 0
  296. set b [llength $arg]
  297. if {$b == 1} {
  298. set test $arg
  299. } elseif {$b == 2} {
  300. set test [lindex $arg 0]
  301. if {[lindex $arg 1] == "QUIET"} {
  302. set quiet 1
  303. }
  304. } else {
  305. usage
  306. }
  307. set t [new Test/$test]
  308. $t run
  309. }
  310. global argv arg0
  311. default_options
  312. runtest $argv