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ти жүктөп алуунун жана куруунун үч жолун карап чыгабыз. Биринчиси, негизги сайттан расмий релизди жүктөп алуу жана куруу. Экинчиси - негизги ns-3 орнотуунун иштеп чыгуу версияларынын көчүрмөлөрүн тандоо жана чогултуу. Үчүнчүсү - ns-3 үчүн көбүрөөк кеңейтүүлөрдү жүктөө үчүн кошумча куруу куралдарын колдонуу. Куралдар бир аз башкача болгондуктан, биз алардын ар бирин карап чыгабыз.

Тажрыйбалуу Linux колдонуучулары эмне үчүн ns-3 пакет башкаргычын колдонгон башка китепканалардай пакет катары берилбейт деп таң калышы мүмкүн? Ар кандай Linux дистрибуциялары үчүн бинардык пакеттер бар болсо да (мисалы, Debian), көпчүлүк колдонуучулар китепканаларды оңдоп, ns-3ти өздөрү кайра курууга туура келет, андыктан баштапкы коддун жеткиликтүү болушу ыңгайлуу. Ушул себептен улам, биз булактан орнотууга көңүл бурабыз.

Көпчүлүк колдонмолор үчүн ns-3 укуктары тамыр кереги жок, артыкчылыксыз колдонуучу каттоо эсебин колдонуу сунушталат.

3.2 Пререквизиттер

Жеткиликтүү ns-3 китепканаларынын бүтүндөй топтому үчүнчү тараптын китепканаларына бир катар көз карандылыкка ээ, бирок көпчүлүк учурда ns-3 бир нече жалпы (көбүнчө демейки боюнча орнотулган) компоненттердин колдоосу менен курулуп, колдонулушу мүмкүн: C++ компилятору, Python, баштапкы код редактору (мисалы, VIM, Emacs же сүйрү) жана иштеп чыгуу репозиторийлери колдонулса, Git версиясын башкаруу тутумдары. Көпчүлүк биринчи жолу колдонуучулардын конфигурациясында кээ бир ns-3 өркүндөтүлгөн функциялар жок болсо, тынчсыздануунун кереги жок, бирок толук орнотууну каалагандар үчүн долбоор көптөгөн пайдалуу кеңештер жана ыкмалар бар баракчаларды камтыган вики берет. Мындай барактардын бири - бул ар кандай системалар үчүн орнотуу нускамалары менен Орнотуу барагы: https://www.nsnam.org/wiki/Installation.

Бул викинин Пререквизиттер бөлүмү жалпы ns-3 параметрлерин колдоо үчүн кайсы пакеттер талап кылынарын түшүндүрөт, ошондой эле аларды Linux же macOSтун жалпы даамдарына орнотуу үчүн колдонулган буйруктарды берет.

Сиз ns-3 вики баракчасын же негизги веб-сайтты изилдөө үчүн бул мүмкүнчүлүктөн пайдалана аласыз: 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
  • барып,
    каалаган акыркы версия (GitLab.com боюнча ns-3 кирүү үчүн)
  • кара май
    каалаган акыркы версия (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 

Жогоруда колдонулган утилитага көңүл буруңуз ачуу, бул Интернеттен объекттерди жүктөө үчүн буйрук сабынын куралы. Эгер сиз аны орното элек болсоңуз, бул үчүн браузериңизди колдонсоңуз болот.

Бул кадамдардан кийин сизди 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-allinone. Бул эң көп колдонулган ns-3 подсистемаларын жүктөөнү жана чогултууну башкарган скрипттердин жыйындысы. Эгер сиз Гитте жаңы болсоңуз, анда "айры" жана "клон" терминдери сизге бейтааныш болушу мүмкүн; Эгер ошондой болсо, биз сизге GitLab.com сайтында жайгашкан репозиторийди жөн гана клондоону (өзүңүздүн көчүрмөсүн жасоону) сунуштайбыз:

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

Бул этапта, сиздин каталогдун көрүнүшү ns-3-allinone жогоруда сүрөттөлгөн релиз архив каталогунан бир аз айырмаланат. Ал төмөнкүдөй көрүнүшү керек:

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

Сценарий бар экенин эске алыңыз download.py, ал кошумча ns-3 жана аны коштогон баштапкы кодду чыгарат. Бул жерде сизде тандоо бар: же эң акыркы ns-3 иштеп чыгуу сүрөтүн жүктөп алыңыз:

$ python download.py

же желегин колдонуу менен ns-3 чыгарууну артык -n чыгаруу номерин көрсөтүү үчүн:

$ python download.py -n ns-3.29

Бул кадамдан кийин каталогго өтүңүз ns-3-allinone кошумча репозиторийлер жүктөлүп алынат ns-3, бышыруу, pybindgen и нетаним.

пикир
Таза Ubuntu16.04 менен машинада мен бул буйрукту өзгөртүүгө туура келди: $ sudo python3 download.py -n ns-3.29 (мындан ары котормочунун эскертүүлөрү).

3.3.1 Bake аркылуу ns-3 жүктөө

Жогорудагы эки ыкма (булак архиви же репозиторий ns-3-allinone Git аркылуу) бир нече кошумчалары менен эң жөнөкөй ns-3 орнотуусун алуу үчүн пайдалуу (pybindgen Python байланыштарын түзүү жана нетаним тармактык анимация үчүн). ns-3-allinone демейки боюнча берилген үчүнчү репозиторий деп аталат бышыруу.

бышыруу ns-3 долбоору үчүн иштелип чыккан бир нече репозиторийлерден программалык камсыздоону макулдашылган куруу куралы. бышыруу ns-3 иштеп чыгуу версияларын алуу үчүн, ошондой эле айлана-чөйрө сыяктуу ns-3 бөлүштүрүүнүн базалык версиясынын кеңейтүүлөрүн жүктөп алуу жана куруу үчүн колдонсо болот. Түздөн-түз коддун аткарылышы, CradleNetwork Simulation Cradle, жаңы Python байланыштарын жана ар кандай ns-3 "колдонмолорун" түзүү мүмкүнчүлүгү.

пикир
CradleNetwork Simulation Cradle – бул тармак симуляторунун ичинде чыныгы TCP/IP тармак стектерин колдонууга мүмкүндүк берген алкак.

Эгерде сиз ns-3 орнотууңуз өркүндөтүлгөн же кошумча функцияларга ээ болушун күтсөңүз, бул орнотуу жолу менен жүрсөңүз болот.

Акыркы ns-3 чыгарылыштарында бышыруу чайыр чыгарууга кошулган. Чыгарылыш конфигурация файлын камтыйт, ал программанын учурдагы версияларын релиз учурунда жүктөп алууга мүмкүндүк берет. Бул, мисалы, версия бышырууns-3.29 чыгарылышы менен бөлүштүрүлгөн ns-3 же андан мурунку релиздин компоненттерин алуу үчүн колдонулушу мүмкүн, бирок кийинки релиздердин компоненттерин алуу үчүн колдонулушу мүмкүн эмес (эгерде пакеттин сүрөттөмө файлы болсо bakeconf.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: чыгарууга туура келген модул; ал тарболдогу релизге окшош компоненттерди жүктөп алат;

  2. ns-3-dev: окшош модуль, бирок өнүгүү дарагынын кодун колдонуу;

  3. ns-allinone-3.29: Click routing жана Network Simulation Cradle, Openflow for ns-3 сыяктуу башка кошумча функцияларды камтыган модул.

  4. ns-3-allinone: модулдун релиз версиясына окшош allinone, бирок иштеп чыгуу коду үчүн.

пикир
чыкылдатуу — роутерлерди түзүү үчүн программалык камсыздоонун модулдук архитектурасы.

Openflow - бул программалык камсыздоо менен аныкталган тармактык технологияны ишке ашыруучу роутер жана коммутаторлор аркылуу маалымат тармагы аркылуу берилүүчү маалыматтарды иштетүү процессин башкаруу үчүн протокол.

Учурдагы иштеп чыгуунун сүрөтү (релиз эмес) ns-3 төмөнкү жерден тапса болот:https://gitlab.com/nsnam/ns-3-dev.git.

Иштеп чыгуучулар бул репозиторийлерди ырааттуу иштөө тартибинде сактоого аракет кылышат, бирок алар иштеп чыгуу аймагында жана чыгарыла элек кодду камтыйт, андыктан жаңы функцияларды колдонууну пландабасаңыз, анда расмий релизди тандаңыз.

Коддун акыркы версиясын репозиторийлердин тизмесин карап же ns-3 Releases веб-бетине өтүү менен таба аласыз:https://www.nsnam.org/releases/ жана акыркы версия шилтемесин чыкылдатуу. Бул мисалда биз ns-3.29 менен улантабыз.

Эми, бизге керектүү ns-3 компоненттерин алуу үчүн, биз куралды колдонобуз бышыруу. Чыгарма тууралуу бир нече кириш сөз айталы бышыруу.

Bake пакет булактарын каталогго жүктөө менен иштейт булак жана китепканаларды куруу каталогуна орнотуу. бышыруу бинардыкка шилтеме берүү менен иштетсе болот, бирок сиз иштеткиңиз келсе бышыруу ал жүктөлүп алынган каталогдон эмес, жолду кошуу сунушталат бышыруу жолуңузга (PATH чөйрө өзгөрмөсү), мисалы, төмөнкүдөй (Linux bash кабыгынын мисалы). "Бышыруу" каталогуна өтүп, андан кийин төмөнкү чөйрө өзгөрмөлөрүн орнотуңуз:

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

Бул программаны жайгаштырат bake.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

Бул үч булак жүктөлүп алынган дегенди билдирет. Эми булак каталогуна барып, ls териңиз; Сиз көрүшүңүз керек:

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

Эми сиз ns-3 бөлүштүрүүнү курууга даярсыз.

3.4 Ассамблея ns-3

ns-3 жүктөп алуу сыяктуу эле, ns-3 куруунун бир нече жолу бар. Биз баса белгилегибиз келген негизги нерсе, ns-3 деп аталган куруу куралы аркылуу курулган Wafтөмөндө сүрөттөлгөн. Көпчүлүк колдонуучулар менен иштешет Waf, бирок сиз баштоого же татаалыраак курууларды уюштурууга жардам бере турган бир нече ыңгайлуу сценарийлер бар. Андыктан, сураныч, сиз жөнүндө окуудан мурун Waf, карап көрүңүз build.py менен чогултуу бышыруу.

3.4.1 build.py менен куруу

Эскертүү! Бул куруу кадамы жогоруда сүрөттөлгөндөй алынган булак архивдик версиясында гана жеткиликтүү; жана git же bake аркылуу жүктөлгөн эмес.

Чыгарылган архив менен иштөөдө тарболбоюнча ns-3-allinone Компоненттерди чогултууну жеңилдете турган ыңгайлуу скрипт бар. Бул build.py деп аталат. Бул программа сиз үчүн долбоорду эң пайдалуу жол менен орнотот. Бирок, ns-3 менен иштөө жана өркүндөтүлгөн орнотуулар, адатта, ns-3тин Waf куруу тутумун колдонууну камтыарын эске алыңыз, ал кийинчерээк бул окуу куралында киргизилет.

Эгер сиз жүктөп алган болсоңуз тарбол, андан кийин каталогуңузда ~/жумуш мейкиндиги сыяктуу аталышы бар каталог ns-allinone-3.29. Төмөнкүлөрдү киргизиңиз:

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

Чакырганда build.py Бул окуу куралында колдонулган мисалдарды жана тесттерди түзүү үчүн биз буйрук сабынын аргументтерин колдондук, алар демейки боюнча ns-3те курулбайт. Демейки боюнча, программа ошондой эле бардык жеткиликтүү модулдарды түзөт. Андан кийин, эгер кааласаңыз, ns-3ти мисалдар жана тесттерсиз кура аласыз, же жумушуңузга кереги жок модулдарды алып салсаңыз болот.

Сиз жүктөгөн ар кандай бөлүктөрдү курганда скрипт тарабынан көрсөтүлгөн компилятордун көптөгөн чыгуу билдирүүлөрүн көрөсүз. Алгач сценарий аниматорду түзүүгө аракет кылат нетаним, андан кийин байланыштыруучу генератор pybindgen жана акырында 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

Тизменин акыркы үч сабында биз курула элек модулдар жөнүндө билдирүүнү көрөбүз:

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

Бул жөн гана тышкы китепканаларга көз каранды болгон кээ бир ns-3 модулдары курула элек болушу мүмкүн же бул конфигурация үчүн аларды куруу талап кылынбайт дегенди билдирет. Бул симулятор чогулган эмес же чогулган модулдар туура иштебейт дегенди билдирбейт.

3.4.2 Бэйк менен куруу

Эгерде сиз долбоордун репозиторийлеринен баштапкы кодду алуу үчүн жогоруда bake колдонсоңуз, аны ns-3 куруу үчүн колдоно берсеңиз болот. Терүү:

$ ./bake.py build

жана сиз төмөнкүдөй нерсени көрүшүңүз керек:

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

жардам: Ошондой эле "bake.py deploy" чакырып, бир эле учурда жүктөө жана куруу кадамдарын аткара аласыз.

Бардык компоненттерди чогултуу ишке ашпай калышы мүмкүн, бирок компонент талап кылынбаса, монтаждоо улантылат. Мисалы, жакында эле көчүрүү маселеси болгон castxml курал менен чогултууга болот бышыруу бардык платформаларда эмес. Бул учурда, мындай билдирүү пайда болот:

>> 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.

Бирок castxml жаңыртылган Python байланыштарын түзгүңүз келсе гана керек. Көпчүлүк колдонуучулар үчүн мунун кереги жок (жок дегенде алар ns-3 өзгөрмөйүнчө), ошондуктан мындай эскертүүлөрдү азырынча этибарга албай коюуга болот.

Эгер ал ишке ашпай калса, төмөнкү буйрук сизге жетишпеген көз карандылыктар жөнүндө ишарат берет:

$ ./bake.py show

Сиз түзүүгө аракет кылып жаткан пакеттердин ар кандай көз карандылыктары тизмеленет.

3.4.3 Waf менен куруу

Ушул убакка чейин ns-3 түзүүнү баштоо үчүн биз сценарийди колдондук build.py, же курал бышыруу. Бул куралдар ns-3 куруу жана китепканаларды тейлөө үчүн пайдалуу. Чынында, куруу үчүн алар куруу куралын иштетет Waf ns-3 каталогунан. Waf ns-3 булак коду менен орнотулган. Көпчүлүк колдонуучулар ns‑3 конфигурациялоо жана чогултуу үчүн түз колдонууга тез өтүшөт Waf. Андыктан, улантуу үчүн алгач түзгөн ns-3 каталогуна өтүңүз.

Бул учурда катуу талап кылынбайт, бирок бир аз артка чегинип, долбоордун конфигурациясына кантип өзгөртүү киргизүү керектигин көрүү пайдалуу болот. Балким, сиз жасай турган эң пайдалуу конфигурацияны өзгөртүү коддун оптималдаштырылган версиясын түзүү болуп саналат. Демейки боюнча, сиз долбооруңузду мүчүлүштүктөрдү оңдоо версиясын куруу үчүн конфигурацияладыңыз. Келгиле, оптималдаштырылган курулушту түзүү үчүн долбоорду карап көрөлү. Wafга мисалдарды жана тесттерди камтыган оптималдаштырылган курулуштарды жасоо керек экенин түшүндүрүү үчүн, сиз төмөнкү буйруктарды аткарышыңыз керек:

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

Бул ишке кирет Waf жергиликтүү каталогдон тышкары (сизге ыңгайлуу болушу үчүн). Биринчи команда мурунку түзүүдөн тазалайт, бул адатта катуу талап кылынбайт, бирок бул жакшы практика (төмөндөгү куруу профилдерин да караңыз); бул каталогдо жайгашкан мурда түзүлгөн китепканаларды жана объект файлдарын жок кылат куруу/. Долбоор кайра конфигурацияланганда жана куруу системасы ар кандай көз карандылыктарды текшергенде, сиз төмөнкүдөй жыйынтыкты көрүшүңүз керек:

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 битин коюу. Ал демейки боюнча иштетилген эмес, ошондуктан бул функция "иштетилген эмес" катары көрүнөт. Акырында, иштетилген параметрлердин тизмесин алуу үчүн, колдонуңуз Waf параметр менен --check-config.

Эми артка кайрылып, мисалдарды жана сыноолорду камтыган мүчүлүштүктөрдү оңдоого кайра которулалы.

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

Куруу системасы азыр орнотулду жана сиз жөн гана терүү менен ns-3 программаларынын мүчүлүштүктөрдү оңдоо версияларын түзө аласыз:

$ ./waf

Жогорудагы кадамдар сизди ns-3 тутумунун бир бөлүгүн эки жолу курууга мажбур кылышы мүмкүн, бирок азыр сиз конфигурацияны кантип өзгөртүүнү жана оптималдаштырылган кодду курууну билесиз.

Берилген долбоордун конфигурациясында кайсы профиль активдүү экенин текшерүү үчүн буйрук бар:

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

Жогорудагы сценарий build.py аргументтерди да колдойт --enable-examples и --enable-tests, бирок башка варианттар Waf ал түздөн-түз колдобойт. Мисалы, бул иштебейт:

$ ./build.py --disable-python

реакция мындай болот:

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

Бирок, атайын оператор - - аркылуу кошумча параметрлерди өткөрүү үчүн колдонулушу мүмкүн вафошондуктан жогоруда айтылгандардын ордуна төмөнкү буйрук иштейт:

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

анткени ал негизги буйрукту жаратат ./waf конфигурациялоо --disable-python. Бул жерде дагы бир нече таанышуу кеңештери бар Waf.

Куруу каталарын иштетүү

ns-3 релиздери жалпы Linux жана MacOS дистрибьютерлеринде релиз учурунда жеткиликтүү болгон эң акыркы C++ компиляторлорунда сыналган. Бирок, убакыттын өтүшү менен, жаңы дистрибьюторлор жаңы компиляторлор менен чыгарылат жана бул жаңы компиляторлор эскертүүлөр жөнүндө көбүрөөк педанттик болушат. ns-3 өзүнүн түзүлүшүн бардык эскертүүлөрдү ката катары кабыл алуу үчүн конфигурациялайт, ошондуктан кээде сиз жаңыраак системада эски версияны иштетип жатсаңыз, компилятордун эскертүүсү курууну токтотушу мүмкүн.

Мисалы, мурда Fedora 3.28 үчүн ns‑28 релизи бар болчу, анда жаңы негизги версия камтылган Туры (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 баштап чыгарылыштарда, д Waf бул көйгөйлөрдү чечүү үчүн бир параметр бар. Бул g++ жана clang++ ичинде "-Werror" желегин орнотууну өчүрөт. Бул "--disable-werror" опциясы жана конфигурациялоо учурунда колдонулушу керек:

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

Конфигурациялоо же чогултуу

Кээ бир буйруктар Waf конфигурация фазасында гана мааниге ээ, ал эми айрымдары куруу фазасында гана жарактуу. Мисалы, ns-3 эмуляциясынын мүмкүнчүлүктөрүн колдонгуңуз келсе, бит жөндөөсүн иштетсеңиз болот түштүк колдонуу Sudo, жогоруда сүрөттөлгөндөй. Бул конфигурация кадамынын буйруктарын жокко чыгарат, ошондуктан сиз конфигурацияны төмөнкү буйрукту колдонуп өзгөртө аласыз, ал ошондой эле мисалдарды жана тесттерди камтыйт.

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

Эгер муну кылсаң Waf баштайт Sudoуруксаттар менен иштөө үчүн эмуляция кодун розетка түзүү программаларын өзгөртүү тамыр. The Waf Конфигурациялоо жана куруу кадамдары үчүн көптөгөн башка варианттар бар. Параметрлериңизди изилдөө үчүн төмөнкүлөрдү киргизиңиз:

$ ./waf --help

Кийинки бөлүмдө биз тестке байланыштуу кээ бир варианттарды колдонобуз.

Ассамблея профилдери

Кантип конфигурацияласа болорун көрдүк Waf чогулуштар үчүн жөндөөчү и оптималдаштырылган:

$ ./waf --build-profile=debug

Аралык монтаж профили да бар, бошотуу. Опция -d менен синоним болуп саналат --build-profile. Куруу профили журналдарды, ырастоолорду жана компиляторду оптималдаштыруу которгучтарын колдонууну көзөмөлдөйт:

ns-3 тармак симуляторунун окуу куралы. 3-бөлүм

Көрүнүп тургандай, каттоо жана ырастоо мүчүлүштүктөрдү оңдоо түзүмдөрүндө гана жеткиликтүү. Сунушталган практика – скриптиңизди мүчүлүштүктөрдү оңдоо режиминде иштеп чыгуу, андан кийин оптималдаштырылган куруу профилинде кайталап иштетүүлөрдү (статистика же параметрди өзгөртүү үчүн) аткаруу.

Эгер сизде белгилүү бир куруу профилдеринде гана иштей турган код болсо, Code Wrapper макросун колдонуңуз:

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;)

Демейки, Waf курулуш каталогунда артефакттарды куруу жерлери. Сиз опцияны колдонуу менен башка чыгаруу каталогун көрсөтө аласыз - -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
...

Бул ар бир жолу акыркы жыйынды кайра жазбастан, бир нече жыйындар менен иштөөгө мүмкүндүк берет. Башка профилге өткөндө, Waf бардыгын толугу менен кайра түзбөстөн, аны гана түзөт.

Куруу профилдерин ушундай жол менен алмаштырганда, ар бир жолу бирдей конфигурация параметрлерин берүүдөн этият болушуңуз керек. Бир нече чөйрө өзгөрмөлөрүн аныктоо каталардан качууга жардам берет:

$ 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

Компиляторлор жана желектер

Жогорудагы мисалдарда Waf ns-3 куруу үчүн GCCден C++ компилятору колдонулат ( g ++). Бирок, сиз колдонгонду өзгөртө аласыз Waf C++ компилятору, CXX чөйрө өзгөрмөсүн аныктоо менен. Мисалы, C++ компиляторун колдонуу үчүн Clang, clang++,

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

Ошол эле жол менен сиз конфигурациялай аласыз Waf аркылуу бөлүштүрүлгөн компиляцияны колдонуу distcc:

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

Distcc жана бөлүштүрүлгөн компиляция тууралуу көбүрөөк маалыматты Документация бөлүмүндөгү долбоордун бетинен тапса болот. ns-3 конфигурациялоодо компилятордун желектерин кошуу үчүн CXXFLAGS_EXTRA чөйрө өзгөрмөсүн колдонуңуз.

жөндөө

Waf системанын ар кайсы жерлерине китепканаларды орнотуу үчүн колдонсо болот. Демейки боюнча, компиляцияланган китепканалар жана аткарылуучу файлдар каталогдо жайгашкан куруу, жана Waf бул китепканалардын жана аткарылуучу файлдардын жайгашкан жерин билгендиктен, китепканаларды башка жерге орнотуунун кереги жок.

Эгер колдонуучулар куруу каталогунан тышкары орнотууну кааласа, алар буйрукту иштете алышат ./waf орнотуу. Орнотуу үчүн демейки префикс болуп саналат / usr / localошондуктан ./waf орнотуу программаларды орнотот / Окудум / жергиликтүү / бин, китепканалар / Окудум / жергиликтүү / LIB жана баш файлдар /usr/local/include. Супер колдонуучунун укуктары, адатта, демейки префикс менен коюлушу керек, андыктан типтүү буйрук болот sudo ./waf орнотуу. Ишке киргизилгенде, Waf адегенде куруу каталогундагы жалпы китепканаларды колдонууну тандайт, андан кийин жергиликтүү чөйрөдө конфигурацияланган китепканаларга баруучу жол боюндагы китепканаларды издейт. Ошентип, китепканаларды системага орнотуп жатканда, туура китепканалар колдонулуп жатканын текшерүү жакшы практика болуп саналат. Колдонуучулар конфигурациялоо учурунда параметрди өткөрүп, башка префикс менен орнотууну тандай алышат --prefixМисалы:

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

Эгер кийинчерээк, куруудан кийин, колдонуучу орнотуу буйругун киргизет ./waf, префикси колдонулат /opt/local.

команда ./waf clean орнотуу колдоно турган болсо, долбоорду кайра конфигурациялоодон мурун колдонулушу керек Waf башка префикс астында.

Ошентип, ns-3 колдонуу үчүн чакыруунун кереги жок ./waf install. Көпчүлүк колдонуучулар бул буйрукту талап кылбайт, анткени Waf учурдагы китепканаларды куруу каталогунан тандап алышат, бирок кээ бир колдонуучулар бул алардын иш-аракеттери ns-3 каталогунан тышкаркы программалар менен иштөөнү камтыса, бул пайдалуу болушу мүмкүн.

Waf single

ns-3 булак дарагынын жогорку деңгээлинде бир гана Waf скрипти бар. Жумушка киришкенден кийин, сиз каталогдо көп убакыт өткөрөсүз scratch/ же тереңирээкsrc/... жана ошол эле учурда чуркоо керек Waf. Сиз жөн гана кайда экениңизди эстеп, чуркай аласыз Waf төмөнкүдөй:

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

бирок бул тажатма жана катага жакын болот, андыктан жакшыраак чечимдер бар. Кеңири таралган ыкмалардын бири, мисалы, текст редакторун колдонуу Emacs же VIM, анда эки терминал сеансы ачылат, бири ns-3 куруу үчүн колдонулат, ал эми экинчиси баштапкы кодду түзөтүү үчүн колдонулат. Эгер сизде гана бар болсо тарбол, анда чөйрө өзгөрмө жардам берет:

$ 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

Бул сыноолор параллелдүү жүргүзүлөт Waf. Акыр-аягы, сиз төмөнкү билдирүүнү көрүшүңүз керек:

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

Бул код менен көйгөйлөрдү же куралдар менен коддун дал келбестигин көрсөтүп, valgrind кыйроолорун, кыйроолорду же каталарды аныктоо үчүн маанилүү билдирүү.

Сиз ошондой эле акыркы жыйынтыкты көрөсүз Waf жана ар бир тестти иштетип жаткан сыноочу, ал төмөнкүдөй көрүнөт:

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: ..." саптарынын тартиби ар кандай болушу мүмкүн экенин эске алыңыз, бул нормалдуу нерсе. Маанилүү нерсе - отчеттун аягындагы жыйынды сап бардык сыноолор өткөнүн көрсөтүп турат; эч кандай сыноолор өтпөй калган же бузулган эмес.) Жана Wafжана test.py машинанын колдо болгон процессор өзөктөрүндөгү ишти параллелдештирмекчи.

3.6 Сценарийди иштетүү

Биз көбүнчө скрипттерди көзөмөл астында иштетебиз Waf. Бул куруу тутумуна жалпы китепкана жолдорунун туура коюлганын жана китепканалардын иштөө убагында жеткиликтүү болушун камсыздоого мүмкүндүк берет. Программаны иштетүү үчүн, жөн гана колдонуңуз Waf параметр менен - -run. Бардык жердеги программанын нс-3 эквивалентин ишке ашыралы салам дүйнөтөмөнкүнү терүү менен:

$ ./waf --run hello-simulator

Waf алгач программанын туура курулганын текшерип, керек болсо курат. Анда Waf төмөнкү натыйжаларды чыгарган программаны аткарат.

Hello Simulator

Куттуктайбыз! Сиз азыр ns-3 колдонуучусусуз!

Мен натыйжаларды көрбөй калсам, эмне кылышым керек?

Эгер сиз билдирүүлөрдү көрсөңүз Wafкуруу ийгиликтүү аяктаганын көрсөтүп турат, бирок сиз жыйынтыкты көрбөйсүз "Салам симулятор", анда [Waf менен куруу] бөлүмүндө сиз куруу режимиңизге которулган болушуңуз мүмкүн. оптималдаштырылган, бирок кайра режимге өтүүнү сагындым жөндөөчү. Бул окуу куралында колдонулган бардык консолдук чыгарылыш журналдарды каттоону жүзөгө ашырган жана консолго ыңгайлаштырылган билдирүүлөрдү басып чыгаруу үчүн колдонулган атайын ns-3 компонентин колдонот. Бул компоненттен чыгуу оптималдаштырылган код түзүлгөндө автоматтык түрдө өчүрүлөт - ал "оптимизацияланган". Эгер сиз "Hello Simulator" чыкмасын көрбөсөңүз, төмөнкүнү киргизиңиз:

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

орнотуу Waf мисалдарды жана тесттерди камтыган ns-3 программаларынын мүчүлүштүктөрдү оңдоо версияларын куруу. Андан кийин терүү менен коддун учурдагы мүчүлүштүктөрдү оңдоо версиясын кайра курушуңуз керек

$ ./waf

Эми сиз программаны иштетсеңиз салам симулятор, сиз күтүлгөн натыйжаны көрүшүңүз керек.

3.6.1 Буйрук сабынын аргументтери

ns-3 программасына буйрук сабынын аргументтерин өткөрүү үчүн төмөнкү үлгүнү колдонуңуз:

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

алмаштыруу программаңыздын атына жана аргументтерине. Аргумент - -command-template үчүн Waf бул иш жүзүндө буйрук сабын куруу үчүн рецепт болуп саналат Waf программаны аткаруу үчүн колдонулат. Waf куруу аяктаганын текшерет, жалпы китепкананын жолдорун орнотот, андан кийин берилген буйрук сабынын үлгүсүн колдонот жана аткарылуучу файлды чакыруу үчүн %s толтургуч үчүн программанын атын алмаштырат. Эгер сиз бул синтаксисти татаал деп тапсаңыз, анда ns-3 программасын жана анын аргументтерин бир тырмакчага камтыган жөнөкөй версиясы бар:

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

Дагы бир өзгөчө пайдалуу мисал тест топтомдорун тандап иштетүү. Келгиле, mytest деп аталган тест топтому бар деп коёлу (чындыгында андай эмес). Жогоруда биз ./test.py скриптин бир катар тесттерди параллелдүү жүргүзүү үчүн колдондук, ал тест программасын кайра-кайра чакырат. сыноочу. Чалуу сыноочу түздөн-түз бир сыноо жүргүзүү үчүн:

$ ./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) же эсти текшерүү куралы (мисалы, valgrind), окшош форманы колдонуңуз - -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 args.) Мүчүлүштүктөрдү оңдоочу астында сыноону жүргүзүү үчүн биз бул рецепт менен мурункуну бириктире алабыз:

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

3.6.3 Жумушчу каталог

Вафты нс-3 тертун чокусунда турган жеринен учуруу керек. Бул папка чыгаруу файлдары жазыла турган жумушчу каталогго айланат. Бирок бул файлдарды ns-3 булак дарагынын сыртында сактагыңыз келсе эмне болот? Аргумент колдонуңуз - -cwd:

$ ./waf --cwd=...

Сиз жумушчу каталогуңузга чыгаруу файлдарын алуу ыңгайлуураак болушу мүмкүн. Бул учурда, төмөнкү кыйыр иш жардам берет:

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

Буйруктун мурунку версиясынын бул жасалгасы учурдагы жумушчу каталогун сактап, каталогго барат Wafанан насаат кылат Waf программаны баштоодон мурда сакталган учурдагы жумушчу каталогго кайра жумушчу каталогун өзгөртүү үчүн. Биз команданы айтабыз - -cwd Толук болушу үчүн, колдонуучулардын көбү Waf'ти жогорку деңгээлдеги каталогдон иштетип, ошол жерден чыгуу файлдарын жаратышат.

Уландысы: 4-бөлүм

Source: www.habr.com

Комментарий кошуу