gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:03:26 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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);
.
}

问候

关于c++ - 如何修改 ns2 模拟器中节点的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com