在 Mac OS X 上安装 ns-3

Ns-3 网络模拟器(network simulator)看上去像 ns-2 的升级版本,其实不是,ns-3 是全新的一套网络模拟器,ns-3 的最终目标是替代 ns-2,虽然 ns-3 和 ns-2 都是用 C++ 写的,但是 ns-3 不兼容 ns-2 的 APIs,这就使得在 ns-2 下写的程序可能就需要一定的移植才能在 ns-3 下运行。对于已经熟悉 ns-2 的人来说,ns-3 和 ns-2 最大的区别可能就是脚本语言的不同,ns-2 使用 OTcl 而 ns-3 使用的是 Python. 虽然 ns-3 的 models 没有 ns-2 多,但是 ns-3 有些我们需要的新功能,比如更细致的 802.11 models 等。最近一直在忙 paper 和一些数据,模拟器的事情被搁到一边很长时间了,ns-3 软件包很绿色,下载完源代码后所有编译过程都在一个目录里进行,编译完就可以用,不需要安装,也不会到处放置一些杂乱的配置文件,所以 VPSee 决定在自己 Mac 上编译一个,省得每次都要远程登录到办公室的电脑上。

下载和编译 ns-3

在编译和安装 ns-3 之前先确认 Mac 上已经装有 Xcode 开发工具,Xcode 是 Mac 的开发工具套件,可以在 Mac OS X 的安装 CD 上找到,如果没有可以去苹果官方网站免费下载。有了 Xcode 后就可以开始编译 ns-3 了。这里使用的 Mac OS X 版本是 10.6.4:

$ wget http://www.nsnam.org/releases/ns-allinone-3.9.tar.bz2

$ tar jxvf ns-allinone-3.9.tar.bz2

$ cd ns-allinone-3.9
$ ./build.py
...
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (22m12.303s)
Leaving directory `./ns-3.9'

测试 ns-3

22分钟后编译完成,在 Mac 上安装比在 Linux 上安装 ns-2 还简单,没有 trouble shooting,没有 workaround,编译完就可以用,难道 ns-3 的开发人员也在用 Mac?编译成功后,用测试用例测试一下:

$ cd ns-allinone-3.9/ns-3.9
$ ./test.py
...
145 of 145 tests passed (145 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)

运行第一个例子程序

没有问题后就可以开始自己的第一个程序了,拷贝一个例子程序,然后编译运行:

$ cd ns-allinone-3.9/ns-3.9

$ cp examples/tutorial/first.cc scratch/myfirst.cc

$ ./waf
Waf: Entering directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
[1160/1308] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_2.o
[1161/1308] cxx: scratch/simple.cc -> build/debug/scratch/simple_3.o
[1305/1308] cxx_link: build/debug/scratch/myfirst_2.o -> build/debug/scratch/myfirst
[1306/1308] cxx_link: build/debug/scratch/simple_3.o -> build/debug/scratch/simple
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (5.995s)

$ ./waf --run scratch/myfirst
Waf: Entering directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (0.848s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Apple 和 Steven Jobs 关于系统平台最正确的决定可能就是选择和迁移到了 Unix 平台(x86),使得大量的基于 Unix/Linux 的研究和开源项目可以很容易的运行在 Mac 上,这样吸引了大批 Unix/Linux 程序员、系统管理员、研究人员投靠 Mac 阵营

在 Fedora 上安装 ns-2

最近一直在玩网络模拟与仿真,我们需要模拟几百个节点的 mesh network 做 VoIP 通信,然后修改一些 VoIP 协议和算法,并在模拟器上对修改后的协议进行测试和比较,看看性能有没有提升或者下降。模拟完成后,我们将会用 Linksys WRT54GL 架设真实 mesh network,并通过修改 OpenWrt 固件把新的协议应用到真实 mesh network 中,看看有什么变化和区别。前段时间我们试用了 NCTUns,一个台湾交通大学开发的网络模拟软件。这几天我们主要在关注 ns-2,一个由加州伯克利大学开发的网络仿真平台,也是目前的主流开源网络模拟平台。

安装必备软件包

# yum install autoconf automake gcc-c++ libX11-devel xorg-x11-proto-devel \
libXt-devel libXmu-devel

下载和安装 ns-2

要下载和安装的模块很多,最简单的方式就是下载 all in one 版本,所有模块都包括:

$ wget http://www.isi.edu/nsnam/dist/ns-allinone-2.34.tar.gz
$ tar zxvf ns-allinone-2.34.tar.gz
$ cd ns-allinone-2.34
$ ./install

安装过程很顺利,不需要有什么 trouble shooting,安装完后修改环境变量:

$ vi /home/vpsee/.bashrc

# LD_LIBRARY_PATH
OTCL_LIB=/home/vpsee/ns-allinone-2.34/otcl-1.13
NS2_LIB=/home/vpsee/ns-allinone-2.34/lib
X11_LIB=/usr/X11R6/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$NS2_LIB:$X11_LIB

# TCL_LIBRARY
TCL_LIB=/home/vpsee/ns-allinone-2.34/tcl8.4.18/library
export TCL_LIBRARY=$TCL_LIB

# PATH
PATH=$PATH:/home/vpsee/ns-allinone-2.34/bin: \
/home/vpsee/ns-allinone-2.34/tcl8.4.18/unix: \
/home/vpsee/ns-allinone-2.34/tk8.4.18/unix

运行 ns-2

到 http://nile.wpi.edu/NS/ 下载一个简单的例子 ns-simple.tcl,然后在命令行下用 ns2 运行这个脚本:

$ ns2 ns-simple.tcl

成功运行后界面如下:

ns2