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

通讯编程

开发平台:

Visual C++

  1. #
  2. Agent/TCP set tcpTick_ 0.1
  3. # The default for tcpTick_ is being changed to reflect a changing reality.
  4. Agent/TCP set rfc2988_ false
  5. # The default for rfc2988_ is being changed to true.
  6. # FOR UPDATING GLOBAL DEFAULTS:
  7. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  8. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  9. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  10. Agent/TCP set minrto_ 1
  11. # default changed on 10/14/2004.
  12. Agent/TCP set windowInit_ 1
  13. # The default is being changed to 2.
  14. Agent/TCP set singledup_ 0
  15. Mac/802_11 set bugFix_timer_ false;     # default changed 2006/1/30
  16. # The default is being changed to 1
  17. # Copyright (c) 1998 University of Southern California.
  18. # All rights reserved.                                            
  19. #                                                                
  20. # Redistribution and use in source and binary forms are permitted
  21. # provided that the above copyright notice and this paragraph are
  22. # duplicated in all such forms and that any documentation, advertising
  23. # materials, and other materials related to such distribution and use
  24. # acknowledge that the software was developed by the University of
  25. # Southern California, Information Sciences Institute.  The name of the
  26. # University may not be used to endorse or promote products derived from
  27. # this software without specific prior written permission.
  28. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  29. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  30. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  31. # This test suite is for validating wireless lans (CMU extension)
  32. # with gridkeeper 
  33. # To run all tests: test-all-wireless-gridkeeper
  34. #
  35. # To view a list of available test to run with this script:
  36. # ns test-suite-wireless-gridkeeper.tcl
  37. #
  38. #
  39. Class TestSuite
  40. Class Test/dsdv -superclass TestSuite
  41. # wireless model using destination sequence distance vector
  42. #Class Test/dsr -superclass TestSuite
  43. # wireless model using dynamic source routing
  44. proc usage {} {
  45. global argv0
  46. puts stderr "usage: ns $argv0 <tests> "
  47. puts "Valid Tests: dsdv dsr"
  48. exit 1
  49. }
  50. proc default_options {} {
  51. global opt
  52. set opt(chan) Channel/WirelessChannel
  53. set opt(prop) Propagation/TwoRayGround
  54. set opt(netif) Phy/WirelessPhy
  55. set opt(mac) Mac/802_11
  56.         set opt(ifq) Queue/DropTail/PriQueue
  57. set opt(ll) LL
  58. set opt(ant)            Antenna/OmniAntenna
  59. set opt(x) 670 ;# X dimension of the topography
  60. set opt(y) 670;# Y dimension of the topography
  61. set opt(cp) "../mobility/scene/cbr-50-20-4-512" ;# connection pattern file
  62. set opt(sc) "../mobility/scene/scen-670x670-50-600-20-0" ;# scenario file
  63. set opt(ifqlen) 50       ;# max packet in ifq
  64. set opt(nn) 50       ;# number of nodes
  65. set opt(seed) 0.0
  66. set opt(stop) 500.0       ;# simulation time
  67. set opt(tr) temp.rands    ;# trace file
  68. set opt(lm)             "off"          ;# log movement
  69.         set opt(radius)         150            ;# node comm. range
  70.         set opt(nam)            gkeeper.nam    ;# nam trace for node position
  71. }
  72. # =====================================================================
  73. # Other default settings
  74. set AgentTrace ON
  75. set RouterTrace OFF
  76. set MacTrace OFF
  77. LL set mindelay_ 50us
  78. LL set delay_ 25us
  79. LL set bandwidth_ 0 ;# not used
  80. Agent/Null set sport_ 0
  81. Agent/Null set dport_ 0
  82. Agent/CBR set sport_ 0
  83. Agent/CBR set dport_ 0
  84. Agent/TCPSink set sport_ 0
  85. Agent/TCPSink set dport_ 0
  86. Agent/TCP set sport_ 0
  87. Agent/TCP set dport_ 0
  88. Agent/TCP set packetSize_ 1460
  89. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  90. # unity gain, omni-directional antennas
  91. # set up the antennas to be centered in the node and 1.5 meters above it
  92. Antenna/OmniAntenna set X_ 0
  93. Antenna/OmniAntenna set Y_ 0
  94. Antenna/OmniAntenna set Z_ 1.5
  95. Antenna/OmniAntenna set Gt_ 1.0
  96. Antenna/OmniAntenna set Gr_ 1.0
  97. # Initialize the SharedMedia interface with parameters to make
  98. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  99. Phy/WirelessPhy set CPThresh_ 10.0
  100. Phy/WirelessPhy set CSThresh_ 1.559e-11
  101. Phy/WirelessPhy set RXThresh_ 3.652e-10
  102. Phy/WirelessPhy set Rb_ 2*1e6
  103. Phy/WirelessPhy set Pt_ 0.2818
  104. Phy/WirelessPhy set freq_ 914e+6 
  105. Phy/WirelessPhy set L_ 1.0
  106. # =====================================================================
  107. TestSuite instproc init {} {
  108. global opt tracefd topo chan prop 
  109. global node_ god_ gkeeper
  110. $self instvar ns_ testName_
  111. set ns_         [new Simulator]
  112. set chan [new $opt(chan)]
  113. set prop [new $opt(prop)]
  114. set topo [new Topography]
  115. set tracefd [open $opt(tr) w]
  116. set opt(rp) $testName_
  117. $topo load_flatgrid $opt(x) $opt(y)
  118. $prop topography $topo
  119. #
  120. # Create God
  121. #
  122. $self create-god $opt(nn)
  123. #
  124. # log the mobile nodes movements if desired
  125. #
  126. if { $opt(lm) == "on" } {
  127. $self log-movement
  128. }
  129. source ../mobility/$testName_.tcl
  130. for {set i 0} {$i < $opt(nn) } {incr i} {
  131. $testName_-create-mobile-node $i
  132. }
  133. puts "Loading connection pattern..."
  134. source $opt(cp)
  135. #
  136. # Tell all the nodes when the simulation ends
  137. #
  138. for {set i 0} {$i < $opt(nn) } {incr i} {
  139. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  140. }
  141. $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;" 
  142. #$ns_ halt"
  143. $ns_ at $opt(stop).1 "$self finish"
  144. puts "Loading scenario file..."
  145. source $opt(sc)
  146. puts "Load complete..."
  147.         #enable node trace in nam
  148.         
  149. set nf [open $opt(nam) w]
  150. $ns_ namtrace-all-wireless $nf $opt(x) $opt(y)
  151.         for {set i 0} {$i < $opt(nn)} {incr i} {
  152.              $node_($i) namattach $nf
  153.              # 20 defines the node size in nam, 
  154.      # must adjust it according to your scenario
  155.              $ns_ initial_node_pos $node_($i) 20
  156.         }
  157.  
  158. #       
  159. # Create GridKeeper: OPTIONAL
  160. #
  161. $self create_gridkeeper
  162. puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y) rp:$opt(rp)"
  163. puts $tracefd "M 0.0 sc:$opt(sc) cp:$opt(cp) seed:$opt(seed)"
  164. puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  165. }
  166. TestSuite instproc finish {} {
  167. $self instvar ns_
  168. global quiet
  169. $ns_ flush-trace
  170.         #if { !$quiet } {
  171.         #        puts "running nam..."
  172.         #        exec nam temp.rands.nam &
  173.         #}
  174. puts "finishing.."
  175. exit 0
  176. }
  177. Test/dsdv instproc init {} {
  178.     $self instvar ns_ testName_
  179.     set testName_ dsdv
  180.     $self next
  181. }
  182. Test/dsdv instproc run {} {
  183.     $self instvar ns_
  184.     puts "Starting Simulation..."
  185.     $ns_ run
  186. }
  187. #Test/dsr instproc init {} {
  188. #$self instvar ns_ testName_ 
  189. #set testName_ dsr
  190. #$self next 
  191. #}
  192. #Test/dsr instproc run {} {
  193. #$self instvar ns_ 
  194. #puts "Starting Simulation..."
  195. #$ns_ run
  196. #}
  197. proc cmu-trace { ttype atype node } {
  198. global ns tracefd
  199.     
  200.         set ns [Simulator instance]
  201. if { $tracefd == "" } {
  202. return ""
  203. }
  204. set T [new CMUTrace/$ttype $atype]
  205. $T target [$ns set nullAgent_]
  206. $T attach $tracefd
  207.         $T set src_ [$node id]
  208.         $T node $node
  209. return $T
  210. }
  211. TestSuite instproc create-god { nodes } {
  212. global tracefd god_
  213. $self instvar ns_
  214. set god_ [new God]
  215. $god_ num_nodes $nodes
  216. }
  217. TestSuite instproc create_gridkeeper { } {
  218.         global gkeeper opt node_
  219.                 
  220.         set gkeeper [new GridKeeper]
  221.         
  222.         #initialize the gridkeeper
  223.                 
  224.         $gkeeper dimension $opt(x) $opt(y)
  225.  
  226.         #
  227.         # add mobile node into the gridkeeper, must be added after
  228.         # scenario file
  229.         #       
  230.         for {set i 0} {$i < $opt(nn) } {incr i} {
  231.     $gkeeper addnode $node_($i)
  232.         
  233.     $node_($i) radius $opt(radius)
  234.         }       
  235.         
  236. #dump grid info
  237. #$gkeeper dump
  238. }
  239. TestSuite instproc log-movement {} {
  240. global ns
  241. $self instvar logtimer_ ns_
  242. set ns $ns_
  243. source ../mobility/timer.tcl
  244. Class LogTimer -superclass Timer
  245. LogTimer instproc timeout {} {
  246. global opt node_;
  247. for {set i 0} {$i < $opt(nn)} {incr i} {
  248. $node_($i) log-movement
  249. }
  250. $self sched 0.1
  251. }
  252. set logtimer_ [new LogTimer]
  253. $logtimer_ sched 0.1
  254. }
  255. proc runtest {arg} {
  256. global quiet
  257. set quiet 0
  258. set b [llength $arg]
  259. if {$b == 1} {
  260. set test $arg
  261. } elseif {$b == 2} {
  262. set test [lindex $arg 0]
  263. if {[lindex $arg 1] == "QUIET"} {
  264. set quiet 1
  265. }
  266. } else {
  267. usage
  268. }
  269. set t [new Test/$test]
  270. $t run
  271. }
  272. global argv arg0
  273. default_options
  274. runtest $argv