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

通讯编程

开发平台:

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. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/wireless-mitf.tcl,v 1.2 2000/08/30 00:10:45 haoboy Exp $
  33. #
  34. # Simple demo script for the new APIs to support multi-interface for 
  35. # wireless node.
  36. #
  37. # Define options
  38. # Please note: 
  39. # 1. you can still specify "channelType" in node-config right now:
  40. # set val(chan)           Channel/WirelessChannel
  41. # $ns_ node-config ...
  42. #  -channelType $val(chan)
  43. #                  ...
  44. # But we recommend you to use node-config in the way shown in this script
  45. # for your future simulations.  
  46. # 2. Because the ad-hoc routing agents do not support multiple interfaces
  47. #    currently, this script can't generate anything interesting if you config
  48. #    the interfaces of node 1 and 2 on different channels
  49. #   
  50. #     --Xuan Chen, USC/ISI, July 21, 2000
  51. #
  52. set val(chan)           Channel/WirelessChannel    ;#Channel Type
  53. set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  54. set val(netif)          Phy/WirelessPhy            ;# network interface type
  55. set val(mac)            Mac/802_11                 ;# MAC type
  56. set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  57. set val(ll)             LL                         ;# link layer type
  58. set val(ant)            Antenna/OmniAntenna        ;# antenna model
  59. set val(ifqlen)         50                         ;# max packet in ifq
  60. set val(nn)             2                          ;# number of mobilenodes
  61. set val(rp)             DSDV                       ;# routing protocol
  62. #set val(rp)             DSR                       ;# routing protocol
  63. set val(x) 500
  64. set val(y) 500
  65. # Initialize Global Variables
  66. set ns_ [new Simulator]
  67. set tracefd     [open wireless_mitf.tr w]
  68. $ns_ trace-all $tracefd
  69. set namtrace [open wireless_mitf.nam w]
  70. $ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
  71. # set up topography object
  72. set topo       [new Topography]
  73. $topo load_flatgrid $val(x) $val(y)
  74. # Create God
  75. create-god $val(nn)
  76. # New API to config node: 
  77. # 1. Create channel (or multiple-channels);
  78. # 2. Specify channel in node-config (instead of channelType);
  79. # 3. Create nodes for simulations.
  80. # Create channel #1 and #2
  81. set chan_1_ [new $val(chan)]
  82. set chan_2_ [new $val(chan)]
  83. # Create node(0) "attached" to channel #1
  84. # configure node, please note the change below.
  85. $ns_ node-config -adhocRouting $val(rp) 
  86. -llType $val(ll) 
  87. -macType $val(mac) 
  88. -ifqType $val(ifq) 
  89. -ifqLen $val(ifqlen) 
  90. -antType $val(ant) 
  91. -propType $val(prop) 
  92. -phyType $val(netif) 
  93. -topoInstance $topo 
  94. -agentTrace ON 
  95. -routerTrace ON 
  96. -macTrace ON 
  97. -movementTrace OFF 
  98. -channel $chan_1_ 
  99. set node_(0) [$ns_ node]
  100. # node_(1) can also be created with the same configuration, or with a different
  101. # channel specified.
  102. # Uncomment below two lines will create node_(1) with a different channel.
  103. #  $ns_ node-config 
  104. #  -channel $chan_2_ 
  105. set node_(1) [$ns_ node]
  106. $node_(0) random-motion 0
  107. $node_(1) random-motion 0
  108. for {set i 0} {$i < $val(nn)} {incr i} {
  109. $ns_ initial_node_pos $node_($i) 20
  110. }
  111. #
  112. # Provide initial (X,Y, for now Z=0) co-ordinates for mobilenodes
  113. #
  114. $node_(0) set X_ 5.0
  115. $node_(0) set Y_ 2.0
  116. $node_(0) set Z_ 0.0
  117. $node_(1) set X_ 8.0
  118. $node_(1) set Y_ 5.0
  119. $node_(1) set Z_ 0.0
  120. #
  121. # Now produce some simple node movements
  122. # Node_(1) starts to move towards node_(0)
  123. #
  124. $ns_ at 3.0 "$node_(1) setdest 50.0 40.0 25.0"
  125. $ns_ at 3.0 "$node_(0) setdest 48.0 38.0 5.0"
  126. # Node_(1) then starts to move away from node_(0)
  127. $ns_ at 20.0 "$node_(1) setdest 490.0 480.0 30.0" 
  128. # Setup traffic flow between nodes
  129. # TCP connections between node_(0) and node_(1)
  130. set tcp [new Agent/TCP]
  131. $tcp set class_ 2
  132. set sink [new Agent/TCPSink]
  133. $ns_ attach-agent $node_(0) $tcp
  134. $ns_ attach-agent $node_(1) $sink
  135. $ns_ connect $tcp $sink
  136. set ftp [new Application/FTP]
  137. $ftp attach-agent $tcp
  138. $ns_ at 3.0 "$ftp start" 
  139. #
  140. # Tell nodes when the simulation ends
  141. #
  142. for {set i 0} {$i < $val(nn) } {incr i} {
  143.     $ns_ at 30.0 "$node_($i) reset";
  144. }
  145. $ns_ at 30.0 "stop"
  146. $ns_ at 30.01 "puts "NS EXITING..." ; $ns_ halt"
  147. proc stop {} {
  148.     global ns_ tracefd
  149.     $ns_ flush-trace
  150.     close $tracefd
  151. }
  152. puts "Starting Simulation..."
  153. $ns_ run