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

通讯编程

开发平台:

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/dsdv.tcl,v 1.14 2003/12/23 17:36:35 haldar Exp $
  33. #
  34. # Ported from CMU-Monarch project's mobility extensions -Padma, 10/98.
  35. # ======================================================================
  36. # Default Script Options
  37. # ======================================================================
  38. Agent/DSDV set sport_        0
  39. Agent/DSDV set dport_        0
  40. Agent/DSDV set wst0_         6        ;# As specified by Pravin
  41. Agent/DSDV set perup_       15        ;# As given in the paper (update period)
  42. Agent/DSDV set use_mac_      0        ;# Performance suffers with this on
  43. Agent/DSDV set be_random_    1        ;# Flavor the performance numbers :)
  44. Agent/DSDV set alpha_        0.875    ;# 7/8, as in RIP(?)
  45. Agent/DSDV set min_update_periods_ 3  ;# Missing perups before linkbreak
  46. Agent/DSDV set verbose_      0        ;# 
  47. Agent/DSDV set trace_wst_    0        ;# 
  48. set opt(ragent) Agent/DSDV
  49. set opt(pos) NONE ;# Box or NONE
  50. if { $opt(pos) == "Box" } {
  51. puts "*** DSDV using Box configuration..."
  52. }
  53. # ======================================================================
  54. Agent instproc init args {
  55.         eval $self next $args
  56. }       
  57. Agent/DSDV instproc init args {
  58.         eval $self next $args
  59. }       
  60. # ===== Get rid of the warnings in bind ================================
  61. # ======================================================================
  62. proc create-dsdv-routing-agent { node id } {
  63.     global ns_ ragent_ tracefd opt
  64.     #
  65.     #  Create the Routing Agent and attach it to port 255.
  66.     #
  67.     #set ragent_($id) [new $opt(ragent) $id]
  68.     set ragent_($id) [new $opt(ragent)]
  69.     set ragent $ragent_($id)
  70.     ## setup address (supports hier-addr) for dsdv agent 
  71.     ## and mobilenode
  72.     set addr [$node node-addr]
  73.     
  74.     $ragent addr $addr
  75.     $ragent node $node
  76.     if [Simulator set mobile_ip_] {
  77. $ragent port-dmux [$node set dmux_]
  78.     }
  79.     $node addr $addr
  80.     $node set ragent_ $ragent
  81.     
  82.     $node attach $ragent [Node set rtagent_port_]
  83.     ##$ragent set target_ [$node set ifq_(0)] ;# ifq between LL and MAC
  84.         
  85.     # XXX FIX ME XXX
  86.     # Where's the DSR stuff?
  87.     #$ragent ll-queue [$node get-queue 0]    ;# ugly filter-queue hack
  88.     $ns_ at 0.0 "$ragent_($id) start-dsdv" ;# start updates
  89.     #
  90.     # Drop Target (always on regardless of other tracing)
  91.     #
  92.     set drpT [cmu-trace Drop "RTR" $node]
  93.     $ragent drop-target $drpT
  94.     
  95.     #
  96.     # Log Target
  97.     #
  98.     set T [new Trace/Generic]
  99.     $T target [$ns_ set nullAgent_]
  100.     $T attach $tracefd
  101.     $T set src_ $id
  102.     $ragent tracetarget $T
  103. }
  104. proc dsdv-create-mobile-node { id args } {
  105. global ns ns_ chan prop topo tracefd opt node_
  106. global chan prop tracefd topo opt
  107. set ns_ [Simulator instance]
  108. if [Simulator hier-addr?] {
  109. if [Simulator set mobile_ip_] {
  110. set node_($id) [new MobileNode/MIPMH $args]
  111. } else {
  112. set node_($id) [new Node/MobileNode/BaseStationNode $args]
  113. }
  114. } else {
  115. set node_($id) [new Node/MobileNode]
  116. }
  117. set node $node_($id)
  118. $node random-motion 0 ;# disable random motion
  119. $node topography $topo
  120.     
  121. # XXX Activate energy model so that we can use sleep, etc. But put on 
  122. # a very large initial energy so it'll never run out of it.
  123. if [info exists opt(energy)] {
  124. $node addenergymodel [new $opt(energy) $node 1000 0.5 0.2]
  125. }
  126. #
  127. # This Trace Target is used to log changes in direction
  128. # and velocity for the mobile node.
  129. #
  130. set T [new Trace/Generic]
  131. $T target [$ns_ set nullAgent_]
  132. $T attach $tracefd
  133. $T set src_ $id
  134. $node log-target $T
  135.     
  136. if ![info exist inerrProc_] {
  137. set inerrProc_ ""
  138. }
  139. if ![info exist outerrProc_] {
  140. set outerrProc_ ""
  141. }
  142. if ![info exist FECProc_] {
  143. set FECProc_ ""
  144. }
  145. $node add-interface $chan $prop $opt(ll) $opt(mac)
  146.     $opt(ifq) $opt(ifqlen) $opt(netif) $opt(ant) 
  147.     $topo $inerrProc_ $outerrProc_ $FECProc_ 
  148.     
  149. #
  150. # Create a Routing Agent for the Node
  151. #
  152. create-$opt(rp)-routing-agent $node $id
  153.     
  154. if { $opt(pos) == "Box" } {
  155. #
  156. # Box Configuration
  157. #
  158. set spacing 200
  159. set maxrow 7
  160. set col [expr ($id - 1) % $maxrow]
  161. set row [expr ($id - 1) / $maxrow]
  162. $node set X_ [expr $col * $spacing]
  163. $node set Y_ [expr $row * $spacing]
  164. $node set Z_ 0.0
  165. $node set speed_ 0.0
  166. $ns_ at 0.0 "$node_($id) start"
  167. }
  168. return $node
  169. }