因工作需要,着手搭建ns+nam+GT-ITM环境,在网上看了一些文章,用了一天时间安装调试,现在做一个小的总结,希望给做类似工作的人有一些借鉴。
目标:在Ubuntu16.04虚拟机上安装ns2.35+nam+GT-ITM
步骤:
Step1-资源下载
VMware:http://www.vmware.com/products/player/playerpro-evaluation.html
Ubuntu:http://cn.ubuntu.com/download/
ns-2.35集成包(包含nam和GT-ITM):https://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz/download
tcl/tk版本下载:https://sourceforge.net/projects/tcl/files/Tcl/
Step2-准备NS安装环境
首先在VMware中安装Ubuntu16.04虚拟机,安装完成后运行终端,输入以下命令更新系统:
sudo apt-get update #更新源列表
sudo apt-get upgrade #更新已经安装的包
sudo apt-get dist-upgrade #更新软件,升级系统
然后安装ns2晕行时需要的三个依赖包,命令如下:
sudo apt-get install build-essential
sudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev #for tcl and tk(执行此命令后注意查看tcl和tk的版本号,我的是8.5.19)
sudo apt-get install libxmu-dev libxmu-headers #for nam
Step3-安装NS
将下载的ns-allinone-2.35.tar.gz压缩包解压到“/home/用户名/”目录下,可以用“tarxvfz ns-allinone-2.35.tar.gz”命令或者图形化操作,然后进入文件夹,查看tcl和tk的文件夹是否与之前安装的版本一致,如果不一致之后安装就会出现版本冲突错误。因此需要下载与安装相同的版本替换现有的文件,例如我安装的是8.5.19,而解压出的是8.5.10,因此需要下载tcl8.5.19和tk8.5.19替换tcl8.5.10和tk8.5.10文件夹中的文件。
更改ns-allinone-2.35/ns-2.35/linkstate目录下的ls.h文件,将其第137行中 {erase(baseMap::begin(), baseMap::end()); }修改为 { this->erase(baseMap::begin(),baseMap::end()); },然后保存文件。
在在终端中进入ns-allinone-2.35文件夹,运行install安装程序:
cd ns-allinone-2.35
./install
Step4-配置环境变量
在终端中进入用户目录“/home/用户名”,运行gedit ~/.bashrc命令,打开.bashrc文件,然后在文档最后加入一下环境变量:
export NS_HOME=/home/用户名/ns-allinone-2.35
exportPATH=$PATH:$NS_HOME/bin:$NS_HOME/tcl8.5.10/unix:$NS_HOME/tk8.5.10/unix
export LD_LIBRARY_PATH=$NS_HOME/otcl-1.14:$NS_HOME/lib
export TCL_LIBRARY=$NS_HOME/tcl8.5.10/library
其中的路径根据自己的实际情况修改,修改完成后保存文件。
Step5-验证NS
重启终端,输入ns,出现%,说明ns2安装成功,否则继续在stp4中修改环境变量,此时请勿根据提示使用sudoapt-get install ns2命令安装。
Step6-安装nam并测试
终端进入nam目录并运行命令,如下:
cd ns-allinone-2.35/nam-1.15
./configure –with-tcl-ver=8.5
make
make install
命令行输入nam弹出nam console说明nam安装成功。
最后运行一个小例子查看安装结果。命令如下:
cd ns-allinone-2.35/ns-2.35/tcl/ex/
ns simple.tcl
如ns和nam完全安装正确,则弹出动画演示框。
Step7-安装GT-ITM并测试
在ns-allinone-2.35/gt-itm/sgb2ns/目录中找到sgb2ns.c文件,将其中105行“\t$nsduplex-link-of-interfaces $n(%d) $n(%d) $linkBW %dms DropTail\n”修改为“\t$nsduplex-link $n(%d) $n(%d) $linkBW %dms DropTail\n”。
然后在gt-itm/src和gt-itm/sgb2ns目录下分别执行make命令,最后将/gt-itm/bin所在目录添加到PATH环境变量中(同Step4),方便调用itm。
测试例子:
在/gt-itm/docs目录中生成一个t1.txt文件,文件内容如下:
ts 1 47
30 0
120 3 1.0
420 3 0.6
在终端中调用这个文件:
cd ns-allinone-2.35/gt-itm/bin
itm t100.txt
调用后生成一个t1.txt-0.gb文件,在运行以下命令:
sgb2ns t1.txt-0.gb t1.tcl
这样就生成了一个ns2格式的t1.tcl文件,如需要查看这个文件,需再写一个tcl的文件,内容如下:
set ns [new Simulator]
set nf [open out.nam w]
$ns namtrace-all $nf
source t1.tcl
create-topology ns node 1.5Mb
$ns run
命名为nam_show.tcl,运行如下命令调用这个文件:
ns nam_show.tcl
之后生成一个out.nam文件,通过命令namout.nam,就能看到生成的拓扑图了。