
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 ã€ããã€ã³ã¹ããŒã«ãããŒãžã§ããããŸããŸãªã·ã¹ãã ã®ã€ã³ã¹ããŒã«æé ãèšèŒãããŠãããæ¬¡ã®å Žæããå ¥æã§ããŸãã .
РазЎел «ÐÑеЎваÑОÑелÑМÑе ÑÑлПвОÑ» ÑÑПй вОкО-ÑÑÑаМОÑÑ ÐŸÐ±ÑÑÑМÑеÑ, какОе пакеÑÑ ÑÑебÑÑÑÑÑ ÐŽÐ»Ñ Ð¿ÐŸÐŽÐŽÐµÑжкО ПбÑÐžÑ ÐŸÐ¿ÑОй nsâ3, а Ñакже пÑеЎПÑÑавлÑÐµÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ОÑпПлÑзÑеЌÑе ÐŽÐ»Ñ ÐžÑ ÑÑÑаМПвкО в ÑаÑпÑПÑÑÑаМеММÑÑ Ð²Ð°ÑОаМÑÐ°Ñ Linux ãŸã㯠macOS.
ãã®æ©äŒãå©çšããŠãns-3 wiki ããŒãžãŸãã¯ã¡ã€ã³ Web ãµã€ããæ¢çŽ¢ããŠãã ããã , ããã«ã¯ããããã®æ å ±ãããããã§ãã 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 ãªããžããªã§å ¥æã§ããŸãã ã ã°ã«ãŒã ãã¹ãã ãªãŒãã³ãœãŒã¹ ãããžã§ã¯ãã§äœ¿çšãããããŸããŸãªãªããžããªããŸãšããŸãã
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.gitgit ã³ãã³ããå®è¡ãããšã次ã®ãããªå 容ã衚瀺ãããã¯ãã§ãã
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.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 пÑПÑеÑÑОÑÐŸÐ²Ð°ÐœÑ ÐœÐ° ÑаЌÑÑ Ð¿ÐŸÑÐ»ÐµÐŽÐœÐžÑ ÐºÐŸÐŒÐ¿ÐžÐ»ÑÑПÑÐ°Ñ C++, ЎПÑÑÑпМÑÑ Ð² ÐŒÐŸÐŒÐµÐœÑ ÑелОза Ма ÑаÑпÑПÑÑÑаМеММÑÑ ÐŽÐžÑÑÑОбÑÑÐžÐ²Ð°Ñ Linux О MacOS. ÐЎМакП, ÑП вÑеЌеМеЌ, вÑпÑÑкаÑÑÑÑ ÐœÐŸÐ²Ñе ЎОÑÑÑОбÑÑÐžÐ²Ñ Ñ ÐœÐŸÐ²ÑЌО кПЌпОлÑÑПÑаЌО, О ÑÑО бПлее МПвÑе кПЌпОлÑÑПÑÑ, как пÑавОлП, бПлее пеЎаМÑОÑÐœÑ Ð² ПÑМПÑеМОО пÑеЎÑпÑежЎеМОй. 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 builddistcc ãšåæ£ã³ã³ãã€ã«ã®è©³çްã«ã€ããŠã¯ããããžã§ã¯ã ããŒãžã®ãããã¥ã¡ã³ããã»ã¯ã·ã§ã³ãåç §ããŠãã ããã 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-simulatorWaf ã¯ãŸãããã°ã©ã ãæ£ãããã«ããããŠãããã©ããã確èªããå¿ èŠã«å¿ããŠãã«ãããŸãã ãããã ã¯ã 次ã®åºåãçæããããã°ã©ã ãå®è¡ããŸãã
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
