我的操作系统是 Linux Mint Debian Mate Edition,201403版,内核版本 3.11-2-amd64,gcc version 4.8.2。
一、安装 NS-2.35
截至2014年10月,这是NS2最新的版本了。
首先安装几个包:“ sudo apt-get install build-essential libxmu-dev ”,依赖的几个包也要装上。
然后下载 ns-allinone-2.35,解压,复制 ns-allinone-2.35 文件夹到主目录下,我改名为.ns-allinone-2.35,方便隐藏;
在 /.ns-allinone-2.35/ns-2.35/linkstate/ls.h 的第137行,“ erase(baseMap::begin()”前添加“ this-> ”,改为
" void eraseAll() {this->erase(baseMap::begin(), baseMap::end()); } ";
然后在 .ns-allinone-2.35文件夹下运行 ./install 即可安装。
安装完成,需要在主目录下的 .bashrc 文件中加入下面的文字:
# enable Network Simulator 2 export PATH="$PATH:/home/suyangts/.ns-allinone-2.35/bin:/home/suyangts/.ns-allinone-2.35/tcl8.5.10/unix:/home/suyangts/.ns-allinone-2.35/tk8.5.10/unix" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/suyangts/.ns-allinone-2.35/otcl-1.14, /home/suyangts/.ns-allinone-2.35/lib" export TCL_LIBRARY="$TCL_LIBRARY:/home/suyangts/.ns-allinone-2.35/tcl8.5.10/library "
其中 /home/suyangts 是我的主目录。
打开终端,运行“ ns ./.ns-allinone-2.35/ns-2.35/tcl/ex/simple.tcl ”,将会测试一个简单的例子。
注意,文章末尾补充了在 Debian 7 下面,把NS-2.35安装到/opt目录下的方法。在 Debian 7 下面,.bashrc 的内容不能按照上面提到的内容添加。此外,也可以在为UMTS、LTE和WiMax模块修改完所有文件后在执行上一步安装ns-2.35的步骤。
----------
截至2015年4月,下述两个补丁的下载位置很难在网络上找到了。所以,我使用百度网盘分享了它们的备份:http://pan.baidu.com/s/1eQEknsQ 提取码3xsv
----------
二、安装 UMTS 补丁
感谢 yotrew.blogspot.com 的博文《Patch NS2 to Support UMTS》,文中给出了补丁文件 ns-2.35_eurane-1.12.diff 的链接,并且详细说明了安装方法以及出现错误的解决方法。搬运如下:
1、下载 ns-2.35_eurane-1.12.diff 文件,放到 /.ns-allinone-2.35/ns-2.35/ 目录下;
2、修改该目录下的 Makefile.in :
(1)将第56行的“CCOPT= @[email protected] ”改为“CCOPT= -Wall @[email protected] ”;
(2)搜索“apps/pbc.o”,找到大概在第336行的“apps/pbc.o \”,在下面添加
umts/am.o umts/classifier-sport.o umts/demuxer.o umts/demuxerRtModule.o umts/networkInterface.o umts/nif-classifier.o umts/tcs.o umts/um.o umts/umtslink.o umts/umtstrace.o umts/hsdpalink.o umts/um-hs.o umts/umts-timers.o umts/virtual_umtsmac.o umts/am-hs.o umts/umts-queue.o umts/dummy_drop_tail.o umts/error_model.o tools/coot.o \
(3)搜索“@[email protected]”,大概在570行,在上面另起一行添加
tcl/lib/ns-umts.tcl \
3、修改该目录下文件夹 common 中的 packet.h 文件:
(1)找到大概在200行的“ static packet_t PT_NTYPE = 73; // This MUST be the LAST one”,用“ // ”将其注释掉;
(2)在其下另起一行,插入
// UMTS - used by hdr_cmn class for tracing purpose static const packet_t PT_UM = 73; static const packet_t PT_AMDA = 74; static const packet_t PT_AMPA= 75; static const packet_t PT_AMPBPA = 76; static const packet_t PT_AMBA= 77; static const packet_t PT_AMPBBA= 78; // Used for tracking HARQ transmissions (MAC-hs PDUs) static const packet_t PT_AMDA_H1= 79; static const packet_t PT_AMDA_H2= 80; static const packet_t PT_AMDA_H3= 81; // End UMTS // COOT packet static const packet_t PT_COOT= 82; // insert new packet types here static packet_t PT_NTYPE = 83; // This MUST be the LAST one
(3)找到大概在400行的“endif //STL”,在其下另起一行,插入
// UMTS name_[PT_UM] = "UM"; name_[PT_AMDA] = "AM_Data"; name_[PT_AMPA] = "AM_Pos_Ack"; name_[PT_AMPBPA] = "AM_Piggyback_Ack"; name_[PT_AMBA] = "AM_Bitmap_ack"; name_[PT_AMPBBA] = "AM_Piggyback_Back"; // For HARQ transmission tracking name_[PT_AMDA_H1] = "HARQ_1"; name_[PT_AMDA_H2] = "HARQ_2"; name_[PT_AMDA_H3] = "HARQ_3"; // End UMTS // coot name_[PT_COOT] = "coot";
上述插入的内容一定要在“// Bell Labs (PackMime OL)”行的前面。
4、 在 ns-2.35 的目录下打开终端,运行“ patch -p1 < ns-2.35_eurane-1.12.diff ”;如果没有错误信 息,则运行“ ./configure ”;如果没有错误信息,则运行“ make clean ”,然后运行“ make ”。
三、安装 WiMax 补丁
从 nsnam.isi.edu/nsnam /index.php/Contributed_Code 中得知有 NIST 的 WiMax 补丁,下载位置为 www.nist.gov/itl /antd/emntg/ssm_tools.cfm ,在右边的“ Download Information ”栏的下方有链接。下载前需要填写一些 信息。
下载下来一个 ns-nist-wimax.tgz 压缩文档。安装这个真是个巨坑啊!如果直接解压缩到 ns-2.35 目录下并运行 patch 命令去安装,那么恭喜你,你将会被一大堆错误给弄晕。所以,老老实实修改文件吧。
解压缩这个压缩包,将会出现一个 prerelease041707.tgz 的压缩包。再解压,出现一个 src-prerelease-041707 的文件夹以及两个文件。
1、把 src-prerelease-041707 中的 wimax 文件夹复制到 ns-2.35 文件夹中。
2、在 ns-2.35/tcl 文件夹中创建一个 wimax 文件夹。
3、把 src-prerelease-041707/tcl/lib 目录下的ns-wimax.tcl 文件复制到 ns-2.35/tcl/lib 目录下。
4、把 src-prerelease-041707/mac 目录下的 mac-stats.h 文件复制到 ns-2.35/mac 目录下。
5、编辑 ns-2.35 目录下的 Makefile.in 文件:
(1)在大概第68行的“ @[email protected] \ ”行的上面,另起一行,添加
-I./wimax \
(2)在大概第378行的“ @[email protected] ”行的上面,另起一行,添加
wimax/ofdmphy.o wimax/mac802_16pkt.o wimax/serviceflowqos.o wimax/serviceflow.o wimax/serviceflowhandler.o wimax/connection.o wimax/connectionmanager.o wimax/peernode.o wimax/mac802_16.o wimax/mac802_16SS.o wimax/mac802_16BS.o wimax/sduclassifier.o wimax/destclassifier.o wimax/mac802_16timer.o wimax/wimaxneighborentry.o wimax/neighbordb.o wimax/scheduling/wimaxscheduler.o wimax/scheduling/bsscheduler.o wimax/scheduling/ssscheduler.o wimax/scheduling/ulsubframetimer.o wimax/scheduling/dlsubframetimer.o wimax/scheduling/burst.o wimax/scheduling/contentionslot.o wimax/scheduling/contentionrequest.o wimax/scheduling/contentiontimer.o wimax/scheduling/dlburst.o wimax/scheduling/ulburst.o wimax/scheduling/framemap.o wimax/scheduling/phypdu.o wimax/scheduling/profile.o wimax/scheduling/subframe.o wimax/scheduling/scanningstation.o wimax/scheduling/wimaxctrlagent.o \
(3)在大概第570行的“ @[email protected] ”上面,另起一行,添加
tcl/lib/ns-wimax.tcl \
6、编辑 ns-2.35/common 目录下的 packet.h 文件:
(1)在大概第202行的“ // insert new packet types here ”下,另起一行,添加
// wimax packets static const packet_t PT_WIMAXBS = 62;
一定要在“ // static packet_t PT_NTYPE = 73; // This MUST be the LAST one”这一行之前。其中的参数“62”不一定对......
(2)在大概第400行“ #endif //STL”部分下,第460行,“//DCCP”块下,添加
// WIMAX name_[PT_WIMAXBS]="wimaxCtrl";
在“ name_[PT_NTYPE]= "undefined"; ”的前面。
7、编辑 ns-2.35/tcl/lib 目录下的 ns-packet.tcl 文件,找到第188行“ # Other: ”部分,在“ HDLC # High Level Data Link Control ”下,另起一行,添加
802_16 # Wimax
8、编辑 ns-2.35/tcl/lib 目录下的 ns-lib.tcl ,在大概第218行“ source ../mcast/ns-lms.tcl ”下,另起一行,添加
# Wimax source ns-wimax.tcl
9、在 ns-2.35 目录下打开终端,运行“ ./configure ”;如果没有错误信息,运行“ make clean ”;最后运行 “ make ”。
10、测试:终端切换到 ns-2.35/tcl/wimax 目录下,运行“ ns wimax1.tcl ”。
四、在 Debian 7 Wheezy 下安装 NS-2.35 到/opt 目录
1、将解压后的 ns-allinone-2.35 整个目录通过 # cp -rf ns-allinone-2.35/ /opt/ 复制到 /opt 下;
可以对解压出来的、还没有执行安装的 ns-allinone-2.35 在完成上述二、三步修改后不执行 configure 以及 make,直接复制到 /opt 下然后一起安装。
2、# cd /opt ,然后 # chmod -R 755 ns-allinone-2.35;这样使得文件夹中的文件可读可执行;
3、# cd ./ns-allinone-2.35, # ./install ,安装;
4、编辑自己的 .bashrc ,添加下面的几行:
# enable network simulator 2 # LD_LIBRARY_PATH export LD_LIBRARY_PATH=/home/suyangts/.ns-allinone-2.35/otcl-1.14:/home/suyangts/.ns-allinone-2.35/lib # TCL_LIBRARY export TCL_LIBRARY=/home/suyangts/.ns-allinone-2.35/tcl8.5.10/library # PATH PATH=$PATH:/home/suyangts/.ns-allinone-2.35/bin:/home/suyangts/.ns-allinone-2.35/tcl8.5.10/unix:/home/suyangts/.ns-allinone-2.35/tk8.5.10/unix
5、注销或者 $source .bashrc ,输入 ns ,看看是否出现了百分号。如果出现,则 ns 可用。exit退出。