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

通讯编程

开发平台:

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. # simple-wireless.tcl
  33. # A simple example for wireless simulation
  34. # ======================================================================
  35. # Define options
  36. # ======================================================================
  37. set val(chan)           Channel/WirelessChannel    ;# channel type
  38. set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  39. set val(netif)          Phy/WirelessPhy            ;# network interface type
  40. set val(mac)            Mac/802_11                 ;# MAC type
  41. set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  42. set val(ll)             LL                         ;# link layer type
  43. set val(ant)            Antenna/OmniAntenna        ;# antenna model
  44. set val(ifqlen)         50                         ;# max packet in ifq
  45. set val(nn)             2                          ;# number of mobilenodes
  46. set val(rp)             DSDV                       ;# routing protocol
  47. # ======================================================================
  48. # Main Program
  49. # ======================================================================
  50. #
  51. # Initialize Global Variables
  52. #
  53. set ns_ [new Simulator]
  54. set tracefd     [open simple.tr w]
  55. $ns_ trace-all $tracefd
  56. # set up topography object
  57. set topo       [new Topography]
  58. $topo load_flatgrid 500 500
  59. #
  60. # Create God
  61. #
  62. create-god $val(nn)
  63. #
  64. #  Create the specified number of mobilenodes [$val(nn)] and "attach" them
  65. #  to the channel. 
  66. #  Here two nodes are created : node(0) and node(1)
  67. # configure node
  68.         $ns_ node-config -adhocRouting $val(rp) 
  69.  -llType $val(ll) 
  70.  -macType $val(mac) 
  71.  -ifqType $val(ifq) 
  72.  -ifqLen $val(ifqlen) 
  73.  -antType $val(ant) 
  74.  -propType $val(prop) 
  75.  -phyType $val(netif) 
  76.  -channelType $val(chan) 
  77.  -topoInstance $topo 
  78.  -agentTrace ON 
  79.  -routerTrace ON 
  80.  -macTrace OFF 
  81.  -movementTrace OFF
  82.  
  83. for {set i 0} {$i < $val(nn) } {incr i} {
  84. set node_($i) [$ns_ node]
  85. $node_($i) random-motion 0 ;# disable random motion
  86. }
  87. #
  88. # Provide initial (X,Y, for now Z=0) co-ordinates for mobilenodes
  89. #
  90. $node_(0) set X_ 5.0
  91. $node_(0) set Y_ 2.0
  92. $node_(0) set Z_ 0.0
  93. $node_(1) set X_ 390.0
  94. $node_(1) set Y_ 385.0
  95. $node_(1) set Z_ 0.0
  96. #
  97. # Now produce some simple node movements
  98. # Node_(1) starts to move towards node_(0)
  99. #
  100. $ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"
  101. $ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"
  102. # Node_(1) then starts to move away from node_(0)
  103. $ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0" 
  104. # Setup traffic flow between nodes
  105. # TCP connections between node_(0) and node_(1)
  106. set tcp [new Agent/TCP]
  107. $tcp set class_ 2
  108. set sink [new Agent/TCPSink]
  109. $ns_ attach-agent $node_(0) $tcp
  110. $ns_ attach-agent $node_(1) $sink
  111. $ns_ connect $tcp $sink
  112. set ftp [new Application/FTP]
  113. $ftp attach-agent $tcp
  114. $ns_ at 10.0 "$ftp start" 
  115. #
  116. # Tell nodes when the simulation ends
  117. #
  118. for {set i 0} {$i < $val(nn) } {incr i} {
  119.     $ns_ at 150.0 "$node_($i) reset";
  120. }
  121. $ns_ at 150.0 "stop"
  122. $ns_ at 150.01 "puts "NS EXITING..." ; $ns_ halt"
  123. proc stop {} {
  124.     global ns_ tracefd
  125.     $ns_ flush-trace
  126.     close $tracefd
  127. }
  128. puts "Starting Simulation..."
  129. $ns_ run