test-rcvr.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/ex/test-rcvr.tcl,v 1.4 2005/08/26 05:05:29 tomh Exp $
  36. #This script demonstrates support for two different delay-adaptive receiver types,
  37. #namely the vat-receiver adaptation algorithm and a conservative adapatation 
  38. #algotrithm (that tries to achieve low jitter at the expense of high playback delay)
  39. #IT creates a simple 2 node topology with a link capacity of 2.0Mb.
  40. #The background traffic on the link comprises of an aggregrate of 40 expo on/off 
  41. #sources with peak rate of 80K and on/off time of 500ms
  42. #The experimental traffic constitutes a single expo on/off source with a peak rate 
  43. #of 80k and on/offtime of 500ms
  44. set sources 40
  45. set rcvrType VatRcvr
  46. set bw 2.0Mb
  47. #propagation delay
  48. set delay 0.01ms
  49. #simulation time
  50. set runtime 100   
  51. #pick up a random seed
  52. set seed 1973272912
  53. set bgsrcType expo
  54. set out [open out.tr w]
  55. set rate 80k
  56. set btime 500ms 
  57. set itime 500ms
  58. #set up a queue limit so that no packets are dropped
  59. Queue set limit_ 1000000
  60. set rcvrType [lindex $argv 0]
  61. if { ($rcvrType != "VatRcvr") && ($rcvrType != "ConsRcvr") } {
  62. puts "Usage : ns test.rcvr.tcl <rcvrtype>"
  63. puts "<rcvrtype> = "VatRcvr" | "ConsRcvr" "
  64. exit 1
  65. #puts stderr $out
  66. ns-random $seed
  67. $defaultRNG seed $seed
  68. Agent instproc print-delay-stats {sndtime now plytime } {
  69. global out
  70. puts $out "$sndtime $now $plytime"
  71. flush $out
  72. }
  73. Simulator instproc create-receiver {node rcvrType} {
  74.     set v [new Agent/$rcvrType]
  75.     $self attach-agent $node $v
  76.     return $v
  77. }
  78. Simulator instproc create-sender {node rate rcvr fid sndType } {
  79. global runtime btime itime
  80. set s [new Agent/UDP]
  81. $self attach-agent $node $s
  82. #Create exp on/off source
  83. if { $sndType == "expo" } {
  84. set tr [new Application/Traffic/Exponential]
  85. $tr set packetSize_ 200
  86. $tr set burst_time_ $btime
  87. $tr set idle_time_ $itime
  88. $tr set rate_ $rate
  89. } else {    
  90. #create victrace source
  91. set tfile [new Tracefile]
  92. $tfile filename "vic.32.200"
  93. set tr [new Application/Traffic/Trace]
  94. $tr attach-tracefile $tfile
  95. }
  96. $tr attach-agent $s
  97. $s set fid_ $fid
  98. $self connect $s $rcvr
  99. $self at [expr double([ns-random] % 10000000) / 1e7]  "$tr start"
  100. $self at $runtime "$tr stop"
  101. }
  102. proc finish {} {
  103. global env rcvrType
  104. set f [open temp.rands w]
  105. puts $f "TitleText: $rcvrType"
  106. puts $f "Device: Postscript"
  107. exec rm -f temp.p1 temp.p2
  108. exec awk {
  109. {
  110. print $2,$2-$1
  111. }
  112. } out.tr > temp.p1
  113. exec awk {
  114. {
  115. print $2,$3-$1
  116. }
  117. } out.tr > temp.p2
  118. puts $f [format "n"Network Delay"]
  119. flush $f
  120. exec cat temp.p1 >@ $f
  121. flush $f
  122. puts $f [format "n"Network+Playback Delay"]
  123. flush $f
  124. exec cat temp.p2 >@ $f
  125. flush $f
  126. close $f
  127. exec rm -f temp.p1 temp.p2
  128. exec xgraph -display $env(DISPLAY) -bb -tk -nl -m -x simtime -y delay temp.rands &
  129. exec rm -f out.tr
  130. exit 0
  131. set ns [new Simulator]
  132. set n1 [$ns node]
  133. set n2 [$ns node]
  134. $ns duplex-link $n1 $n2 $bw $delay DropTail
  135. set v0 [$ns create-receiver $n2 $rcvrType]
  136. set v2 [new Agent/Null]
  137. $ns attach-agent $n2 $v2
  138. set i 0
  139. while { $i < $sources } {
  140.     $ns create-sender $n1 $rate $v2 0 $bgsrcType
  141.     incr i
  142. }
  143. $ns create-sender $n1 $rate $v0 0 expo
  144. $ns at [expr $runtime+1] "finish"
  145. $ns run