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

通讯编程

开发平台:

Visual C++

  1. ###################################################
  2. #         Peer-to-Peer Tree over 802.15.4         #
  3. #                (beacon enabled)                 #
  4. #        Copyright (c) 2003 Samsung/CUNY          #
  5. # - - - - - - - - - - - - - - - - - - - - - - - - #
  6. #           Prepared by Jianliang Zheng           #
  7. #            (zheng@ee.ccny.cuny.edu)             #
  8. ###################################################
  9. # ======================================================================
  10. # Define options
  11. # ======================================================================
  12. set val(chan)           Channel/WirelessChannel    ;# Channel Type
  13. set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  14. set val(netif)          Phy/WirelessPhy/802_15_4
  15. set val(mac)            Mac/802_15_4
  16. set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  17. set val(ll)             LL                         ;# link layer type
  18. set val(ant)            Antenna/OmniAntenna        ;# antenna model
  19. set val(ifqlen)         50                         ;# max packet in ifq
  20. set val(nn)             21                         ;# number of mobilenodes
  21. set val(rp)             AODV                       ;# AODV Routing
  22. set val(x) 50
  23. set val(y) 50
  24. set val(nam) wpan_demo4.nam
  25. set val(traffic) mix                        ;# mix/cbr/poisson/ftp
  26. #read command line arguments
  27. proc getCmdArgu {argc argv} {
  28.         global val
  29.         for {set i 0} {$i < $argc} {incr i} {
  30.                 set arg [lindex $argv $i]
  31.                 if {[string range $arg 0 0] != "-"} continue
  32.                 set name [string range $arg 1 end]
  33.                 set val($name) [lindex $argv [expr $i+1]]
  34.         }
  35. }
  36. getCmdArgu $argc $argv
  37. set appTime1          10.3 ;# in seconds 
  38. set appTime2          10.6 ;# in seconds 
  39. set stopTime            100 ;# in seconds 
  40. # Initialize Global Variables
  41. set ns_ [new Simulator]
  42. set tracefd     [open ./wpan_demo4.tr w]
  43. $ns_ trace-all $tracefd
  44. if { "$val(nam)" == "wpan_demo4.nam" } {
  45.         set namtrace     [open ./$val(nam) w]
  46.         $ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
  47. }
  48. $ns_ puts-nam-traceall {# nam4wpan #} ;# inform nam that this is a trace file for wpan (special handling needed)
  49. Mac/802_15_4 wpanCmd verbose on
  50. Mac/802_15_4 wpanNam namStatus on ;# default = off (should be turned on before other 'wpanNam' commands can work)
  51. #Mac/802_15_4 wpanNam ColFlashClr gold ;# default = gold
  52. #Mac/802_15_4 wpanNam NodeFailClr grey ;# default = grey
  53. # For model 'TwoRayGround'
  54. set dist(5m)  7.69113e-06
  55. set dist(9m)  2.37381e-06
  56. set dist(10m) 1.92278e-06
  57. set dist(11m) 1.58908e-06
  58. set dist(12m) 1.33527e-06
  59. set dist(13m) 1.13774e-06
  60. set dist(14m) 9.81011e-07
  61. set dist(15m) 8.54570e-07
  62. set dist(16m) 7.51087e-07
  63. set dist(20m) 4.80696e-07
  64. set dist(25m) 3.07645e-07
  65. set dist(30m) 2.13643e-07
  66. set dist(35m) 1.56962e-07
  67. set dist(40m) 1.20174e-07
  68. Phy/WirelessPhy set CSThresh_ $dist(12m)
  69. Phy/WirelessPhy set RXThresh_ $dist(12m)
  70. # set up topography object
  71. set topo       [new Topography]
  72. $topo load_flatgrid $val(x) $val(y)
  73. # Create God
  74. set god_ [create-god $val(nn)]
  75. set chan_1_ [new $val(chan)]
  76. # configure node
  77. $ns_ node-config -adhocRouting $val(rp) 
  78. -llType $val(ll) 
  79. -macType $val(mac) 
  80. -ifqType $val(ifq) 
  81. -ifqLen $val(ifqlen) 
  82. -antType $val(ant) 
  83. -propType $val(prop) 
  84. -phyType $val(netif) 
  85. -topoInstance $topo 
  86. -agentTrace OFF 
  87. -routerTrace OFF 
  88. -macTrace ON 
  89. -movementTrace OFF 
  90.                 #-energyModel "EnergyModel" 
  91.                 #-initialEnergy 1 
  92.                 #-rxPower 0.3 
  93.                 #-txPower 0.3 
  94. -channel $chan_1_
  95. for {set i 0} {$i < $val(nn) } {incr i} {
  96. set node_($i) [$ns_ node]
  97. $node_($i) random-motion 0 ;# disable random motion
  98. }
  99. #set Cm 4
  100. #set Lm 3
  101. #Agent/ZBR Cm $Cm
  102. #Agent/ZBR Lm $Lm
  103. #Agent/ZBR BSize calc
  104. #set BlockSize [Agent/ZBR BSize]
  105. #set cskip0 [Agent/ZBR CSkip 0]
  106. #set cskip1 [Agent/ZBR CSkip 1]
  107. #set cskip2 [Agent/ZBR CSkip 2]
  108. #puts [format "Cm:        %s" $Cm]
  109. #puts [format "Lm:        %s" $Lm]
  110. #puts [format "BlockSize: %s" $BlockSize]
  111. #$ns_ at 0.0 "$ns_ trace-annotate "Cm = $Cm, Lm = $Lm, BlockSize = $BlockSize, CSkip0 = $cskip0, CSkip1 = $cskip1, CSkip2 = $cskip2""
  112. # default is RN+, so only set RN-
  113. #$node_(3) RNType 0
  114. #$node_(4) RNType 0
  115. #$node_(7) RNType 0
  116. #$node_(8) RNType 0
  117. #$node_(9) RNType 0
  118. #$node_(10) RNType 0
  119. #$node_(13) RNType 0
  120. #$node_(15) RNType 0
  121. #$node_(18) RNType 0
  122. #$node_(20) RNType 0
  123. source ./wpan_demo4.scn
  124. $ns_ at 0.0 "$node_(0) NodeLabel "PAN Coor""
  125. #for {set i 1} {$i < $val(nn)} {incr i} {
  126. # set RNType [eval $node_($i) RNType]
  127. # if {$RNType == "0"} {
  128. # $ns_ at 0.0 "$node_($i) NodeLabel -"
  129. # } else {
  130. # $ns_ at 0.0 "$node_($i) NodeLabel +"
  131. # }
  132. #}
  133. $ns_ at 0.0 "$node_(0) sscs startCTPANCoord 1" ;# startCTPANCoord <txBeacon=1> <BO=3> <SO=3>
  134. $ns_ at 0.3 "$node_(1) sscs startCTDevice 1 1"  ;# startCTDevice <isFFD=1> <assoPermit=1> <txBeacon=0> <BO=3> <SO=3>
  135. $ns_ at 1.3 "$node_(9) sscs startCTDevice 1 1"
  136. $ns_ at 1.7 "$node_(13) sscs startCTDevice 1 1"
  137. $ns_ at 2.3 "$node_(19) sscs startCTDevice 1 1"
  138. $ns_ at 3.3 "$node_(2) sscs startCTDevice 1 1 1"
  139. $ns_ at 3.5 "$node_(7) sscs startCTDevice 1 1 1"
  140. $ns_ at 3.6 "$node_(11) sscs startCTDevice 1 1 1"
  141. $ns_ at 3.8 "$node_(16) sscs startCTDevice 1 1 1"
  142. $ns_ at 4.3 "$node_(3) sscs startCTDevice 0 0"
  143. $ns_ at 4.5 "$node_(6) sscs startCTDevice 1 1"
  144. $ns_ at 4.8 "$node_(12) sscs startCTDevice 1 0"
  145. $ns_ at 5.1 "$node_(17) sscs startCTDevice 1 0"
  146. $ns_ at 5.6 "$node_(20) sscs startCTDevice 1 1"
  147. $ns_ at 5.8 "$node_(5) sscs startCTDevice 1 1"
  148. $ns_ at 6.0 "$node_(10) sscs startCTDevice 1 1"
  149. $ns_ at 6.3 "$node_(14) sscs startCTDevice 1 1"
  150. $ns_ at 6.8 "$node_(18) sscs startCTDevice 1 0"
  151. $ns_ at 7.0 "$node_(4) sscs startCTDevice 0 0"
  152. $ns_ at 7.3 "$node_(8) sscs startCTDevice 0 0"
  153. $ns_ at 7.7 "$node_(15) sscs startCTDevice 0 0"
  154. $ns_ at $appTime1 "$node_(0) sscs stopBeacon"
  155. $ns_ at $appTime1 "$node_(2) sscs startBeacon 4 4"
  156. $ns_ at $appTime1 "$node_(7) sscs startBeacon 4 4"
  157. #$ns_ at $appTime1 "$node_(11) sscs stopBeacon"
  158. #$ns_ at $appTime1 "$node_(16) sscs stopBeacon"
  159. Mac/802_15_4 wpanNam PlaybackRate 4ms
  160. $ns_ at $appTime1 "Mac/802_15_4 wpanNam PlaybackRate 1.0ms"
  161. $ns_ at [expr $appTime1 + 0.5] "Mac/802_15_4 wpanNam PlaybackRate 2.0ms"
  162. $ns_ at $appTime1 "puts "nTransmitting data ...n""
  163. # Setup traffic flow between nodes
  164. proc cbrtraffic { src dst interval starttime } {
  165.    global ns_ node_
  166.    set udp_($src) [new Agent/UDP]
  167.    eval $ns_ attach-agent $node_($src) $udp_($src)
  168.    set null_($dst) [new Agent/Null]
  169.    eval $ns_ attach-agent $node_($dst) $null_($dst)
  170.    set cbr_($src) [new Application/Traffic/CBR]
  171.    eval $cbr_($src) set packetSize_ 80
  172.    eval $cbr_($src) set interval_ $interval
  173.    eval $cbr_($src) set random_ 0
  174.    #eval $cbr_($src) set maxpkts_ 10000
  175.    eval $cbr_($src) attach-agent $udp_($src)
  176.    eval $ns_ connect $udp_($src) $null_($dst)
  177.    $ns_ at $starttime "$cbr_($src) start"
  178. }
  179. proc poissontraffic { src dst interval starttime } {
  180.    global ns_ node_
  181.    set udp($src) [new Agent/UDP]
  182.    eval $ns_ attach-agent $node_($src) $udp($src)
  183.    set null($dst) [new Agent/Null]
  184.    eval $ns_ attach-agent $node_($dst) $null($dst)
  185.    set expl($src) [new Application/Traffic/Exponential]
  186.    eval $expl($src) set packetSize_ 70
  187.    eval $expl($src) set burst_time_ 0
  188.    eval $expl($src) set idle_time_ [expr $interval*1000.0-70.0/100]ms ;# idle_time + pkt_tx_time = interval
  189.    eval $expl($src) set rate_ 100k
  190.    eval $expl($src) attach-agent $udp($src)
  191.    eval $ns_ connect $udp($src) $null($dst)
  192.    $ns_ at $starttime "$expl($src) start"
  193. }
  194. if {$val(rp) == "ZBR"} {
  195. Mac/802_15_4 wpanCmd callBack 2 ;# 0=none; 1=failure only (default); 2=both failure and success
  196. }
  197. if { ("$val(traffic)" == "mix") || ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
  198.    if { "$val(traffic)" == "mix" } {
  199.     set trafficName "cbr + poisson"
  200.     set traffic1 cbr
  201.     set traffic2 poisson
  202.    } else {
  203.     set trafficName $val(traffic)
  204.     set traffic1 $val(traffic)
  205.     set traffic2 $val(traffic)
  206.    }
  207.    puts "nTraffic: $trafficName"
  208.    #Mac/802_15_4 wpanCmd ack4data on
  209.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  210.    ${traffic1}traffic 3 18 0.2 $appTime1
  211.    ${traffic2}traffic 9 17 0.2 $appTime2
  212.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  213.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  214.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  215.    $ns_ at $appTime1 "$node_(3) add-mark m1 blue circle"
  216.    $ns_ at $appTime1 "$node_(18) add-mark m2 blue circle"
  217.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) $traffic1 traffic from node 3 to node 18""
  218.    $ns_ at $appTime2 "$node_(9) add-mark m3 green4 circle"
  219.    $ns_ at $appTime2 "$node_(17) add-mark m4 green4 circle"
  220.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) $traffic2 traffic from node 9 to node 17""
  221.    $ns_ at [expr $appTime1 + 2.0] "Mac/802_15_4 wpanCmd link-down 0 19"
  222.    set tmpTime [format "%.1f" [expr $appTime1 + 2.0]]
  223.    $ns_ at [expr $appTime1 + 2.0] "$ns_ trace-annotate "(at $tmpTime) link down: 0 -> 19""
  224.    $ns_ at [expr $appTime2 + 3.0] "$node_(2) node-down"
  225.    set tmpTime [format "%.1f" [expr $appTime2 + 3.0]]
  226.    $ns_ at [expr $appTime2 + 3.0] "$ns_ trace-annotate "(at $tmpTime) node down: 2""
  227.    $ns_ at [expr $appTime1 + 8.0] "Mac/802_15_4 wpanCmd link-up 0 19"
  228.    set tmpTime [format "%.1f" [expr $appTime1 + 8.0]]
  229.    $ns_ at [expr $appTime1 + 8.0] "$ns_ trace-annotate "(at $tmpTime) link up: 0 -> 19""
  230.    $ns_ at [expr $appTime2 + 10.0] "$node_(2) node-up"
  231.    set tmpTime [format "%.1f" [expr $appTime2 + 10.0]]
  232.    $ns_ at [expr $appTime2 + 10.0] "$ns_ trace-annotate "(at $tmpTime) node up: 2""
  233.    if { "$val(traffic)" == "cbr" } {
  234.     set pktType cbr
  235.     set pktType2 cbr
  236.    } elseif { "$val(traffic)" == "poission" } {
  237.     set pktType exp
  238.     set pktType2 exp
  239.    } else {
  240.     set pktType cbr
  241.     set pktType2 exp
  242.    }
  243.    Mac/802_15_4 wpanNam FlowClr -p $pktType -s 3 -d 18 -c blue
  244.    Mac/802_15_4 wpanNam FlowClr -p $pktType2 -s 9 -d 17 -c green4
  245. }
  246. proc ftptraffic { src dst starttime } {
  247.    global ns_ node_
  248.    set tcp($src) [new Agent/TCP]
  249.    eval $tcp($src) set packetSize_ 60
  250.    set sink($dst) [new Agent/TCPSink]
  251.    eval $ns_ attach-agent $node_($src) $tcp($src)
  252.    eval $ns_ attach-agent $node_($dst) $sink($dst)
  253.    eval $ns_ connect $tcp($src) $sink($dst)
  254.    set ftp($src) [new Application/FTP]
  255.    eval $ftp($src) attach-agent $tcp($src)
  256.    $ns_ at $starttime "$ftp($src) start"
  257. }
  258. if { "$val(traffic)" == "ftp" } {
  259.    puts "nTraffic: ftp"
  260.    #Mac/802_15_4 wpanCmd ack4data off
  261.    puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
  262.    ftptraffic 16 3 $appTime1
  263.    ftptraffic 8 11 $appTime2
  264.    Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
  265.    Mac/802_15_4 wpanNam FlowClr -p ARP -c green
  266.    Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
  267.    $ns_ at $appTime1 "$node_(16) add-mark m1 blue circle"
  268.    $ns_ at $appTime1 "$node_(3) add-mark m2 blue circle"
  269.    $ns_ at $appTime1 "$ns_ trace-annotate "(at $appTime1) ftp traffic from node 16 to node 3""
  270.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 16 -d 3 -c blue
  271.    Mac/802_15_4 wpanNam FlowClr -p ack -s 3 -d 16 -c blue
  272.    $ns_ at $appTime2 "$node_(8) add-mark m3 green4 circle"
  273.    $ns_ at $appTime2 "$node_(11) add-mark m4 green4 circle"
  274.    $ns_ at $appTime2 "$ns_ trace-annotate "(at $appTime2) ftp traffic from node 8 to node 11""
  275.    Mac/802_15_4 wpanNam FlowClr -p tcp -s 8 -d 11 -c green4
  276.    Mac/802_15_4 wpanNam FlowClr -p ack -s 11 -d 8 -c green4
  277. }
  278. # defines the node size in nam
  279. for {set i 0} {$i < $val(nn)} {incr i} {
  280. $ns_ initial_node_pos $node_($i) 2
  281. }
  282. # Tell nodes when the simulation ends
  283. for {set i 0} {$i < $val(nn) } {incr i} {
  284.     $ns_ at $stopTime "$node_($i) reset";
  285. }
  286. $ns_ at $stopTime "stop"
  287. $ns_ at $stopTime "puts "nNS EXITING...n""
  288. $ns_ at $stopTime "$ns_ halt"
  289. proc stop {} {
  290.     global ns_ tracefd appTime val env
  291.     $ns_ flush-trace
  292.     close $tracefd
  293.     set hasDISPLAY 0
  294.     foreach index [array names env] {
  295.         #puts "$index: $env($index)"
  296.         if { ("$index" == "DISPLAY") && ("$env($index)" != "") } {
  297.                 set hasDISPLAY 1
  298.         }
  299.     }
  300.     if { ("$val(nam)" == "wpan_demo4.nam") && ("$hasDISPLAY" == "1") } {
  301.      exec nam wpan_demo4.nam &
  302.     }
  303. }
  304. puts "nStarting Simulation..."
  305. $ns_ run