【NS2】NS2.35成功添加GPSR协议

现在想学习一下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

【NS2】NS2.35成功添加GPSR协议_第1张图片

所以这一步的修改方法是:

在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; 
      } 

【NS2】NS2.35成功添加GPSR协议_第2张图片


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,看到下面有很多协议


把我们的新协议加在这个列表里

【NS2】NS2.35成功添加GPSR协议_第3张图片


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

【NS2】NS2.35成功添加GPSR协议_第4张图片


10、协议添加完成


你可能感兴趣的:(ns2,gpsr)