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

通讯编程

开发平台:

Visual C++

  1. # -*- Mode:tcl; tcl-indent-level:8; tab-width:8; indent-tabs-mode:t -*-
  2. #
  3. # Copyright (c) 1996-1998 Regents of the University of California.
  4. # All rights reserved.
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. #  This product includes software developed by the MASH Research
  16. #  Group at the University of California Berkeley.
  17. # 4. Neither the name of the University nor of the Research Group may be
  18. #    used to endorse or promote products derived from this software 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/flood.tcl,v 1.2 2000/08/30 23:27:51 haoboy Exp $
  33. # ======================================================================
  34. # Default Script Options
  35. # ======================================================================
  36. set opt(ragent)         Agent/flood
  37. set opt(pos) NONE ;# Box or NONE
  38. if { $opt(pos) == "Box" } {
  39. puts "*** Flooding protocol using Box configuration..."
  40. }
  41. # ======================================================================
  42. Agent instproc init args {
  43.         eval $self next $args
  44. }       
  45. Agent/flood instproc init args {
  46.         eval $self next $args
  47. }       
  48. # ===== Get rid of the warnings in bind ================================
  49. # ======================================================================
  50. proc create-flood-agent { node id tag_dbase } {
  51.     global ns_ ragent_ tracefd opt
  52.     #
  53.     #  Create the Routing Agent and attach it to port 255.
  54.     #
  55.     #set ragent_($id) [new $opt(ragent) $id]
  56.     set ragent_($id) [new $opt(ragent)]
  57.     set ragent $ragent_($id)
  58.     ## setup address (supports hier-addr) for flooding agent and mobilenode
  59.     set addr [$node node-addr]
  60.     $ragent addr $addr
  61.     $node addr $addr
  62.     
  63.     $node attach $ragent [Node set rtagent_port_]
  64.     # Add a pointer to node so that agents can get location information
  65.     $ragent node $node
  66.         
  67.     # XXX FIX ME XXX
  68.     # Where's the DSR stuff?
  69.     #$ragent ll-queue [$node get-queue 0]    ;# ugly filter-queue hack
  70.     $ns_ at 0.0 "$ragent_($id) start-floodagent" ;# start updates
  71.     # Enable caching if specified
  72.     if {$opt(caching) == "on"} {
  73.             $ragent enable-caching
  74.     }
  75.     #
  76.     # Set-up link to global tag database
  77.     #
  78.     $ragent attach-tag-dbase $tag_dbase
  79.     #
  80.     # Drop Target (always on regardless of other tracing)
  81.     #
  82.     set drpT [cmu-trace Drop "RTR" $node]
  83.     $ragent drop-target $drpT
  84.     
  85.     #
  86.     # Log Target
  87.     #
  88.     set T [new Trace/Generic]
  89.     $T target [$ns_ set nullAgent_]
  90.     $T attach $tracefd
  91.     $T set src_ $id
  92.     $ragent tracetarget $T
  93. }
  94. proc create-query-agent { node id tag_dbase} {
  95.     global ns_ qryagent_ tracefd opt
  96.     set qryagent_($id) [new Agent/SensorQuery]
  97.     set addr [$node node-addr]
  98.     $qryagent_($id) addr $addr
  99.     $node attach $qryagent_($id) 0
  100.     #
  101.     # Set-up link to global tag database
  102.     #
  103.     $qryagent_($id) attach-tag-dbase $tag_dbase
  104.     #
  105.     # Log Target
  106.     #
  107.     set T [new Trace/Generic]
  108.     $T target [$ns_ set nullAgent_]
  109.     $T attach $tracefd
  110.     $T set src_ $id
  111.     $qryagent_($id) tracetarget $T
  112. }
  113. proc flood-create-mobile-node { id tag_dbase } {
  114. global ns ns_ chan prop topo tracefd opt node_
  115. global chan prop tracefd topo opt
  116. set ns_ $ns
  117. set node_($id) [new Node/MobileNode]
  118. set node $node_($id)
  119. $node random-motion 0 ;# disable random motion
  120. $node topography $topo
  121. #
  122. # This Trace Target is used to log changes in direction
  123. # and velocity for the mobile node.
  124. #
  125. set T [new Trace/Generic]
  126. $T target [$ns_ set nullAgent_]
  127. $T attach $tracefd
  128. $T set src_ $id
  129. $node log-target $T
  130. $node add-interface $chan $prop $opt(ll) $opt(mac)
  131. $opt(ifq) $opt(ifqlen) $opt(netif) $opt(ant)
  132. #
  133. # Create flooding agent for the Node
  134. #
  135. create-flood-agent $node $id $tag_dbase
  136. #
  137. # Create query agent for each sensor node
  138. #
  139. create-query-agent $node $id $tag_dbase
  140. # ============================================================
  141. if { $opt(pos) == "Box" } {
  142. #
  143. # Box Configuration
  144. #
  145. set spacing 200
  146. set maxrow 7
  147. set col [expr ($id - 1) % $maxrow]
  148. set row [expr ($id - 1) / $maxrow]
  149. $node set X_ [expr $col * $spacing]
  150. $node set Y_ [expr $row * $spacing]
  151. $node set Z_ 0.0
  152. $node set speed_ 0.0
  153. $ns_ at 0.0 "$node_($id) start"
  154. }
  155. }