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 ã€ããã€ã³ã¹ããŒã«ãããŒãžã§ããããŸããŸãªã·ã¹ãã ã®ã€ã³ã¹ããŒã«æé ãèšèŒãããŠããã次ã®å Žæããå
¥æã§ããŸãã
ãã® Wiki ã®åææ¡ä»¶ã»ã¯ã·ã§ã³ã§ã¯ãäžè¬ç㪠ns-3 ãªãã·ã§ã³ããµããŒãããããã«å¿ èŠãªããã±ãŒãžã«ã€ããŠèª¬æããLinux ãŸã㯠macOS ã®äžè¬çãªããŒãžã§ã³ã«ããããã€ã³ã¹ããŒã«ããããã«äœ¿çšãããã³ãã³ããæäŸããŸãã
ãã®æ©äŒãå©çšããŠãns-3 wiki ããŒãžãŸãã¯ã¡ã€ã³ Web ãµã€ããæ¢çŽ¢ããŠãã ããã
ããŒã«ããã±ãŒãž/ããŒãžã§ã³
- 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 ãªããžããªã§å
¥æã§ããŸãã
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 ãã£ã¹ããªãã¥ãŒã·ã§ã³ãããŠã³ããŒãããŠãã«ãããŸãã ããã€ãã®ã«ã¹ã¿ãã€ãº ã¿ãŒã²ãããå©çšå¯èœã§ãã
-
ns-3.29: ãªãªãŒã¹ã«å¯Ÿå¿ããã¢ãžã¥ãŒã«ã tarball å ã®ãªãªãŒã¹ãšåæ§ã®ã³ã³ããŒãã³ããããŠã³ããŒãããŸãã
-
ns-3-dev: åæ§ã®ã¢ãžã¥ãŒã«ã§ãããéçºããªãŒã®ã³ãŒãã䜿çšããŠããŸãã
-
ns-ã¢ãªãã³-3.29: ã¯ãªã㯠ã«ãŒãã£ã³ã°ããããã¯ãŒã¯ ã·ãã¥ã¬ãŒã·ã§ã³ ã¯ã¬ãŒãã«ãOpenflow for ns-3 ãªã©ã®ãã®ä»ã®è¿œå æ©èœãå«ãŸããã¢ãžã¥ãŒã«ã
-
ns-3-ã¢ãªãã³: ã¢ãžã¥ãŒã«ã®ãªãªãŒã¹ããŒãžã§ã³ãšåæ§ allinoneãã ããéçºã³ãŒãçšã§ãã
泚æ
ã¯ãªã㯠â ã«ãŒã¿ãŒãäœæããããã®ã¢ãžã¥ãŒã«åŒãœãããŠã§ã¢ ã¢ãŒããã¯ãã£ã
Openflow ã¯ãã«ãŒã¿ãŒãã¹ã€ããã«ãã£ãŠããŒã¿ ãããã¯ãŒã¯äžã§éä¿¡ãããããŒã¿ã®åŠçããã»ã¹ã管çããããã®ãããã³ã«ã§ããããœãããŠã§ã¢ ããã¡ã€ã³ã ãããã¯ãŒã¯ ãã¯ãããžãå®è£ ããŠããŸãã
çŸåšã®éçºã¹ãããã·ã§ãã (éãªãªãŒã¹) ns-3 ã¯ã次ã®å Žæã«ãããŸãã
éçºè ã¯ãããã®ãªããžããªãäžè²«ããåäœç¶æ ã«ä¿ã€ããåªããŸããããããã¯éçºé åã«ãããæªãªãªãŒã¹ã®ã³ãŒããå«ãŸããŠãããããæ°æ©èœã䜿çšããäºå®ããªãå Žåã¯ãæ£åŒãªãªãŒã¹ãéžæããŠãã ããã
ã³ãŒãã®ææ°ããŒãžã§ã³ãèŠã€ããã«ã¯ããªããžããªã®ãªã¹ããåç
§ããããns-3 ãªãªãŒã¹ Web ããŒãžã«ã¢ã¯ã»ã¹ããŸãã
ããã§ãå¿ èŠãª 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_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 ãå®è¡ããããã«åºåãã¡ã€ã«ãçæããŸãã
åºæïŒ habr.com