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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) Xerox Corporation 1997. All rights reserved.
  3. #
  4. # This program is free software; you can redistribute it and/or modify it
  5. # under the terms of the GNU General Public License as published by the
  6. # Free Software Foundation; either version 2 of the License, or (at your
  7. # option) any later version.
  8. # This program is distributed in the hope that it will be useful, but
  9. # WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11. # General Public License for more details.
  12. # You should have received a copy of the GNU General Public License along
  13. # with this program; if not, write to the Free Software Foundation, Inc.,
  14. # 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  15. # Linking this file statically or dynamically with other modules is making
  16. # a combined work based on this file.  Thus, the terms and conditions of
  17. # the GNU General Public License cover the whole combination.
  18. # In addition, as a special exception, the copyright holders of this file
  19. # give you permission to combine this file with free software programs or
  20. # libraries that are released under the GNU LGPL and with code included in
  21. # the standard release of ns-2 under the Apache 2.0 license or under
  22. # otherwise-compatible licenses with advertising requirements (or modified
  23. # versions of such code, with unchanged license).  You may copy and
  24. # distribute such a system following the terms of the GNU GPL for this
  25. # file and the licenses of the other code concerned, provided that you
  26. # include the source code of that other code when and as the GNU GPL
  27. # requires distribution of source code.
  28. # Note that people who make modified versions of this file are not
  29. # obligated to grant this special exception for their modified versions;
  30. # it is their choice whether to do so.  The GNU General Public License
  31. # gives permission to release a modified version without this exception;
  32. # this exception also makes it possible to release a modified version
  33. # which carries forward this exception.
  34. #
  35. # $Header: /cvsroot/nsnam/ns-2/tcl/lib/ns-intserv.tcl,v 1.12 2005/08/26 05:05:29 tomh Exp $
  36. #defaults
  37. Queue/SimpleIntServ set qlimit1_ 50
  38. Queue/SimpleIntServ set qlimit0_ 50
  39. Agent/SA set rate_ 0
  40. Agent/SA set bucket_ 0
  41. Agent/SA set packetSize_ 210
  42. ADC set backoff_ true
  43. ADC set dobump_ true
  44. ADC/MS set backoff_ false
  45. ADC set src_ -1
  46. ADC set dst_ -1
  47. ADC/MS set utilization_ 0.95
  48. ADC/MSPK set utilization_ 0.95
  49. ADC/Param set utilization_ 1.0
  50. ADC/HB set epsilon_ 0.7
  51. ADC/ACTO set s_ 0.002
  52. ADC/ACTO set dobump_ false
  53. ADC/ACTP set s_ 0.002
  54. ADC/ACTP set dobump_ false
  55. Est/TimeWindow set T_ 3
  56. Est/ExpAvg set w_ 0.125
  57. Est set period_ 0.5
  58. ADC set bandwidth_ 0
  59. SALink set src_ -1
  60. SALink set dst_ -1
  61. Est set src_ -1
  62. Est set dst_ -1
  63. Class IntServLink -superclass  SimpleLink
  64. IntServLink instproc init { src dst bw delay q arg {lltype "DelayLink"} } {
  65. $self next $src $dst $bw $delay $q $lltype ; # SimpleLink ctor
  66. $self instvar queue_ link_
  67. $self instvar measclassifier_ signalmod_ adc_ est_ measmod_
  68. set ns_ [Simulator instance]
  69. #Create a suitable adc unit from larg with suitable params
  70. set adctype [lindex $arg 3]
  71. set adc_ [new ADC/$adctype]
  72. $adc_ set bandwidth_ $bw
  73. $adc_ set src_ [$src id]
  74. $adc_ set dst_ [$dst id]
  75. if { [lindex $arg 5] == "CL" } {
  76. #Create a suitable est unit 
  77. set esttype [lindex $arg 4]
  78. set est_ [new Est/$esttype]
  79. $est_ set src_ [$src id]
  80. $est_ set dst_ [$dst id]
  81. $adc_ attach-est $est_ 1
  82. #Create a Measurement Module 
  83. set measmod_ [new MeasureMod]
  84. $measmod_ target $queue_
  85. $adc_ attach-measmod $measmod_ 1
  86. }
  87. #Create the signalmodule
  88. set signaltype [lindex $arg 2]
  89. set signalmod_ [new $signaltype]
  90. $signalmod_ set src_ [$src id]
  91. $signalmod_ set dst_ [$dst id]
  92. $signalmod_ attach-adc $adc_
  93. $self add-to-head $signalmod_
  94. #Create a measurement classifier to decide which packets to measure
  95. $self create-meas-classifier
  96. $signalmod_ target $measclassifier_
  97. #Schedule to start the admission control object
  98. $ns_ at 0.0 "$adc_ start"
  99. }
  100. IntServLink instproc buffersize { b } {
  101. $self instvar est_ adc_
  102. $est_ setbuf [set b]
  103. $adc_ setbuf [set b]
  104. }
  105. #measClassifier is an instance of Classifier/Hash/Flow
  106. #for right now
  107. # FlowId 0 -> Best Effort traffic
  108. # FlowId non-zero -> Int Serv traffic 
  109. IntServLink instproc create-meas-classifier {} {
  110. $self instvar measclassifier_ measmod_ link_ queue_
  111. set measclassifier_ [new Classifier/Hash/Fid 1 ]
  112. #set slots for measclassifier
  113. set slot [$measclassifier_ installNext $queue_]
  114. $measclassifier_ set-hash auto 0 0 0 $slot 
  115. #Currently measure all flows with fid.ne.0 alone
  116. set slot [$measclassifier_ installNext $measmod_]
  117. $measclassifier_ set default_ 1
  118. }
  119. IntServLink instproc trace-sig { f } {
  120. $self instvar signalmod_ est_ adc_
  121. $signalmod_ attach $f
  122. $est_ attach $f
  123. $adc_ attach $f
  124. set ns [Simulator instance]
  125. $ns at 0.0 "$signalmod_ add-trace"
  126. }
  127. #Helper  function to output link utilization and bw estimate
  128. IntServLink instproc trace-util { interval {f ""}} {
  129. $self instvar est_
  130. set ns [Simulator instance]
  131. if { $f != "" } {
  132. puts $f "[$ns now] [$est_ load-est] [$est_ link-utlzn]" 
  133. }
  134. $ns at [expr [$ns now]+$interval] "$self trace-util $interval $f" 
  135. }