NS2中从应用层访问UM-OLSR的路由表
做一个跨层优化的仿真,在应用层Application里面要访问OLSR的路由表项,结合底层路由信息做P2P的传输策略优化。OLSR使用的是UM-OLSR。
根据UM-OLSR的说明,如果要对单个节点上的agent进行设置,可以使用如下代码
TCL代码
- set ra [$mobilenode agent 255]
- $ra set use_mac_ true
- $ra set tc_ival_ 6
这说明,ra取到的是对应agent的引用,可以直接操作这个路由agent了。
那么自己的application要怎么做就简单多了,把上面的mobilenode换成自己的node对象,然后运行上面的第一句TCL即可。如下所示:
cpp代码
- nsaddr_t node_addr_ = agent_->addr();
- int node_id_ = OLSR::node_id(node_addr_);
- char command[256];
- sprintf(command, "set ra [$node_(%d) agent 255]", node_id_); //id与node_数组是对应的
- tcl.eval(command);
- const char* ref = tcl.result();
- OLSR* olsr_agent_ = (OLSR*)tcl.lookup(ref);
取到application所在node的OLSR Agent了,剩下的就是访问OLSR_rtable以及其中的OLSR_rt_entry了,自己改造一下OLSR_rtable吧,o(∩_∩)o
Tags:
上一篇:
10个腾讯微博的邀请
相关日志推荐
日晚枫林 | 2011-05-22 04:17:25
这个CPP代码往哪儿加啊?日晚枫林 | 2011-05-22 04:20:04
使用ns2仿真一个无线场景,向输出单个节点的路由表,看了您的说明后,不知道CPP代码应该往哪儿添加 而且这个TCL怎么使用,能不能举个例子呢?万分感谢!yhustc | 2011-05-23 04:30:35
代码写在哪个地方都可以,只要你能获取到node对象的引用即可。然后你可以重新继承一下node类,让他提供一个public的函数来输出路由表,这样不就可以随处调用了么。包括还可以绑定到tcl的command中。日晚枫林 | 2011-05-23 07:26:29
"代码写在哪个地方都可以,只要你能获取到node对象的引用即可。" 能不能告诉我具体放在olsr协议代码的哪些位置?哪些位置有改动。我用的是um-olsr-0.8.8 还有啊,那个继承node类怎么继承? 我是菜鸟啊,没有C基础,需要恶补啊~还有这是我毕设要做的东西,因为要把olsr改成多径的,现在把协议改了,就是想把节点的路由表输出来看看。不会啊,时间紧,希望您多多指点!感谢yhustc | 2011-05-23 09:40:42
代码只是方向性的啊,关键看你什么地方要用到,自然就放什么地方啊。演示代码放在什么地方,这个真不好说。Bocaifire | 2011-07-25 08:37:01
您好!刚入手ns2,比较菜,请教下问题,麻烦了! 1. 获取到application所在节点之后应该能直接访问路由表吧?从node再取得agent有什么作用?是为了确定要查找的路由的目的信息么? 2. 如果在node中提供输出路由表的函数,在路由协议中调用的话会以哪种方式输出?在终端中吗?为什么看ns代码里有些printf语句不在if中也没有被注释但是在终端中没有显示呢? 谢谢!Bocaifire | 2011-07-27 01:46:49
看两天代码终于搞明白了..呃,,上面的问题博主删了吧,不好意思啊....lxb624 | 2011-08-18 13:29:55
如果想在在tcl中通过“$node_(id) getrt $node_(dst_id)”获取id节点上该节点到dst_id节点的路由表的话应该怎么做呢?是不是需要在node类中的command添加?如果是的话是不是需要在node.h中加入#include "aodv/aodv.h"么(假设是aodv),这样会不会很乱啊~~yhustc | 2011-08-23 05:49:16
LS的朋友,你这种调用方式确实需要修改Node类。而且如果要计算跳数,也需要路由的信息。