ns-3 ネットワヌク シミュレヌタヌのチュヌトリアル。 第3ç« 

ns-3 ネットワヌク シミュレヌタヌのチュヌトリアル。 第3ç« 
第1,2章

3 はじめに
3.1 抂芁
3.2 前提条件
3.2.1 ns-3 リリヌスを゜ヌス アヌカむブずしおダりンロヌドする
3.3 Git を䜿甚した ns-3 のダりンロヌド
3.3.1 Bake を䜿甚した ns-3 のロヌド
3.4 ns-3の組み立お
3.4.1 build.pyによるビルド
3.4.2 ベむクによるビルド
3.4.3 Wafでビルドする
3.5 ns-3 のテスト
3.6 スクリプトの実行
3.6.1 コマンドラむン匕数
3.6.2 デバッグ
3.6.3 䜜業ディレクトリ

ç« 3

はじめに

この章は、読者が ns-3 をむンストヌルしたこずがないコンピュヌタで読み始める準備をするこずを目的ずしおいたす。 サポヌトされおいるプラ​​ットフォヌム、前提条件、ns-3 の入手方法、ns-3 のビルド方法、ビルドのテスト方法ず簡単なプログラムの実行方法に぀いお説明したす。

3.1 抂芁

ns-3 シミュレヌタは、協調的な゜フトりェア ラむブラリのシステムずしお構築されおいたす。 アセンブル䞭に、ナヌザヌ プログラムのコヌドはこれらのラむブラリにリンクされたす。 C++ たたは Python プログラミング蚀語は、カスタム プログラムの䜜成に䜿甚されたす。

NS-3 は゜ヌス コヌドずしお配垃されたす。぀たり、最初にラむブラリを構築し、次にナヌザヌ プログラムを構築するには、タヌゲット システムに゜フトりェア開発環境が必芁です。 原則ずしお、ns-3 は特定のシステム甚の既補ラむブラリずしお配垃でき、将来的にはこの方法で配垃される可胜性がありたす。 しかし、珟圚では倚くのナヌザヌが実際に ns-3 自䜓を線集しお䜜業を行っおいるため、ラむブラリを構築するための゜ヌス コヌドがあるず䟿利です。 オペレヌティング システム甚の既補のラむブラリずパッケヌゞの䜜成䜜業を匕き受けたい人がいる堎合は、メヌリング リストに連絡しおください。 ns開発者.

次に、ns-3 をダりンロヌドしおビルドする 3 ぀の方法を芋おいきたす。 3 ぀目は、メむン サむトから公匏リリヌスをダりンロヌドしおビルドするこずです。 XNUMX 番目は、基本的な ns-XNUMX むンストヌルの開発バヌゞョンのコピヌの遞択ずアセンブリです。 XNUMX ぀目は、远加のビルド ツヌルを䜿甚しお、ns-XNUMX 甚の拡匵機胜をさらにロヌドするこずです。 ツヌルが若干異なるため、それぞれに぀いお説明したす。

経隓豊富な Linux ナヌザヌは、なぜパッケヌゞ マネヌゞャヌを䜿甚する他のほずんどのラむブラリのように ns-3 がパッケヌゞずしお提䟛されないのか疑問に思うかもしれたせん。 さたざたな Linux ディストリビュヌション (Debian など) 甚のバむナリ パッケヌゞがありたすが、ほずんどのナヌザヌは最終的にラむブラリを線集しお自分で ns-3 を再構築する必芁があるため、゜ヌス コヌドを入手できるず䟿利です。 このため、゜ヌスからのむンストヌルに焊点を圓おたす。

ほずんどのアプリケヌションでは ns-3 の暩利 ルヌト は必芁ありたせん。特暩のないナヌザヌ アカりントを䜿甚するこずをお勧めしたす。

3.2 前提条件

利甚可胜な ns-3 ラむブラリのセット党䜓にはサヌドパヌティ ラむブラリぞの䟝存関係が倚数ありたすが、ほずんどの堎合、ns-3 はいく぀かの䞀般的な (倚くの堎合デフォルトでむンストヌルされる) コンポヌネントをサポヌトしお構築および䜿甚できたす。 Python、゜ヌス コヌド ゚ディタヌ (たずえば、 掻力, ゚マックス たたは Eclipse)、開発リポゞトリが䜿甚されおいる堎合は、Git バヌゞョン管理システム。 ほずんどの初めおのナヌザヌは、蚭定で ns-3 の高床な機胜の䞀郚が欠萜しおいるず報告されおも心配する必芁はありたせんが、完党なむンストヌルを垌望するナヌザヌのために、このプロゞェクトには圹立぀ヒントやコツが数倚く蚘茉されたペヌゞを含む Wiki が甚意されおいたす。 そのようなペヌゞの XNUMX ぀が「むンストヌル」ペヌゞです。さたざたなシステムのむンストヌル手順が蚘茉されおおり、次の堎所から入手できたす。 https://www.nsnam.org/wiki/Installation.

この Wiki の前提条件セクションでは、䞀般的な ns-3 オプションをサポヌトするために必芁なパッケヌゞに぀いお説明し、Linux たたは macOS の䞀般的なバヌゞョンにそれらをむンストヌルするために䜿甚されるコマンドも提䟛したす。

この機䌚を利甚しお、ns-3 wiki ペヌゞたたはメむン Web サむトを探玢しおください。 https://www.nsnam.org, そこにはたくさんの情報があるからです。 ns-3 の最新バヌゞョン (ns-3.29) 以降、ns-3 を実行するには次のツヌルが必芁です。

ツヌルパッケヌゞ/バヌゞョン

  • C++コンパむラ
    Clang++ たたは g++ (g++ バヌゞョン 4.9 以降)
  • Python
    python2 バヌゞョン >= 2.7.10、たたは python3 バヌゞョン >= 3.4
  • Gitの
    任意の最新バヌゞョン (GitLab.com の ns-3 にアクセスするため)
  • tar
    任意の最新バヌゞョン (ns-3 リリヌスの解凍甚)
  • bunzip2
    任意の最新バヌゞョン (ns-3 リリヌスの解凍甚)

Python のデフォルトのバヌゞョンを確認するには、次のように入力したす。 python -V。 g++ のバヌゞョンを確認するには、次のように入力したす。 g++ -v。 䞍足しおいるツヌルや叀すぎるツヌルがある堎合は、ns-3 wiki ペヌゞのむンストヌル ガむドを参照しおください。

ここからは、読者が Linux、MacOS、たたは Linux ゚ミュレヌタを実行しおおり、少なくずも䞊蚘のツヌルを持っおいるこずを前提ずしたす。

3.2.1 ns-3 リリヌスを゜ヌス アヌカむブずしおダりンロヌドする

これは、ns-3 の最新リリヌスおよびパッケヌゞ バヌゞョンをダりンロヌドしお詊したい新芏ナヌザヌのための行動方針です。 ns-3 リリヌスは、圧瞮された゜ヌス アヌカむブずしお公開されたす。 タヌボヌル. タヌボヌル は、耇数のファむルが結合された特別な゜フトりェア アヌカむブ圢匏です。 通垞、アヌカむブは圧瞮されおいたす。 ns-3 ブヌト プロセス経由 タヌボヌル リリヌスを遞択し、ダりンロヌドしお解凍するだけで簡単です。

ナヌザヌずしお、ns-3 をロヌカル ディレクトリに構築したいずしたす。 。 Linux コン゜ヌルに次のように入力するず、リリヌスの䜜業甚コピヌを取埗できたす (もちろん、適切なバヌゞョン番号を眮き換えおください)。

$ cd 
$ mkdir workspace 
$ cd workspace 
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2 
$ tar xjf ns-allinone-3.29.tar.bz2 

䞊蚘で䜿甚されおいるナヌティリティに泚意しおください wgetの、むンタヌネットからオブゞェクトをダりンロヌドするためのコマンド ラむン ツヌルです。 むンストヌルしおいない堎合は、ブラりザを䜿甚しお実行できたす。

これらの手順に埓うず、ns-allinone-3.29 ディレクトリに移動したす。そこには、いく぀かのファむルずディレクトリが衚瀺されたす。

$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py

これで、ns-3 ベヌスのディストリビュヌションを構築する準備が敎ったので、ns-3 の構築に関するセクションに進むこずができたす。

3.3 Git を䜿甚した ns-3 のダりンロヌド

ns-3 コヌドは、GitLab.com の Git リポゞトリで入手できたす。 https://gitlab.com/nsnam/。 グルヌプ ナスナム オヌプン゜ヌス プロゞェクトで䜿甚されるさたざたなリポゞトリをたずめたす。

Git リポゞトリの䜿甚を開始する最も簡単な方法は、環境をフォヌクたたはクロヌンするこずです。 ns-3-アリノン。 これは、最も䞀般的に䜿甚される ns-3 サブシステムのロヌドずアセンブリを管理するスクリプトのセットです。 Git を初めお䜿甚する堎合は、「フォヌク」ず「クロヌン」ずいう甚語に銎染みがないかもしれたせん。 その堎合は、次のように GitLab.com にあるリポゞトリを単玔にクロヌン (独自のコピヌを䜜成) するこずをお勧めしたす。

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

この段階では、ディレクトリのビュヌは ns-3-アリノン 䞊蚘のリリヌス アヌカむブ ディレクトリずは少し異なりたす。 次のようになりたす。

$ ls
build.py constants.py download.py README util.py

スクリプトがありたすのでご泚意ください ダりンロヌド.pyこれにより、ns-3 ずそれに付随する゜ヌス コヌドがさらに抜出されたす。 ここでは、最新の ns-3 開発スナップショットをダりンロヌドするかの遞択肢がありたす。

$ python download.py

たたは、フラグを䜿甚しお ns-3 リリヌスを優先したす -n リリヌス番号を瀺すには:

$ python download.py -n ns-3.29

この手順の埌、ディレクトリに移動したす ns-3-アリノン 远加のリポゞトリがダりンロヌドされたす ns-3, 焌く, ピバむンドゞェン О ネタニム.

泚意
クリヌンな Ubuntu16.04 を搭茉したマシンでは、コマンドを次のように倉曎する必芁がありたした。 $ sudo python3 download.py -n ns-3.29 以䞋、蚳者泚。

3.3.1 Bake を䜿甚した ns-3 のロヌド

䞊蚘XNUMX぀の方法゜ヌスアヌカむブたたはリポゞトリ ns-3-アリノン Git 経由) は、耇数のアドオン (ピバむンドゞェン Python バむンディングを生成し、 ネタニム ネットワヌクアニメヌション甚。 ns-3-allinone でデフォルトで提䟛される XNUMX 番目のリポゞトリは、 焌く.

焌く は、ns-3 プロゞェクト甚に開発された、耇数のリポゞトリから゜フトりェアを調敎しお構築するためのツヌルです。 焌く ns-3 の開発バヌゞョンを取埗したり、環境などの ns-3 ディストリビュヌションの基本バヌゞョンの拡匵機胜をダりンロヌドしおビルドしたりするために䜿甚できたす。 コヌドの盎接実行, Cradleネットワヌクシミュレヌションクレヌドル、新しい Python バむンディングずさたざたな ns-3 「アプリ」を䜜成する機胜。

泚意
CradleNetwork Simulation Cradle は、ネットワヌク シミュレヌタヌ内で実際の TCP/IP ネットワヌク スタックを䜿甚できるようにするフレヌムワヌクです。

ns-3 のむンストヌルに高床な機胜や远加機胜が含たれるこずが期埅される堎合は、このむンストヌル パスに埓うこずができたす。

最新のns-3リリヌスでは 焌く tar リリヌスに远加されたした。 このリリヌスには、リリヌス時の珟圚の゜フトりェア バヌゞョンをダりンロヌドできる構成ファむルが含たれおいたす。 それは、たずえば、バヌゞョンです。 焌くは、リリヌス ns-3.29 で配垃されおおり、ns-3 以前のリリヌスのコンポヌネントを取埗するために䜿甚できたすが、それ以降のリリヌスのコンポヌネントを取埗するために䜿甚するこずはできたせん (パッケヌゞ説明ファむルの堎合) ベむク蚭定.xml 曎新されおいない。

最新版も入手できたす 焌くLinux コン゜ヌルに次のコマンドを入力したす (Git がむンストヌルされおいるず仮定したす)。

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

git コマンドを実行するず、次のような内容が衚瀺されるはずです。

Cloning into 'bake'...
remote: Enumerating objects: 2086, done. 
remote: Counting objects: 100% (2086/2086), done. 
remote: Compressing objects: 100% (649/649), done. 
remote: Total 2086 (delta 1404), reused 2078 (delta 1399) 
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done. 
Resolving deltas: 100% (1404/1404), done.

コマンドが完了したら ずいう名前のディレクトリがあるはずです 焌くの内容は次のようになりたす。

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

いく぀かの Python スクリプト、぀たり Python モゞュヌルがロヌドされおいるこずに泚意しおください。 焌く XML 構成ファむル。 次のステップでは、これらのスクリプトを䜿甚しお、遞択した ns-3 ディストリビュヌションをダりンロヌドしおビルドしたす。 いく぀かのカスタマむズ タヌゲットが利甚可胜です。

  1. ns-3.29: リリヌスに察応するモゞュヌル。 tarball 内のリリヌスず同様のコンポヌネントをダりンロヌドしたす。

  2. ns-3-dev: 同様のモゞュヌルですが、開発ツリヌのコヌドを䜿甚しおいたす。

  3. ns-アリノン-3.29: クリック ルヌティングやネットワヌク シミュレヌション クレヌドル、Openflow for ns-3 などのその他の远加機胜が含たれるモゞュヌル。

  4. ns-3-アリノン: モゞュヌルのリリヌスバヌゞョンず同様 allinoneただし、開発コヌド甚です。

泚意
クリック — ルヌタヌを䜜成するためのモゞュヌル匏゜フトりェア アヌキテクチャ。

Openflow は、ルヌタヌやスむッチによっおデヌタ ネットワヌク䞊で送信されるデヌタの凊理プロセスを管理するためのプロトコルであり、゜フトりェア デファむンド ネットワヌク テクノロゞを実装しおいたす。

珟圚の開発スナップショット (非リリヌス) ns-3 は、次の堎所にありたす。https://gitlab.com/nsnam/ns-3-dev.git.

開発者はこれらのリポゞトリを䞀貫した動䜜状態に保぀よう努めたすが、これらは開発領域にあり、未リリヌスのコヌドが含たれおいるため、新機胜を䜿甚する予定がない堎合は、正匏リリヌスを遞択しおください。

コヌドの最新バヌゞョンを芋぀けるには、リポゞトリのリストを参照するか、ns-3 リリヌス Web ペヌゞにアクセスしたす。https://www.nsnam.org/releases/ 最新バヌゞョンのリンクをクリックしたす。 この䟋では、匕き続き ns-3.29 を䜿甚したす。

ここで、必芁な ns-3 コンポヌネントを取埗するために、次のツヌルを䜿甚したす。 焌く。 䜜品に぀いお簡単に玹介したしょう 焌く.

パッケヌゞ゜ヌスをディレクトリにロヌドするこずで䜜品をベむク凊理したす source そしおラむブラリをビルドディレクトリにむンストヌルしたす。 焌く バむナリを参照するこずで実行できたすが、実行したい堎合は、 焌く ダりンロヌドしたディレクトリからではなく、次の堎所にパスを远加するこずをお勧めしたす。 焌く たずえば次のように、パス (PATH 環境倉数) に远加したす (Linux bash シェルの䟋)。 「bake」ディレクトリに移動し、次の環境倉数を蚭定したす。

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

これによりプログラムが配眮されたす ベむク.py シェル パスに远加され、他のプログラムが䜜成した実行可胜ファむルやラむブラリを芋぀けられるようになりたす。 焌く。 いく぀かの䜿甚䟋では 焌くの堎合、䞊蚘の PATH および PYTHONPATH 蚭定は必芁ありたせんが、ns-3-allinone の完党なビルド (远加パッケヌゞを含む) には通垞、これが必芁です。

䜜業ディレクトリに移動し、コン゜ヌルに次のように入力したす。

$ ./bake.py configure -e ns-3.29

次に䌺いたす 焌く さたざたなコンポヌネントをロヌドするのに十分なツヌルがあるかどうかを確認しおください。 ダむダル:

$ ./bake.py check

次のようなものが衚瀺されるはずです。

> Python - OK 
> GNU C++ compiler - OK 
> Mercurial - OK 
> Git - OK 
> Tar tool - OK 
> Unzip tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

特に、Mercurial、CVS、Git、Bazaar などのアップロヌド ツヌルは、コヌドを取埗できるため、このステップでは䞍可欠です。 この時点で、䞍足しおいるツヌルをシステムに通垞の方法 (方法がわかっおいる堎合) でむンストヌルするか、システム管理者に問い合わせおください。

次に、゜フトりェアをダりンロヌドしおみたす。

$ ./bake.py download

結果は次のようになりたす。

>> Searching for system dependency setuptools - OK 
>> Searching for system dependency libgoocanvas2 - OK 
>> Searching for system dependency gi-cairo - OK 
>> Searching for system dependency pygobject - OK 
>> Searching for system dependency pygraphviz - OK 
>> Searching for system dependency python-dev - OK 
>> Searching for system dependency qt - OK 
>> Searching for system dependency g++ - OK 
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK 
>> Downloading netanim-3.108 - OK 
>> Downloading ns-3.29 - OK

これは、XNUMX ぀の゜ヌスがダりンロヌドされたこずを意味したす。 次に、゜ヌス ディレクトリに移動し、「ls」ず入力したす。 君は芋るべきだ

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

これで、ns-3 ディストリビュヌションを構築する準備が敎いたした。

3.4 ns-3の組み立お

ns-3 のダりンロヌドず同様、ns-3 をビルドするにはいく぀かの方法がありたす。 私たちが匷調したい䞻な点は、ns-3 が ずいうビルド ツヌルを䜿甚しおビルドされおいるこずです。 ワフ以䞋で説明したす。 ほずんどのナヌザヌは ワフ, ただし、開始したり、より耇雑なビルドを敎理したりするのに圹立぀䟿利なスクリプトがいく぀かありたす。 に぀いお読む前にお願いしたす ワフ、 を芋おみたしょう build.py そしお組み立お 焌く.

3.4.1 build.pyによるビルド

譊告 このビルド ステップは、䞊蚘で説明したように取埗した゜ヌス アヌカむブ バヌゞョンからのみ利甚できたす。 git や Bake 経由ではダりンロヌドされたせん。

リリヌス アヌカむブを䜿甚する堎合 タヌボヌルで ns-3-アリノン コンポヌネントを簡単に組み立おるこずができる䟿利なスクリプトがありたす。 それは build.py ず呌ばれたす。 このプログラムは、最も䟿利な方法でプロゞェクトをセットアップしたす。 ただし、ns-3 を䜿甚したより高床なセットアップず䜜業には、通垞、ns-3 独自のビルド システムである Waf の䜿甚が必芁になるこずに泚意しおください。これに぀いおは、このチュヌトリアルの埌半で玹介したす。

を䜿甚しおダりンロヌドした堎合 タヌボヌル、ディレクトリ内で ~/ワヌクスペヌス 次のような名前のディレクトリ ns-アリノン-3.29。 次のように入力したす

$ ./build.py --enable-examples --enable-tests

電話をかけるずき build.py このチュヌトリアルで䜿甚するサンプルずテストをビルドするためにコマンド ラむン匕数を䜿甚したしたが、これらは ns-3 のデフォルトではビルドされたせん。 デフォルトでは、プログラムは利甚可胜なすべおのモゞュヌルもビルドしたす。 その埌、必芁に応じお、サンプルやテストなしで ns-3 をビルドしたり、䜜業に必芁のないモゞュヌルを陀倖したりできたす。

ロヌドしたさたざたな郚分をビルドするずきに、スクリプトによっお倚数のコンパむラ出力メッセヌゞが衚瀺されるこずがわかりたす。 たず、スクリプトはアニメヌタヌを構築しようずしたす。 ネタニム、次にバむンディングゞェネレヌタヌ ピバむンドゞェン そしお最埌にns-3。 プロセスが完了するず、次のように衚瀺されるはずです。

Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s) 

Modules built:
antenna                aodv                     applications
bridge                 buildings                config-store
core                   csma                     csma-layout
dsdv                   dsr                      energy 
fd-net-device          flow-monitor             internet
internet-apps          lr-wpan                  lte
mesh                   mobility                 mpi
netanim (no Python)    network                  nix-vector-routing 
olsr                   point-to-point           point-to-point-layout 
propagation            sixlowpan                spectrum 
stats                  tap-bridge               test (no Python) 
topology-read          traffic-control          uan 
virtual-net-device     visualizer               wave 
wifi                   wimax 

Modules not built (see ns-3 tutorial for explanation):
brite                  click                    openflow 
Leaving directory ./ns-3.29

リストの最埌の XNUMX 行には、ビルドされなかったモゞュヌルに関するメッセヌゞが衚瀺されたす。

Modules not built (see ns-3 tutorial for explanation):
brite                     click

これは単に、倖郚ラむブラリに䟝存する䞀郚の ns-3 モゞュヌルがビルドされおいないか、この構成ではビルドする必芁がないこずを意味したす。 これは、シミュレヌタが組み立おられおいないこず、たたは組み立おられたモゞュヌルが正しく動䜜しないこずを意味するものではありたせん。

3.4.2 ベむクによるビルド

䞊蚘のベむクを䜿甚しおプロゞェクト リポゞトリから゜ヌス コヌドを取埗した堎合は、匕き続きそれを䜿甚しお ns-3 をビルドできたす。 ダむダル:

$ ./bake.py build

次のようなものが衚瀺されるはずです。

>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK 
>> Building netanim-3.108 - OK 
>> Building ns-3.29 - OK

ヒント: 「bake.pydeploy」を呌び出しお、ダりンロヌドずビルドの䞡方の手順を䞀床に実行するこずもできたす。

すべおのコンポヌネントの組み立おは倱敗する可胜性がありたすが、コンポヌネントが必芁ない堎合は組み立おが続行されたす。 たずえば、最近の移怍性の問題は次のずおりです。 キャストxml 工具を䜿っお組み立おるこずができたす 焌く すべおのプラットフォヌムではありたせん。 この堎合、次のようなメッセヌゞが衚瀺されたす。

>> Building castxml - Problem 
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.

しかし キャストxml 曎新された Python バむンディングを䜜成する堎合にのみ必芁です。 ほずんどのナヌザヌにずっお、これは (少なくずも ns-3 を倉曎するたでは) 必芁ないため、このような譊告は今のずころ無芖しおも問題ありたせん。

倱敗した堎合は、次のコマンドを実行するず、䞍足しおいる䟝存関係に関するヒントが衚瀺されたす。

$ ./bake.py show

ビルドしようずしおいるパッケヌゞのさたざたな䟝存関係がリストされたす。

3.4.3 Wafでビルドする

この時点たで、ns-3 の構築を開始するには、次のいずれかのスクリプトを䜿甚したした。 build.py、たたはツヌル 焌く。 これらのツヌルは、ns-3 の構築ずラむブラリの保守に圹立ちたす。 実際、ビルドするにはビルド ツヌルを実行したす。 ワフ ディレクトリns-3から。 ワフ ns-3 ゜ヌス コヌドずずもにむンストヌルされたす。 ほずんどのナヌザヌは、すぐに ns-3 の構成ず組み立おに盎接䜿甚するこずに移行したす。 ワフ。 したがっお、続行するには、最初に䜜成した ns-3 ディレクトリに移動しおください。

珟時点ではこれは厳密には必須ではありたせんが、少し遡っおプロゞェクト構成を倉曎する方法を確認するず䟿利です。 おそらく、最も有甚な構成倉曎は、コヌドの最適化されたバヌゞョンを䜜成するこずです。 デフォルトでは、デバッグ バヌゞョンをビルドするようにプロゞェクトが構成されおいたす。 最適化されたビルドを䜜成するプロゞェクトを芋おみたしょう。 サンプルずテストを含む最適化されたビルドを䜜成する必芁があるこずを Waf に説明するには、次のコマンドを実行する必芁がありたす。

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

これが起動したす ワフ (䟿宜䞊) ロヌカル ディレクトリの倖にありたす。 最初のコマンドは以前のビルドをクリヌンアップしたす。これは通垞必ずしも厳密に必芁ずいうわけではありたせんが、掚奚事項です (以䞋のビルド プロファむルも参照しおください)。 これにより、以前に䜜成されたラむブラリずディレクトリにあるオブゞェクト ファむルが削陀されたす ビルド/。 プロゞェクトが再構成され、ビルド システムがさたざたな䟝存関係をチェックするず、次のような出力が衚瀺されるはずです。

Setting top to      : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to      : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler)        : /usr/bin/gcc 
Checking for cc version                : 7.3.0 
Checking for 'g++' (C++ compiler)      : /usr/bin/g++ 
Checking for compilation flag -march=native support : ok 
Checking for compilation flag -Wl,--soname=foo support : ok 
Checking for compilation flag -std=c++11 support       : ok 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking for program 'python'            : /usr/bin/python 
Checking for python version >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration                                      : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags   : yes
Testing pyext configuration                                        : yes

Checking for compilation flag -fvisibility=hidden support          : ok 
Checking for compilation flag -Wno-array-bounds support            : ok 
Checking for pybindgen location          : ../pybindgen ,!(guessed) 
Checking for python module 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Checking for pybindgen version           : 0.19.0. ,!post4+g823d8b2 
Checking for code snippet                : yes 
Checking for types uint64_t and unsigned long equivalence : no 
Checking for code snippet                                 : no 
Checking for types uint64_t and unsigned long long equivalence     : yes 
Checking for the apidefs that can be used for Python bindings                       : gcc-LP64 
Checking for internal GCC cxxabi         : complete 
Checking for python module 'pygccxml'    : not found 
Checking for click location              : not found 
Checking for program 'pkg-config'        : /usr/bin/pkg- ,!config 
Checking for 'gtk+-3.0'                  : not found 
Checking for 'libxml-2.0'                : yes 
checking for uint128_t                   : not found 
checking for __uint128_t                 : yes 
Checking high precision implementation   : 128-bit integer ,!(default) 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found 
Checking for header sys/types.h          : yes 
Checking for header sys/stat.h           : yes 
Checking for header dirent.h             : yes 
Checking for header stdlib.h             : yes 
Checking for header signal.h             : yes 
Checking for header pthread.h            : yes 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found
Checking for library rt                  : yes 
Checking for header sys/ioctl.h          : yes 
Checking for header net/if.h             : yes 
Checking for header net/ethernet.h       : yes 
Checking for header linux/if_tun.h       : yes 
Checking for header netpacket/packet.h   : yes 
Checking for NSC location                : not found 
Checking for 'sqlite3'                   : not found 
Checking for header linux/if_tun.h       : yes 
Checking for python module 'gi'          : 3.26.1 
Checking for python module 'gi.repository.GObject'      : ok 
Checking for python module 'cairo'                      : ok 
Checking for python module 'pygraphviz'                 : 1.4rc1 
Checking for python module 'gi.repository.Gtk'          : ok 
Checking for python module 'gi.repository.Gdk'          : ok 
Checking for python module 'gi.repository.Pango'        : ok 
Checking for python module 'gi.repository.GooCanvas'    : ok 
Checking for program 'sudo'                             : /usr/bin/sudo 
Checking for program 'valgrind'                         : not found 
Checking for 'gsl' : not found python-config            : not found 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for program 'doxygen'                          : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory : 
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite)) 
DES Metrics event collection : not enabled (defaults to disabled) 
Emulation FdNetDevice        : enabled 
Examples                     : enabled 
File descriptor NetDevice    : enabled 
GNU Scientific Library (GSL) : not enabled (GSL not found) 
Gcrypt library               : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore               : not enabled (library 'gtk+-3.0 >= 3.0' not fou   nd)
MPI Support                  : not enabled (option --enable-mpi not selected)
ns-3 Click Integration       : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration   : not enabled (Required boost libraries not found) 
Network Simulation Cradle    : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled 
Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled 
Real Time Simulator           : enabled 
SQlite stats data output      : not enabled (library 'sqlite3' not found)
Tap Bridge                    : enabled 
Tap FdNetDevice               : enabled
Tests                         : enabled 
Threading Primitives          : enabled 
Use sudo to set suid bit   : not enabled (option --enable-sudo not selected)
XmlIo                         : enabled
'configure' finished successfully (6.387s)

䞊蚘のリストの最埌の郚分に泚意しおください。 䞀郚の ns-3 オプションはデフォルトでは有効になっおいない堎合、たたは正しく機胜するにはシステム サポヌトが必芁です。 たずえば、XmlTo を有効にするには、ラむブラリがシステム䞊に存圚する必芁がありたす。 libxml-2.0。 このラむブラリが芋぀からず、察応する ns-3 機胜が有効になっおいない堎合は、メッセヌゞが衚瀺されたす。 コマンドを䜿甚できるこずにも泚意しおください。 sudo 特定のプログラムに察しお suid ビット「実行時にグルヌプ ID を蚭定」を蚭定したす。 デフォルトでは有効になっおいないため、この機胜は「無効」ずしお衚瀺されたす。 最埌に、有効なオプションのリストを取埗するには、次を䜿甚したす。 ワフ パラメヌタ付き --check-config.

ここで、䟋ずテストを含むデバッグ ビルドに戻りたしょう。

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

これでビルド システムがセットアップされ、次のように入力するだけで ns-3 プログラムのデバッグ バヌゞョンをビルドできたす。

$ ./waf

䞊蚘の手順では、ns-3 システムの䞀郚を XNUMX 回ビルドする必芁があったかもしれたせんが、構成を倉曎しお最適化されたコヌドをビルドする方法がわかりたした。

特定のプロゞェクト構成に察しおどのプロファむルがアクティブであるかを確認するには、次のコマンドがありたす。

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

䞊蚘のシナリオ build.py 匕数もサポヌトしおいたす --enable-examples О --enable-tests、ただし他のオプション ワフ 盎接的にはサポヌトしたせん。 たずえば、これは機胜したせん:

$ ./build.py --disable-python

反応は次のようになりたす。

build.py: error: no such option: --disable-python

ただし、特別な挔算子 -- を䜿甚しお远加のパラメヌタを枡すこずができたす。 WAFしたがっお、䞊蚘の代わりに次のコマンドが機胜したす。

$ ./build.py -- --disable-python

メむンコマンドを生成するため ./waf configure --disable-python。 ここでは、さらにいく぀かの導入ヒントを玹介したす。 ワフ.

ビルド゚ラヌの凊理

ns-3 リリヌスは、䞀般的な Linux および MacOS ディストリビュヌションでのリリヌス時に利甚可胜な最新の C++ コンパむラでテストされおいたす。 ただし、時間の経過ずずもに、新しいディストリビュヌションが新しいコンパむラずずもにリリヌスされ、これらの新しいコンパむラは譊告に぀いおより衒孊的になる傟向がありたす。 ns-3 は、すべおの譊告を゚ラヌずしお扱うようにビルドを構成するため、新しいシステムで叀いバヌゞョンを実行しおいる堎合、コンパむラの譊告によっおビルドが停止する堎合がありたす。

たずえば、以前は Fedora 3.28 甚の ns-28 のリリヌスがあり、これには新しいメゞャヌ バヌゞョンが含たれおいたした。 gccの (gcc-8。 Gtk3.28+ がむンストヌルされおいる状態で、Fedora 28 でリリヌス ns-2 以前のバヌゞョンをビルドするず、次の゚ラヌが発生したす。

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

ns-3.28.1 以降のリリヌスでは、 ワフ これらの問題を解決するオプションが利甚可胜です。 g++ および Clang++ での「-Werror」フラグの蚭定を無効にしたす。 これは「--disable-werror」オプションであり、構成䞭に適甚する必芁がありたす。

$ ./waf configure --disable-werror --enable-examples --enable-tests

構成たたは組み立お

いく぀かのコマンド ワフ 構成フェヌズでのみ意味を持ち、ビルドフェヌズでのみ有効なものもありたす。 たずえば、ns-3 ゚ミュレヌション機胜を䜿甚したい堎合は、ビット蚭定を有効にするこずができたす。 SUID 䜿う sudo、 䞊蚘のように。 これにより、構成ステップのコマンドがオヌバヌラむドされるため、次のコマンドを䜿甚しお構成を倉曎できたす。これには䟋ずテストも含たれおいたす。

$ ./waf configure --enable-sudo --enable-examples --enable-tests

これをやるず ワフ 起動したす sudo゚ミュレヌション コヌド ゜ケット䜜成プログラムを倉曎しお暩限を䞎えお実行する ルヌト。 で ワフ 構成およびビルド手順には、他にも倚くのオプションが䜿甚できたす。 オプションを調べるには、次のように入力したす。

$ ./waf --help

次のセクションでは、テスト関連のオプションをいく぀か䜿甚したす。

アセンブリプロファむル

蚭定方法はすでに芋おきたした。 ワフ アセンブリ甚 debug О 最適化:

$ ./waf --build-profile=debug

䞭間アセンブリプロファむルもありたす。 リリヌス。 オプション -d ず同矩です --build-profile。 ビルド プロファむルは、ロギング、アサヌション、コンパむラ最適化スむッチの䜿甚を制埡したす。

ns-3 ネットワヌク シミュレヌタヌのチュヌトリアル。 第3ç« 

ご芧のずおり、ロギングずアサヌションはデバッグ ビルドでのみ䜿甚できたす。 掚奚される方法は、デバッグ モヌドでスクリプトを開発し、最適化されたビルド プロファむルで (統蚈たたはパラメヌタヌの倉曎のために) 繰り返し実行するこずです。

特定のビルド プロファむルでのみ実行するコヌドがある堎合は、コヌド ラッパヌ マクロを䜿甚したす。

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

デフォルト、 ワフ ビルド アヌティファクトをビルド ディレクトリに配眮したす。 オプションを䜿甚しお別の出力ディレクトリを指定できたす。 - -outたずえば、次のようになりたす。

$ ./waf configure --out=my-build-dir

これをビルド プロファむルず組み合わせるこずで、さたざたなコンパむル オプションを簡単に切り替えるこずができたす。

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

これにより、最新のアセンブリを毎回曞き盎すこずなく、耇数のアセンブリを操䜜できるようになりたす。 別のプロファむルに切り替えるず、 ワフ すべおを完党に再コンパむルするこずなく、それのみをコンパむルしたす。

この方法でビルド プロファむルを切り替える堎合は、毎回同じ構成オプションを指定するように泚意する必芁がありたす。 いく぀かの環境倉数を定矩するず、間違いを避けるこずができたす。

$ export NS3CONFIG="--enable-examples --enable-tests" 
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized" 

$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build 
... 
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build

コンパむラずフラグ

䞊蚘の䟋では ワフ ns-3 をビルドするには、GCC の C++ コンパむラを䜿甚したす ( g ++。 ただし、䜿甚するものを倉曎するこずはできたす ワフ C++ コンパむラ。CXX 環境倉数を定矩したす。 たずえば、C++ コンパむラ Clang、clang++ を䜿甚するには、

$ CXX="clang++" ./waf configure 
$ ./waf build 

同じように蚭定できたす ワフ 分散コンパむルを䜿甚するには 距離:

$ CXX="distcc g++" ./waf configure 
$ ./waf build

distcc ず分散コンパむルの詳现に぀いおは、プロゞェクト ペヌゞの「ドキュメント」セクションを参照しおください。 ns-3 の構成時にコンパむラ フラグを远加するには、CXXFLAGS_EXTRA 環境倉数を䜿甚したす。

むンストヌル

ワフ を䜿甚しお、システム䞊のさたざたな堎所にラむブラリをむンストヌルできたす。 デフォルトでは、コンパむルされたラむブラリず実行可胜ファむルは次のディレクトリにありたす。 ビルドたた、Waf はこれらのラむブラリず実行可胜ファむルの堎所を知っおいるため、ラむブラリを他の堎所にむンストヌルする必芁はありたせん。

ナヌザヌがビルド ディレクトリの倖にむンストヌルするこずを垌望する堎合は、次のコマンドを実行できたす。 ./wafむンストヌル。 むンストヌル時のデフォルトのプレフィックスは次のずおりです。 / usr / localそれが理由です ./wafむンストヌル にプログラムをむンストヌルしたす / usr / local / binの図曞通 / usr / local / lib ずヘッダヌ ファむル / usr / local / include。 スヌパヌナヌザヌ暩限は通垞、デフォルトのプレフィックスを䜿甚しお蚭定する必芁があるため、䞀般的なコマンドは次のようになりたす。 sudo ./waf むンストヌル。 Waf を起動するず、たずビルド ディレクトリ内の共有ラむブラリを䜿甚するこずを遞択し、次にロヌカル環境で構成されたラむブラリぞのパスに沿っおラむブラリを怜玢したす。 したがっお、システムにラむブラリをむンストヌルするずきは、適切なラむブラリが䜿甚されおいるこずを確認するこずをお勧めしたす。 ナヌザヌは、構成䞭にオプションを枡すこずで、別のプレフィックスを䜿甚しおむンストヌルするこずを遞択できたす。 --prefixたずえば、次のようになりたす。

./waf configure --prefix=/opt/local

埌で、ビルド埌にナヌザヌがむンストヌル コマンドを入力する堎合 ./waf、プレフィックスが䜿甚されたす /opt/ロヌカル.

チヌム ./waf clean むンストヌルで䜿甚する堎合は、プロゞェクトを再構成する前に䜿甚する必芁がありたす。 ワフ 別のプレフィックスの䞋にありたす。

したがっお、ns-3 を䜿甚するには、次のコマンドを呌び出す必芁はありたせん。 ./waf install。 ほずんどのナヌザヌはこのコマンドを必芁ずしたせん。 ワフ は、ビルド ディレクトリから珟圚のラむブラリを取埗したすが、䞀郚のナヌザヌは、アクティビティに ns-3 ディレクトリの倖にあるプログラムの操䜜が含たれる堎合にこれを䟿利に感じるかもしれたせん。

ワフシングル

ns-3 ゜ヌス ツリヌの最䞊䜍には、Waf スクリプトが XNUMX ぀だけありたす。 䜜業を開始するず、ディレクトリ内で倚くの時間を費やすこずになりたす。 scratch/ あるいはさらに深くsrc/... そしお同時に走らなければならない ワフ。 自分のいる堎所を思い出しお走ればいいだけ ワフ 次のようにしたす。

$ ../../../waf ...

しかし、これは面倒で゚ラヌが発生しやすいため、より良い解決策がありたす。 䞀般的な方法の XNUMX ぀は、次のようなテキスト ゚ディタを䜿甚するこずです。 ゚マックス たたは 掻力、3 ぀のタヌミナル セッションが開かれ、XNUMX ぀は ns-XNUMX のビルドに䜿甚され、XNUMX ぀目は゜ヌス コヌドの線集に䜿甚されたす。 あなただけが持っおいるなら タヌボヌル、その堎合、環境倉数が圹立ちたす。

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

モゞュヌル ディレクトリに、次のような簡単な waf スクリプトを远加したくなるかもしれたせん。 exec ../../waf。 どうかそんなこずはしないでください。 これは初心者にずっお混乱を招き、䞋手をするず怜出が困難なビルド ゚ラヌに぀ながりたす。 䞊蚘の解決策は、䜿甚する必芁があるパスです。

3.5 ns-3 のテスト

スクリプトを実行するず、ns-3 ディストリビュヌションの単䜓テストを実行できたす。 ./test.py:

$ ./test.py

これらのテストは䞊行しお実行されたす。 ワフ。 最終的に次のようなメッセヌゞが衚瀺されるはずです。

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

これは、valgrind のクラッシュ、クラッシュ、たたぱラヌを特定するための重芁なメッセヌゞであり、コヌドの問題、たたはツヌルずコヌド間の非互換性を瀺したす。

からの最終出力も衚瀺されたす。 ワフ そしお各テストを実行するテスタヌは次のようになりたす。

Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
'build' finished successfully (1.799s) 

Modules built:
aodv           applications          bridge
click          config-store          core
csma           csma-layout           dsdv
emu            energy                flow-monitor
internet       lte                   mesh
mobility       mpi                   netanim
network        nix-vector-routing    ns3tcp
ns3wifi        olsr                  openflow
point-to-point point-to-point-layout propagation
spectrum       stats                 tap-bridge
template       test                  tools
topology-read  uan                   virtual-net-device
visualizer     wifi                  wimax

PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram 

...

PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

このコマンドは通垞、ns-3 ディストリビュヌションが正しく構築されおいるこずを迅速に確認するためにナヌザヌによっお実行されたす。 (「PASS: ...」行の順序が異なる堎合があるこずに泚意しおください。これは正垞です。重芁なのは、レポヌトの最埌の抂芁行に、すべおのテストが成功し、倱敗たたはクラッシュしたテストがないこずが瀺されおいるこずです。)そしお ワフず テスト.py マシンの利甚可胜なプロセッサ コア党䜓で䜜業を䞊列化したす。

3.6 スクリプトの実行

通垞、スクリプトは制埡䞋で実行されたす ワフ。 これにより、ビルド システムは、共有ラむブラリのパスが正しく蚭定され、実行時にラむブラリが利甚可胜であるこずを確認できたす。 プログラムを実行するには、単に䜿甚したす ワフ パラメヌタ付き - -run。 ns-3 に盞圓するナビキタス プログラムを実行しおみたしょう こんにちは䞖界次のように入力したす。

$ ./waf --run hello-simulator

Waf はたずプログラムが正しくビルドされおいるかどうかを確認し、必芁に応じおビルドしたす。 それから ワフ 次の出力を生成するプログラムを実行したす。

Hello Simulator

おめでずう これであなたもns-3ナヌザヌです

結果が衚瀺されない堎合はどうすればよいですか?

メッセヌゞが衚瀺された堎合 ワフビルドは正垞に完了したが、出力が衚瀺されないこずを瀺したす 「こんにちはシミュレヌタヌ」の堎合、[Build-with-Waf] セクションでビルド モヌドを に切り替えた可胜性がありたす。 最適化、しかしモヌドに戻すのを忘れたした debug。 このチュヌトリアルで䜿甚されるすべおのコン゜ヌル出力は、ログを実行し、カスタム メッセヌゞをコン゜ヌルに出力するために䜿甚される特別な ns-3 コンポヌネントを䜿甚したす。 最適化されたコヌドがコンパむルされるず、このコンポヌネントからの出力は自動的に無効になりたす。぀たり、「最適化」されたす。 「Hello Simulator」出力が衚瀺されない堎合は、次のように入力したす。

$ ./waf configure --build-profile=debug --enable-examples --enable-tests

蚭定する ワフ サンプルずテストを含む ns-3 プログラムのデバッグ バヌゞョンを構築したす。 次に、次のように入力しお、珟圚のデバッグ バヌゞョンのコヌドを再構築する必芁がありたす。

$ ./waf

ここでプログラムを実行するず こんにちはシミュレヌタヌ、期埅どおりの結果が衚瀺されるはずです。

3.6.1 コマンドラむン匕数

コマンド ラむン匕数を ns-3 プログラムに枡すには、次のパタヌンを䜿甚したす。

$ ./waf --run <ns3-program> --command-template="%s <args>"

亀換するプログラムの名前ず匕数に。 口論 - -command-template のために ワフ 本質的には、実際のコマンドラむンを構築するためのレシピです ワフ プログラムを実行するために䜿甚されたす。 Waf はビルドが完了しおいるこずを確認し、共有ラむブラリのパスを蚭定しおから、提䟛されたコマンド ラむン テンプレヌトを䜿甚しお、%s プレヌスホルダヌをプログラム名に眮き換えお実行可胜ファむルを呌び出したす。 この構文が耇雑だず思われる堎合は、ns-3 プログラムずその匕数を䞀重匕甚笊で囲んだ、より単玔なバヌゞョンがありたす。

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

もう XNUMX ぀の特に有甚な䟋は、テスト スむヌトを遞択的に実行するこずです。 mytest ずいうテスト スむヌトがあるず仮定したす (実際には存圚したせん)。 䞊蚘では、./test.py スクリプトを䜿甚しお倚数のテストを䞊行しお実行し、テスト プログラムを繰り返し呌び出したした。 テストランナヌ。 電話 テストランナヌ XNUMX ぀のテストを盎接実行するには:

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

匕数はプログラムに枡されたす テストランナヌ。 mytest が存圚しないため、゚ラヌ メッセヌゞが生成されたす。 䜿甚可胜なテスト ランナヌ オプションを出力するには、次のように入力したす。

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 デバッグ

デバッガヌなどの別のナヌティリティで ns-3 プログラムを実行するには (たずえば、 GDB) たたはメモリ テスト ツヌル (たずえば、 バルグラむンド)、同様のフォヌムを䜿甚したす - -command-template = "
"。 たずえば、デバッガで実行するには GDB hello-simulator ns-3 プログラムず匕数:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

ns-3 プログラム名には匕数が付いおいるこずに泚意しおください。 - -run、および管理ナヌティリティ (ここでは GDB) は匕数の最初のトヌクンです - -command-template。 オプション - -args レポヌト GDBコマンドラむンの残りの郚分は「䞋䜍」プログラムに属したす。 (䞀郚のバヌゞョン GDB オプションがわかりたせん - -args。 この堎合、プログラムの匕数を削陀したす。 - -command-template コマンドセットを䜿甚したす GDB 匕数.) このレシピず前のレシピを組み合わせお、デバッガヌでテストを実行できたす。

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 䜜業ディレクトリ

Waf は、ns-3 ツリヌの最䞊䜍の堎所から起動する必芁がありたす。 このフォルダヌは、出力ファむルが曞き蟌たれる䜜業ディレクトリになりたす。 しかし、これらのファむルを ns-3 ゜ヌス ツリヌの倖に保持したい堎合はどうすればよいでしょうか? 匕数を䜿甚する - -cwd:

$ ./waf --cwd=...

䜜業ディレクトリに出力ファむルを取埗する方が䟿利な堎合がありたす。 この堎合、次の間接的なアクションが圹立ちたす。

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

以前のバヌゞョンのコマンドのこの装食は、珟圚の䜜業ディレクトリを保持し、ディレクトリに移動したす。 ワフそしお指瀺したす ワフ 䜜業ディレクトリを、プログラムの開始前に保存された珟圚の䜜業ディレクトリに戻したす。 チヌムに぀いお蚀及したす - -cwd 完党を期すために、ほずんどのナヌザヌは単に最䞊䜍ディレクトリから Waf を実行し、そこに出力ファむルを生成したす。

続き: 第 4 章

出所 habr.com

コメントを远加したす