NS2中从应用层访问UM-OLSR的路由表

  做一个跨层优化的仿真,在应用层Application里面要访问OLSR的路由表项,结合底层路由信息做P2P的传输策略优化。OLSR使用的是UM-OLSR。

  根据UM-OLSR的说明,如果要对单个节点上的agent进行设置,可以使用如下代码

TCL代码
  1. set ra [$mobilenode agent 255]  
  2. $ra set use_mac_ true 
  3. $ra set tc_ival_ 6 

这说明,ra取到的是对应agent的引用,可以直接操作这个路由agent了。

  那么自己的application要怎么做就简单多了,把上面的mobilenode换成自己的node对象,然后运行上面的第一句TCL即可。如下所示:

cpp代码
  1. nsaddr_t node_addr_ = agent_->addr();  
  2. int node_id_ = OLSR::node_id(node_addr_);  
  3. char command[256];  
  4. sprintf(command, "set ra [$node_(%d) agent 255]", node_id_); //id与node_数组是对应的  
  5. tcl.eval(command);  
  6. const char* ref = tcl.result();  
  7. OLSR* olsr_agent_ = (OLSR*)tcl.lookup(ref); 

  取到application所在node的OLSR Agent了,剩下的就是访问OLSR_rtable以及其中的OLSR_rt_entry了,自己改造一下OLSR_rtable吧,o(∩_∩)o

Tags:
上一篇: 10个腾讯微博的邀请
下一篇: cygwin无法安装gcc和XFree86的问题

相关日志推荐

9 条留言

  1. 日晚枫林  | 2011-05-22 04:17:25

    这个CPP代码往哪儿加啊?
  2. 日晚枫林  | 2011-05-22 04:20:04

    使用ns2仿真一个无线场景,向输出单个节点的路由表,看了您的说明后,不知道CPP代码应该往哪儿添加 而且这个TCL怎么使用,能不能举个例子呢?万分感谢!
  3. yhustc  | 2011-05-23 04:30:35

    代码写在哪个地方都可以,只要你能获取到node对象的引用即可。然后你可以重新继承一下node类,让他提供一个public的函数来输出路由表,这样不就可以随处调用了么。包括还可以绑定到tcl的command中。
  4. 日晚枫林  | 2011-05-23 07:26:29

    "代码写在哪个地方都可以,只要你能获取到node对象的引用即可。" 能不能告诉我具体放在olsr协议代码的哪些位置?哪些位置有改动。我用的是um-olsr-0.8.8 还有啊,那个继承node类怎么继承? 我是菜鸟啊,没有C基础,需要恶补啊~还有这是我毕设要做的东西,因为要把olsr改成多径的,现在把协议改了,就是想把节点的路由表输出来看看。不会啊,时间紧,希望您多多指点!感谢
  5. yhustc  | 2011-05-23 09:40:42

    代码只是方向性的啊,关键看你什么地方要用到,自然就放什么地方啊。演示代码放在什么地方,这个真不好说。
  6. Bocaifire  | 2011-07-25 08:37:01

    您好!刚入手ns2,比较菜,请教下问题,麻烦了! 1. 获取到application所在节点之后应该能直接访问路由表吧?从node再取得agent有什么作用?是为了确定要查找的路由的目的信息么? 2. 如果在node中提供输出路由表的函数,在路由协议中调用的话会以哪种方式输出?在终端中吗?为什么看ns代码里有些printf语句不在if中也没有被注释但是在终端中没有显示呢? 谢谢!
  7. Bocaifire  | 2011-07-27 01:46:49

    看两天代码终于搞明白了..呃,,上面的问题博主删了吧,不好意思啊....
  8. 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),这样会不会很乱啊~~
  9. yhustc  | 2011-08-23 05:49:16

    LS的朋友,你这种调用方式确实需要修改Node类。而且如果要计算跳数,也需要路由的信息。

发表评论

  
  
   (点击图片更换验证码)
点击刷新验证码