主要翻譯自官網教程, 補充了一點自己的理解。
某些部分有點羅嗦,專供和曾經的我一樣小白的同學參考。
教程中涉及一些簡單的 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 的,個人還蠻喜歡這個模塊的,可以直觀地看到整個網絡(效果見下圖),不然一上來就看日志其實有點懵,暫時還沒遇到不穩定的情況。
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外寫腳本的一個路徑配置和安排(腳本在哪里,數據存哪里,圖片存哪里,等),可以不管……
弄懂怎么寫腳本、改源碼之后再優化。
還有一些小的坑,也不是人人都會遇到,先不寫啦