diffusion-prob-run.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:8k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # XXXXXXXX NOTE: This is an example of the older version of diffusion. For example scripts of the newer version, see tcl/ex/diffusion3. And see ~ns/diffusion3 for the implementation.
  2. # ======================================================================
  3. # Define options
  4. # ======================================================================
  5. set opt(chan) Channel/WirelessChannel
  6. set opt(prop) Propagation/TwoRayGround
  7. set opt(netif) Phy/WirelessPhy
  8. set opt(mac) Mac/802_11
  9. set opt(ifq) Queue/DropTail/PriQueue
  10. set opt(ll) LL
  11. set opt(ant)            Antenna/OmniAntenna
  12. set opt(god)            off
  13. set opt(x) 800 ;# X dimension of the topography
  14. set opt(y) 800     ;# Y dimension of the topography
  15. set opt(traf) "../test/sk-30-1-1-1-1-6-64.tcl"      ;# traffic file
  16. set opt(topo) "../test/scen-800x800-30-500-1.0-1"      ;# topology file
  17. set opt(onoff)          ""      ;#node on-off
  18. set opt(ifqlen) 50 ;# max packet in ifq
  19. set opt(nn) 30 ;# number of nodes
  20. set opt(seed) 0.0
  21. set opt(stop) 20 ;# simulation time
  22. set opt(prestop)        19       ;# time to prepare to stop
  23. set opt(tr) "wireless.tr" ;# trace file
  24. set opt(nam)            "wireless.nam"  ;# nam file
  25. set opt(engmodel)       EnergyModel     ;
  26. set opt(txPower)        0.660;
  27. set opt(rxPower)        0.395;
  28. set opt(idlePower)      0.035;
  29. set opt(initeng)        10000.0         ;# Initial energy in Joules
  30. set opt(logeng)         "off"           ;# log energy every 1 seconds
  31. set opt(lm)             "off"           ;# log movement
  32. set opt(adhocRouting)   DIFFUSION/PROB       
  33. set opt(enablePos)      "true";
  34. set opt(enableNeg)      "true";
  35. set opt(duplicate)      "disable-duplicate"
  36. set opt(suppression)    "false"
  37. # ======================================================================
  38. LL set mindelay_ 50us
  39. LL set delay_ 25us
  40. LL set bandwidth_ 0 ;# not used
  41. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  42. # unity gain, omni-directional antennas
  43. # set up the antennas to be centered in the node and 1.5 meters above it
  44. Antenna/OmniAntenna set X_ 0
  45. Antenna/OmniAntenna set Y_ 0
  46. Antenna/OmniAntenna set Z_ 1.5
  47. Antenna/OmniAntenna set Gt_ 1.0
  48. Antenna/OmniAntenna set Gr_ 1.0
  49. # Initialize the SharedMedia interface with parameters to make
  50. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  51. Phy/WirelessPhy set CPThresh_ 10.0
  52. Phy/WirelessPhy set CSThresh_ 1.559e-11
  53. Phy/WirelessPhy set RXThresh_ 3.652e-10
  54. Phy/WirelessPhy set Rb_ 2*1e6
  55. Phy/WirelessPhy set Pt_ 0.2818
  56. Phy/WirelessPhy set freq_ 914e+6 
  57. Phy/WirelessPhy set L_ 1.0
  58. # ======================================================================
  59. proc usage { argv0 }  {
  60.     puts "Usage: $argv0"
  61.     puts "tt[-topo topology file] [-traf traffic file]"
  62.     puts "tt[-x max x] [-y max y] [-seed seed]"
  63.     puts "tt[-nam nam file] [-tr trace file] [-logeng on or off]"
  64.     puts "tt[-stop time to stop] [-prestop time to prepare to stop]"
  65.     puts "tt[-initeng initial energy] [-engmodel energy model]" 
  66.     puts "tt[-chan channel model] [-prop propagation model]"
  67.     puts "tt[-netif network interface] [-mac mac layer]"
  68.     puts "tt[-ifq interface queue] [-ll link layer] [-ant antena]"
  69.     puts "tt[-ifqlen interface queue length] [-nn number of nodes]"
  70. }
  71. proc getopt {argc argv} {
  72. global opt
  73. lappend optlist cp nn seed sc stop tr x y
  74. for {set i 0} {$i < $argc} {incr i} {
  75. set arg [lindex $argv $i]
  76. if {[string range $arg 0 0] != "-"} continue
  77. set name [string range $arg 1 end]
  78. set opt($name) [lindex $argv [expr $i+1]]
  79. }
  80. }
  81. proc finish {} {
  82.     global ns_ nf opt god_ node_
  83.     $ns_ terminate-all-agents 
  84. #    $god_ dump
  85.     $god_ dump_num_send
  86.     $ns_ flush-trace
  87.     if [info exists tracefd] {
  88. close $tracefd
  89. # exec rm -f $opt(tr)
  90.     }
  91.     if [info exists nf] {
  92.         close $nf
  93. # exec rm -f $opt(nam)
  94. #        exec nam $opt(nam) &
  95. # exec gzip $opt(nam)
  96.     }
  97.     exit 0
  98. }
  99. proc cmu-trace { ttype atype node } {
  100. global ns_ tracefd
  101. if { $tracefd == "" } {
  102. return ""
  103. }
  104. set T [new CMUTrace/$ttype $atype]
  105. $T target [$ns_ set nullAgent_]
  106. $T attach $tracefd
  107.         $T set src_ [$node id]
  108.         $T node $node
  109. return $T
  110. }
  111. # ======================================================================
  112. # Main Program
  113. # ======================================================================
  114. getopt $argc $argv
  115. # do the get opt again incase the routing protocol file added some more
  116. # options to look for
  117. getopt $argc $argv
  118. if {$opt(seed) > 0} {
  119. puts "Seeding Random number generator with $opt(seed)n"
  120. ns-random $opt(seed)
  121. }
  122. #
  123. # Initialize Global Variables
  124. #
  125. set ns_ [new Simulator] 
  126. # define color index
  127.   
  128. $ns_ color 0 red
  129. $ns_ color 1 blue
  130. $ns_ color 2 chocolate
  131. $ns_ color 3 yellow
  132. $ns_ color 4 green
  133. $ns_ color 5 tan
  134. $ns_ color 6 gold
  135. $ns_ color 7 black
  136. #set chan [new $opt(chan)]
  137. #set prop [new $opt(prop)]
  138. set topo [new Topography]
  139. if { $opt(nam) != "" } {
  140.     set nf [open $opt(nam) w]
  141.     $ns_ namtrace-all-wireless $nf $opt(x) $opt(y)
  142. }
  143. if { $opt(tr) != ""} {
  144.     set tracefd [open $opt(tr) w]
  145.     $ns_ trace-all $tracefd
  146. }
  147. $topo load_flatgrid $opt(x) $opt(y)
  148. #$prop topography $topo
  149. # Create God
  150. set god_ [create-god $opt(nn)]
  151. #$god_ on
  152. $god_ $opt(god)
  153. $god_ allow_to_stop
  154. $god_ num_data_types 1
  155. # log the mobile nodes movements if desired
  156. if { $opt(lm) == "on" } {
  157.     log-movement
  158. }
  159. #
  160. # Create Diffusion Mobile Nodes
  161. #
  162. #
  163. #for {set i 0} {$i < $opt(nn) } {incr i} {
  164. #    diffusion-create-mobile-node $i
  165. #}
  166. #global node setting
  167. $ns_ node-config -adhocRouting $opt(adhocRouting) 
  168.  -llType $opt(ll) 
  169.  -macType $opt(mac) 
  170.  -ifqType $opt(ifq) 
  171.  -ifqLen $opt(ifqlen) 
  172.  -antType $opt(ant) 
  173.  -propType $opt(prop) 
  174.  -phyType $opt(netif) 
  175.  -channelType $opt(chan) 
  176.  -topoInstance $topo 
  177.  -agentTrace ON 
  178.                  -routerTrace ON 
  179.                  -macTrace ON 
  180.  -energyModel $opt(engmodel) 
  181.  -initialEnergy $opt(initeng) 
  182.  -txPower  $opt(txPower) 
  183.  -rxPower  $opt(rxPower) 
  184.  -idlePower  $opt(idlePower)
  185.                   
  186. #  Create the specified number of nodes [$opt(nn)] and "attach" them
  187. #  to the channel. 
  188. for {set i 0} {$i < $opt(nn) } {incr i} {
  189. set node_($i) [$ns_ node $i]
  190.         $node_($i) color black
  191. $node_($i) random-motion 0 ;# disable random motion
  192.         $god_ new_node $node_($i)
  193. }
  194. if { $opt(topo) == "" } {
  195. puts "*** NOTE: no topology file specified."
  196.         set opt(topo) "none"
  197. } else {
  198. puts "Loading topology file..."
  199. source $opt(topo)
  200. puts "Load complete..."
  201. }
  202. for {set i 0} {$i < $opt(nn)} {incr i} {
  203.     $node_($i) namattach $nf
  204. # 20 defines the node size in nam, must adjust it according to your scenario
  205.    $ns_ initial_node_pos $node_($i) 20
  206. }
  207. if { $opt(onoff) == "" } {
  208. puts "*** NOTE: no node-on-off file specified."
  209.         set opt(onoff) "none"
  210. } else {
  211. puts "Loading node on-off file..."
  212. source $opt(onoff)
  213. puts "Load complete..."
  214. }
  215. #
  216. # log energy if desired
  217. #
  218. if { $opt(logeng) == "on" } {
  219.     log-energy
  220. }
  221. #
  222. # Source the traffic scripts
  223. #
  224. if { $opt(traf) == "" } {
  225. puts "*** NOTE: no traffic file specified."
  226.         set opt(traf) "none"
  227. } else {
  228. puts "Loading traffic file..."
  229. source $opt(traf)
  230. }
  231. #
  232. # Tell all the nodes when the simulation ends
  233. #
  234. $ns_ at $opt(prestop) "$ns_ prepare-to-stop"
  235. $ns_ at $opt(stop).00000001    "finish"
  236. for {set i 0} {$i < $opt(nn) } {incr i} {
  237.     $ns_ at $opt(stop).00000002 "$node_($i) reset";
  238. }
  239. # tell nam the simulation stop time
  240. $ns_ at  $opt(stop).00000003 "$ns_ nam-end-wireless $opt(stop)"
  241. $ns_ at $opt(stop).00000004 "puts "NS EXITING..." ; $ns_ halt"
  242. puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y)"
  243. puts $tracefd "M 0.0 topo $opt(topo) traf $opt(traf) seed $opt(seed)"
  244. puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"
  245. puts "Starting Simulation..."
  246. $ns_ run