在NS2 ..in TCL文件中,如何计算无线网络中到达目的地的一条路径中的跳数?
我需要你的帮助。
答案 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_
...
赞: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
现在打印你可以使用我上面写的第一个解决方案。