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

通讯编程

开发平台:

Visual C++

  1. # Copyright (c) 1997 Regents of the University of California.
  2. # All rights reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. #    notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. #    notice, this list of conditions and the following disclaimer in the
  11. #    documentation and/or other materials provided with the distribution.
  12. # 3. All advertising materials mentioning features or use of this software
  13. #    must display the following acknowledgement:
  14. #      This product includes software developed by the Computer Systems
  15. #      Engineering Group at Lawrence Berkeley Laboratory.
  16. # 4. Neither the name of the University nor of the Laboratory may be used
  17. #    to endorse or promote products derived from this software without
  18. #    specific prior written permission.
  19. #
  20. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. # SUCH DAMAGE.
  31. #
  32. # Modified for new node structure
  33. # ======================================================================
  34. # Define options
  35. # ======================================================================
  36. set opt(chan) Channel/WirelessChannel
  37. set opt(prop) Propagation/TwoRayGround
  38. set opt(netif) Phy/WirelessPhy
  39. set opt(mac) Mac/802_11
  40. set opt(ifq) Queue/DropTail/PriQueue
  41. set opt(ll) LL
  42. set opt(ant)            Antenna/OmniAntenna
  43. set opt(x) 670 ;# X dimension of the topography
  44. set opt(y) 670 ;# Y dimension of the topography
  45. set opt(cp) "../mobility/scene/cbr-50-10-4-512"
  46. set opt(sc) "../mobility/scene/scen-670x670-50-600-20-0"
  47. set opt(ifqlen) 50 ;# max packet in ifq
  48. set opt(nn) 50 ;# number of nodes
  49. set opt(seed) 0.0
  50. set opt(stop) 1000.0 ;# simulation time
  51. set opt(tr) newdsdv.tr ;# trace file
  52. set opt(rp)             dsdv            ;# routing protocol script
  53. set opt(lm)             "off"           ;# log movement
  54. set opt(agent)          Agent/DSDV
  55. # ======================================================================
  56. # needs to be fixed later
  57. set AgentTrace ON
  58. set RouterTrace ON
  59. set MacTrace OFF
  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. Agent/TCPSink set sport_ 0
  68. Agent/TCPSink set dport_ 0
  69. Agent/TCP set sport_ 0
  70. Agent/TCP set dport_ 0
  71. Agent/TCP set packetSize_ 1460
  72. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  73. # unity gain, omni-directional antennas
  74. # set up the antennas to be centered in the node and 1.5 meters above it
  75. Antenna/OmniAntenna set X_ 0
  76. Antenna/OmniAntenna set Y_ 0
  77. Antenna/OmniAntenna set Z_ 1.5
  78. Antenna/OmniAntenna set Gt_ 1.0
  79. Antenna/OmniAntenna set Gr_ 1.0
  80. # Initialize the SharedMedia interface with parameters to make
  81. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  82. Phy/WirelessPhy set CPThresh_ 10.0
  83. Phy/WirelessPhy set CSThresh_ 1.559e-11
  84. Phy/WirelessPhy set RXThresh_ 3.652e-10
  85. Phy/WirelessPhy set Rb_ 2*1e6
  86. Phy/WirelessPhy set Pt_ 0.2818
  87. Phy/WirelessPhy set freq_ 914e+6 
  88. Phy/WirelessPhy set L_ 1.0
  89. # ======================================================================
  90. proc usage { argv0 }  {
  91. puts "Usage: $argv0"
  92. puts "tmandatory arguments:"
  93. puts "tt[-x MAXX] [-y MAXY]"
  94. puts "toptional arguments:"
  95. puts "tt[-cp conn pattern] [-sc scenario] [-nn nodes]"
  96. puts "tt[-seed seed] [-stop sec] [-tr tracefile]n"
  97. }
  98. proc getopt {argc argv} {
  99. global opt
  100. lappend optlist cp nn seed sc stop tr x y
  101. for {set i 0} {$i < $argc} {incr i} {
  102. set arg [lindex $argv $i]
  103. if {[string range $arg 0 0] != "-"} continue
  104. set name [string range $arg 1 end]
  105. set opt($name) [lindex $argv [expr $i+1]]
  106. }
  107. }
  108. # ======================================================================
  109. # Main Program
  110. # ======================================================================
  111. getopt $argc $argv
  112. #source ../lib/ns-bsnode.tcl
  113. source ../mobility/com.tcl
  114. # do the get opt again incase the routing protocol file added some more
  115. # options to look for
  116. getopt $argc $argv
  117. if { $opt(x) == 0 || $opt(y) == 0 } {
  118. usage $argv0
  119. exit 1
  120. }
  121. if {$opt(seed) > 0} {
  122. puts "Seeding Random number generator with $opt(seed)n"
  123. ns-random $opt(seed)
  124. }
  125. #
  126. # Initialize Global Variables
  127. #
  128. set ns_ [new Simulator]
  129. set chan [new $opt(chan)]
  130. set prop [new $opt(prop)]
  131. set topo [new Topography]
  132. # set trace for ns
  133. set tracefd [open $opt(tr) w]
  134. $ns_ trace-all $tracefd
  135. $topo load_flatgrid $opt(x) $opt(y)
  136. $prop topography $topo
  137. #
  138. # Create God
  139. #
  140. create-god $opt(nn)
  141. #
  142. #  Create the specified number of nodes $opt(nn) and "attach" them
  143. #  the channel.
  144. #
  145. if { [string compare $opt(rp) "dsr"] == 0} { 
  146. for {set i 0} {$i < $opt(nn) } {incr i} {
  147. dsr-create-mobile-node $i
  148. }
  149. } elseif { [string compare $opt(rp) "dsdv"] == 0} { 
  150. #global node setting
  151.         $ns_ node-config -routingAgent Agent/DSDV 
  152.  -llType $opt(ll) 
  153.  -macType $opt(mac) 
  154.  -ifqType $opt(ifq) 
  155.  -ifqlen $opt(ifqlen) 
  156.  -antType $opt(ant) 
  157.  -propType $opt(prop) 
  158.  -phyType $opt(netif) 
  159.  -AgentTrace ON 
  160.                          -RouterTrace ON 
  161.                          -MacTrace OFF 
  162.                          -MovementTrace OFF
  163.     
  164.  
  165. for {set i 0} {$i < $opt(nn) } {incr i} {
  166. set node_($i) [$ns_ node $chan]
  167. $node_($i) random-motion 0 ;# disable random motion
  168. $node_($i) topography $topo
  169. }
  170. }
  171. #
  172. # Source the Connection and Movement scripts
  173. #
  174. if { $opt(cp) == "" } {
  175. puts "*** NOTE: no connection pattern specified."
  176.         set opt(cp) "none"
  177. } else {
  178. puts "Loading connection pattern..."
  179. source $opt(cp)
  180. }
  181. #
  182. # Tell all the nodes when the simulation ends
  183. #
  184. for {set i 0} {$i < $opt(nn) } {incr i} {
  185.     $ns_ at $opt(stop).000000001 "$node_($i) reset";
  186. }
  187. $ns_ at $opt(stop).00000001 "puts "NS EXITING..." ; $ns_ halt"
  188. if { $opt(sc) == "" } {
  189. puts "*** NOTE: no scenario file specified."
  190.         set opt(sc) "none"
  191. } else {
  192. puts "Loading scenario file..."
  193. source $opt(sc)
  194. puts "Load complete..."
  195. }
  196. puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) rp $opt(rp)"
  197. puts $tracefd "M 0.0 sc $opt(sc) cp $opt(cp) seed $opt(seed)"
  198. puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"
  199. puts "Starting Simulation..."
  200. $ns_ run