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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1998 University of Southern California.
  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. # This test suite is for validating the Mobile IP simulation support
  17. # in ns.
  18. #
  19. # To run all tests:  test-all-mip
  20. #
  21. # To run individual tests:
  22. # ns test-suite-mip.tcl mip-adv-one
  23. # ns test-suite-mip.tcl mip-adv-zero
  24. # ns test-suite-mip.tcl mip-adv-multi
  25. # ...
  26. #
  27. # To view a list of available tests to run with this script:
  28. # ns test-suite-mip.tcl
  29. #
  30. #remove-all-packet-headers       ; # removes all except common
  31. #add-packet-header Flags IP TCP MIP IPinIP ARP LL Mac ; # hdrs reqd for validation test
  32.  
  33. # FOR UPDATING GLOBAL DEFAULTS:
  34. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  35. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  36. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  37. Agent/TCP set tcpTick_ 0.1
  38. # The default for tcpTick_ is being changed to reflect a changing reality.
  39. Agent/TCP set rfc2988_ false
  40. # The default for rfc2988_ is being changed to true.
  41. # FOR UPDATING GLOBAL DEFAULTS:
  42. Agent/TCP set useHeaders_ false
  43. # The default is being changed to useHeaders_ true.
  44. Agent/TCP set windowInit_ 1
  45. # The default is being changed to 2.
  46. Agent/TCP set singledup_ 0
  47. # The default is being changed to 1
  48. Agent/TCP set minrto_ 0
  49. # The default is being changed to minrto_ 1
  50. Agent/TCP set syn_ false
  51. Agent/TCP set delay_growth_ false
  52. # In preparation for changing the default values for syn_ and delay_growth_.
  53. Agent/TCP set SetCWRonRetransmit_ true
  54. # Changing the default value.
  55. Class TestSuite
  56. # Mobile IP test - simple case
  57. Class Test/mip-adv-one -superclass TestSuite
  58. # Mobile IP test - MH hears no advertisements from either HA or FA and 
  59. # starts sending solicitations for a period of time
  60. Class Test/mip-adv-zero -superclass TestSuite
  61. # Mobile IP test - MH hears multiple advertisements for a period of time
  62. Class Test/mip-adv-multi -superclass TestSuite
  63. proc usage {} {
  64. global argv0
  65. puts stderr "usage: ns $argv0 <tests>"
  66. puts stderr "Valid tests are: mip-adv-one mip-adv-zero mip-adv-multi"
  67. exit 1
  68. }
  69. TestSuite instproc finish {} {
  70.     $self instvar ns_
  71.     global quiet
  72.     
  73.     $ns_ flush-trace
  74.     if { !$quiet } {
  75. puts "running nam..."
  76. exec ../../../nam-1/nam temp.rands.nam &
  77.     }
  78.     exit 0
  79. }
  80. TestSuite instproc init {} {
  81.     $self instvar ns_ testName_ lan_ node_ source_ tcp_
  82.     set ns_ [new Simulator]
  83.     $ns_ instvar link_
  84.     
  85.     $ns_ trace-all [open temp.rands w]
  86.     $ns_ namtrace-all [open temp.rands.nam w]
  87.     
  88.     set node_(s) [$ns_ node]
  89.     set node_(g) [$ns_ node]
  90.     Simulator set node_factory_ Node/MIPBS
  91.     set node_(ha) [$ns_ node]
  92.     $node_(ha) shape "hexagon"
  93.     set node_(fa) [$ns_ node]
  94.     $node_(fa) shape "hexagon"
  95.     Simulator set node_factory_ Node/MIPMH
  96.     set node_(mh) [$ns_ node]
  97.     $node_(mh) shape "circle"
  98.     
  99.     $ns_ duplex-link $node_(s) $node_(g) 2Mb 5ms DropTail 
  100.     $ns_ duplex-link-op $node_(s) $node_(g) orient right
  101.     
  102.     $ns_ duplex-link $node_(g) $node_(ha) 2Mb 5ms DropTail
  103.     $ns_ duplex-link-op $node_(g) $node_(ha) orient up
  104.     $ns_ duplex-link $node_(g) $node_(fa) 2Mb 5ms DropTail
  105.     $ns_ duplex-link-op $node_(g) $node_(fa) orient right-up
  106.     $ns_ duplex-link $node_(ha) $node_(mh) 2Mb 5ms DropTail 
  107.     $ns_ duplex-link-op $node_(ha) $node_(mh) orient right
  108.     $ns_ duplex-link $node_(fa) $node_(mh) 4Mb 5ms DropTail 
  109.     $ns_ duplex-link-op $node_(fa) $node_(mh) orient left
  110.     set mhid [$node_(mh) id]
  111.     set haid [$node_(ha) id]
  112.     set faid [$node_(fa) id]
  113.     [$node_(ha) set regagent_] add-ads-bcast-link $link_($haid:$mhid)
  114.     [$node_(fa) set regagent_] add-ads-bcast-link $link_($faid:$mhid)
  115.     [$node_(mh) set regagent_] set home_agent_ $haid
  116.     [$node_(mh) set regagent_] add-sol-bcast-link $link_($mhid:$haid)
  117.     [$node_(mh) set regagent_] add-sol-bcast-link $link_($mhid:$faid)
  118.     
  119.     $link_($mhid:$faid) dynamic
  120.     $link_($faid:$mhid) dynamic
  121.     $link_($mhid:$faid) down
  122.     $link_($faid:$mhid) down
  123.     $link_($mhid:$haid) dynamic
  124.     $link_($haid:$mhid) dynamic
  125.         
  126.     $ns_ at 0.0 "$node_(ha) label HomeAgent"
  127.     $ns_ at 0.0 "$node_(fa) label ForeignAgent"
  128.     $ns_ at 0.0 "$node_(mh) label MobileHost"
  129.     set tcp_ [$ns_ create-connection TCP/Reno 
  130.     $node_(s) TCPSink $node_(mh) 0]
  131.     set source_ [$tcp_ attach-source FTP]
  132. }
  133. TestSuite instproc run {} {
  134.     $self instvar ns_ source_
  135.     $ns_ at 0.0 "$source_ start"
  136.     $ns_ at 20.0 "$self finish"
  137.     $ns_ run
  138. }
  139. Test/mip-adv-one instproc init {} {
  140.     $self instvar ns_ testName_ lan_ node_ source_ tcp_
  141.     set testName_ mip-adv-one
  142.     $self next
  143.     $ns_ instvar link_
  144.     $ns_ at 0.0 "$node_(ha) color gold"
  145.     $ns_ at 0.0 "$node_(mh) color gold"
  146.     $ns_ rtmodel-at 0.1 down $node_(mh) $node_(fa)
  147.     
  148.     set swtm [expr 3.0+(20.0-3.0)/4.0]
  149. $ns_ rtmodel-at $swtm down $node_(mh) $node_(ha)
  150. $ns_ rtmodel-at $swtm up $node_(mh) $node_(fa)
  151. $ns_ at $swtm "$node_(ha) color black"
  152. $ns_ at $swtm "$node_(fa) color gold"
  153. set swtm [expr 3.0+(20.0-3.0)/2.0]
  154. $ns_ rtmodel-at $swtm down $node_(mh) $node_(fa)
  155. $ns_ rtmodel-at $swtm up $node_(mh) $node_(ha)
  156. $ns_ at $swtm "$node_(ha) color gold"
  157. $ns_ at $swtm "$node_(fa) color black"
  158. set swtm [expr 3.0+(20.0-3.0)*3.0/4.0]
  159. $ns_ rtmodel-at $swtm down $node_(mh) $node_(ha)
  160. $ns_ rtmodel-at $swtm up $node_(mh) $node_(fa)
  161. $ns_ at $swtm "$node_(ha) color black"
  162. $ns_ at $swtm "$node_(fa) color gold"
  163. }
  164. Test/mip-adv-zero instproc init {} {
  165.         $self instvar ns_ testName_ lan_ node_ source_ tcp_
  166.         set testName_ mip-adv-zero
  167.         $self next
  168. $ns_ instvar link_
  169. $ns_ at 0.0 "$node_(ha) color gold"
  170. $ns_ at 0.0 "$node_(mh) color gold"
  171. $ns_ rtmodel-at 0.1 down $node_(mh) $node_(fa)
  172.         #MH cannot hear advertisements from either HA or FA
  173. set swtm [expr 3.0+(20.0-3.0)/4.0] 
  174.         $ns_ rtmodel-at $swtm down $node_(mh) $node_(ha)
  175. $ns_ at $swtm "$node_(ha) color black"
  176. $ns_ at $swtm "$node_(fa) color black"
  177.         set swtm [expr 3.0+(20.0-3.0)/4.0+2.0]   
  178. $ns_ rtmodel-at $swtm up $node_(mh) $node_(fa)
  179. $ns_ at $swtm "$node_(ha) color black"
  180. $ns_ at $swtm "$node_(fa) color gold"
  181. set swtm [expr 3.0+(20.0-3.0)/2.0]
  182. $ns_ rtmodel-at $swtm down $node_(mh) $node_(fa)
  183. $ns_ rtmodel-at $swtm up $node_(mh) $node_(ha)
  184. $ns_ at $swtm "$node_(ha) color gold"
  185. $ns_ at $swtm "$node_(fa) color black"
  186. set swtm [expr 3.0+(20.0-3.0)*3.0/4.0]
  187. $ns_ rtmodel-at $swtm down $node_(mh) $node_(ha)
  188. $ns_ rtmodel-at $swtm up $node_(mh) $node_(fa)
  189. $ns_ at $swtm "$node_(ha) color black"
  190. $ns_ at $swtm "$node_(fa) color gold"
  191. }
  192. Test/mip-adv-multi instproc init {} {
  193.         $self instvar ns_ testName_ lan_ node_ source_ tcp_
  194.         set testName_ mip-adv-multi
  195.         $self next
  196.         $ns_ instvar link_
  197. $ns_ at 0.0 "$node_(ha) color gold"
  198. $ns_ at 0.0 "$node_(mh) color gold"
  199. $ns_ rtmodel-at 0.1 down $node_(mh) $node_(fa)
  200.         #MH can hear advertisements from both HA and FA
  201.         set swtm [expr 3.0+(20.0-3.0)/4.0] 
  202. $ns_ rtmodel-at $swtm up $node_(mh) $node_(fa)
  203. $ns_ at $swtm "$node_(fa) color gold"
  204.         #MH can hear advertisements from only FA now
  205.         set swtm [expr 3.0+(20.0-3.0)/4.0+3.0]
  206. $ns_ rtmodel-at $swtm down $node_(mh) $node_(ha)
  207. $ns_ at $swtm "$node_(ha) color black"
  208. $ns_ at $swtm "$node_(fa) color gold"
  209.         #MH can hear advertisements from HA only now
  210. set swtm [expr 3.0+(20.0-3.0)/2.0+1.0]
  211. $ns_ rtmodel-at $swtm down $node_(mh) $node_(fa)
  212. $ns_ rtmodel-at $swtm up $node_(mh) $node_(ha)
  213. $ns_ at $swtm "$node_(ha) color gold"
  214. $ns_ at $swtm "$node_(fa) color black"
  215.         #MH can hear advertisements from only FA now
  216. set swtm [expr 3.0+(20.0-3.0)*3.0/4.0]
  217. $ns_ rtmodel-at $swtm down $node_(mh) $node_(ha)
  218. $ns_ rtmodel-at $swtm up $node_(mh) $node_(fa)
  219. $ns_ at $swtm "$node_(ha) color black"
  220. $ns_ at $swtm "$node_(fa) color gold"
  221. }
  222. proc runtest {arg} {
  223.     global quiet
  224.     set quiet 0
  225.     set b [llength $arg]
  226.     if {$b == 1} {
  227. set test $arg
  228.     } elseif {$b == 2} {
  229. set test [lindex $arg 0]
  230. set q [lindex $arg 1]
  231. if { $q == "QUIET" } {
  232.     set quiet 1
  233. } else usage
  234.     } else usage
  235.     
  236.     switch $test {
  237. mip-adv-one -
  238. mip-adv-zero -
  239. mip-adv-multi {
  240.     set t [new Test/$test]
  241. }
  242. default {
  243.     puts stderr "Unknown test $test"
  244.     exit 1
  245. }
  246.     }
  247.     $t run
  248. }
  249. global argv arg0
  250. runtest $argv