ns-2是USC和其他几个机构开发的,目前由 USC/Information Sciences Institute维护。是一款基于linux平台的离散事件网络模拟器。
ns-2主页http://www.isi.edu/nsnam/ns/
ns-2 Tutorial http://www.isi.edu/nsnam/ns/tutorial/ns.html
ns-2由许多部件组成,所以下载all-in-one包安装会比较简单。
以ns-2.35为例,理论上下载解压后运行其中的可执行文件install即可,但是在运行之前我们还有工作要做。
如果你使用的是Ubuntu等Debian系的操作系统,那么很简单:
sudo apt-get update
sudo apt-get install build-essential autoconf automake libxmu-dev
执行以上两条命令之后,就已经完成了依赖包的安装(坑爹的ns-2,为毛老子没看到任何关于依赖关系的说明)
如果你用的是CentOS或者Fedora之类的RedHat系,那么下面几个包我也不知道哪几个是必须的,哪几个是不必要的,反正我都装了(哦,你至少需要gcc-c++这个包和libX11-devel, libXmu-devel:
有人只装了这几个包
libX11-devel*
xorg-x11-proto-devel*
libXt-devel*
libXmu-devel*
也有人装了一大堆
yum install tkinter python-imaging python-tools libXmu-devel* libXt-devel* xorg-x11-proto-devel* libX11-devel* gcc-c++
233333
反正这些包很多都互相依赖,多装也没事,少装了如果编译不了、运行不了你也会知道的。
装完依赖包还是不能装,编译还是会有问题,有个地方要小改下:
ns-2.35/linkstate/ls.h,在这个文件中找到
void eraseAll() { erase(baseMap::begin(), baseMap::end()); }
T* findPtr(Key key) {
iterator it = baseMap::find(key);
return (it == baseMap::end()) ? (T *)NULL : &((*it).second);
}
将它修改为
void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }
T* findPtr(Key key) {
iterator it = baseMap::find(key);
return (it == baseMap::end()) ? (T *)NULL : &((*it).second);
}
搜索erase(baseMap会快一些,只要将erase改成this->erase就行
然后退到ns-2.35-allinone目录,执行./install 就可以了,编译安装会有一会儿,但也不算很长。
如果你看到类似上面的提醒,那么说明你已经成功安装了ns-2。
但这个界面也在提醒你需要设置一些环境变量,打开你的shell变量配置文件,一般在主目录下,以Bash为例,打开.bashrc文件,在末尾添加以下几行:
export PATH=”$PATH:/home/UserName/ns-allinone-2.35/bin:/home/UserName/ns-allinone-2.35/tcl8.5.10/unix:/home/UserName/ns-allinone-2.35/tk8.5.10/unix”
export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/home/UserName/ns-allinone-2.35/otcl-1.14, /home/UserName/ns-allinone-2.35/lib”
export TCL_LIBRARY=”$TCL_LIBRARY:/home/UserName/ns-allinone-2.35/tcl8.5.10/library”
将/home/UserName替代为你的主目录即可。
退出编辑器,更新环境变量:
source .bashrc
现在你可以试试了,运行ns会得到%的运行符,exit退出。
在ns-2.35目录下有validate文件,可以运行来测试可用性,这是官方的测试脚本,我们可以不做这一步,直接进入ns-allinone-2.35/ns-2.35/tcl/ex,这里有很多例子,运行ns simple.tcl就会有两个图形化窗口蹦出来,这就是nam了。