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

C++ 如何在ns2模拟器中修改节点的行为?,c++,network-programming,tcl,simulator,ns2,C++,Network Programming,Tcl,Simulator,Ns2,我想修改ns2模拟器中节点的行为。特别是,我必须在dsr协议的模拟中修改节点的路由。 我知道dsragent.cc是管理此协议路由的类。但是如果我有一个包含10个节点的tcl脚本,叫做$node1、$node2……node$10,那么如何修改dsr协议中$node5的行为呢?如何找到该节点的单一行为?我曾使用过其他路由协议,但我会提到一些要点。可能会有用 为了在C++中访问特定的节点对象,需要知道它在TCL中的地址。然后,您可能需要在前进或后退功能中进行修改。。 您可以从通用、IP、DSR头文件

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

我曾使用过其他路由协议,但我会提到一些要点。可能会有用

<>为了在C++中访问特定的节点对象,需要知道它在TCL中的地址。然后,您可能需要在前进或后退功能中进行修改。。 您可以从通用、IP、DSR头文件中提取所需的所有信息

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);
以下是。。如果当前节点是数据包的生成器

 if (p.src == net_id) {code}
选择特定节点对象的步骤

 if (net_id==ID("put the node address here", ::IP))     \\ notice net_id is a struct 
     {
       your code here
     }
您可以从tcl分配节点地址 这个地址将通过命令函数

传递给C++。
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);
.
}

问候

谢谢您的回复。你能帮我吗?提前谢谢。