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

网络

开发平台:

C/C++

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