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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1996-1998 Regents of the University of California.
  3. # All rights reserved.
  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 MASH Research
  15. #  Group at the University of California Berkeley.
  16. # 4. Neither the name of the University nor of the Research Group may be
  17. #    used to endorse or promote products derived from this software
  18. # without
  19. #    specific prior written permission.
  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/mobility/com.tcl,v 1.9 2003/02/19 22:22:28 haldar Exp $
  33. #
  34. # These procedures are all obsolete and has been replaced by the newer node 
  35. # configuration. See test-suite-WL-tutorial.tcl for details.
  36. proc create-base-station-node {address } {
  37.     
  38.     puts "Method create-base-station-node is now obsolete. Use methods in ~ns/tcl/test/test-suite-WLtutorial.tcl to create base-station nodesnn"
  39.     exit 0
  40.     # global topo tracefd opt node node_ ns_
  41. #     set ns_ [Simulator instance]
  42. #     if [Simulator set mobile_ip_] {
  43. #  Simulator set node_factory_ MobileNode/MIPBS
  44. #     } else {
  45. #  Simulator set node_factory_ Node/MobileNode/BaseStationNode
  46. #     }
  47. #     set node [$ns_ node $address]
  48. #     set id [$node id]
  49. #     $node random-motion 0 ;# disable random motion
  50. #     $node topography $topo
  51. #     #
  52. #     # This Trace Target is used to log changes in direction
  53. #     # and velocity for the mobile node.
  54. #     #
  55. #     set T [new Trace/Generic]
  56. #     $T target [$ns_ set nullAgent_]
  57. #     $T attach $tracefd
  58. #     $T set src_ $id
  59. #     $node log-target $T
  60. #     $node base-station [AddrParams addr2id [$node node-addr]]
  61.     
  62. #     create-$opt(rp)-bs-node $node $id
  63.     
  64. #     Simulator set node_factory_ Node    ;# default value
  65. #     return $node
  66. }
  67. proc create-dsdv-bs-node {node id} {
  68.     puts "Method create-dsdv-bs-node is now obsolete. Use methods in ~ns/tcl/test/test-suite-WLtutorial.tcl to create base-station nodesnn"
  69.     exit 0
  70. # global ns_ chan prop opt node_
  71. # $node instvar regagent_ ragent_
  72. #
  73. # $node add-interface $chan $prop $opt(ll) $opt(mac)
  74. #     $opt(ifq) $opt(ifqlen) $opt(netif) 
  75. #     $opt(ant)
  76. #    
  77. # create-$opt(rp)-routing-agent $node $id
  78. #
  79. # if [info exists regagent_] {
  80. # $regagent_ ragent $ragent_
  81. # }
  82. # if { $opt(pos) == "Box" } {
  83. # #
  84. # # Box Configuration
  85. # #
  86. # set spacing 200
  87. # set maxrow 7
  88. # set col [expr ($id - 1) % $maxrow]
  89. # set row [expr ($id - 1) / $maxrow]
  90. # $node set X_ [expr $col * $spacing]
  91. # $node set Y_ [expr $row * $spacing]
  92. # $node set Z_ 0.0
  93. # $node set speed_ 0.0
  94. #
  95. # $ns_ at 0.0 "$node_($id) start"
  96. # }
  97. }
  98. proc create-dsr-bs-node {node id} {
  99.     puts "Method create-dsr-bs-node is now obsolete. Use methods in ~ns/tcl/test/test-suite-WLtutorial.tcl to create base-station nodesnn"
  100.     exit 0
  101. #    global ns_ chan prop opt
  102. #    $node instvar regagent_ ragent_
  103. #    
  104. #    $node add-interface $chan $prop $opt(ll) $opt(mac)
  105. #     $opt(ifq) $opt(ifqlen) $opt(netif) 
  106. #     $opt(ant)
  107. #    
  108. #    create-$opt(rp)-routing-agent $node $id
  109. #    $node create-xtra-interface 
  110. #    
  111. #    if [info exists regagent_] {
  112. # $regagent_ ragent $ragent_
  113. #    }
  114. #    
  115. #    $ns_ at 0.0 "$node start-dsr"
  116. }
  117. proc create-dsr-routing-agent { node id } {
  118.     puts "Method create-dsr-routing-agent is now obsolete. Use methods in ~ns/tcl/test/test-suite-WLtutorial.tcl to create base-station nodesnn"
  119.     exit 0
  120.     
  121. #    global ns_ ragent_ tracefd opt
  122. #
  123. #    # 
  124. #    # Create routing agent and attach it to port 255
  125. #    #
  126. #    set ragent_($id) [new Agent/DSRAgent/BS_DSRAgent]
  127. #    set ragent $ragent_($id)
  128. #    
  129. #    # setup address (supports hier-addr) for dsdv agent 
  130. #    set address [$node node-addr]
  131. #    $ragent addr $address
  132. #    $ragent node $node
  133. #    if [Simulator set mobile_ip_] {
  134. # $ragent port-dmux [$node set dmux_]
  135. #    }
  136. #    
  137. #    $node addr $address
  138. #    $node set ragent_ $ragent
  139. #    
  140. #    set dmux [$node set dmux_]
  141. #    if {$dmux == "" } {
  142. # set dmux [new Classifier/Hash/Dest 32]
  143. # $dmux set mask_ [AddrParams PortMask]
  144. # $dmux set shift_ [AddrParams PortShift]
  145. # #
  146. # # point the node's routing entry to itself
  147. # # at the port demuxer (if there is one)
  148. # #
  149. # $node add-route $address $ragent
  150. # $node set dmux_ $dmux
  151. #    }
  152. #    set level [AddrParams hlevel]
  153. #    
  154. #    if { [Simulator set RouterTrace_] == "ON" } {
  155. # #
  156. # Recv Target
  157. #
  158. # set rcvT [cmu-trace Recv "RTR" $node]
  159. # $rcvT target $ragent
  160. # for {set i 1} {$i <= $level} {incr i} {
  161. #     [$node set classifiers_($i)] defaulttarget $rcvT
  162. #     [$node set classifiers_($i)] bcast-receiver $rcvT
  163. # }
  164. #    } else {
  165. #
  166. # for {set i 1} {$i <= $level} {incr i} {
  167. #     [$node set classifiers_($i)] defaulttarget $ragent
  168. #     [$node set classifiers_($i)] bcast-receiver $ragent
  169. # }
  170. #    }
  171.     #
  172.     # Drop Target (always on regardless of other tracing)
  173.     #
  174. #    set drpT [cmu-trace Drop "RTR" $node]
  175. #    $ragent drop-target $drpT
  176. #    
  177.     #
  178.     # Log Target
  179.     #
  180.     #set T [new Trace/Generic]
  181.     #$T target [$ns_ set nullAgent_]
  182.     #$T attach $tracefd
  183.     #$T set src_ [$node id]
  184.     #$ragent log-target $T
  185. #    $ragent target $dmux
  186.     
  187.     # packets to the DSR port should be handed over to ragent_
  188.     # since all pkts now donot go thru ragent
  189. #    $dmux install $opt(rt_port) $ragent
  190. }
  191. Node/MobileNode/BaseStationNode instproc create-xtra-interface { } {
  192.     global ns_ opt 
  193.     $self instvar ragent_ ll_ mac_ ifq_
  194.     
  195.     $ragent_ mac-addr [$mac_(0) id]
  196.     if { [Simulator set RouterTrace_] == "ON" } {
  197. # Send Target
  198. set sndT [cmu-trace Send "RTR" $self]
  199. $sndT target $ll_(0)
  200. $ragent_ add-ll $sndT $ifq_(0)
  201.     } else {
  202. # Send Target
  203. $ragent_ add-ll $ll_(0) $ifq_(0)
  204.     }
  205.     
  206.     # setup promiscuous tap into mac layer
  207.     $ragent_ install-tap $mac_(0)
  208.     
  209. }
  210. Node/MobileNode/BaseStationNode instproc start-dsr {} {
  211.     $self instvar ragent_
  212.     global opt;
  213.     $ragent_ startdsr
  214.     if {$opt(cc) == "on"} {checkcache $dsr_agent_}
  215. }
  216. Node/MobileNode/BaseStationNode instproc reset args {
  217.     $self instvar ragent_
  218.     eval $self next $args
  219.     $ragent_ reset
  220. }
  221. #Class God
  222. #God instproc init {args} { 
  223. # eval $self next $args
  224. #}
  225. proc create-god { nodes } {
  226. #global ns_ god_ tracefd
  227. set god [God info instances]
  228. if { $god == "" } {
  229. set god [new God]
  230. }
  231. $god num_nodes $nodes
  232. return $god
  233. }
  234. God proc instance {} {
  235. set god [God info instances]
  236.         if { $god != "" } {
  237.                 return $god
  238.         }  
  239. error "Cannot find instance of god"
  240. }      
  241. proc cmu-trace { ttype atype node } {
  242. global ns_ tracefd
  243. if { $tracefd == "" } {
  244. return ""
  245. }
  246. set T [new CMUTrace/$ttype $atype]
  247. $T target [$ns_ set nullAgent_]
  248. $T attach $tracefd
  249.         $T set src_ [$node id]
  250.         $T node $node
  251. return $T
  252. }
  253. proc log-movement {} {
  254.     global logtimer ns_ ns
  255.     set ns $ns_
  256.     source ../mobility/timer.tcl
  257.     Class LogTimer -superclass Timer
  258.     LogTimer instproc timeout {} {
  259.         global opt node_;
  260.         for {set i 0} {$i < $opt(nn)} {incr i} {
  261.             $node_($i) log-movement
  262.         }
  263.         $self sched 0.1
  264.     }
  265.     set logtimer [new LogTimer]
  266.     $logtimer sched 0.1
  267. }    
  268. proc set-wireless-traces { args } {
  269.   set len [llength $args]
  270.   if { $len <= 0 || [expr $len%2] } {
  271.         error "Incorrect number of parameters"
  272.   }
  273.   for {set n 0} {$n < $len} {incr n 2} {
  274.      if {[string compare [lindex $args $n] "-AgentTrace"] == 0 } {
  275.          Simulator set AgentTrace_ [lindex $args [expr $n+1]]
  276.      } elseif {[string compare [lindex $args $n] "-RouterTrace"] == 0 } {
  277.          Simulator set RouterTrace_ [lindex $args [expr $n+1]]
  278.      } elseif {[string compare [lindex $args $n] "-MacTrace"] == 0 } {
  279.          Simulator set MacTrace_ [lindex $args [expr $n+1]]
  280.      } else {
  281.           error "Unknown wireless trace type: [lindex $args $n]"
  282.      }
  283.   }
  284. }