如何计算到达目的地的跳数(NS2)?

时间:2015-11-14 14:54:53

标签: tcl wireless ns2

在NS2 ..in TCL文件中,如何计算无线网络中到达目的地的一条路径中的跳数?

我需要你的帮助。

1 个答案:

答案 0 :(得分:1)

您必须在协议代码中执行此操作...
首先,我不知道您要使用哪种协议,但幸运的是,ns2中的协议彼此非常相似......所以我将指导您如何操作。

我将使用AODV协议作为样本...
从理论上讲:

我们会说当RREQ数据包到达时,递增当前路由的数据包跳数...

这是最简单的方法:

现在打开aodv.cc例如/ns-allinone-2.35/ns-2.35/aodv/aodv.cc,并在以下行中显示:

// First check if I am the destination ..

if (rq->rq_dst == index) {

if (rq->rq_dst == index) {后点击Enter并写下:

printf("Hop_Count_ %d | Packet with uid %d | from %d to %d ",rq->rq->rq_hop_count,ch->uid,ih->saddr(),ih->daddr());

此代码会将到达的每个数据包的跳数打印到目的地。

在终端cd的ns2目录中输入make,然后单击Enter。 例如:

$ cd /ns-allinone-2.35/ns-2.35/
$ make

这是最难的方式:
代码:

从您的ns2目录中打开aodv_packet.h ...例如/ns-allinone-2.35/ns-2.35/aodv/aodv_packet.h

查找struct hdr_aodv_request {并在其中创建名为hop_count_ ...

的interget变量

赞:struct hdr_aodv_request { int hop_count_;

现在从aodv.cc打开/ns-allinone-2.35/ns-2.35/aodv/aodv.cc,找到sendRequest(Packet *p)函数的定义,可能看起来像void AODV::sendRequest(nsaddr_t dst) { ...

现在,在此功能中,您必须看到一些代码,例如:

// Fill up some more fields.
rq->rq_type = AODVTYPE_RREQ;
rq->rq_hop_count = 1;
rq->rq_bcast_id = bid++;
rq->rq_dst = dst;
rq->rq_dst_seqno = (rt ? rt->rt_seqno : 0);
rq->rq_src = index;
seqno += 2;
assert((seqno % 2) == 0);
rq->rq_src_seqno = seqno;
rq->rq_timestamp = CURRENT_TIME;

如果它显示rq->rq_timestamp = CURRENT_TIME;,只需点击Enter并写下打击代码:

rq->hop_count_ = 0;

现在您需要找到可能看起来像recvRequest(Packet *p)的{​​{1}}的定义...

在此功能中找到以下行:

void AODV::recvRequest(Packet *p) {

/* * Can't reply. So forward the Route Request */ else { 点击后输入并写下:

else {

在终端rq->hop_count_++; 的ns2目录中输入cd,然后单击Enter。 例如:

make

现在打印你可以使用我上面写的第一个解决方案。