Ns2.34上leach协议的完美移植
经过几天的不断实验,以及网上各位前辈的帮助,终于成功将leach协议完美移植到ns2.34上,下面是我的安装笔记。
Step1
在ns-2.34的目录下新建一个leach文件夹,将leach.tar.gz放入这个文件夹
Step2
在终端中进入这个目录下,键入tar zxf leach.tar.gz
Step3
①将leach/mit整个目录复制到ns-allinone-2.34/ns-2.34中
②将leach/mac目录下的, mac-sensor.h, , mac-sensor-timers.h四个文件复制到ns-allinone-2.34/ns-2.34/mac中
③将leach/tcl/mobility目录下的四个文件复制到ns-allinone-2.34/ns-2.34/tcl/mobility中
④将ns-allinone-2.34/ns-2.34/tcl/ex目录下的wireless.tcl重命名为wireless_1.tcl,再将leach/tcl/ex目录下的wireless.tcl复制到ns-allinone-2.34/ns-2.34/tcl/ex中⑤将leach目录下的test,leach_test,package_up三个文件复制到ns-allinone-2.34/ ns-2.34中
Step3 修改文件
①需要修改的文件有:
ns-allinone-2.34/ns-2.34/apps/,app.h
ns-allinone-2.34/ns-2.34/trace/,cmu-trace.h
ns-allinone-2.34/ns-2.34/common/,,packet.h
ns-allinone-2.34/ns-2.34/mac/,ll.h,,,phy.h,wireless-phy.c c,wireless-phy.h
②修改方法:
对于leach目录下相应的文件(即刚才未复制的文件),将代码中以“#ifdef MIT_uAMPS”开始,并以“#endif”结束的部分复制到以上文件对应的位置
这个过此要小心核对修改,否则前功尽弃
③特殊情况
<1> ns-allinone-2.34/ns-2.34/common/packet.h中大约185行,根据其他变量的格式将代码更改为
#ifdef MIT_uAMPS
static const packet_t PT_RCA = 61;
#endif
并将最后一个枚举值改为62
这个过程可以随情况改变,还要注意的是packet.h文件并不是只改这一部分,前面的修改依然要。
<2> ns-allinone-2.34/ns-2.34/mac/wireless-phy.h,给类WirelessPhy添加public变量,大约105行
#ifdef MIT_uAMPS
MobileNode * node_;
#endif
或者将文件中的第150行,本来注释掉的// MobileNode * node_; 取消注释,注意这两个只能选一个
对于Antenna *ant_;和Propagation *propagation_;之间的那部分代码,应将其置于public声明的最后(private之前), 即Propagation变量必须保持为public,也就是说将下面的关键字Private注释掉
#ifdef MIT_uAMPS
EnergyResource *energy_; // Energy resource
int alive_; // 0 = dead, 1 = alive
//endif
//ifdef MIT_uAMPS_temp
double Efriss_amp_; // Xmit amp energy (J/bit/m^2)
double Etwo_ray_amp_; // Xmit amp energy (J/bit/m^4)
double EXcvr_; // Xcvr energy (J/bit)
double Pfriss_amp_; // Friss base transmission power (W/m^2)
double Ptwo_ray_amp_; // Two-ray base transmission power (W/m^4)
double PXcvr_; // Xcvr Power (W)
int sleep_; // 0 = awake, 1 = asleep
int ss_; // amount of spreading
double time_finish_rcv_;
double dist_; // approx. distance to transmitter
private: //将其注释掉
double pktEnergy(double pt, double pxcvr, int nbytes);
#endif
<3> ns-allinone-2.34/ns-2.34/mac/(大约235行), (大约132行),将代码中的
node_ = (Node *)obj;
改为
#ifdef MIT_uAMPS
node_ = (MobileNode *)obj;
#else
node_ = (Node *)obj;
#endif
④修改ns-allinone-2.34/ns-2.34/mit/uAMPS/ns-leach.tcl
将set dst_ $mac_dsc改为set dsc_addr $mac_dsc
⑤修改ns-allinone-2.34/ns-2.34目录下的Makefile文件
在DEFINE行的最后添加-DMIT_uAMPS 在INCLUDE行的中间添加-I./mit/rca -I./mit/uAMPS \
在代码gaf/gaf.o \之前添加
mit/rca/energy.o mit/rca/rcagent.o \
mit/rca/rca-ll.o mit/rca/resource.o \