【转】Leach协议学习(3)——Leach协议分析

来源:互联网 发布:oracle sql 优化 编辑:程序博客网 时间:2024/04/29 11:41

转自:http://hi.baidu.com/jerry_916/blog/item/20f9a5cef942d534f9dc6131.html

 

$ ./test

结果文档在mit/uAMPS/sims文件夹下,分别为:wireless.alive    wireless.energy   wireless.data
wireless.alive第一行是运行时间,第二行就节点ID,第三行是如果是1,表示该节点还存活,如果是0,则表示节点死亡。wireless.energywireless.data也是同样的结构,对于leach产生的数据,可分为很多方面,如节点能量消耗,节点存活数量,速率,节点之间发送与接收数据等。

对于leach.alive,可分析节点存活数,gwak –v outfile=live –f getNodelive.awk leach.alive,其中getNodelive.awk需要自己编写;

getNodelive.awk文件如下:
BEGIN{
      step=10;    #间隔时间
      time=0;    
      i=0;
      j=0;
      }
{if($3==0){ i++; }
j++;
if(j==20){
       j=0;
       printf"%d  %d/n",time,20-i>>outfile;
       time+=step;
       i=0;
}
}


对于leach.energy,可分析节点的能量消耗,如
gawk ‘{if($2==18){ if($3>2) $3=2; print $1,$3>>18.data;} if($2==65){if($3>2) $3=2; print $1,$3>>65.data}}’ leach.energy   (节点18和节点65)

对于leach.tr,可以分析的相当多,如分析节点间发送和接受数据关系
gawk -v src=8 -v  dst=29 -v outfile1=node8 -v outfile2=node29 -f getNodeRecv1.awk leach-out.tr

getNodeRecv1.awk 文件如下:
# getNodeRecv1.awk

BEGIN {largest_seq=0;
packet_send++;
}

{
if($1=="s")
{
if($6>largest_seq)largest_seq=$6;
}
if($1=="s"&&$3==("_" src "_")&&$4=="AGT")
{
packet_send++;
send_time[$6]=$2;
}
if($1=="r"&&$3==("_" dst "_")&&$4=="MAC")
{
packet_rcvd++;
rcvd_time[$6]=$2;
}
}
END{
for(i=0;i<largest_seq;i++)
{if(rcvd_time[i]!=0)
{printf"%f %d/n",rcvd_time[i],i>>outfile2;}
if(send_time[i]!=0)
{printf"%f %d/n",send_time[i],i>>outfile1;}
}
}


getRatio1.awk文件如下:
# 速率
# 初始化设定
BEGIN {
        sendLine = 0;
        recvLine = 0;
    fowardLine = 0;
}
# 应用层收到包
$0 ~/^s.* AGT/ {
        sendLine ++ ;
}
# 应用层发送包
$0 ~/^r.* AGT/ {
        recvLine ++ ;
}
# 路由层转发包
$0 ~/^f.* RTR/ {
        fowardLine ++ ;
}
# 最后输出结果
END {
        printf "cbr s:%d r:%d, r/s Ratio:%.4f, f:%d /n", sendLine, recvLine, (recvLine/sendLine),fowardLine>>outfile;
}
原创粉丝点击