leach协议在NS 2.34上的安装(半转半改)
2011-05-27 09:49
543 查看
直接在2.34中安装leach的话,会把原来的相关文件给覆盖,这样2.34上以前添加的的协议将不能运行,所以这种方法行不通。为了解决这个问题,既不让其覆盖我们2.34上的文件,又要leach协议能够运行,那么这种方法就比较复杂了,需要的人工劳动多了一点。
首先,在/ns-allinone-2.34/ns-2.34下新建一个leach文件夹,在/ns-allinone-2.34/ns-2.34/leach目录下解压mit.tar.gz文件,用 gunzip mit.tar.gz和 tar –xvf mit.tar命令解压。
将解压出来的文件A一一对应 /ns-allinone-2.34/ns-2.34目录下的文件B进行修改,将A中与B内容不同的地方,添加进B去,切记,不是完全复制,是添加进去,而B中多出来的内容,不要删掉。B中没有的文件,直接添加到B里。A中tcl/ex目录下的wireless.tcl文件和B中tcl/ex下的wireless.tcl同名,可以修改A中tcl/ex目录下的wireless.tcl文件名为wireless1.tcl,再把wireless1.tcl拷贝到B中tcl/ex下,同时leach_test文件里的wireless.tcl也要改为wireless1.tcl。
说明:leach协议新添加进去的代码都是以#ifdef MIT_ MPS开始,#endif为结束的。因此可以快速查找、修改。
需要额外修改的地方:
1、将common/packet.h里添加的
#ifdef MIT_ MPS
PT_RCA,
#endif
修改为:
#ifdef MIT_ MPS
static const packet_t PT_RCA = 62;
#endif
同理,将最后一个包的值改为63,即 static packet_t PT_NTYPE = 63。
2、将mac/wireless-phy.h文件中,添加进去的
#ifdef MIT_ MPS
EnergyResource *energy_; // Energy resource
int alive_; // 0 = dead, 1 = alive
//endif
//ifdef MIT_ MPS_temp
do le Efriss_amp_; // Xmit amp energy (J/bit/m^2)
do le Etwo_ray_amp_; // Xmit amp energy (J/bit/m^4)
do le EXcvr_; // Xcvr energy (J/bit)
do le Pfriss_amp_; // Friss base transmission power (W/m^2)
do le Ptwo_ray_amp_; // Two-ray base transmission power (W/m^4)
do le PXcvr_; // Xcvr Power (W)
int sleep_; // 0 = awake, 1 = asleep
int ss_; // amount of spreading
do le time_finish_rcv_; do le dist_; // approx. distance to transmitter
private:
do le pktEnergy(do le pt, do le pxcvr, int nbytes);
#endif
中的private注释掉,即为:
#ifdef MIT_ MPS
EnergyResource *energy_; // Energy resource
int alive_; // 0 = dead, 1 = alive
//endif
//ifdef MIT_ MPS_temp
do le Efriss_amp_; // Xmit amp energy (J/bit/m^2)
do le Etwo_ray_amp_; // Xmit amp energy (J/bit/m^4)
do le EXcvr_; // Xcvr energy (J/bit)
do le Pfriss_amp_; // Friss base transmission power (W/m^2)
do le Ptwo_ray_amp_; // Two-ray base transmission power (W/m^4)
do le PXcvr_; // Xcvr Power (W)
int sleep_; // 0 = awake, 1 = asleep
int ss_; // amount of spreading
do le time_finish_rcv_; do le dist_; // approx. distance to transmitter
//private:
do le pktEnergy(do le pt, do le pxcvr, int nbytes);
#endif
3、将mac/wireless-phy.h文件中的第150行,本来注释掉的// MobileNode * node_; 取消注释。
4、将mac/wireless-phy.cc文件中,int WirelessPhy::command(int argc, const char*const* argv)
这个函数里的 node_ = (Node *)obj; 修改为node_ = (MobileNode *)obj;大约在添加好的2.34文件里的238行。
5、由于第4步的修改影响到了其他文件,所以我还需要将mac/wireless-phyExt.cc里的第133行,node_ = (Node *)obj; 同样改为node_ = (MobileNode *)obj;(在int WirelessPhyExt::command(int argc, const char*const* argv)函数里)。
修改MakeFile文件,按照下面三步来进行:
(1)将DMIT_ MPS添加到DEFINE行的最后,即为
DEFINE = -DTCP_DELAY_BIND_ALL …… -Drng_test -DMIT_ MPS
(2)将I./mit/rca I./mit/ MPS 添加到 INCL?列的后面,即为
INCL?S = /
……
-I./diffusion3/lib/main -I./diffusion3/lib /
-I./diffusion3/lib/nr -I./diffusion3/ns /
-I./diffusion3/filter_core -I./asim/ -I./qs /
-I./mit/rca -I./mit/ MPS /
……
(3)将代码
mit/rca/energy.o mit/rca/rcagent.o /
mit/rca/rca-ll.o mit/rca/resource.o /
mac/mac-sensor-timers.o mac/mac-sensor.o mit/ MPS/bsagent.o /
添加到代码gaf/gaf.o /之前
这样,文件我们就都修改完了,下面就是编译了,即需要make了。
进入到/ns-allinone-2.34/ns-2.34目录下,输入make clean,如果没有出错,输入make,这时就需要较长时间的等待了。(如果你改的文件是makefile.in,那么应该有提示说你的makefile.in文件比make文件新,需要重新configure,这时输入./configure即可。)
make成功后,我们就要测试一下我们的Leach文件是否能够运行了。
这时,直接输入./test,估计肯定会有Line3和Line5行的提示错误,要处理这个问题,只需打开test文件,将里面的代码改为(注意红色部分位置):
#!/bin/bash
cd tcl/exns wireless-demo-csci694.tcl
sleep 2
cd ../../
./leach_test
即可。
再次输入./test运行,结果如果如下所示,就说明成功了。
[root@localhost ns-2.34]# ./test
num_nodes is set 3
warning: Please use -channel as shown in tcl/ex/wireless-mitf.tcl
INITIALIZE THE LIST xListHead
Loading connection pattern...
the file:../mobility/scene/cbr-3-test
Loading scenario file...
Starting Simulation...
channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
highestAntennaZ_ = 1.5, distCST_ = 89771.2
SORTING LISTS ...DONE!
NS EXITING...
但如果出现如下所示的警告:
其实也不用担心的,协议是可以正常运行的,也可以通过如下操作消除警告:
在tcl/lib下的ns_default.tcl文件第692行加入7个初始值,具体的初始值应该对照 mac文件下的wireless-phy.cc 值输入,如下所示:
Phy/WirelessPhy set alive_ 1; ;# 0 = dead, 1 = alive
Phy/WirelessPhy set Efriss_amp_ 100*1e-12; ;# Friss amp energy (J/bit/m^2)Phy/Wireless
Phy set Etwo_ray_amp_ 0.013*1e-12; ;# Two-ray amp energy (J/bit/m^4)
Phy/WirelessPhy set EXcvr_ 50*1e-9; ;# Xcvr energy (J/bit)
Phy/WirelessPhy set sleep_ 0; ;# 0 = awake, 1 = asleep
Phy/WirelessPhy set ss_ 1; ;# amount of spreading
Phy/WirelessPhy set dist_ 0; ;# approx. distance to transmitter
(这里要注意:会提示code omitted because of length 错误, 错误在set Efriss_amp_ 100*1e-12;原因是:不能设置表达式,要改成set Efriss_amp_ *1e-10, 同理改_amp_ 0.013*1e-12; set EXcvr_ 50*1e-9 )
这样修改之后,要重新编译。即先执行make clean,再执行make。make成功后,再次运行./test,得到第一次的结果。
这时,打开/mit/leach_sims文件夹,查看leach.err和leach.out文件,如果leach.out为空,leach.er显示找不到mit/rca下的文件,应该是环境变量设置有问题,需要在.bashrc中加入环境变量
export RCA_LIBRARY=$home/user/ns-allinone-2.34/ns-2.34/mit/rca
export MPS_LIBRARY=$home/user/ns-allinone-2.34/ns-2.34/mit/ MPS
注意,“home/user”要改成你自己的安装目录。
重新运行,应该就会得到结果了,显示如下:
[root@localhost ns-2.34]# ./test
num_nodes is set 3
warning: Please use -channel as shown in tcl/ex/wireless-mitf.tcl
INITIALIZE THE LIST xListHead
Loading connection pattern...
the file:../mobility/scene/cbr-3-test
Loading scenario file...
Starting Simulation...
channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
highestAntennaZ_ = 1.5, distCST_ = 89771.2
SORTING LISTS ...DONE!
NS EXITING...
再次打开/mit/leach_sims文件夹,查看leach.err和leach.out文件,如果情况和修改前一样,就是环境变量没有修改成功,可以直接修改mit/ MPS/sims下的 mps.tcl文件,将代码
source $env(RCA_LIBRARY)/ns-ranode.tcl
source $env( MPS_LIBRARY)/ns-bsapp.tcl
source $env( MPS_LIBRARY)/extras.tcl
source $env( MPS_LIBRARY)/stats.tcl
#Uncomment these lines to use gdb to debug the c code
#source mit/ MPS/ns-bsapp.tcl
#source mit/ MPS/extras.tcl
#source mit/ MPS/stats.tcl
source $env(RCA_LIBRARY)/resources/ns-resource-manager.tcl
source $env(RCA_LIBRARY)/resources/ns-energy-resource.tcl
source $env(RCA_LIBRARY)/resources/ns-neighbor-resource.tcl
修改成代码
source mit/rca/ns-ranode.tcl
source mit/ MPS/ns-bsapp.tcl
source mit/ MPS/extras.tcl
source mit/ MPS/stats.tc
source mit/rca/resources/ns-resource-manager.tcl
source mit/rca/resources/ns-energy-resource.tcl
source mit/rca/resources/ns-neighbor-resource.tcl即可。
这时再运行./test应该没有问题了,反正我的安装是没有问题了。
再次打开leach.err文件,里面出现代码:
INITIALIZE THE LIST xListHead
SORTING LISTS ...DONE!
leach.out文件大小也随时间增加,同时产生leach.alive,leach.data等文件,这样就成功了。恭喜你,可以开始leach协议的分析了。
相关文章推荐
- leach协议在NS 2.34上的安装(半转半改)
- ns 2.34安装leach 出现 code omitted because of length 的问题解决
- Fedora14+NS-2.34+Leach
- Ubuntu10.04中间Leach协议一键安装
- Ubuntu 12.04 LTS安装ns-2.34过程中出现的错误及其解决方案
- Ubuntu14.04下NS2.35安装,以及LEACH协议安装
- ns-allinone-2.34.tar.gz的安装(亲自实践成功)
- 【转】Leach协议学习(1)——NS2.27+leach协议安装
- VMWARE+linux+ns-allinone-2.29及2.34的安装
- Fedora 12 上安装NS-2.34详解
- ubuntu11.10安装ns2.34步骤
- Ubuntu 11.04下安装ns-allinone-2.34.tar.gz
- 《转载》在ubuntu10.04下成功安装 ns-allinone-2.34
- Fedroa 14 环境下安装 ns-2.34
- Ubuntu 12.04 +ns-allinone-2.34 安装教程
- ubuntu11.10安装ns2.34步骤
- 【转】leach协议在NS2.33上的安装
- ns-2.34安装tcldebug
- Fedora安装ns2.34需要的一些依赖包
- 在Debian lenny下安装ns-2.34