现在想学习一下GPSR协议,但协议的添加方法百度了一下,大多是在老一些的NS2版本上进行,有些方法在NS2.35中已经不再使用,需要稍加改动。于是把我自己在NS2.35中添加GPSR协议的步骤记录下来。
1、首先需要有NS2.35,具体安装方法可以参照 http://blog.csdn.net/joanna_yan/article/details/39779999
2、下载GPSR,我用的是KeLiu版的,下载地址:http://download.csdn.net/detail/joanna_yan/8474651
3、在 $HOME/ns-allinone-2.35/ns-2.35下新建gpsr文件夹,并将GPSR中的以下文件复制到新建的gpsr文件夹中。
cbr100.tcl
gpsr.cc
gpsr.h
gpsr.tcl
gpsr_neighbor.cc
gpsr_neighbor.h
gpsr_packet.h
gpsr-sinklist.cc
gpsr_sinklist.h
grid_deploy10x10.tcl
wireless-gpsr.tcl
4、进入$HOME/ns-allinone-2.35/ns-2.35/common,修改packet.h:
NS2.33之前版本的修改方法都是:
在enum packet_t{
增加 PT_GPSR
}
class p_info {
增加 name_[PT_GPSR]= “gpsr”
}
NS2.35版本中说把packet_t从enum变成了unsigned int
所以这一步的修改方法是:
在typedef unsigned int packet_t的下方有好多的static变量
在最后一个static packet_t PT_NTYPE = 73; // This MUST be the LAST one 的前面加入我们的新协议
static const packet_t PT_GPSR=73;
(因为PT_NTYPE这条必须为最后一条,所以我们加在他前面,并用73号,把PT_NTYPE改为74号)
在class p_info{
增加name_[PT_GPSR]="gpsr";
}
5、进入$HOME/ns-allinone-2.35/ns-2.35/trace,修改cmu-trace.cc:
增加#include<gpsr/gpsr_packet.h>
在void CMUTrace::format(Packet* p,const char* why){
case PT_PING:
break;后面
增加case PT_GPSR:
break;
}
6、进入 $HOME/ns-allinone-2.35/ns-2.35/queue,修改priqueue.cc
void PriQueue::recv(Packet *p, Handler *h)
{
增加 case PT_GPSR:
}
位置如图
7、进入$HOME/ns-allinone-2.35/ns-2.35/tcl/lib, 修改ns-packet.tcl
老版本的修改方式是:
foreach prot{
增加GPSR
}
NS3.35版本的foreach prot是下图这个样子的:
所以我们找到protolist,看到下面有很多协议
把我们的新协议加在这个列表里
8、进入 $HOME/ns-allinone-2.35/ns-2.35/ ,修改Makefile
在OBJ_STL = 的最后按照格式加入( gpsr前为TAB键而不是空格)
gpsr/gpsr_neighbor.o\
gpsr/gpsr_sinklist.o\
gpsr/gpsr.o
9、打开cygwin
10、协议添加完成