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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (C) 2001 by USC/ISI
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. #
  17. # Maintainer: Kun-chan Lan <kclan@isi.edu>
  18. # Version Date: $Date: 2002/01/29 01:03:01 $
  19. #
  20. #
  21. # Unbalanced dumbell topology
  22. # Used by isigen.tcl
  23. #
  24. #         ISI hosts      remote hosts
  25. #
  26. #      [ISI clients]
  27. #                        
  28. #       s+11 s+10                2 3 4 [2,3,4,5: web servers]
  29. #           |                    |/ 
  30. #            1 ---9------------X---0 --6-[web clients]
  31. #          / |  [isi svr]         /|
  32. #        s+8 s+9                 5 7 8
  33. #                                  |  
  34. #                                  |  [ftp clients]
  35. #                               [ftp server]
  36. #
  37. proc my-duplex-link {ns n1 n2 bw delay queue_method queue_length} {
  38.        $ns duplex-link $n1 $n2 $bw $delay $queue_method
  39.        $ns queue-limit $n1 $n2 $queue_length
  40.        $ns queue-limit $n2 $n1 $queue_length
  41. }
  42. proc create_topology {} {
  43. global ns n verbose num_node num_nonisi_web_client num_isi_server num_ftp_client
  44. set num_web_server 40        
  45. set num_web_client 960      
  46. set num_isi_client 160     
  47. set num_isi_server 1           
  48. set num_isi_lan 4
  49. set num_ftp_server 10    
  50. set num_ftp_client 100     
  51. set queue_method RED
  52. set queue_length 50
  53. set num_nonisi_web_client [expr $num_web_client - $num_isi_client]
  54. set num_node [expr 15 + [expr $num_web_client + $num_web_server + $num_ftp_server + $num_ftp_client]]
  55. set num_isi_client_per_lan [expr $num_isi_client/$num_isi_lan]
  56. set wwwInDelay [new RandomVariable/Empirical]
  57. $wwwInDelay loadCDF cdf/2pm.dump.www.inbound.delay.cdf
  58. set wwwOutDelay [new RandomVariable/Empirical]
  59. $wwwOutDelay loadCDF cdf/2pm.dump.www.outbound.delay.cdf
  60. set WWWinBW [new RandomVariable/Empirical]
  61. $WWWinBW loadCDF cdf/2pm.dump.www.inbound.BW.cdf
  62. set WWWoutBW [new RandomVariable/Empirical]
  63. $WWWoutBW loadCDF cdf/2pm.dump.www.outbound.BW.cdf
  64. set ftpInDelay [new RandomVariable/Empirical]
  65. $ftpInDelay loadCDF cdf/2pm.dump.ftp.inbound.delay.cdf
  66. set ftpOutDelay [new RandomVariable/Empirical]
  67. $ftpOutDelay loadCDF cdf/2pm.dump.ftp.outbound.delay.cdf
  68. set FTPinBW [new RandomVariable/Empirical]
  69. $FTPinBW loadCDF cdf/2pm.dump.ftp.inbound.BW.cdf
  70. set FTPoutBW [new RandomVariable/Empirical]
  71. $FTPoutBW loadCDF cdf/2pm.dump.ftp.outbound.BW.cdf
  72. if {$verbose} { puts "Creating dumbell topology..." }
  73. for {set i 0} {$i < $num_node} {incr i} {
  74. set n($i) [$ns node]
  75. }
  76. # EDGES (from-node to-node length a b):
  77. # node 0 connects to the non-isi server and client pools
  78. # node 9 is the isi web/ftp server
  79. # node 1 connects to the isi client pool
  80. my-duplex-link $ns $n(0) $n([expr $num_node - 1]) 100Mb 1ms $queue_method $queue_length
  81. my-duplex-link $ns $n([expr $num_node - 1]) $n(9) 100Mb 1ms $queue_method $queue_length
  82. my-duplex-link $ns $n(9) $n(1) 100Mb 0.5ms $queue_method $queue_length
  83. my-duplex-link $ns $n(0) $n(2) 50Mb 2ms $queue_method $queue_length
  84. my-duplex-link $ns $n(0) $n(3) 50Mb 2ms $queue_method $queue_length
  85. my-duplex-link $ns $n(0) $n(4) 50Mb 2ms $queue_method $queue_length
  86. my-duplex-link $ns $n(0) $n(5) 50Mb 2ms $queue_method $queue_length
  87. my-duplex-link $ns $n(0) $n(6) 2Mb 10ms $queue_method $queue_length
  88. my-duplex-link $ns $n(0) $n(7) 100Mb 2ms $queue_method $queue_length
  89. my-duplex-link $ns $n(0) $n(8) 2Mb 10ms $queue_method $queue_length
  90. set remote_host [expr $num_web_server + $num_nonisi_web_client + $num_ftp_server + $num_ftp_client]
  91. my-duplex-link $ns $n(1) $n([expr $remote_host + 10]) 100Mb 500us $queue_method $queue_length
  92. my-duplex-link $ns $n(1) $n([expr $remote_host + 11]) 100Mb 500us $queue_method $queue_length
  93. my-duplex-link $ns $n(1) $n([expr $remote_host + 12]) 100Mb 500us $queue_method $queue_length
  94. my-duplex-link $ns $n(1) $n([expr $remote_host + 13]) 100Mb 500us $queue_method $queue_length
  95. for {set i 0} {$i < $num_web_server} {incr i} {
  96.     set base [expr $i / 10]
  97.     set delay [$wwwInDelay value]
  98.     set bandwidth [$WWWinBW value]
  99.     my-duplex-link $ns $n([expr $base + 2]) $n([expr $i + 10]) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method $queue_length
  100.     if {$verbose} {puts "$ns duplex-link $n([expr $base + 2]) $n([expr $i + 10]) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method"}
  101.     #setup manual routes
  102.     [$n([expr $i + 10]) get-module "Manual"] add-route-to-adj-node -default $n([expr $base + 2])
  103.     [$n([expr $remote_host + 10]) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n([expr $remote_host + 10]) $n(1)] head]
  104.     [$n([expr $remote_host + 11]) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n([expr $remote_host + 11]) $n(1)] head]
  105.     [$n([expr $remote_host + 12]) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n([expr $remote_host + 12]) $n(1)] head]
  106.     [$n([expr $remote_host + 13]) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n([expr $remote_host + 13]) $n(1)] head]
  107.     [$n(1) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n(1) $n(9)] head]
  108.     [$n(9) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n(9) $n([expr $num_node - 1])] head]
  109.     [$n([expr $num_node - 1]) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n([expr $num_node - 1]) $n(0)] head]
  110.     [$n(0) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n(0) $n([expr $base + 2])] head]
  111.     [$n([expr $base + 2]) get-module "Manual"] add-route [$n([expr $i + 10]) set address_]  [[$ns link $n([expr $base + 2]) $n([expr $i + 10])] head]
  112. }
  113. if {$verbose} {puts "done creating web server"}
  114. for {set i 0} {$i < $num_nonisi_web_client} {incr i} {
  115.      set delay [$wwwOutDelay value]
  116.      set bandwidth [$WWWoutBW value]
  117.      set c [expr $i + $num_web_server + 10]
  118.      my-duplex-link $ns $n(6) $n($c) [expr $bandwidth * 1000000 ] [expr $delay * 0.001] $queue_method $queue_length
  119.      if {$verbose} {puts "$ns duplex-link $n(6) $n($c) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method"}
  120.     #setup manual routes
  121.     [$n($c) get-module "Manual"] add-route-to-adj-node -default $n(6)
  122.     [$n(9) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(9) $n([expr $num_node - 1])] head]
  123.     [$n([expr $num_node - 1]) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n([expr $num_node - 1]) $n(0)] head]
  124.     [$n(0) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(0) $n(6)] head]
  125.     [$n(6) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(6) $n($c)] head]
  126. }
  127. if {$verbose} {puts "done creating non-isi web clients"}
  128. for {set i 0} {$i < $num_ftp_server} {incr i} {
  129.      set delay [$ftpInDelay value]
  130.      set bandwidth [$FTPinBW value]
  131.      set s [expr $i + $num_web_server + $num_nonisi_web_client + 10]
  132.      my-duplex-link $ns $n(7) $n($s) [expr $bandwidth * 1000000 ] [expr $delay * 0.001] $queue_method $queue_length
  133.      if {$verbose} {puts "$ns duplex-link $n(7) $n($s) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method"}
  134.     #setup manual routes
  135.     [$n($s) get-module "Manual"] add-route-to-adj-node -default $n(7)
  136.     [$n([expr $remote_host + 10]) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n([expr $remote_host + 10]) $n(1)] head]
  137.     [$n([expr $remote_host + 11]) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n([expr $remote_host + 11]) $n(1)] head]
  138.     [$n([expr $remote_host + 12]) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n([expr $remote_host + 12]) $n(1)] head]
  139.     [$n([expr $remote_host + 13]) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n([expr $remote_host + 13]) $n(1)] head]
  140.     [$n(1) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n(1) $n(9)] head]
  141.     [$n(9) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n(9) $n([expr $num_node - 1])] head]
  142.     [$n([expr $num_node - 1]) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n([expr $num_node - 1]) $n(0)] head]
  143.     [$n(0) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n(0) $n(7)] head]
  144.     [$n(7) get-module "Manual"] add-route [$n($s) set address_]  [[$ns link $n(7) $n($s)] head]
  145. }
  146. if {$verbose} {puts "done creating ftp servers"}
  147. for {set i 0} {$i < $num_ftp_client} {incr i} {
  148.      set delay [$ftpOutDelay value]
  149.      set bandwidth [$FTPoutBW value]
  150.      set c [expr $i + $num_web_server + $num_nonisi_web_client + $num_ftp_server + 10]
  151.      my-duplex-link $ns $n(8) $n($c) [expr $bandwidth * 1000000 ] [expr $delay * 0.001] $queue_method $queue_length
  152.      if {$verbose} {puts "$ns duplex-link $n(8) $n($c) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method"}
  153.     #setup manual routes
  154.     [$n($c) get-module "Manual"] add-route-to-adj-node -default $n(8)
  155.     [$n(9) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(9) $n([expr $num_node - 1])] head]
  156.     [$n([expr $num_node - 1]) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n([expr $num_node - 1]) $n(0)] head]
  157.     [$n(0) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(0) $n(8)] head]
  158.     [$n(8) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(8) $n($c)] head]
  159. }
  160. if {$verbose} {puts "done creating ftp clients"}
  161. for {set i 0} {$i < $num_isi_client} {incr i} {
  162. #    set base [expr $i / 10]
  163.     set base [expr $i / $num_isi_client_per_lan]
  164.     set delay [uniform 0.5 1.0]
  165.     set bandwidth 10.0
  166.     set b [expr $base + [expr $num_web_server + $num_nonisi_web_client + $num_ftp_server + $num_ftp_client + 10]]
  167.     set c [expr [expr $i + $num_web_server + $num_nonisi_web_client + $num_ftp_server + $num_ftp_client] + 14]
  168.     my-duplex-link $ns $n($b) $n($c) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method $queue_length
  169.     if {$verbose} {puts "$ns duplex-link $n($b) $n($c) [expr $bandwidth * 1000000] [expr $delay * 0.001] $queue_method"}
  170.     #setup manual routes
  171.     [$n($c) get-module "Manual"] add-route-to-adj-node -default $n($b)
  172.     [$n(2) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(2) $n(0)] head]
  173.     [$n(3) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(3) $n(0)] head]
  174.     [$n(4) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(4) $n(0)] head]
  175.     [$n(5) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(5) $n(0)] head]
  176.     [$n(7) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(7) $n(0)] head]
  177.     [$n(0) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(0) $n([expr $num_node - 1])] head]
  178.     [$n([expr $num_node - 1]) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n([expr $num_node - 1]) $n(9)] head]
  179.     [$n(9) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(9) $n(1)] head]
  180.     [$n(1) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n(1) $n($b)] head]
  181.     [$n($b) get-module "Manual"] add-route [$n($c) set address_]  [[$ns link $n($b) $n($c)] head]
  182. }
  183. if {$verbose} {puts "done creating isi clients"}
  184. #route to ISI server
  185.     [$n(6) get-module "Manual"] add-route [$n(9) set address_]  [[$ns link $n(6) $n(0)] head]
  186.     [$n(8) get-module "Manual"] add-route [$n(9) set address_]  [[$ns link $n(8) $n(0)] head]
  187.     [$n(0) get-module "Manual"] add-route [$n(9) set address_]  [[$ns link $n(0) $n([expr $num_node - 1])] head]
  188.     [$n([expr $num_node - 1]) get-module "Manual"] add-route [$n(9) set address_]  [[$ns link $n([expr $num_node - 1]) $n(9)] head]
  189. $ns set dstW_ "";  #define list of web servers
  190. for {set i 0} {$i <= $num_web_server} {incr i} {
  191.     $ns set dstW_ "[$ns set dstW_] [list [expr $i + 9]]"
  192. }
  193. if {$verbose} {puts "WWW server set: [$ns set dstW_]"}
  194. $ns set srcW_ "";  #define list of web clients 
  195. for {set i 0} {$i < $num_nonisi_web_client} {incr i} {
  196.     $ns set srcW_ "[$ns set srcW_] [list [expr [expr $i + $num_web_server ] + 10]]"
  197. }
  198. for {set i 0} {$i < $num_isi_client} {incr i} {
  199.     $ns set srcW_ "[$ns set srcW_] [list [expr [expr $i + $num_web_server + $num_nonisi_web_client + $num_ftp_server + $num_ftp_client] + 14]]"
  200. }
  201. if {$verbose} {puts "WWW client set: [$ns set srcW_]"}
  202. $ns set dstF_ "";  #define list of ftp servers
  203. for {set i 0} {$i <  1} {incr i} {
  204.     $ns set dstF_ "[$ns set dstF_] [list [expr $i + 9]]"
  205. }
  206. for {set i 0} {$i < $num_ftp_server} {incr i} {
  207.     $ns set dstF_ "[$ns set dstF_] [list [expr [expr $i + $num_web_server + $num_nonisi_web_client ] + 10]]"
  208. }
  209. if {$verbose} {puts "FTP server set: [$ns set dstF_]"}
  210. $ns set srcF_ "";  #define list of ftp clients 
  211. for {set i 0} {$i < $num_ftp_client} {incr i} {
  212.     $ns set srcF_ "[$ns set srcF_] [list [expr [expr $i + $num_web_server + $num_nonisi_web_client + $num_ftp_server ] + 10]]"
  213. }
  214. for {set i 0} {$i < $num_isi_client} {incr i} {
  215.     $ns set srcF_ "[$ns set srcF_] [list [expr [expr $i + $num_web_server + $num_nonisi_web_client + $num_ftp_server + $num_ftp_client] + 14]]"
  216. }
  217. if {$verbose} {puts "FTP client set: [$ns set srcF_]"}
  218. if {$verbose} { puts "Finished creating topology..." }
  219. }
  220. # end of create_topology