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

通讯编程

开发平台:

Visual C++

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