NS3_Tutorial 中文版: 第三章 NS3 快速上手

【致謝】: 感謝關注NS3 Tutorial中文版的廣大網友們,感謝NS3翻譯小組,感謝初稿的翻譯者們,感謝審稿和編輯們!!!   (詳細的名單請查看博文翻譯Tutorial
 
 
  聲明:引用和轉載相關內容,請尊重作者、翻譯者和審稿者的辛勤付出,我們堅信開源的思想,我們希望自己的工作可以爲更多的人提供幫助,我們不希望成爲隨意粘貼和任意複製的對象。
 
 

 
翻譯: 數字城堡

 

校稿: Xiaochuan Shen

編輯: 劉小洋

3.1  下載ns-3

從現在起,我們假定讀者使用的工作環境爲Linux或者仿Linux環境(Linux, Cygwin等等.) 並且已經安裝了可用的GNU工具鏈,而且還安裝了Mercurial(分佈式版本控制系統)Waf軟件。細節已經在ns-3網頁中詳述過,參見以下鏈接:

http://www.nsnam.org/getting_started.html.

ns-3源碼可以在網站http://code.nsnam.org 上的Mercurial源碼庫下載到.你也可以從鏈接http://www.nsnam.org/releases/處下載一個tar格式壓縮包,或者直接使用Mercurial源碼庫下載。除非有特殊需要,我們推薦使用Mercurial源碼庫下載。tar格式壓縮包下載,請參見本節最後部分。最簡單的方法就是使用Mercurial源碼庫下載一個ns-3-allinone壓縮包,此壓縮包內含一套腳本集來管理各種子系統下的ns-3下載和安裝。我們推薦你使用這個壓縮包來簡化你的ns-3安裝。

3.1.1 使用Mercurial下載ns-3

作爲練習,我們首先在home目錄下建立一個目錄並取名爲repos,用來存放本地Mercurial源碼庫,注意:在本教程隨後內容中,我們假定你已經這樣做了。如果使用如下的方法,可以在Linuxshell中下載到一份ns-3-allinone軟件包(假定你已經安裝了Mercurial):

cd

mkdir repos

cd repos

 
Mercurailhg命令執行後,可以看到如下結果:

destination directory: ns-3-allinone

requesting all changes

adding changesets

adding manifests

adding file changes

added 31 changesets with 45 changes to 7 files

7 files updated, 0 files merged, 0 files removed, 0 files unresolved

 

clone命令運行結束以後,在前述建立的repos目錄下,會出現一個ns-3-allinone目錄,而且含有如下文件:

build.py*  constants.py  dist.py*  download.py*  README  util.py

注意:你實際上僅僅下載了一些Python腳本,下一步就是利用這些腳本根據需要下載並來安裝ns-3軟件包。如果你訪問如下鏈接:http://code.nsnam.org/ 就會發現若干源碼庫,其中很多是ns3開發團隊專用的。其中在源碼庫org/ 你會發現名爲ns-3.1的源碼庫,這是ns-3的第一個穩定版本。還有一些分散的源碼庫名爲ns-3.1-reftraces它爲ns-3.1保留了參考記錄。保持這些文件的一致性是非常重要的,尤其是當你想對源碼庫做一個迴歸測試時。至少做一次測試來驗證所有的程序都正確編譯了。

當前的開發版ns-3的快照存放在http://code.nsnam.org/ns-3-dev/;相關的參考記錄存放在鏈接 http://code.nsnam.org/ns-3-dev-ref-traces/ns3開發人員會盡量保持源碼庫中的代碼處於一致,工作的狀態,但是他們仍在開發中,有一些未發佈過的代碼。所以如果你不需要最新的特性的話還是考慮使用發行版。

由於發佈版的版本號在變化中,我在指南中還是繼續使用通常不變的ns-3-dev,但是你可以根據自己的需要選擇其他的版本,並替換這裏的ns-3-dev”,(例如, ns-3.6ns-3.6-ref-traces),在下文中,你可以通過訪問源碼庫列表或者訪問ns3開始網頁找到最新的ns-3發佈版軟件。

 

當你從源碼庫下載完後,繼續切換進入你自己建立的ns-3-allinone目錄中。 我們現在使用download.py腳本來下載ns-3需要使用的各個部件。繼續在你的shell中輸入以下命令 (如果你想使用任意發行版你可以將ns-3-dev替換爲你選擇的發行版的名字,例如"ns-3.6" "ns-3.6-reftraces")

./download.py -n ns-3-dev -r ns-3-dev-ref-traces

注意,-n選項的默認參數爲ns-3-dev-r選項的默認參數爲ns-3-dev-ref-traces所以上述命令中這兩個選項的參數實際上是多餘的。我們使用這個例子來描述如何指定源碼庫。你只需簡單鍵入如下命令就可以使用默認參數來下載ns-3-dev

./download.py

hg (Mercurial)命令執行時,你可以看到如下的信息:

#

# Get NS-3

#

Cloning ns-3 branch

=> hg clone http://code.nsnam.org/ns-3-dev ns-3-dev

requesting all changes

adding changesets

adding manifests

adding file changes

Chapter 3: Getting Started 8

added 4634 changesets with 16500 changes to 1762 files

870 files updated, 0 files merged, 0 files removed, 0 files unresolved

這些輸出信息顯示下載腳本已經從源碼庫中下載到了實際的ns-3源碼,緊接着,你就會看到這樣的信息:

#

# Get the regression traces

#

Synchronizing reference traces using Mercurial.

=> hg clone http://code.nsnam.org/ns-3-dev-ref-traces ns-3-dev-ref-traces

requesting all changes

adding changesets

adding manifests

adding file changes

added 86 changesets with 1178 changes to 259 files

208 files updated, 0 files merged, 0 files removed, 0 files unresolved

這表明下載腳本爲你下載了參考記錄文件。下載腳本被設計成自適應的,它能檢測在一些系統平臺上某些ns-3模塊不被支持,在你的系統平臺上,你可能看不到這些系統不支持的源碼被下載。然而,在大多數系統平臺上這樣的過程會顯示如下:

#

# Get PyBindGen

#

Required pybindgen version: 0.10.0.640

Trying to fetch  pybindgen; this will fail if no network connection is available. Hit Ctrl-=> bzr checkout -rrevno:640 https://launchpad.net/pybindgen pybindgen

Fetch was successful.

這些信息顯示了下載腳本在爲你下載Python綁定生成器的過程,下一步你就可能看到如下的信息(不同的系統平臺表現有所不同)

#

# Get NSC

#

Required NSC version: nsc-0.5.0

Retrieving nsc from https://secure.wand.net.nz/mercurial/nsc

=> hg clone https://secure.wand.net.nz/mercurial/nsc nsc

requesting all changes

adding changesets

adding manifests

adding file changes

added 273 changesets with 17565 changes to 15175 files

10622 files updated, 0 files merged, 0 files removed, 0 files unresolved

這些信息顯示了下載腳本在爲你下載網絡仿真器支架程序(NSC)的過程。

 

當複製命令結束,你在~/repos/ns-3-allinone目錄下會有幾個新目錄:

build.py* constants.pyc download.py* ns-3-dev-ref-traces/ pybindgen/ util.py

constants.py dist.py* ns-3-dev/ nsc/ README util.pyc

繼續進入ns-3-dev目錄,你會見到如下的文件:

AUTHORS examples/ regression/ scratch/ waf*

bindings/ LICENSE regression.py src/ waf.bat*

CHANGES.html ns3/ RELEASE_NOTES utils/ wscript

doc/ README samples/ VERSION wutils.py

現在可以準備編譯ns-3軟件了。

 

3.1.2 使用Tarball下載ns-3

使用tarball下載ns-3比使用Mercurail下載ns-3要簡單一些,因爲需要下載的各個部分都已經預先被打包在一個壓縮包中了,你只需要選擇一個發行版版本,下載並且解壓就可以。如上所述,在Mercurial下載方法中,是在home目錄下創建一個repos目錄,保存本地Mercurial源碼庫。你也可以建立一個tarball目錄來下載。(注意:本教程後面會假定你把它下載到了repoa目錄,所以請留意這個選擇)。如果你選擇了tarballs方法下載,你可以鍵入如下命令來下載一份ns-3發行版 (當然,可以根據需要選擇你想要的版本):

cd

mkdir tarballs

cd tarballs

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

tar xjf ns-allinone-3.6.tar.bz2

如果你切換到ns-allinone-3.6目錄,你會看到下述文件:

build.py* ns-3.6/ nsc-0.5.1/ README

constants.py ns-3.6-ref-traces/ pybindgen-0.12.0.700/ util.py

現在就可以編譯ns-3軟件包了。

 

3.2 編譯ns-3

 
3.2.1 使用build.py編譯

如果你是第一次編譯ns-3軟件包,建議使用allinone環境,它會爲你以最常用的方式配置工程。

切換到你在上文下載一節中創建的目錄下。如果你使用Mercurial下載,請進入~/repos目錄下的ns-3-allinone目錄,如果你使用tarball下載,找到~/tarballs目錄下類似ns-allinone-3.6的目錄,鍵入如下的命令,並請耐心等待:

./build.py

編譯腳本開始編譯下載的ns3時,你會看到大量常見的編譯器輸入信息。最後你會看到如下編譯成功的好消息:

Waf: Leaving directory /home/craigdo/repos/ns-3-allinone/ns-3-dev/build

build finished successfully (2m30.586s)

一旦工程編譯好,你就可以不再使用ns-3-allinone腳本包了。你已經從其中獲取必要的東西,現在是你直接同Waf交互的時候了,它位於ns-3-dev目錄中,並不在 ns-3-allinone目錄中。切換到ns-3-dev目錄下(或者你下載的版本的相應目錄下)

cd ns-3-dev

 

3.2.2使用Waf編譯

我們使用waf來配置和編譯ns-3工程軟件包,這一點不是嚴格必須的,但是做一個簡單的介紹是很有必要的,起碼可以瞭解如何修改工程的配置。也許你能做出的最有用的配置修改就是編譯工程的優化版本了,默認你會將你的工程編譯爲調試版本,讓我們來使工程做出優化的編譯。

爲了通知waf進行優化編譯,你需要執行如下的命令:

./waf -d optimized configure

這會Waf可能會切換到其他目錄收集信息. 當編譯系統檢查各種依存關係時,你可以看到類似如下的輸出結果:

Checking for program g++ : ok /usr/bin/g++

Checking for program cpp : ok /usr/bin/cpp

Checking for program ar : ok /usr/bin/ar

Checking for program ranlib : ok /usr/bin/ranlib

Checking for g++ : ok

(鑑於長度限制,省略)
Checking for program valgrind : ok /usr/bin/valgrind

---- Summary of optional NS-3 features:

Threading Primitives : enabled

Real Time Simulator : enabled

Emulated Net Device : enabled

GNU Scientific Library (GSL) : enabled

Tap Bridge : enabled

GtkConfigStore : enabled

XmlIo : enabled

SQlite stats data output : enabled

Network Simulation Cradle : enabled

Python Bindings : enabled

Python API Scanning Support : enabled

Use sudo to set suid bit : not enabled (option --enable-sudo not selected)

Build examples and samples : enabled

Static build : not enabled (option --enable-static not selected)

configure finished successfully (2.870s)

需要注意輸入的最後一部分。部分ns-3選項並不是默認的,需要底層系統的支持才能夠順利運行。例如:爲了運行XmlTo, 系統必須安裝libxml-2.0,如果沒有發現這個庫,相應的ns-3特性就不會被激活,這會以消息顯示出來。另一個需要注意的地方是:對於一些特定的程序,需要使用sudo命令來設置該程序的。這個是默認設置爲關的,所以此性質會顯示出未激活,現在我們可以進一步返回到調試編譯上來:

./waf -d debug configure

此時編譯系統被配置好,你可以編譯ns-3程序的debug版本了,只需簡單的命令如下:

./waf

一些waf命令在編譯階段是很重要的,另一些命令是在配置階段有用的,例如,如果你想使用ns-3的仿真(emaulation)特性,你一定要通過上述的sudo來設置用戶標識位(suid爲有效位。這將是一個配置命令,你可以使用如下命令通知Waf來重新設置:

./waf -d debug --enable-sudo configure

如果你這樣做,waf會運行sudoroot的權限來改變仿真代碼的socket創建程序。在waf中還有許多其它的配置和編譯選項可用。若要察看詳細的選項,鍵入以下命令:

./waf --help

我們將會在下一節中使用測試相關的命令。好的,你已經編譯ns-3兩遍了,現在你知道如何修改配置和編譯優化代碼了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章