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