首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ns2模拟器中修改节点的行为?

如何在ns2模拟器中修改节点的行为?
EN

Stack Overflow用户
提问于 2017-07-28 19:14:03
回答 1查看 275关注 0票数 0

我想在ns2模拟器中修改节点的行为。特别是,我必须在dsr协议的模拟中修改节点的路由。我知道dsragent.cc是管理此协议路由的类。但是如果我有一个包含10个节点的tcl脚本,称为$node1,$node2...node$10,那么如何修改$node5在dsr协议中的行为呢?如何找到该节点的单一行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-17 04:31:19

我曾与其他路由协议,但我会提到一些要点..may它是有用的。

为了访问c++中的特定节点对象,您需要知道它在tcl中的地址。然后,您可能需要在forward或recv函数中进行修改。您可以从通用、IP、DSR报头中提取所需的所有信息

代码语言:javascript
运行
复制
DSRAgent::recv(Packet* packet, Handler*)
  /* handle packets with a MAC destination address of this host, or
     the MAC broadcast addr */
{
       hdr_sr *srh =  hdr_sr::access(packet);
      hdr_ip *iph =  hdr_ip::access(packet);
      hdr_cmn *cmh =  hdr_cmn::access(packet);
      p.dest = ID((Address::instance().get_nodeaddr(iph->daddr())),::IP);
      p.src = ID((Address::instance().get_nodeaddr(iph->saddr())),::IP);

下面的意思是..如果当前节点是数据包的生成器

代码语言:javascript
运行
复制
 if (p.src == net_id) {code}

选择特定节点对象

代码语言:javascript
运行
复制
 if (net_id==ID("put the node address here", ::IP))     \\ notice net_id is a struct 
     {
       your code here
     }

您可以从tcl分配节点地址,该地址将通过命令函数传递给c++

代码语言:javascript
运行
复制
DSRAgent::command(int argc, const char*const* argv)
.
.
 if (strcasecmp(argv[1], "addr") == 0) 
    {
      int temp;
      temp = Address::instance().str2addr(argv[2]);
     net_id = ID(temp, ::IP);
     flow_table.setNetAddr(net_id.addr);
.
}

问候

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45372058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档