Windows下安装ns2-2.29和leach各种方法和遇到的问题

ns2下leach协议的仿真 ns2下leach协议的仿真主要从以下三个条件予以评价:存活节点的数量,节点能耗,网络数据总转发量 (1).#计算不同时间存活节点的数量  leach_alive.awk脚本程序 BEGIN {     countcyl=0;     totalleft=0;     lasttime=0;     time[0]=0;     node=0;     total[0]=100; 阅读详情

两天内尝试了n种方法,分别在windows和ubuntu下安装了2.27 2.29 2.35ns2,之后又在各个版本ns2上安装了mit和mannaSim的leach,纯手工编译和修改历史遗留bug,真是生命不息折腾不止呀!

刚开始同时安装这么多种方法是抱着侥幸心理希望在各个环境下安装各种版本,并行的安装,看哪种成功了就用哪种,最后造成的结果是全都有bug,make比较耗费时间,于是就边修A的bug边重新make B了,也不知道哪个版本先成功,结果是修bug成功上瘾了。。。积累了一些经验分享分享吧,以免其他同学走弯路了。


方法一:

1.安装cygwin

选择这些包安装:

gcc
gcc-g++
gnuplot
make
patch
perl
tar
X-startup-scripts
xorg-x11-base
xorg-x11-bin
xorg-x11-devel
xorg-x11-bin-dlls
xorg-x11-bin-lndir 
xorg-x11-etc 
xorg-x11-fenc 
xorg-x11-fnts
xorg-x11-libs-data 
xorg-x11-xwin 

2.在这个地方下载http://www.mannasim.dcc.ufmg.br/download.htm

3.按照上面网页的步骤来就ok了,就是中间会遇到一些问题。

如:list和vector的头文件把h去掉。||构造函数的调用不用加前面的类限制。||大端小端定义不用#ifndef和#endif,注释掉。

之后make clean ,重新make。

重新make是需要很多时间,但是如果不重新make的话,编译完执行链接就会提示offset不对了。所以不要总是懒省事。。。

4.这个时候设置好ns的环境变量。在.bashrc文件里添加相应的内容。

export NS_HOME="/home/Administrator/ns-allinone-2.29"
export PATH="$NS_HOME/nam-1.11:$NS_HOME/ns-2.29:$NS_HOME/tcl8.4.11/unix:$NS_HOME/tk8.4.11/unix:$NS_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$NS_HOME/tcl8.4.11/unix:$NS_HOME/tk8.4.11/unix:$NS_HOME/otcl-1.11:$NS_HOME/lib:$LD_LIBRARY_PATH"
export TCL_LIBRARY="$NS_HOME/tcl8.4.11/library"

5.安装好了之后,命令行输入ns是有反应的。

ns test.tcl试一下,看test.tcl同目录下是否有tr文件生成,这个trace就是脚本执行后得到的数据了,用awk分析和计算得到你需要的数据,最后用gnuplot画图。


这种办法修改的内容不多,相对来说较容易安装。如果你debug经验少,建议安装这种。


=============================================================

方法二:安装mit版的leach在2.29上

按照mit官方的说明配置makefile文件。

安装的过程中会遇到各种各样的问题,究其原因就是mit版的leach内容太少了,如果不在2.27上安装建议不要按照步骤来覆盖那么多文件,因为虽然按照我一下的步骤可以顺利make出ns,但是因为根据diff显示函数少了好多,之后扩展或者什么的一定会遇到好多问题。因为骑虎难下,所以我还是硬着头皮修了n个bug成功安装了leach。

问题集锦:

(1)list和vector的问题

把h去掉。

(2)pt_xcp的问题

   ns-2.9commompacket.h 文件中,
enum packet_t下添加 PT_XCP,接着在p_info()里添加name_[PT_XCP]="xcp";

(3)channel.cc文件中 WirelessPhy *wifp = (WirelessPhy *)tifp;之后加入:

distCST_ = wifp->getDist(wifp->getCSThresh(), wifp->getPt(), 1.0, 1.0,highestZ , highestZ, wifp->getL(),wifp->getLambda());  

ns-2.29mac下面的wireless-phy.h文件中    WirelessPhy()下添加double getDist(double Pr, double Pt, double Gt, double Gr,double hr, double ht, double L, double lambda);

然后在wireless-phy.cc的最后添加double WirelessPhy::getDist(double Pr, double Pt, double Gt, double Gr,double hr, double ht, double L, double lambda)
{
    if (propagation_) {
        return propagation_->getDist(Pr, Pt, Gt, Gr, hr, ht, L,lambda);
    }
    return 0;
}


(4)mac/mac-802_11.cc:txRate没有定义?
在packet.h中inline int& fecsize() {return fecsize_; } 之后加入:
 // start of 80211MultiRate --------------------------
        double txRate_;   // packet transmission rate over wireless channel
        inline double& txRate() { return(txRate_); }
        // end of 80211MultiRate ----------------------------

(5)mac/mac-802_11.cc:DROP_MAC_COLLISION
在cmu-trace.h文件中#define DROP_MAC_COLLISION  "COL"之后加入
// BUGFIX UKA: capture
// packet drop in case of a packet capture
#define DROP_MAC_CAPTURE                "CAP"
// BUGFIX UKA END: capture

(6)mac/mac-tdma.cc:node_sleep没有定义(说明leach函数少了好多呀,从原来的ns里找到函数,复制过来)
wireless-phy.cc里添加这两个函数。
同时在wireless-phy.h文件中void node_off(); 之后加入 void node_wakeup();   void node_sleep() ;


(7)comm/mobilenode.cc:POSITION_UPDATE_INTERVAL没有定义
mobilenode.h中加入#define POSITION_UPDATE_INTERVAL    30.0

(8)mac/wireless-phy.cc中SLEEP、P_sleep_、P_transition_ 、T_transition_ 及没有定义:
在wireless-phy.h中修改enum ChannelStatus {SLEEP, IDLE, RECV, SEND };

在double P_idle_; 之后加入    double  P_sleep_ ;  double  P_transition_; 
 double  T_transition_ ;


(8)satellite/sat-hdlc.h:'HDR_HDLC'没有定义?
在packet.h中加入

#define HDR_HDLC(p)    ((hdr_hdlc*)hdr_ll::access(p))

enum packet_t 中加入PT_HDLC

class p_info {public:中加入name_[PT_HDLC]="HDLC";


(9)大端小端的问题

注释掉#ifndef和#endif。


看吧,改了n个bug。如果你的版本和我不同,也许还会有别的bug。不过我总结了一下根据提示来改不是这缺失了,就是大小写和原来版本不一致了,比如有个很小的bug我没写上就是min函数应该改成MIN函数。。。还有个是前面加了个NM_的常量。就是改了个写法或者少了个函数或者定义的,不难改,就是每次编译都好久,烦躁!

这个时候基本按照完成了。

设置环境变量在/home/yourname文件夹下打开.bashrc文件,在最后添加如下内容:

【ns和nam等工具的环境变量】

export NS_HOME=/mit/ns-allinone-2.29
export PATH=$NS_HOME/nam-1.11:$NS_HOME/tcl8.4.11/unix:$NS_HOME/tk8.4.11/unix:$NS_HOME/bin:$PATH
export LD_LIBRARY_PATH=$NS_HOME/tcl8.4.11/unix:$NS_HOME/tk8.4.11/unix:$NS_HOME/otcl-1.11:$NS_HOME/lib:$LD_LIBRARY_PATH
export TCL_LIBRARY=$NS_HOME/tcl8.4.11/library

【leach库】
export RCA_LIBRARY=$NS_HOME/ns-2.29/mit/rca
export uAMPS_LIBRARY=$NS_HOME/ns-2.29/mit/uAMPS

source ~/.bashrc刷新一下环境变量,立即生效。免得下面出各种各样环境设置的问题找不到解决方法。


这个时候在ns目录下运行:

./test

可能会提示找不到leach-test文件。

修改test文件如下顺序:

cd ../../
./leach_test
就是把5、6两行的位置调换一下即可。


最后有一个运行leach的实例,不过这个实例少了些东西,现在补充一下:

1.在cd到mit/uAMPS/sims文件夹下,里面有一个名为genscen文件,该文件是用来生成节点的场景文件。c运行ns genscen便可以生成一个new100nodes.txt文件。这个txt文件里是随机生成的100个节点的位置信息。

2.cd到ns-2.27文件夹下。编写脚本,给脚本随便一个名字,比如zz,脚本内容如下:
#!/bin/bash
ns ./tcl/ex/wireless.tcl \       
-sc mit/uAMPS/sims/nodescen \   
-rp leach \ //
-x 1000 \
-y 1000 \
-nn 101 \
-stop 500 \
-eq_energy 1 \
-init_energy 2 \
-filename wireless \
-dirname mit/uAMPS/sims \
-topo mit/uAMPS/sims/new100nodes.txt \
-num_clusters 5 \
-bs_x 0 \
-bs_y 0 \
各个选项的作用可以见附件1的8~10页。
在命令行下输入: chmod 777 zz 回车
然后 ./zz回车就能运行了


注意:这里如果直接去目录下执行wireless.tcl一定会报错,因为路径是相对路径,所以从ns**目录下执行较好,不然修改一下脚本。


运行需要一段时间,如果开始滚屏说明你的安装正确了,congratulations!实验数据分析见下一篇文章!


这种方法如果是在2.27上安装也许不会想我这么复杂,不过很奇怪的是2.27在ubuntu和window下都从未成功安装过,cygwin需要的XFree86都下载不到,对X11和Xorg还不识别,我的版本的diff也检测不到,可能是版本太老了,sourceForge上可供下载的最旧版ns2-2.29都已经是06年的产品了。

不过用这种方法的人很多,教程也多一点。而且调试bug有了强迫症,总想最终make通过。。。


=================================================================


方法三:Ubuntu安装

首先参照我上篇文章来配置ubuntu gcc

1.安装这些包

sudo apt-get install libx11-dev kde-devel libxmu-dev tk8.4-dev xgraph tcl perl

2.解压ns2到一个目录下

tar -xzvf ns.......

3.安装ns2

./install

如果顺利安装,添加leach时修改bug的方法参考上面。

如果连ns2都安装不了,奉劝你检查一下是不是依赖的包没有安装,如果都安装了还是不行就换个ns2版本吧。


续:

此事未完,到了这里还需要验证一下nam是否可用。

$ nam: 
[code omitted because of length]
: no event type or button # or keysym
    while executing
"bind Listbox <MouseWheel> {
%W yview scroll [expr {- (%D / 120) * 4}] units
}"
    invoked from within
"if {[string equal [tk windowingsystem] "classic"]
|| [string equal [tk windowingsystem] "aqua"]} {
bind Listbox <MouseWheel> {
%W yview scroll [expr {..."

如果报错如上所示。

需要打个补丁。手动修改亦可:

找到tk8.4.11/generic/tkBind.c这个文件(tk别的版本也有这种和nam不兼容的问题。)

588行左右,修改如下:

    /* ColormapNotify */COLORMAP,
    /* ClientMessage */ 0,
    /* MappingNotify */ 0,
+#ifdef GenericEvent
+   /* GenericEvent */          0,
+#endif 

    /* VirtualEvent */ VIRTUAL,
    /* Activate */ ACTIVATE,   
    /* Deactivate */ ACTIVATE,

高亮部分是需要添加上的内容。

之后只重新编译ns是不行的,需要再整个目录下./install

或者采用这种方法

自动打补丁的patch如下:(自己新建一个tk.patch放在ns-all-in-one目录下)

--- tk8.4.11-orig/generic/tkBind.c2006-07-21 08:26:54.000000000 +0200
+++ tk8.4.11/generic/tkBind.c 2008-07-05 12:17:10.000000000 +0200
@@ -586,6 +586,9 @@
    /* ColormapNotify */ COLORMAP,
    /* ClientMessage */ 0,
    /* MappingNotify */ 0,
+#ifdef GenericEvent
+   /* GenericEvent */          0,
+#endif 
    /* VirtualEvent */ VIRTUAL,
    /* Activate */ ACTIVATE,   
    /* Deactivate */ ACTIVATE,

版本号修改成自己的。

在同级目录下执行命令:

$patch -p0<tk.patch

执行成功后重新编译。

以上两种方法复杂度差不多,自己选择吧。

之后再修改ns的Makefile文件,因为install的时候已经发生变化,好复杂@@

NS-2模拟LEACH协议,并用gnuplot画图 详细 1.打开test_leach文件,修改参数 打开终端,输入cd /home/ns-allinone-2.34/ns-2.34 打开里面的test_leach文件,修改alg dirname,alg代表要运行的协议,dirname代表模拟生成的文件放置的位置,所以后面需要新建相应文件夹。 alg=leach" dirname="mit/leach_sims/LEACH 2.新建文件夹 在/home/ns-allinone-2.34/ns-2.34/mit/leach_sims下创建LEACH文件夹 3. 阅读详情

相关推荐

Windows+Cygwin+NS2安装

近来需要做无线网络仿真实验,老师让搭建ns2仿真环境。其过程可谓是崎岖,上网搜的时候发现大家在第一次装的时候都一样,不是一帆风顺的,毕竟不是点点点安装软件啊【笑哭】。 先说一下NS2吧,NS就是ns-allinone,是一款网络仿真软件,后面的2就是版本号,当然也会有NS3. 而Cygwin,就是在Windows下虚拟一个UNIX环境,具体的就不介绍了,度娘一下,你就知道https://bai...

mez_Blog的博客 5767

Ns2+Cygwin Terminal在windows系统安装

Ns2+Cygwin Terminal在windows系统安装 NS-2是Open Source的,最早的版本是在 linux/unix下运行的,所以如果你想在windows系统中安装NS2,一种方法可以安装虚拟机,然后安装基于linux/unix的系统,然后安装ns2。 当然也可以在windows机子中安装Cygwin Terminal, Cygwin是一个在windows平台上运行的uni

sunquan291的专栏 3905

【信息科学与工程学】【安全领域】第三十五篇 网络安全算法表

编号算法名称算法的逐步骤思考推理的数学方程式和分解的数学方程式参数/变量列表复杂度(时间/空间)1​AES (高级加密标准)​1. 密钥扩展:从初始密钥生成轮密钥。 2. 初始轮: 3. 主轮循环(Nr-1轮):  - SubBytes:(非线性字节替换)  - ShiftRows:对状态矩阵的行进行循环移位。  - MixColumns:(在GF(2⁸)上的矩阵乘法)  - AddRoundKey: 4. 最终轮:执行SubBytes、ShiftRows、AddR

weixin_49199313的博客 1373

NS2安装 VMWare workstation 15 pro+Ubuntu 16.04.5+NS 2.35+num

NS2学习笔记1 NS2安装 使用VMWare workstation 15 pro+Ubuntu 16.04.5+NS 2.35** NS进行网络模拟的方法和步骤

Lindalino1的博客 328

ns2:Network Simulator 2 安装在 4.7 和 4.8 GCC + MannaSim 框架之上

一、简介 ns-allinone 是一个包含运行 ns 所需组件和一些可选组件的包。 该软件包包含一个“安装”脚本,用于自动配置、编译和安装这些组件。 如果你之前没有安装过 ns 并想快速试用 ns,ns-allinone 可能比手工获取所有部分更容易。 2. ns-allinone-2.35 的特性 此版本的功能包括: 更新到 Tcl/Tk 8.5 系列(成为许多平台上的默认 Tcl/Tk 版本) 适用于 Windows 的 Cygwin-1.7.1 版本更新 ns-2.35 版本的新特性(参见 ns-2/CHANGES.html 文件) 3. 安装(Ubuntu 14.04) 步骤1 sudo apt-get install tcl8.5-dev tk8.5-dev sudo apt-get install build-essential autoconf automake

ns-allinone-2.29

ns2的安装文件,是一款强大的仿真软件~~

ns winxp环境搭建与leach 代码调试,简单仿真资源整理

最有用的两个帖子 NS2 使用說明手冊 http://csie.nqu.edu.tw/smallko/ns2_old/ns2.htm Windows下安装ns2-2.29和leach各种方法和遇到的问题_codingkid的博客-优快云博客 Windows下安装ns2-2.29和leach各种方法和遇到的问题_codingkid的博客-优快云博客 安装后,调试编译leach,遇到的主要问题 (2)pt_xcp的问题 ns-2.9commompacket.h 文件中, en..

chenghong1的专栏 177

Windows上NS2安装步骤

详细介绍了Windows上NS2安装步骤,亲测有效

NS2安装

[1] Windows + Cygwin + [1] Windows + Cygwin + NS2 (好,先把这个安装成功才能进行下面的工作) http://140.116.72.80/~smallko/ns2/setup_en.htm (英文) http://140.116.72.80/~smallko/ns2/setup.htm (中文) [2] LEACH protocol inst

梦之境 818

NS2的详细安装步骤

此文档详细描述了NS2 2.31的安装步骤

cygwin+ns2.27+leach安装总结

在windows下安装cygwin+ns2.27+leach 及相见错误分析

NS2安装资料和步骤的汇集

转载自:http://blog.csdn.net/tianshide851049708/article/details/20161331 [1] Windows + Cygwin +[1] Windows + Cygwin + NS2 (好,先把这个安装成功才能进行下面的工作) http://140.116.72.80/~smallko/ns2/setup_en.htm (英文) http:

sinat_34586770的博客 537

无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

无刷直流电机矢量控制,采用转速、电流双环控制,电流环dq解耦,d轴采用id=0控制,q轴采用转速外环。采用滑模观测器(SMO),根据电压电流信息进行电机位置角度动态估算,模型可直接运行,转速和角度跟踪精度较高。 本文整理了该方法的基本原理,介绍了在MATLAB/Simulink中的建模和仿真过程,最后附上完整的模型文件。 一、基本原理 滑模观测器(下文简称SMO)是基于滑模变结构控制方法的一种状态观测器。其针对无刷直流电机转子位置估算的实现过程如下。 假设采用矢量控...

Forster-C的博客 6865

Windows平台下NS2网络仿真环境的搭建

NS2(Network Simulator 2) 是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件。此外,NS也可作为一种辅助教学的工具,已被广泛应用在了网络技术的教学方面。因此,目前在学术界和教育界,有大量的人正...

dianyimo9099的博客 1296

转录组PCA分析3大常见误区:数据标准化、离群样本与批次效应处理

本文深入探讨转录组PCA分析中的三大常见误区:数据标准化、离群样本识别与批次效应处理。通过实战案例和R代码演示,揭示如何优化PCA结果以提升生物学解释力,特别关注数据标准化策略的选择和批次校正方法的应用,帮助研究者避免常见陷阱并获得可靠的转录组分析结果。

weixin_28362173的博客 372

UE5.5使用ControlRig实现MetaHumanNPC看向玩家

本文介绍了在虚幻引擎中实现NPC自然看向玩家的技术方案。通过MetaHuman的ControlRig系统,采用面部动画曲线+全身动画Montage的表演方式,结合ControlRig驱动CTRL_lookat控制器实现视线追踪。

平常心 1302

Install NS2.29---problems collecting!

fedora10系统gcc4.3.0下安装ns-2.29记录: 1)./sctp/sctp.h:632: 错误:有多余的限定‘SctpAgent::’在成员‘DumpSendBuffer’上trace/trace.cc:185: 警告:不建议使用从字符串常量到‘char*’的转换trace/trace.cc:185: 警告:不建议使用从字符串常量到‘char*’的转换tra

maxiaolin8412的专栏 2800

squidpy 教程 1:在 AnnData 和 Squidpy 中导入空间数据

这些是 10x Genomics Visium 的 Space Ranger 输出提供的 keys,因此是第一个被采用的 keys。在这种情况下,我们假设空间坐标与像素具有相同的比例,因此我们将该值设置为 1。为此,我们将使用模拟数据集,并通过示例展示您应该注意的重要细节,以便利用 AnnData-Scanpy-Squidpy 生态系统的全部功能。并不是绝对必要的,但会节省您大量的输入,因为它是 Squidpy 和 Scanpy 的默认值。正如你所看到的,空间坐标被缩小了,图像被“放大”了。

🧑‍🎓 博士研究生在读 🔬 分享生物信息学、神经生物学方面的知识 💬 合作请在后台留言 2255

NS2-leach 协议学习中

1、文件与框架 /mit/uAMPS/sims/leach.tcl 与 /tcl/mobility/leach.tcl 一致。 2、其他目录及文件 /tcl/mobility/ 目录下可以看到各种协议文件。 tcl/lib/ns-lib.tcl 是 simulator 类所在处,可以看到一些常用的命令,如 run、halt、simplex-link、namtrace-all、ini...

weixin_41565755的博客 520

2024最新版:MacOS Sonoma系统下CocoaPods安装全攻略(解决Ruby版本冲突)

本文详细介绍了在MacOS Sonoma系统下安装CocoaPods的全过程,重点解决Ruby版本冲突问题。通过HomeBrew安装最新Ruby版本,配置环境变量,并正确安装CocoaPods,帮助iOS开发者顺利管理项目依赖。文章还提供了常见问题的解决方案和优化配置建议,确保开发环境的稳定性和高效性。

lll78的博客 1042

微信小程序 - 强力解决播放视频卡顿问题,小程序使用video组件播放视频或第三方视频插件,会出现卡顿或者无法播放的各种奇怪问题(微信小程序苹果ios/安卓播放视频很卡不流畅、视频太长或文件大等情况)

微信小程序视频组件播放卡顿,微信小程序video组件出现无法播放或卡顿,微信小程序video组件播放时会出现卡顿,微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,微信小程序安卓视频播放卡顿问题,微信小程序苹果ios手机播放视频不流畅很卡,加cdn还是卡,uniapp播放视频会有明显的卡顿问题,video视频时卡顿不流畅问题,为什么video组件播放视频卡顿?苹果微信小程序通过video组件播放视频时卡顿,怎么解决?微信小程序video组件出现无法播放或卡顿,设置custom-cac

🏆 前端领域优质创作者 1万+

NS2运行LEACH,tcl文件的bug调试

在上一篇文章中,我发布了一个mit.tar.gz的

lcpk0411的专栏 2299

Fabric V2.5 通用溯源系统——使用Hyperledger Caliper压力测试

Caliper是一款测试区块链性能的工具,支持Hyperledger Fabric、Ethereum等,支持丰富的测试配置参数,测试完成后将直接输出报告,相较于tape更加专业,但是配置稍微有些复杂。本文将一步一步配置Caliper以测试Fabric V2.5 通用溯源系统中的注册用户、查询用户、农产品上链、农产品查询的区块链性能。

TrueTechLabs 官方博客 1395

VMWARE+linux+ns-allinone-2.29及2.34的安装

VMWARE+linux+ns-allinone-2.29的安装下面是ns2的安装,一、下载了ns-allinone-2.29.tar.gz    地址http://sourceforge.net/projects/nsnam/files/(下面同样)二、把这个文件cp到/home/ns2/(ns2是用户名)三、利用命令gunzip ns-allinone-2.29.tar.gz得到:

hwh201997的专栏 1799

QGIS之七建筑面由DSM和DEM获取高度并可视化

QGIS建筑面由DSM和DEM获取高度并可视化

yilvyangguang520的博客 3510

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 虚拟机virtualBox安装Ubuntu全过程详解|Ubuntu降低gcc版本
下一篇: GNUPLOT画图工具
codingkid
博客等级 码龄16年 81粉丝 86原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值