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

通讯编程

开发平台:

Visual C++

  1. # miptest.tcl
  2. #
  3. # To show mobileIP activities.
  4. # Modified from a SUN's original example script
  5. #
  6. # See the comments from SUN below:
  7. #
  8. # kwang: some explanations on how to use this limited implementation of
  9. #        Mobile IP :
  10. # 1. Look into "proc create-topology" below for some necessary commands
  11. #    to activate Mobile IP.
  12. # 2. Reset "Simulator instvar node_factory_" to create specialized
  13. #    nodes (Node/MIPBS and Node/MIPMH); how they'll interact with
  14. #    HierNode or ManualRtNode is unknown.
  15. # 3. Make the mobile links "dynamic"; initially mark the links that are
  16. #    not between MH and HA "down" to fool the route computer
  17. # 4. Specify the links on which BS and MH should broadcast ads and agent
  18. #    solicitations.
  19. # 5. Tell Agent/MIPMH which its HA is.
  20. # 6. For configurable parameters, see the constructors of these modules
  21. #    for the "bind" statements; beacon period can be set by the statement
  22. #    "<name of an Agent/MIPBS or Agent/MIPMH> beacon-period <beacon period>".
  23. # some changes are made by Ya 2/99
  24. set opt(tr) out
  25. set opt(namtr) "miptest.nam"
  26. set opt(seed) 0
  27. set opt(stop) 20
  28. set opt(qsize) 100
  29. set opt(bw) 2Mb
  30. set opt(delay) 1ms
  31. set opt(ll) LL
  32. set opt(ifq) Queue/DropTail
  33. set opt(mac) Mac/Csma/Ca
  34. set opt(chan) Channel
  35. set opt(tcp) TCP/Reno
  36. set opt(sink) TCPSink
  37. set opt(source) FTP
  38. proc Usage {} {
  39. global opt argv0
  40. puts "Usage: $argv0 [-stop sec] [-seed value] [-node numNodes]"
  41. puts "t[-tr tracefile] [-g]"
  42. puts "t[-ll lltype] [-ifq qtype] [-mac mactype]"
  43. puts "t[-bw $opt(bw)] [-delay $opt(delay)]"
  44. exit 1
  45. }
  46. proc Getopt {} {
  47. global opt argc argv
  48. if {$argc == 0} Usage
  49. for {set i 0} {$i < $argc} {incr i} {
  50. set key [lindex $argv $i]
  51. if ![string match {-*} $key] continue
  52. set key [string range $key 1 end]
  53. set val [lindex $argv [incr i]]
  54. set opt($key) $val
  55. if [string match {-[A-z]*} $val] {
  56. incr i -1
  57. continue
  58. }
  59. switch $key {
  60. ll  { set opt($key) LL/$val }
  61. ifq { set opt($key) Queue/$val }
  62. mac { set opt($key) Mac/$val }
  63. }
  64. }
  65. }
  66. proc finish {} {
  67. exit 0
  68. }
  69. proc create-trace {} {
  70. global ns opt
  71. if [file exists $opt(tr)] {
  72. catch "exec rm -f $opt(tr) $opt(tr)-bw [glob $opt(tr).*]"
  73. }
  74. set trfd [open $opt(tr) w]
  75. $ns trace-all $trfd
  76. if {$opt(namtr) != ""} {
  77. $ns namtrace-all [open $opt(namtr) w]
  78. }
  79. return $trfd
  80. }
  81. proc create-topology {} {
  82. global ns opt
  83. global lan node source
  84. $ns instvar link_
  85. set node(s) [$ns node]
  86. set node(g) [$ns node]
  87. Simulator set node_factory_ Node/MIPBS
  88. set node(ha) [$ns node]
  89. $node(ha) shape "hexagon"
  90. set node(fa) [$ns node]
  91. $node(fa) shape "hexagon"
  92. Simulator set node_factory_ Node/MIPMH
  93. set node(mh) [$ns node]
  94. $node(mh) shape "circle"
  95. $ns duplex-link $node(s) $node(g) 2Mb 5ms DropTail 
  96. $ns duplex-link-op $node(s) $node(g) orient right
  97. $ns duplex-link $node(g) $node(ha) 2Mb 5ms DropTail
  98. $ns duplex-link-op $node(g) $node(ha) orient up
  99. $ns duplex-link $node(g) $node(fa) 2Mb 5ms DropTail
  100. $ns duplex-link-op $node(g) $node(fa) orient right-up
  101. $ns duplex-link $node(ha) $node(mh) 2Mb 5ms DropTail 
  102. $ns duplex-link-op $node(ha) $node(mh) orient right
  103. $ns duplex-link $node(fa) $node(mh) 4Mb 5ms DropTail 
  104. $ns duplex-link-op $node(fa) $node(mh) orient left
  105. set mhid [$node(mh) id]
  106. set haid [$node(ha) id]
  107. set faid [$node(fa) id]
  108. $link_($mhid:$faid) dynamic
  109. $link_($faid:$mhid) dynamic
  110. $link_($mhid:$faid) down
  111. $link_($faid:$mhid) down
  112. $link_($mhid:$haid) dynamic
  113. $link_($haid:$mhid) dynamic
  114. [$node(ha) set regagent_] add-ads-bcast-link $link_($haid:$mhid)
  115. [$node(fa) set regagent_] add-ads-bcast-link $link_($faid:$mhid)
  116. [$node(mh) set regagent_] set home_agent_ $haid
  117. [$node(mh) set regagent_] add-sol-bcast-link $link_($mhid:$haid)
  118. [$node(mh) set regagent_] add-sol-bcast-link $link_($mhid:$faid)
  119. $ns at 0.0 "$node(ha) label HomeAgent"
  120. $ns at 0.0 "$node(fa) label ForeignAgent"
  121. $ns at 0.0 "$node(mh) label MobileHost"
  122. $ns at 0.0 "$node(ha) color gold"
  123. $ns at 0.0 "$node(mh) color gold"
  124. $ns rtmodel-at 0.1 down $node(mh) $node(fa)
  125. set swtm [expr 3.0+($opt(stop)-3.0)/4.0]
  126. $ns rtmodel-at $swtm down $node(mh) $node(ha)
  127. $ns rtmodel-at $swtm up $node(mh) $node(fa)
  128. $ns at $swtm "$node(ha) color black"
  129. $ns at $swtm "$node(fa) color gold"
  130. set swtm [expr 3.0+($opt(stop)-3.0)/2.0]
  131. $ns rtmodel-at $swtm down $node(mh) $node(fa)
  132. $ns rtmodel-at $swtm up $node(mh) $node(ha)
  133. $ns at $swtm "$node(ha) color gold"
  134. $ns at $swtm "$node(fa) color black"
  135. set swtm [expr 3.0+($opt(stop)-3.0)*3.0/4.0]
  136. $ns rtmodel-at $swtm down $node(mh) $node(ha)
  137. $ns rtmodel-at $swtm up $node(mh) $node(fa)
  138. $ns at $swtm "$node(ha) color black"
  139. $ns at $swtm "$node(fa) color gold"
  140. # $ns at $swtm "$link_($mhid:$faid) up"
  141. # $ns at $swtm "$link_($faid:$mhid) up"
  142. # $ns at [expr $swtm - 1.5] "$link_($mhid:$haid) down"
  143. # $ns at [expr $swtm - 1.5] "$link_($haid:$mhid) down"
  144. # set swtm [expr 3.0+($opt(stop)-3.0)/2.0]
  145. # $ns at $swtm "$link_($mhid:$haid) up"
  146. # $ns at $swtm "$link_($haid:$mhid) up"
  147. # $ns at [expr $swtm - 1.5] "$link_($mhid:$faid) down"
  148. # $ns at [expr $swtm - 1.5] "$link_($faid:$mhid) down"
  149. # set swtm [expr 3.0+($opt(stop)-3.0)*3.0/4.0]
  150. # $ns at $swtm "$link_($mhid:$faid) up"
  151. # $ns at $swtm "$link_($faid:$mhid) up"
  152. # $ns at [expr $swtm - 1.5] "$link_($mhid:$haid) down"
  153. # $ns at [expr $swtm - 1.5] "$link_($haid:$mhid) down"
  154. }
  155. proc create-source {} {
  156. global ns opt
  157. global lan node source
  158. set tp [$ns create-connection $opt(tcp) 
  159.     $node(s) $opt(sink) $node(mh) 0]
  160. set source [$tp attach-source $opt(source)]
  161. $ns at 0.0 "$source start"
  162. }
  163. ## MAIN ##
  164. Getopt
  165. if {$opt(seed) >= 0} { ns-random $opt(seed) }
  166. if [info exists opt(qsize)] { Queue set limit_ $opt(qsize) }
  167. set ns [new Simulator]
  168. set trfd [create-trace]
  169. create-topology
  170. create-source
  171. #$lan trace $ns $trfd
  172. $ns at $opt(stop) "finish"
  173. $ns run