1、WSN中LEACH协议源码分析WSN中LEACH协议源码分析分析(一)首先对wireless.tcl进行分析,先对默认的脚本选项进行初始化:set opt(chan)Channel/WirelessChannelset opt(prop) Propagation/TwoRayGroundset opt(netif)Phy/WirelessPhyset opt(mac) Mac/802_11set opt(ifq) Queue/DropTail/PriQueueset opt(ll) LLset opt(ant) Antenna/OmniAntennaset opt(x) 0 ;# X dime
2、nsion of the topographyset opt(y) 0 ;# Y dimension of the topographyset opt(cp) set opt(sc) ./mobility/scene/scen-670x670-50-600-20-2 ;# scenario fileset opt(ifqlen) 50;# max packet in ifset opt(nn) 51 ;# number of nodesset opt(seed) 0.0set opt(stop) 10.0 ;# simulation timeset opt(tr) out.tr ;# trac
3、e fileset opt(rp) dsdv ;# routing protocol scriptset opt(lm) on ;# log movement在这个wireless.tcl中设置了一些全局变量:# Initialize Global Variables#set ns_ new Simulatorset chan new $opt(chan)set prop new $opt(prop)set topo new Topographyset tracefd open $opt(tr) w$topo load_flatgrid $opt(x) $opt(y)$prop topogra
4、phy $topo这些初始化将在后面的使用中用到,该文件最重要的是创建leach节点:创建方法如下: elseif string compare $opt(rp) leach = 0 for set i 0 $i $opt(nn) incr i leach-create-mobile-node $i如果路由协议是leach协议,则在Uamps.tcl中调用leach-create-mobile-node方法创建leach节点。将在第二小节讲如何创建leach节点。for set i 0 $i $begin_sleep_ set idle_energy expr $opt(Pidle) * ex
5、pr $ns_ now - $begin_idle_ $self getER remove $idle_energy else set sleep_energy expr $opt(Psleep) * expr $ns_ now - $begin_sleep_ $self getER remove $sleep_energy set begin_sleep_ $ns_ now set begin_idle_ 0分析(六)在start中调用下面这个方法。Application/LEACH instproc decideClusterHead global ns_ chan opt node_ $
6、self instvar alive_ TDMAschedule_ $self instvar begin_idle_ begin_sleep_ # Check the alive status of the node. If the node has run out of # energy, it no longer functions in the network. set ISalive $self node set netif_(0) set alive_ if $alive_ = 1 if $ISalive = 0 puts Node $self nodeID is DEAD! $chan removeif $self node set netif_(0) set alive_ 0 set opt(nn_) expr $opt(nn_) - 1 set ISalive $self node set netif_(0) set alive_ #从网络接口netif中查看当前节点状 况如果节点存活,但是节点能量耗光,则$chan removeif $self node set netif_(0)将节点信道中移出,并将节点设置为死亡。节点的总数目减少一个。if $opt(eq_energy) = 1 # # Pi(t) = k / (