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

通讯编程

开发平台:

Visual C++

  1. #  Copyright (c) 1999 by the University of Southern California
  2. #  All rights reserved.
  3. #  This program is free software; you can redistribute it and/or
  4. #  modify it under the terms of the GNU General Public License,
  5. #  version 2, as published by the Free Software Foundation.
  6. #
  7. #  This program is distributed in the hope that it will be useful,
  8. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. #  GNU General Public License for more details.
  11. #
  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. #  59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  15. #
  16. #  The copyright of this module includes the following
  17. #  linking-with-specific-other-licenses addition:
  18. #
  19. #  In addition, as a special exception, the copyright holders of
  20. #  this module give you permission to combine (via static or
  21. #  dynamic linking) this module with free software programs or
  22. #  libraries that are released under the GNU LGPL and with code
  23. #  included in the standard release of ns-2 under the Apache 2.0
  24. #  license or under otherwise-compatible licenses with advertising
  25. #  requirements (or modified versions of such code, with unchanged
  26. #  license).  You may copy and distribute such a system following the
  27. #  terms of the GNU GPL for this module and the licenses of the
  28. #  other code concerned, provided that you include the source code of
  29. #  that other code when and as the GNU GPL requires distribution of
  30. #  source code.
  31. #
  32. #  Note that people who make modified versions of this module
  33. #  are not obligated to grant this special exception for their
  34. #  modified versions; it is their choice whether to do so.  The GNU
  35. #  General Public License gives permission to release a modified
  36. #  version without this exception; this exception also makes it
  37. #  possible to release a modified version which carries forward this
  38. #  exception.
  39. # Traffic source generator from CMU's mobile code.
  40. #
  41. # $Header: /cvsroot/nsnam/ns-2/indep-utils/cmu-scen-gen/cbrgen.tcl,v 1.4 2005/09/16 03:05:39 tomh Exp $
  42. # ======================================================================
  43. # Default Script Options
  44. # ======================================================================
  45. set opt(nn) 0 ;# Number of Nodes
  46. set opt(seed) 0.0
  47. set opt(mc) 0
  48. set opt(pktsize) 512
  49. set opt(rate) 0
  50. set opt(interval) 0.0 ;# inverse of rate
  51. set opt(type)           ""
  52. # ======================================================================
  53. proc usage {} {
  54.     global argv0
  55.     puts "nusage: $argv0 [-type cbr|tcp] [-nn nodes] [-seed seed] [-mc connections] [-rate rate]n"
  56. }
  57. proc getopt {argc argv} {
  58. global opt
  59. lappend optlist nn seed mc rate type
  60. for {set i 0} {$i < $argc} {incr i} {
  61. set arg [lindex $argv $i]
  62. if {[string range $arg 0 0] != "-"} continue
  63. set name [string range $arg 1 end]
  64. set opt($name) [lindex $argv [expr $i+1]]
  65. }
  66. }
  67. proc create-cbr-connection { src dst } {
  68. global rng cbr_cnt opt
  69. set stime [$rng uniform 0.0 180.0]
  70. puts "#n# $src connecting to $dst at time $stimen#"
  71. ##puts "set cbr_($cbr_cnt) [$ns_ create-connection 
  72. ##CBR $node_($src) CBR $node_($dst) 0]";
  73. puts "set udp_($cbr_cnt) [new Agent/UDP]"
  74. puts "$ns_ attach-agent $node_($src) $udp_($cbr_cnt)"
  75. puts "set null_($cbr_cnt) [new Agent/Null]"
  76. puts "$ns_ attach-agent $node_($dst) $null_($cbr_cnt)"
  77. puts "set cbr_($cbr_cnt) [new Application/Traffic/CBR]"
  78. puts "$cbr_($cbr_cnt) set packetSize_ $opt(pktsize)"
  79. puts "$cbr_($cbr_cnt) set interval_ $opt(interval)"
  80. puts "$cbr_($cbr_cnt) set random_ 1"
  81. puts "$cbr_($cbr_cnt) set maxpkts_ 10000"
  82. puts "$cbr_($cbr_cnt) attach-agent $udp_($cbr_cnt)"
  83. puts "$ns_ connect $udp_($cbr_cnt) $null_($cbr_cnt)"
  84. puts "$ns_ at $stime "$cbr_($cbr_cnt) start""
  85. incr cbr_cnt
  86. }
  87. proc create-tcp-connection { src dst } {
  88. global rng cbr_cnt opt
  89. set stime [$rng uniform 0.0 180.0]
  90. puts "#n# $src connecting to $dst at time $stimen#"
  91. puts "set tcp_($cbr_cnt) [$ns_ create-connection 
  92. TCP $node_($src) TCPSink $node_($dst) 0]";
  93. puts "$tcp_($cbr_cnt) set window_ 32"
  94. puts "$tcp_($cbr_cnt) set packetSize_ $opt(pktsize)"
  95. puts "set ftp_($cbr_cnt) [$tcp_($cbr_cnt) attach-source FTP]"
  96. puts "$ns_ at $stime "$ftp_($cbr_cnt) start""
  97. incr cbr_cnt
  98. }
  99. # ======================================================================
  100. getopt $argc $argv
  101. if { $opt(type) == "" } {
  102.     usage
  103.     exit
  104. } elseif { $opt(type) == "cbr" } {
  105.     if { $opt(nn) == 0 || $opt(seed) == 0.0 || $opt(mc) == 0 || $opt(rate) == 0 } {
  106. usage
  107. exit
  108.     }
  109.     set opt(interval) [expr 1 / $opt(rate)]
  110.     if { $opt(interval) <= 0.0 } {
  111. puts "ninvalid sending rate $opt(rate)n"
  112. exit
  113.     }
  114. }
  115. puts "#n# nodes: $opt(nn), max conn: $opt(mc), send rate: $opt(interval), seed: $opt(seed)n#"
  116. set rng [new RNG]
  117. $rng seed $opt(seed)
  118. set u [new RandomVariable/Uniform]
  119. $u set min_ 0
  120. $u set max_ 100
  121. $u use-rng $rng
  122. set cbr_cnt 0
  123. set src_cnt 0
  124. for {set i 0} {$i < $opt(nn) } {incr i} {
  125. set x [$u value]
  126. if {$x < 50} {continue;}
  127. incr src_cnt
  128. set dst [expr ($i+1) % [expr $opt(nn) + 1] ]
  129. #if { $dst == 0 } {
  130.     #set dst [expr $dst + 1]
  131.     #}
  132. if { $opt(type) == "cbr" } {
  133. create-cbr-connection $i $dst
  134. } else {
  135. create-tcp-connection $i $dst
  136. }
  137. if { $cbr_cnt == $opt(mc) } {
  138. break
  139. }
  140. if {$x < 75} {continue;}
  141. set dst [expr ($i+2) % [expr $opt(nn) + 1] ]
  142. #if { $dst == 0 } {
  143. #set dst [expr $dst + 1]
  144. #}
  145. if { $opt(type) == "cbr" } {
  146. create-cbr-connection $i $dst
  147. } else {
  148. create-tcp-connection $i $dst
  149. }
  150. if { $cbr_cnt == $opt(mc) } {
  151. break
  152. }
  153. }
  154. puts "#n#Total sources/connections: $src_cnt/$cbr_cntn#"