BEGIN { #程序初始化,设定一变量以记录目前处理的封包的最大ID号码。在awk环境下变量的使用不需要声明,直接赋值。 highest_uid = 0; total_packet=0; total_delay_time=0; } #下面大括号里面的内容会针对要进行处理的记录(也就是我们的trace文件)的每一行都重复执行一次 { event = $1; #$1表示一行的第一栏,是事件的动作。每一栏默认是以空格分隔的。下同。 time = $2; #事件发生的时间 node_nb = $3; #发生事件的节点号(但是两边夹着“_”,下面一句代码将“_”处理掉) trace_type = $4; #trace文件跟踪事件的层次(指在路由层或mac层等等) flag = $5; # uid = $6; #包的uid号码(普通包头的uid) pkt_type = $7; #包的类型(是信令或是数据) pkt_size = $8; #包的大小(byte) #下面的代码记录目前最高的CBR流的packet ID,本来的延迟分析是针对所有的包的(包括信令),这里作了简化,只针对CBR封包,以后大家做延时分析可以做相应的改动即可。 if ( event=="s"&& pkt_type=="cbr" && uid > highest_uid ) {#if判断句的前三个判断条件就不说了,第四个是说每个包的记录次数不超过1 highest_uid = uid; } #记录封包的传送时间 if ( event=="s"&& pkt_type=="cbr" && uid==highest_uid&&trace_type=="AGT" ) start_time[uid] = time; # start_time[]表明这是一个数组 #记录封包的接收时间 if ( event=="r"&& pkt_type=="cbr" && uid==highest_uid&&trace_type=="AGT" ) end_time[uid] = time; if( event=="D") end_time[uid] =-1; } #END表明这是程序结束前执行的语句,也只执行一次 END { #当每行资料都读取完毕后,开始计算有效封包的端到端延迟时间。 for ( packet_id = 0; packet_id <= highest_uid; packet_id++ ) { start = start_time[packet_id]; end = end_time[packet_id]; #只把接收时间大于传送时间的记录打印出来 if ( end!=-1&&start < end ){ packet_duration = end - start; total_packet++; total_delay_time+=packet_duration; } } printf("%f\n",total_delay_time/total_packet); }
无线Trace脚本(旧格式)-平均延时
最新推荐文章于 2024-07-09 17:26:06 发布