本文主要是介绍NS2如何在路由层获取队列的长度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在调试一个SAR协议,需要通过IFQ的长度来判断传感器节点是否发生阻塞。目前,在Agent中已经能够获取LL和MAC接口,查看了LL.h/cc代码,尝试着直接在Agent.cc中获取:Queue* ifq = (Queue*)ll->ifq(); 结果发现获得的指针总为空,目前还不知道具体原因在哪。
但是一种解决方法是通过MAC层获取到IFQ的指针,方法是参考下面Liu Jian的。
1. 因为仿真用到的是MAC 802.11协议,因此修改MAC_802-11.h/cc文件,在其中加入:
#include<queue.h>
Queue *ifq_; //定义成员变量
inline Queue *ifq() {return ifq_;}
2. 在mac-802_11.cc中修改command()函数
int Mac802_11::command(int argc, const char*const* argv)
......
else if(strcmp(argv[1],"ifq")==0){
ifq_=(Queue*)TclObject::lookup(argv[2]);
if(ifq_==0)
return TCL_ERROR;
return TCL_OK;
}
3. 随后修改tcl/lib/ns-mobilenode.tcl文件,调用上面的方法获取到IFQ的指针:
# Mac Layer
$mac netif $netif
$mac ifq $ifq
4. 至此已经可以在MAC层中获取IFQ的指针了,但是要在路由层或者Agent层获取,还得获取到MAC的指针,这一步可以同上类似实现。
参考:http://liujian.viviti.com/entries/ns2/ns-2%E6%8A%80%E5%B7%A7%E7%AC%AC%E4%BA%8C%E7%AF%87%EF%BC%9A%E8%B7%AF%E7%94%B1%E5%B1%82%E8%8E%B7%E5%8F%96%E9%98%9F%E5%88%97queue-length%E4%BF%A1%E6%81%AF
这篇关于NS2如何在路由层获取队列的长度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!