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

通讯编程

开发平台:

Visual C++

  1. Class Topology
  2. Topology instproc node? n {
  3.     $self instvar node_
  4.     if [info exists node_($n)] {
  5.         set ret $node_($n)
  6.     } else {
  7.         set ret ""
  8.     }
  9.     set ret
  10. }
  11. Topology  instproc init {ns noNodes noRouters} {
  12.     $self next
  13.     $self instvar node_
  14.     
  15.     for {set i 0} {$i < $noNodes} {incr i} {
  16. set node_(s$i) [$ns node]
  17. set node_(d$i) [$ns node]
  18.     }
  19.     for {set i 0} {$i < $noRouters} {incr i} {
  20. set node_(r$i) [$ns node]
  21.     }
  22.     
  23. }
  24. Topology instproc set_red_params { redq psize qlim min_th max_th bytes wait gentle} {
  25.     $redq set mean_pktsize_ $psize
  26.     $redq set limit_ $qlim
  27.     $redq set bytes_ $bytes
  28.     $redq set wait_ $wait
  29.     $redq set gentle_ $gentle
  30.     
  31.     $redq set thresh_ $min_th
  32.     $redq set maxthresh_ $max_th
  33. }    
  34. Class Topology/netAllUDP -superclass Topology
  35. Topology/netAllUDP instproc init ns {
  36.     $self next $ns 1 2
  37.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_ 
  38.     
  39.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 2ms DropTail
  40.     $ns duplex-link $node_(d0) $node_(r1) 100Mb 2ms DropTail
  41.     
  42.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 20ms RED/PD MEDROP EDROP
  43.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 20ms DropTail
  44.     
  45. $self instvar bandwidth_
  46. set bandwidth_ 10000
  47.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  48.     set redpdq_ [$redpdlink_ queue]
  49.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  50.  
  51.     $self set_red_params $redpdq_ 1000 50 10 33 false false true
  52.     
  53. #   $redpdq_ set debug_ true
  54.     # $redpdq_ set auto_ true
  55.     # $redpdq_ set global_target_ true
  56.     # set appropriate queue-limits
  57.     # $ns queue-limit $node_(r1) $node_(r2) 25
  58.     
  59.     # $ns queue-limit $node_(r2) $node_(r1) 25
  60. }
  61. Class Topology/netMix -superclass Topology
  62. Topology/netMix instproc init ns {
  63.     $self next $ns 3 2
  64.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  65.     
  66.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 3ms DropTail
  67.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 13ms DropTail
  68.     $ns duplex-link $node_(s2) $node_(r0) 100Mb 23ms DropTail
  69.     
  70.     $ns duplex-link $node_(d0) $node_(r1) 100Mb 1ms DropTail
  71.     $ns duplex-link $node_(d1) $node_(r1) 100Mb 1.5ms DropTail
  72.     $ns duplex-link $node_(d2) $node_(r1) 100Mb 2ms DropTail
  73.     
  74.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 10ms RED/PD MEDROP EDROP
  75.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 10ms DropTail
  76.     
  77. $self instvar bandwidth_
  78. set bandwidth_ 10000
  79.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  80.     set redpdq_ [$redpdlink_ queue]
  81.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  82.  
  83.     $self set_red_params $redpdq_ 1000 50 10 33 true false true
  84. #    $redpdq_ set debug_ true
  85. }
  86. Class Topology/netTFRC -superclass Topology
  87. Topology/netTFRC instproc init ns {
  88.     $self next $ns 9 2
  89.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  90.     
  91.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 4ms DropTail
  92.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 49ms DropTail
  93.      
  94.     set delay 1
  95.     for {set i 0} {$i < 9} {incr i} {
  96. $ns duplex-link $node_(d$i) $node_(r1) 100Mb ${delay}ms DropTail
  97. set delay [expr $delay+0.2]
  98.     }
  99.      
  100.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 10ms RED/PD MEDROP EDROP
  101.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 10ms DropTail
  102.     
  103. $self instvar bandwidth_
  104. set bandwidth_ 10000
  105.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  106.     set redpdq_ [$redpdlink_ queue]
  107.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  108.  
  109.     $self set_red_params $redpdq_ 1000 50 10 33 false false true
  110. #    $redpdq_ set debug_ true
  111. }
  112. Class Topology/netAllTCP -superclass Topology
  113. Topology/netAllTCP instproc init ns {
  114.     $self next $ns 4 2
  115.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  116.     
  117.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 9ms DropTail
  118.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 29ms DropTail
  119.     $ns duplex-link $node_(s2) $node_(r0) 100Mb 49ms DropTail
  120.     $ns duplex-link $node_(s3) $node_(r0) 100Mb 69ms DropTail
  121.     
  122.     $ns duplex-link $node_(d0) $node_(r1) 100Mb 1ms DropTail
  123.     $ns duplex-link $node_(d1) $node_(r1) 100Mb 2ms DropTail
  124.         
  125.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 10ms RED/PD MEDROP EDROP
  126.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 10ms DropTail
  127.     
  128. $self instvar bandwidth_
  129. set bandwidth_ 10000
  130.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  131.     set redpdq_ [$redpdlink_ queue]
  132.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  133.  
  134.     $self set_red_params $redpdq_ 1000 100 10 33 false false true
  135.     
  136. #    $redpdq_ set debug_ true
  137. }
  138. # For Web Traffic Simulations
  139. Class Topology/netWeb -superclass Topology
  140. Topology/netWeb instproc init ns {
  141.     $self next $ns 5 2
  142.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  143.     
  144.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 10ms DropTail
  145.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 20ms DropTail
  146.     $ns duplex-link $node_(s2) $node_(r0) 100Mb 30ms DropTail
  147.     $ns duplex-link $node_(s3) $node_(r0) 100Mb 40ms DropTail
  148.     $ns duplex-link $node_(s4) $node_(r0) 100Mb 50ms DropTail
  149.     $ns duplex-link $node_(d0) $node_(r1) 100Mb 1ms DropTail
  150.     $ns duplex-link $node_(d1) $node_(r1) 100Mb 1.2ms DropTail
  151.     $ns duplex-link $node_(d2) $node_(r1) 100Mb 1.4ms DropTail
  152.     $ns duplex-link $node_(d3) $node_(r1) 100Mb 1.6ms DropTail
  153.     $ns duplex-link $node_(d4) $node_(r1) 100Mb 1.8ms DropTail
  154.      
  155.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 1ms RED/PD MEDROP EDROP
  156.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 1ms DropTail
  157.     
  158. $self instvar bandwidth_
  159. set bandwidth_ 10000
  160.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  161.     set redpdq_ [$redpdlink_ queue]
  162.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_ Fid]
  163.     $self set_red_params $redpdq_ 500 100 10 33 false false false
  164.     
  165. #$redpdq_ set debug_ true
  166.     
  167.     return $redpdq_
  168. }
  169. #For multiple congested links
  170. Class Topology/netMulti -superclass Topology
  171. Topology/netMulti instproc init ns {
  172.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_ noLinks_
  173.     
  174. global topo_para1_
  175.     set noLinks_ $topo_para1_
  176. if { $noLinks_ <=0 } {
  177. puts stderr "Invalid number of links $noLinks_"
  178. }
  179.     set noNodes $noLinks_
  180.     set noRouters [expr $noLinks_+1]
  181.     $self next $ns $noNodes $noRouters
  182.     
  183.     for {set i 0} {$i<$noLinks_} {incr i} {
  184. set node_(s1$i) [$ns node]
  185. set node_(s2$i) [$ns node]
  186. set node_(s3$i) [$ns node]
  187.     }
  188.     set node_(source) [$ns node]
  189.     set node_(sink) [$ns node]
  190.     #create the necessary connections and stuff
  191.     for {set i 0} {$i < $noNodes} {incr i} {
  192. $ns duplex-link $node_(s$i) $node_(r$i) 100Mb 10ms DropTail
  193. $ns duplex-link $node_(s1$i) $node_(r$i) 100Mb 20ms DropTail
  194. $ns duplex-link $node_(s2$i) $node_(r$i) 100Mb 30ms DropTail
  195. $ns duplex-link $node_(s3$i) $node_(r$i) 100Mb 40ms DropTail
  196. set j [expr $i+1]
  197. $ns duplex-link $node_(d$i) $node_(r$j) 100Mb 1ms DropTail
  198. $ns simplex-link $node_(r$i) $node_(r$j) 10Mb 1ms RED/PD MEDROP EDROP
  199. $ns simplex-link $node_(r$j) $node_(r$i) 10Mb 1ms DropTail
  200.     
  201. $self instvar bandwidth_
  202. set bandwidth_ 10000
  203. set redpdlink_($i) [$ns link $node_(r$i) $node_(r$j)]
  204. set redpdq_($i) [$redpdlink_($i) queue]
  205. set redpdflowmon_($i) [$redpdq_($i) makeflowmon $redpdlink_($i)]
  206. $self set_red_params $redpdq_($i) 1000 50 10 33 false false false
  207. # $redpdq_($i) set debug_ true
  208.     }
  209.     set node_(source) [$ns node]
  210.     set node_(sink) [$ns node]
  211.     set delay [expr 40 - $noLinks_]
  212.     $ns duplex-link $node_(source) $node_(r0) 100Mb ${delay}ms DropTail
  213.     $ns duplex-link $node_(sink) $node_(r$noLinks_) 100Mb 1ms DropTail
  214. }
  215. Class Topology/netTestFRp -superclass Topology
  216. Topology/netTestFRp instproc init ns {
  217. #    puts "In netTestFRp ..."
  218.     $self next $ns 6 2
  219.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  220.     
  221. #    puts "In netTestFRp ..."
  222.     global traf_para1_ traf_para2_ target_rtt_
  223. #    puts "Topology parametsrs: $target_rtt_ ftype=$traf_para1_ gamma=$traf_para2_" 
  224.     switch -exact $traf_para1_ {
  225. "tcp" {
  226.     set delay [expr ($target_rtt_/(2*$traf_para2_))*1000]
  227. }
  228. default {
  229.     set delay 10
  230. }
  231.     }
  232.     if { $delay <= 0 } {
  233. puts stderr "Invalid Link Delay"
  234. exit 1
  235.     }
  236. #    puts stderr "Delay = $delay ms"
  237.     for {set i 0} {$i < 5} {incr i} {
  238. $ns duplex-link $node_(s$i) $node_(r0) 1000Mb [expr ${delay}+0.05*$i]ms DropTail
  239.     }
  240.     $ns duplex-link $node_(d0) $node_(r1) 100Mb 0ms DropTail
  241.     $ns simplex-link $node_(r0) $node_(r1) 1000Mb 0ms RED/PD MEDROP EDROP
  242.     $ns simplex-link $node_(r1) $node_(r0) 1000Mb 0ms DropTail
  243.     
  244.     $self instvar bandwidth_
  245.     set bandwidth_ 1000000
  246.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  247.     set redpdq_ [$redpdlink_ queue]
  248.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  249.  
  250.     #excessively high values so that pkts are never dropped because of RED dynamics
  251.     $self set_red_params $redpdq_ 1000 1000 1000 1000 false false true
  252.     
  253.     #    $redpdq_ set debug_ true
  254.     
  255.     #set the P in FRp while running the simulation for fixed drop rate
  256.     #(-1 to operate in normal mode). 
  257.     global topo_para1_
  258.     $redpdq_ set P_testFRp_ $topo_para1_
  259. }
  260. Class Topology/netSingleVsMulti -superclass Topology
  261. Topology/netSingleVsMulti instproc init ns {
  262.     $self next $ns 5 2
  263.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  264.     
  265.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 0.2ms DropTail
  266.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 0.4ms DropTail
  267.     $ns duplex-link $node_(s2) $node_(r0) 100Mb 0.6ms DropTail
  268.     $ns duplex-link $node_(s3) $node_(r0) 100Mb 0.8ms DropTail
  269.     $ns duplex-link $node_(s4) $node_(r0) 100Mb 1ms DropTail
  270.     $ns duplex-link $node_(d0) $node_(r1) 100Mb 1ms DropTail
  271.     
  272.     global topo_para1_ 
  273.     if {$topo_para1_ <= 0} {
  274. puts stderr "Invalid Round Trip Time $traf_para1_"
  275.     }
  276.     
  277.     set one_way_delay [expr $topo_para1_*500 - 1]
  278.     $ns simplex-link $node_(r0) $node_(r1) 10Mb ${one_way_delay}ms RED/PD MEDROP EDROP
  279.     $ns simplex-link $node_(r1) $node_(r0) 10Mb ${one_way_delay}ms DropTail
  280.     
  281.     $self instvar bandwidth_
  282.     set bandwidth_ 10000
  283.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  284.     set redpdq_ [$redpdlink_ queue]
  285.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  286.  
  287.     #RED parameters likely to show a bursty drop behavior
  288.     set bw_delay_prod [expr ($one_way_delay+2.0)/(0.4)]
  289.     puts "product = $bw_delay_prod"
  290.     $self set_red_params $redpdq_ 1000 [expr {$bw_delay_prod/4}] [expr {$bw_delay_prod/8}] 
  291. [expr {$bw_delay_prod/4}] false false true
  292.     
  293. #    $redpdq_ set debug_ true
  294. }
  295. Class Topology/netPktsVsBytes -superclass Topology
  296. Topology/netPktsVsBytes instproc init ns {
  297.     $self next $ns 9 2
  298.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  299.     
  300.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 4ms DropTail
  301.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 34ms DropTail
  302.      
  303.     set delay 1
  304.     for {set i 0} {$i < 9} {incr i} {
  305. $ns duplex-link $node_(d$i) $node_(r1) 100Mb ${delay}ms DropTail
  306. set delay [expr $delay+0.2]
  307.     }
  308.      
  309.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 5ms RED/PD MEDROP EDROP
  310.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 5ms DropTail
  311.     $self instvar bandwidth_
  312.     set bandwidth_ 10000
  313.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  314.     set redpdq_ [$redpdlink_ queue]
  315.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  316.  
  317.     $self set_red_params $redpdq_ 1000 50 10 33 true false true
  318.     
  319. #    global topo_para1_
  320. #    $redpdq_ set P_testFRp_ $topo_para1_
  321. #   $redpdq_ set debug_ true
  322. }
  323. Class Topology/netPktsVsBytes1 -superclass Topology
  324. Topology/netPktsVsBytes1 instproc init ns {
  325.     $self next $ns 9 2
  326.     $self instvar node_ redpdq_ redpdflowmon_ redpdlink_
  327.     
  328.     $ns duplex-link $node_(s0) $node_(r0) 100Mb 4ms DropTail
  329.     $ns duplex-link $node_(s1) $node_(r0) 100Mb 34ms DropTail
  330.      
  331.     set delay 1
  332.     for {set i 0} {$i < 9} {incr i} {
  333. $ns duplex-link $node_(d$i) $node_(r1) 100Mb ${delay}ms DropTail
  334. set delay [expr $delay+0.2]
  335.     }
  336.      
  337.     $ns simplex-link $node_(r0) $node_(r1) 10Mb 5ms RED/PD MEDROP EDROP
  338.     $ns simplex-link $node_(r1) $node_(r0) 10Mb 5ms DropTail
  339.     $self instvar bandwidth_
  340.     set bandwidth_ 10000
  341.     set redpdlink_ [$ns link $node_(r0) $node_(r1)]
  342.     set redpdq_ [$redpdlink_ queue]
  343.     set redpdflowmon_ [$redpdq_ makeflowmon $redpdlink_]
  344.  
  345.     $self set_red_params $redpdq_ 1000 50 10 33 false false true
  346.     
  347. #    global topo_para1_
  348. #    $redpdq_ set P_testFRp_ $topo_para1_
  349. #   $redpdq_ set debug_ true
  350. }