由于毕设需要,才开始接触NS2。现在准备整理下整个过程,估计以后不会用到NS2了。
首先是安装NS2了,笔者用的是NS2.34版本,安装过程有点小麻烦。后来看了下NS2.35的安装过程,都没啥报错,方便多了,大家有需要可以直接安装2.35版本。附上下载链接:http://sourceforge.net/projects/nsnam/files/ns-2/
Ubuntu10.04安装NS2.34
1、更新下系统,在终端输入
sudo apt-get update #更新源列表
sudo apt-get upgrade #更新已安装的包
sudo apt-get dist-upgrade #更新软件,升级系统
2、装几个需要使用的软件包
sudo apt-get install build-essential #for gcc and some essential
sudo apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev #for tcl and tk
sudo apt-get install libxmu-dev libxmu-headers #for nam
3、安装NS
拷贝安装包到合适的目录中比如/usr
sudo cp ns-allinone-2.34.tar.gz /usr
cd /usr #到安装目录ls #可以查看该目录下的文件sudo tar -xzf ns-allinone-2.34.tar.gz #解压到当前目录cd ns-allinone-2.34 #进入目录sudo ./install #开始安装
4、开始出现错误了。。。
……(以上省略) make: *** [libotcl.so] 错误 1 otcl-1.13 make failed! Exiting ...
在网上找的解释:gcc 4.0版本以前是用ld -share来生成共享库的,但是到了4.0以上的版本,这个命令改为了gcc -share。在终端里输入gcc -v查看,我的版本是gcc version 4.4.1。
解决方法:
cd /usr/ns-allinone-2.34/otcl-1.13sudo gedit configure.in
把77行的SHLIB_LD="ld -shared",改为SHLIB_LD="gcc -shared",保存退出。然后
sudo gedit configure
按照[2]中的说法,在5518行找,木有。于是Ctrl+F了一下,在6000+行找到了。把SHLIB_LD="ld -shared"改为SHLIB_LD="gcc -shared",保存退出。
cd回到目录ns-allinone-2.34下,重新运行
sudo ./install
顺利完成安装。最后出来提示:
Please put /usr/ns-allinone-2.34/bin:/usr/ns-allinone-2.34/tcl8.4.18/unix:/usr/ns-allinone-2.34/tk8.4.18/unix
into your PATH environment; so that you'll be able to run itm/tclsh/wish/xgraph.
IMPORTANT NOTICES:
(1) You MUST put /usr/ns-allinone-2.34/otcl-1.13, /usr/ns-allinone-2.34/lib, into your LD_LIBRARY_PATH environment variable. If it complains about X libraries, add path to your X libraries into LD_LIBRARY_PATH. If you are using csh, you can set it like: setenv LD_LIBRARY_PATH If you are using sh, you can set it like: export LD_LIBRARY_PATH=
(2) You MUST put /usr/ns-allinone-2.34/tcl8.4.18/library into your TCL_LIBRARY environmental variable. Otherwise ns/nam will complain during startup.
After these steps, you can now run the ns validation suite with cd ns-2.34; ./validate
5、配置环境变量
用cd进入目录/home/hm(hm是我的用户名),然后
sudo gedit .bashrc
在文件末尾加入:
PATH="$PATH:/usr/ns-allinone-2.34/bin:/usr/ns-allinone-2.34/tcl8.4.18/unix:/usr/ns-allinone-2.34/tk8.4.18/unix"
LD_LIBRARY_PATH="/usr/ns-allinone-2.34/otcl-1.13:/usr/ns-allinone-2.34/lib"
TCL_LIBRARY="$TCL_LIBRARY:/usr/ns-allinone-2.34/tcl8.4.18/library"
保存退出(上述内容在安装结束后的提示中有,见粗体部分)。
6、验证
打开一个新终端,输入ns,如果出现%,则说明安装成功。
也可以进入/usr/ns-allinone-2.34/ns-2.34/,输入./validate验证。
到此。上面红色标注的部分记得都要用自己的安装路径替换。
安装结束后,开始进入正题,路由协议仿真。。。
由于我的毕设是做2个协议仿真,AODV、COPE+AODV。
AODV是NS2自带的协议,直接编写tcl仿真脚本就可以了;而COPE+AODV是需要自己添加的新协议。
COPE+AODV是一种基于网络编码的无线路由协议。将网络编码思想应用于无线单播网络通信的方案。COPE方案充分利用无线网络节点的广播特性,用简单的异或算法取代复杂的矩阵运算。COPE是一个机会主义的网络编码,其中每个节点窥探其在传输中的位置,学习它邻居节点的位置,同时探测编码机会,确保接收方可以解码。这种灵活的设计允许COPE有效地支持多个单播流,甚至当发送者和接受者是动态的或者数据流是未知和突发性的。COPE的一个设计目的是保证更高层协议和应用的互操作性。
接下来介绍我在NS2中添加COPE+AODV协议的过程。
step 1:比这里将COPE+AODV协议的名字叫做caodv,以ns2.34平台为例,我们在ns2.34目录下建立一个caodv目录。此目录包含caodv.h,caodv.cc,caodv_packet.h,caodv_rtable.h,caodv_rtable.cc五个文件。
其中五个文件的具体功能和作用如下:
(1)caodv.h 定义必要的计时器和路由代理
(2)caodv.cc 执行计时器、路由代理和Tcl文件
(3)caodv_packet.h 声明caodv路由协议需要在无线自组网节点交换的数据包
(4)caodv.h 声明我们自己的路由选择表
(5)caodv.cc 执行路由选择表
step 2:相应文件的代码
代码太多了,不贴了,附上下载地址。