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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1996-1997 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 without
  18. #    specific prior written permission.
  19. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  20. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  23. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  25. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  28. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  29. # SUCH DAMAGE.
  30. #
  31. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/lib/ns-agent.tcl,v 1.24 2001/08/17 19:00:42 kfall Exp $
  32. #
  33. #
  34. # OTcl methods for the Agent base class
  35. #
  36. #
  37. # The following overload was added to inform users of the backward
  38. # compatibility issues resulted from having a 32-bit addressing space.
  39. Agent instproc set args {
  40. if { [lindex $args 0] == "dst_" } {
  41. puts "Warning dst_ is no longer being supported in NS. $args"
  42. puts "Use dst_addr_ and dst_port_ instead"
  43. $self instvar dst_addr_ dst_port_
  44. set addr [lindex $args 1]
  45. set baseAddr [Simulator set McastBaseAddr_]
  46. if { $addr >= $baseAddr } {
  47. $self set dst_addr_ $addr
  48. $self set dst_port_ 0
  49. } else {
  50. $self set dst_addr_ [expr ($addr >> 8) ]
  51. $self set dst_port_ [expr ($addr % 256) ]
  52. exit
  53. }
  54. return
  55. }
  56. eval $self next $args
  57. }
  58. # Debo
  59. Agent instproc init {} {
  60. #$self instvar nodeid_
  61. #$self set nodeid_ -1
  62. }
  63. Agent instproc nodeid {} { 
  64.         [$self set node_] id
  65. }
  66. Agent instproc port {} {
  67. $self instvar agent_port_
  68. return $agent_port_
  69. }
  70. #
  71. # Lower 8 bits of dst_ are portID_.  this proc supports setting the interval
  72. # for delayed acks
  73. #       
  74. Agent instproc dst-port {} {
  75. $self instvar dst_port_
  76. return [expr $dst_port_]
  77. }
  78. #
  79. # Add source of type s_type to agent and return the source
  80. # Source objects are obsolete; use attach-app instead
  81. #
  82. Agent instproc attach-source {s_type} {
  83. set source [new Source/$s_type]
  84. $source attach $self
  85. $self set type_ $s_type
  86. return $source
  87. }
  88. # Add application of type s_type to agent and return the app
  89. # Note that s_type must be defined as a packet type in packet.h
  90. Agent instproc attach-app {s_type} {
  91. set app_ [new Application/$s_type]
  92. $app_ attach-agent $self
  93. $self set type_ $s_type
  94. return $app_
  95. }
  96. #
  97. # Attach tbf to an agent
  98. #
  99. Agent instproc attach-tbf { tbf } {
  100. $tbf target [$self target]
  101. $self target $tbf
  102. }
  103. #
  104. # OTcl support for classes derived from Agent
  105. #
  106. Class Agent/Null -superclass Agent
  107. Agent/Null instproc init args {
  108.     eval $self next $args
  109. }
  110. Agent/LossMonitor instproc log-loss {} {
  111. }
  112. #Signalling agent attaches tbf differently as none of its signalling mesages
  113. #go via the tbf
  114. Agent/CBR/UDP/SA instproc attach-tbf { tbf } {
  115. $tbf target [$self target]
  116. $self target $tbf
  117. $self ctrl-target [$tbf target]
  118. }
  119. #
  120. # A lot of agents want to store the maxttl locally.  However,
  121. # setting a class variable based on the Agent::ttl_ variable
  122. # does not help if the user redefines Agent::ttl_.  Therefore,
  123. # Agents interested in the maxttl_ should call this function
  124. # with the name of their class variable, and it is set to the
  125. # maximum of the current/previous value.
  126. #
  127. # The function itself returns the value of ttl_ set.
  128. #
  129. # I use this function from agent constructors to set appropriate vars:
  130. # for instance to set Agent/rtProto/DV::INFINITY, or
  131. # Agent/SRM/SSM::ttlGroupScope_
  132. Agent proc set-maxttl {objectOrClass var} {
  133. if { [catch "$objectOrClass set $var" value] ||
  134.      ($value < [Agent set ttl_]) } {
  135. $objectOrClass set $var [Agent set ttl_]
  136. }
  137. $objectOrClass set $var
  138. }
  139. Agent/TCP instproc init {} {
  140.     eval $self next
  141.     set ns [Simulator instance]
  142.     $ns create-eventtrace Event $self
  143. }
  144. #Agent instproc init args {
  145. #        $self next $args
  146. #}       
  147. #Agent/rtProto instproc init args {
  148. #        puts "DOWN HERE 2"
  149. #        $self next $args
  150. #}       
  151. #Agent/rtProto/TORA -superclass Agent
  152. Agent/TORA instproc init args {
  153.          $self next $args
  154. }       
  155. Agent/TORA set sport_ 0
  156. Agent/TORA set dport_ 0
  157. Agent/AODV instproc init args {
  158.          $self next $args
  159. }
  160. Agent/AODV set sport_   0
  161. Agent/AODV set dport_   0