l2handover.tcl
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:7k
源码类别:

网络

开发平台:

C/C++

  1. # Script showing a layer 2 handover in 802.16
  2. # @author rouil
  3. # Scenario: Communication between MN and Sink Node with MN attached to BS.
  4. # Notes:- In order to perform layer 2 handover, the BSs must share the same channel
  5. #       - Additional mechanisms are required in order to continue a communication after a layer 2 handover
  6. #         This is achieved by updating the MN address to simulate layer 3 handovers and traffic redirection.
  7. #         We will provide the code as part of our implementation of IEEE 802.21.
  8. #
  9. #
  10. # Topology scenario:
  11. #
  12. #
  13. #         |-----|          
  14. #         | MN0 |                 ; 1.0.1 
  15. #         |-----|        
  16. #
  17. #
  18. #   (^)                         (^)
  19. #    |                           |
  20. #     |--------------|            |--------------|
  21. #           | Base Station | ; 1.0.0    | Base Station |
  22. #           |--------------|            |--------------|
  23. #         |                           |
  24. #         |                           |
  25. #      |-----------|                     |
  26. #            | Sink node |---------------------| 
  27. #            |-----------|  ; 0.0.0
  28. #
  29. #check input parameters
  30. if {$argc != 0} {
  31. puts ""
  32. puts "Wrong Number of Arguments! No arguments in this topology"
  33. puts ""
  34. exit 
  35. }
  36. # set global variables
  37. set output_dir .
  38. set traffic_start 5
  39. set traffic_stop  15
  40. set simulation_stop 60
  41. #define debug values
  42. Mac/802_16 set debug_ 1
  43. Mac/802_16 set t21_timeout_          20 ;#max 10s
  44. #define coverage area for base station: 20m coverage 
  45. Phy/WirelessPhy set Pt_ 0.025
  46. Phy/WirelessPhy set RXThresh_ 6.12277e-09
  47. Phy/WirelessPhy set CSThresh_ [expr 0.9 *[Phy/WirelessPhy set RXThresh_]]
  48. # Parameter for wireless nodes
  49. set opt(chan)           Channel/WirelessChannel    ;# channel type
  50. set opt(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  51. set opt(netif)          Phy/WirelessPhy/OFDM       ;# network interface type
  52. set opt(mac)            Mac/802_16                 ;# MAC type
  53. set opt(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  54. set opt(ll)             LL                         ;# link layer type
  55. set opt(ant)            Antenna/OmniAntenna        ;# antenna model
  56. set opt(ifqlen)         50                  ;# max packet in ifq
  57. set opt(adhocRouting)   DSDV                       ;# routing protocol
  58. set opt(x) 670    ;# X dimension of the topography
  59. set opt(y) 670    ;# Y dimension of the topography
  60. #defines function for flushing and closing files
  61. proc finish {} {
  62.         global ns tf output_dir nb_mn
  63.         $ns flush-trace
  64.         close $tf
  65. exit 0
  66. }
  67. #create the simulator
  68. set ns [new Simulator]
  69. $ns use-newtrace
  70. #create the topography
  71. set topo [new Topography]
  72. $topo load_flatgrid $opt(x) $opt(y)
  73. #open file for trace
  74. set tf [open $output_dir/out.res w]
  75. $ns trace-all $tf
  76. # set up for hierarchical routing (needed for routing over a basestation)
  77. $ns node-config -addressType hierarchical
  78. AddrParams set domain_num_ 3           ;# domain number
  79. lappend cluster_num 1 1 1            ;# cluster number for each domain 
  80. AddrParams set cluster_num_ $cluster_num
  81. lappend eilastlevel 1 2 2 ;# number of nodes for each cluster 
  82. AddrParams set nodes_num_ $eilastlevel
  83. puts "Configuration of hierarchical addressing done"
  84. # Create God
  85. create-god 3 ;# nb_mn + 2 (base station and sink node)
  86. #creates the sink node in first addressing space.
  87. set sinkNode [$ns node 0.0.0]
  88. puts "sink node created"
  89. #create common channel
  90. set channel [new $opt(chan)]
  91. #creates the Access Point (Base station)
  92. $ns node-config -adhocRouting $opt(adhocRouting) 
  93.                  -llType $opt(ll) 
  94.                  -macType $opt(mac) 
  95.                  -ifqType $opt(ifq) 
  96.                  -ifqLen $opt(ifqlen) 
  97.                  -antType $opt(ant) 
  98.                  -propType $opt(prop)    
  99.                  -phyType $opt(netif) 
  100.                  -channel $channel 
  101.                  -topoInstance $topo 
  102.                  -wiredRouting ON 
  103.                  -agentTrace ON 
  104.                  -routerTrace ON 
  105.                  -macTrace ON  
  106.                  -movementTrace OFF
  107. #puts "Configuration of base station"
  108. set bstation [$ns node 1.0.0]  
  109. $bstation random-motion 0
  110. #provide some co-ord (fixed) to base station node
  111. $bstation set X_ 50.0
  112. $bstation set Y_ 50.0
  113. $bstation set Z_ 0.0
  114. set clas [new SDUClassifier/Dest]
  115. [$bstation set mac_(0)] add-classifier $clas
  116. #set the scheduler for the node. 
  117. set bs_sched [new WimaxScheduler/BS]
  118. [$bstation set mac_(0)] set-scheduler $bs_sched
  119. [$bstation set mac_(0)] set-channel 0
  120. puts "Base Station 1 created"
  121. set bstation2 [$ns node 2.0.0]  
  122. $bstation2 random-motion 0
  123. #provide some co-ord (fixed) to base station node
  124. $bstation2 set X_ 65.0
  125. $bstation2 set Y_ 50.0
  126. $bstation2 set Z_ 0.0
  127. set clas2 [new SDUClassifier/Dest]
  128. [$bstation2 set mac_(0)] add-classifier $clas2
  129. #set the scheduler for the node.
  130. set bs_sched2 [new WimaxScheduler/BS]
  131. [$bstation2 set mac_(0)] set-scheduler $bs_sched2
  132. [$bstation2 set mac_(0)] set-channel 1
  133. puts "Base Station 2 created"
  134. # creation of the mobile nodes
  135. $ns node-config -wiredRouting OFF 
  136.                 -macTrace ON   ;# Mobile nodes cannot do routing.
  137. set wl_node [$ns node 1.0.1]  ;# create the node with given @.
  138. $wl_node random-motion 0 ;# disable random motion
  139. $wl_node base-station [AddrParams addr2id [$bstation node-addr]] ;#attach mn to basestation
  140. $wl_node set X_ 45.0
  141. $wl_node set Y_ 50.0
  142. $wl_node set Z_ 0.0
  143. $ns at 0.0 "$wl_node setdest 70.0 50.0 2.0"
  144. set clas [new SDUClassifier/Dest]
  145. [$wl_node set mac_(0)] add-classifier $clas
  146. #set the scheduler for the node. Must be changed to -shed [new $opt(sched)]
  147. set ss_sched [new WimaxScheduler/SS]
  148. [$wl_node set mac_(0)] set-scheduler $ss_sched
  149. [$wl_node set mac_(0)] set-channel 0
  150. puts "wireless node created ..." ;# debug info
  151. #$ns at 6.5 "$ss_sched send-scan"
  152. #create source traffic
  153. #Create a UDP agent and attach it to node n0
  154. set udp [new Agent/UDP]
  155. $udp set packetSize_ 1500
  156. $ns attach-agent $wl_node $udp
  157. # Create a CBR traffic source and attach it to udp0
  158. set cbr [new Application/Traffic/CBR]
  159. $cbr set packetSize_ 1000
  160. $cbr set interval_ 0.1
  161. $cbr attach-agent $udp
  162. #create an sink into the sink node
  163. # Create the Null agent to sink traffic
  164. set null [new Agent/Null] 
  165. $ns attach-agent $sinkNode $null
  166. # Attach the 2 agents
  167. $ns connect $udp $null
  168. # create the link between sink node and base station
  169. $ns duplex-link $sinkNode $bstation 100Mb 1ms DropTail
  170. # Traffic scenario: here the all start talking at the same time
  171. $ns at $traffic_start "$cbr start"
  172. $ns at $traffic_stop "$cbr stop"
  173. $ns at $simulation_stop "finish"
  174. puts "Running simulation"
  175. $ns run
  176. puts "Simulation done."