主要翻译自官网教程, 补充了一点自己的理解。
某些部分有点罗嗦,专供和曾经的我一样小白的同学参考。
教程中涉及一些简单的 linux、git指令,如果不懂就随便用哪个搜索引擎查一下吧,很容易的!给我留言也行。
可执行平台
ndnSIM2.x 可在以下平台成功编译和使用:
• Ubuntu Linux 14.04 (32- and 64-bit platform)
• Ubuntu Linux 16.04 (32- and 64-bit platform)
• OS X 10.9
• OS X 10.10
• OS X 10.11
包的依赖
安装 ndnSIM前,需要先安装一些其他东西。
1. 核心依赖(必需的)
• python >= 2.6
• libsqlite3
• libcrypto++
• pkg-config
• Boost libraries >= 1.53
Ubuntu Linux 下, 在 Terminal 里输入以下命令再敲回车即可:
sudo apt-get install build-essential libsqlite3-dev libcrypto++-dev libboost-all-dev
sudo
是用 root 权限执行的意思,执行时会要求你输密码,输入的时候什么都不会显示的哦,并不是出错了,敲完就回车吧。
2. 对 NS-3 Python 绑定的依赖(可选的)
需要执行:
sudo apt-get install python-dev python-pygraphviz python-kiwi
sudo apt-get install python-pygoocanvas python-gnome2
sudo apt-get install python-rsvg ipython
据说 python 绑定不太稳定,可以不要。但 visualizer这个可视化模块是需要绑定 python 的,个人还蛮喜欢这个模块的,可以直观地看到整个网络(效果见下图),不然一上来就看日志其实有点懵,暂时还没遇到不稳定的情况。
PyViz
ndnSIM资源下载
安装完依赖的东西后,就下载 ndnSIM资源吧。在 Terminal 里进入一个你喜欢的目录(文件夹)执行以下指令即可。如果用指令下载很慢,也可以进入指令里的连接在github 的页面下载,但别选错分支、漏掉子模块、放错文件夹啦。
- 新建并进入目录 ndnSIM2.2
mkdir ndnSIM2.2
cd ndnSIM2.2
ndnSIM2.2这个目录名可以换成你喜欢的。(顺便说一下,各种文件、目录名最好都别含中文,我虽然没试过ndnSIM会不会出错,但在装其他软件的时候涉及中文目录出过错。要是哪位同学测试了烦请告诉我结果。)
- 下载 NS-3 源码
git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3
我们用的 ndnSIM是 ns-3下的一个模块,所以要先下载 NS-3-3。ndnSIM用的是包含一些有用补丁的NS-3分支 (注意,不是NS-3的master分支,而是ndnSIM-v2分支哟)。
- 下载pybindgen源码
git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
这是定制的 python 绑定生成库,如果不需要 NS-3的 python 绑定或 visualizer模块,可以不要。
- 下载 ndnSIM 模块源码
git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM
如果clone ndnSIM时没有加 recurisive 参数,则子模块 ndn-cxx 和 NDF 没有下载,则需要再敲:
git submodule update --init
如果这俩子模块有更新,也敲这句。
编译
打开 ns-3所在目录,用 waf 编译(waf是ns-3选用的一个厉害的开源编译系统,比 make简洁,感兴趣的可以看看 http://code.google.com/p/waf):
cd <ns-3-folder>
./waf configure --enable-examples
./waf
如果不用 python绑定,或者报了和 python 有关的库,那么就禁用它吧,还能快点:
cd <ns-3-folder>
./waf configure --disable-python --enable-examples
./waf
本质上,ndnSIM是 ns-3的一个模块,所以只编译ns-3即可。
./waf configure
执行完成后会显示configuration 成功,虽然在这行字后面可能还有一堆红红的信息说你缺这个那个的,但是确实已经成功了!缺的那些虽然扎眼但是咱不需要。
./waf
执行后会显示已安装和未安装的模块,某些模块没有也没关系。如果之后添加了新文件,再重新编译就行。
如果failed……后面会显示编译日志的位置,但是太长啦!就看看 failed 前面的信息里,哪些文件 not found 了,看起来和上文提到的依赖包很像的,就再装一下吧。
visualizer模块安装失败我也遇到过,如果有显示:
pybindgen (found ''), (need '0.17.0.post45+ng4806e4f')
则执行sudo apt-get install python-setuptools
,再编译就行。
另外,敲 ./waf --help可以了解更多 configuration 的可选参数。
仿真
1. 示例
如果编译的时候用上了 --enable-examples,那就能直接跑src/ndnSIM/examples 路径下的例子了,用./waf --run=<文件名>即可
,如:
./waf --run=ndn-simple
这一句的意思是运行了 ndn-simple.cpp 文件(就是脚本,定义了网络结构、策略、参数等,称为scenario)等于号似乎可以不要。
又如:
./waf --run=ndn-grid
又如:
NS_LOG=ndn.Producer:ndn.Consumer ./waf --run=<scenario name>
这一句启用了日志(logging)模块,只在 NS-3以 debug mode(-d debug) 编译的情况下生效。
又如:
./waf --run=<scenario name> --vis
这一句调用了可视化模块
更多例子参见官网 http://ndnsim.net/2.2/examples.html
日志等帮助调试的功能,会增加 overhead。所以测数据时,得把 ns-3以优化模式编译:
./waf configure -d optimized
2. 真实的实验
仿真场景(脚本)可以直接写在ns-3下的scratch/ 或src/ndnSIM/examples文件夹内(这两个里有重名怎么办?似乎 scratch 里的都是.cc,src/ndnSIM/examples里的是.cpp)。但更推荐的是写在和 ns-3、ndnSIM都不相关的仓库(repository)里。
例如:http://github.com/cawka/ndnSIM-scenario-template:
mkdir ndnSIM
cd ndnSIM
git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3
git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM /*如果已经下载过 ndn 资源就不用重复这三行了*/
# Build and install NS-3 and ndnSIM
cd ns-3
./waf configure -d optimized
./waf
sudo ./waf install
cd .. /*跳转到 ns-3外面*/
git clone https://github.com/named-data-ndnSIM/scenario-template.git scenario
cd scenario
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./waf configure
./waf --run <scenario>
这个例子只是提供了在 ns-3外写脚本的一个路径配置和安排(脚本在哪里,数据存哪里,图片存哪里,等),可以不管……
弄懂怎么写脚本、改源码之后再优化。
还有一些小的坑,也不是人人都会遇到,先不写啦
网友评论