sht.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. Mac/Simple set bandwidth_ 1Mb
  33. set MESSAGE_PORT 42
  34. set BROADCAST_ADDR -1
  35. #set val(chan)           Channel/WirelessChannel    ;#Channel Type
  36. set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  37. set val(netif)          Phy/WirelessPhy            ;# network interface type
  38. #set val(mac)            Mac/802_11                 ;# MAC type
  39. #set val(mac)            Mac                 ;# MAC type
  40. set val(mac) Mac/Simple
  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)         32768                         ;# max packet in ifq
  45. set val(rp) DumbAgent
  46. set ns [new Simulator]
  47. set f [open sht-temp.tr w]
  48. $ns trace-all $f
  49. $ns eventtrace-all
  50. set nf [open sht-temp.nam w]
  51. $ns namtrace-all-wireless $nf 700 200
  52. # set up topography object
  53. set topo       [new Topography]
  54. $topo load_flatgrid 700 200
  55. $ns color 3 green;
  56. $ns color 8 red;
  57. $ns color 1 black;
  58. $ns color 7 purple;
  59. #
  60. # Create God
  61. #
  62. create-god 3
  63. set mac0 [new Mac/Simple]
  64. $ns node-config -adhocRouting $val(rp) 
  65.                 -llType $val(ll) 
  66.                 -macType $val(mac) 
  67.                 -ifqType $val(ifq) 
  68.                 -ifqLen $val(ifqlen) 
  69.                 -antType $val(ant) 
  70.                 -propType $val(prop) 
  71.                 -phyType $val(netif) 
  72. -channelType Channel/WirelessChannel 
  73.                 -topoInstance $topo 
  74.                 -agentTrace OFF 
  75.                 -routerTrace OFF 
  76.                 -macTrace ON 
  77.                 -movementTrace OFF 
  78. for {set i 0} {$i < 3} {incr i} {
  79. set node_($i) [$ns node]
  80. $node_($i) random-motion 0
  81. }
  82. $node_(0) color black
  83. $node_(1) color black
  84. $node_(2) color black
  85. $node_(0) set X_ 200.0
  86. $node_(0) set Y_ 30.0
  87. $node_(0) set Z_ 0.0
  88. $node_(1) set X_ 330.0
  89. $node_(1) set Y_ 150.0
  90. $node_(1) set Z_ 0.0
  91. $node_(2) set X_ 60.0
  92. $node_(2) set Y_ 30.0
  93. $node_(2) set Z_ 0.0
  94. $ns at 0.25 "$node_(2) setdest 500.0 30.0 10000.0"
  95. # subclass Agent/MessagePassing to make it do flooding
  96. Class Agent/MessagePassing/Flooding -superclass Agent/MessagePassing
  97. Agent/MessagePassing/Flooding instproc recv {source sport size data} {
  98.     $self instvar messages_seen node_
  99.     global ns BROADCAST_ADDR 
  100.     # extract message ID from message
  101.     set message_id [lindex [split $data ":"] 0]
  102.     puts "nNode [$node_ node-addr] got message $message_idn"
  103.     if {[lsearch $messages_seen $message_id] == -1} {
  104. lappend messages_seen $message_id
  105.         $ns trace-annotate "[$node_ node-addr] received {$data} from $source"
  106.         $ns trace-annotate "[$node_ node-addr] sending message $message_id"
  107. $self sendto $size $data $BROADCAST_ADDR $sport
  108.     } else {
  109.         $ns trace-annotate "[$node_ node-addr] received redundant message $message_id from $source"
  110.     }
  111. }
  112. Agent/MessagePassing/Flooding instproc send_message {size message_id data port} {
  113.     $self instvar messages_seen node_
  114.     global ns MESSAGE_PORT BROADCAST_ADDR
  115.     lappend messages_seen $message_id
  116.     $ns trace-annotate "[$node_ node-addr] sending message $message_id"
  117.     $self sendto $size "$message_id:$data" $BROADCAST_ADDR $port
  118. }
  119. # attach a new Agent/MessagePassing/Flooding to each node on port $MESSAGE_PORT
  120. for {set i 0} {$i < 3} {incr i} {
  121.     set a($i) [new Agent/MessagePassing/Flooding]
  122.     $node_($i) attach  $a($i) $MESSAGE_PORT
  123.     $a($i) set messages_seen {}
  124. }
  125. $ns at 0.1 "$a(0) send_message 500 1 {first_message} $MESSAGE_PORT"
  126. $ns at 0.101 "$a(2) send_message 500 2 {second_message} $MESSAGE_PORT"
  127. $ns at 0.2 "$a(0) send_message 500 11 {eleventh_message} $MESSAGE_PORT"
  128. $ns at 0.2 "$a(2) send_message 500 12 {twelfth_message} $MESSAGE_PORT"
  129. $ns at 0.35 "$a(0) send_message 500 3 {third_message} $MESSAGE_PORT"
  130. $ns at 0.351 "$a(2) send_message 500 4 {fourth_message} $MESSAGE_PORT"
  131. $ns at 0.45 "$a(0) send_message 500 13 {thirteenth_message} $MESSAGE_PORT"
  132. $ns at 0.45 "$a(2) send_message 500 14 {fourteenth_message} $MESSAGE_PORT"
  133. for {set i 0} {$i < 3} {incr i} {
  134. $ns initial_node_pos $node_($i) 30
  135. $ns at 4.0 "$node_($i) reset";
  136. }
  137. $ns at 4.0 "finish"
  138. $ns at 4.1 "puts "NS EXITING..."; $ns halt"
  139. #INSERT ANNOTATIONS HERE
  140. proc finish {} {
  141.         global ns f nf val
  142.         $ns flush-trace
  143.         close $f
  144.         close $nf
  145. }
  146. puts "Starting Simulation..."
  147. $ns run