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

通讯编程

开发平台:

Visual C++

  1. # Web traffic generator by Sally Floyd
  2. proc add_web_nodes {secondDelay variable} {
  3.   global ns opt
  4.   global nodes
  5.   global s_
  6.   global r_
  7.   global count
  8.   set i $count
  9.         if {$variable == 0} {
  10.                 set delay2 [expr $secondDelay]
  11.                 set delay2a [expr $secondDelay]
  12.         } else {
  13.                 ## for traffic from the web traffic generator, 
  14.                 ## each path ends up with roughly the same traffic fraction
  15.                 ## So, to get the right distribution, we use more short delays.
  16.                 set num [expr (($i)%10)/9.0]
  17.                 ## num is a number between 0 and 1
  18.                 set delay2 [expr 2*$secondDelay*pow($num,4)]
  19.                 set delay2a [expr 2*$secondDelay*pow($num,4)]
  20.         }
  21.   set s_($i) [$ns node]
  22.   set r_($i) [$ns node]
  23.   if {$opt(printRTTs) == 1} {
  24.     puts "link delay web [format "%.2f" $delay2] [format "%.2f" $delay2a]"
  25.   }
  26.   set speed 1000
  27.   if {$opt(accessLink) == 1} {
  28.     if {$i%3==0} { set speed 100}
  29.     if {$i%3==0} { set speed 10}
  30.     if {$i%3==0} { set speed 1}
  31.   }
  32.   $ns duplex-link $s_($i) $nodes(ms) 1000Mb [expr $delay2]ms DropTail
  33.   $ns duplex-link $r_($i) $nodes(bs) [expr $speed]Mb [expr $delay2a]ms DropTail
  34.   incr count
  35. }
  36. # interpage: interPage
  37. # pagesize in # of objects: pageSize, rvPageSize_, new WebPage
  38. # interobject: interObj
  39. # objectsize (in # of pkts, I think): objSize
  40. proc add_web_traffic {secondDelay nums interpage pagesize objectsize shape forward} {
  41.   global ns opt
  42.   global s_
  43.   global r_
  44.   global count
  45.   global pool
  46.         PagePool/WebTraf set FID_ASSIGNING_MODE_ 2
  47.         # gen/ns_tcl.cc, for 2, use sameFid_ 
  48.         # for 1, increment FID.
  49.         # for 0, use id_.
  50.         set pool [new PagePool/WebTraf]
  51.         $pool set-num-client $opt(numWebNodes)
  52.         $pool set-num-server $opt(numWebNodes)
  53.         # $pool set sameFid_ $count
  54.         $pool set sameFid_ 2
  55.         for {set i 0} {$i < $opt(numWebNodes)} {incr i} {
  56.                 if {$forward == 1} {
  57.                         add_web_nodes $secondDelay $opt(rtts)
  58.                         $pool set-server $i $s_([expr $count - 1])
  59.                         $pool set-client $i $r_([expr $count - 1])
  60.                 } elseif {$forward == 0} {
  61.                         $pool set-client $i $s_([expr $count - 1])
  62.                         $pool set-server $i $r_([expr $count - 1])
  63.                 }
  64.         }
  65.         $pool set-num-session $nums
  66.         for {set i 0} {$i < $nums} {incr i} {
  67.           set interPage [new RandomVariable/Exponential]
  68.           $interPage set avg_ $interpage
  69.           set pageSize [new RandomVariable/Constant]
  70.           $pageSize set val_ $pagesize
  71.           set interObj [new RandomVariable/Exponential]
  72.           $interObj set avg_ [expr 0.01]
  73.           set objSize [new RandomVariable/ParetoII]
  74.           $objSize set avg_ $objectsize
  75.           $objSize set shape_ $shape
  76.           set tmp [new RandomVariable/Uniform]
  77.           set startTime [expr 1.0 * [$tmp value] * $opt(stop) ]
  78.           # Poisson start times for sessions.
  79.           # when does a web session end?
  80.           # puts [format "session $i startTime %0.3f" $startTime ]
  81.           $pool create-session $i $opt(numPage) $startTime $interPage $pageSize $interObj $objSize
  82.           # All of the web traffic uses the same packet size.
  83.           # webcache/webtraf.cc
  84.           # doc/webcache.tex
  85.           # Feldmann99a, Section 2.4, paragraph 3-4 and the appendix A.1.
  86.           # empweb/empftp.cc
  87.           # doc/session.tex
  88.           # When does each web session start?
  89.         }
  90. }