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, бастапқы код редакторы (мысалы, ВИМ, 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 вики бетіндегі орнату нұсқаулығын қараңыз.

Бұдан былай оқырман Linux, MacOS немесе Linux эмуляторымен жұмыс істейді және кем дегенде жоғарыда аталған құралдар бар деп есептейміз.

3.2.1 ns-3 шығарылымын бастапқы мұрағат ретінде жүктеп алу

Бұл ns-3 соңғы шығарылымы мен бума нұсқаларын жүктеп алып, тәжірибе жасағысы келетін жаңа пайдаланушыға арналған әрекет жолы. ns-3 шығарылымдары қысылған бастапқы мұрағаттар ретінде жарияланады, кейде деп аталады тарбол. тарбол бірнеше файлдар біріктірілген арнайы бағдарламалық мұрағат пішімі болып табылады. Мұрағат әдетте қысылады. арқылы ns-3 жүктеу процесі тарбол қарапайым, сізге тек шығарылымды таңдап, жүктеп алып, орамынан шығару керек.

Сіз пайдаланушы ретінде жергілікті каталогта ns-3 құрастырғыңыз келеді делік жұмыс кеңістігі. Linux консоліне келесіні енгізу арқылы шығарылымның жұмыс көшірмесін алуға болады (әрине сәйкес нұсқа нөмірлерін ауыстырыңыз)

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

Жоғарыда пайдаланылған утилитаға назар аударыңыз wget, бұл Интернеттен объектілерді жүктеп алуға арналған пәрмен жолы құралы. Егер сіз оны орнатпаған болсаңыз, ол үшін браузерді пайдалана аласыз.

Осы қадамдарды орындау сізді ns-allinone-3.29 каталогына апарады, онда сіз бірнеше файлдар мен каталогтарды көресіз.

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

Енді сіз ns-3 базалық дистрибутивін құруға дайынсыз және ns-3 құрылысы бөліміне өтуіңізге болады.

3.3 Git көмегімен ns-3 жүктеп алу

Ns-3 коды GitLab.com сайтындағы Git репозиторийлерінде қол жетімді https://gitlab.com/nsnam/. Топ нснам ашық бастапқы жоба пайдаланатын әртүрлі репозиторийлерді біріктіреді.

Git репозиторийлерін пайдалануды бастаудың ең оңай жолы - ортаны ажырату немесе клондау ns-3-аллинон. Бұл ең жиі қолданылатын ns-3 ішкі жүйелерін жүктеуді және құрастыруды басқаратын сценарийлер жиынтығы. Егер сіз Git-те жаңадан болсаңыз, «форк» және «клон» терминдері сізге бейтаныс болуы мүмкін; егер солай болса, GitLab.com сайтында орналасқан репозиторийді келесідей клондау (өз көшірмесін жасау) ұсынылады:

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

Бұл кезеңде сіздің каталогыңыздың көрінісі ns-3-аллинон жоғарыда сипатталған шығарылым мұрағат каталогынан сәл өзгеше. Ол келесідей көрінуі керек:

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

Сценарий бар екенін ескеріңіз download.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 жүктеу

Жоғарыдағы екі әдіс (көз мұрағаты немесе репозиторий ns-3-аллинон Git арқылы) бірнеше қосымшалары бар қарапайым ns-3 орнатуын алу үшін пайдалы (пибиндген Python байланыстарын жасау және нетаним желілік анимация үшін). ns-3-allinone ішінде әдепкі бойынша берілген үшінші репозиторий шақырылады пісіру.

Пісіру ns-3 жобасы үшін әзірленген бірнеше репозиторийлерден бағдарламалық қамтамасыз етуді үйлестіру құралы болып табылады. Пісіру ns-3 әзірлеу нұсқаларын алу үшін, сондай-ақ орта сияқты ns-3 таратуының негізгі нұсқасының кеңейтімдерін жүктеп алу және құру үшін пайдалануға болады. Тікелей кодты орындау, CradleNetwork симуляциялық бесігі, жаңа 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.

Пәрмен аяқталғаннан кейін Clone атты каталог болуы керек пісіру, оның мазмұны келесідей болуы керек:

$ 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-дев: ұқсас модуль, бірақ әзірлеу тармағынан кодты пайдалану;

  3. ns-аллинон-3.29: Басқа қосымша мүмкіндіктерді қамтитын модуль, мысалы, Click routing және Network Simulation Cradle, Openflow for ns-3.

  4. ns-3-аллинон: модульдің шығарылым нұсқасына ұқсас барлығы біреуінде, бірақ әзірлеу коды үшін.

ескерту
басыңыз — маршрутизаторларды құруға арналған модульдік программалық архитектура.

Openflow - бағдарламалық қамтамасыз етумен анықталған желілік технологияны жүзеге асыратын, маршрутизаторлар мен коммутаторлар арқылы деректер желісі арқылы берілетін деректерді өңдеу процесін басқаруға арналған хаттама.

Ағымдағы әзірлеу суретін (шығарылмайтын) ns-3 мына жерден табуға болады:https://gitlab.com/nsnam/ns-3-dev.git.

Әзірлеушілер бұл репозиторийлерді тұрақты жұмыс тәртібінде сақтауға тырысады, бірақ олар әзірлеу аймағында және шығарылмаған кодты қамтиды, сондықтан жаңа мүмкіндіктерді пайдалануды жоспарламасаңыз, ресми шығарылымды таңдаңыз.

Кодтың соңғы нұсқасын репозитарийлер тізімін шолу немесе ns-3 шығарылымдары веб-бетіне өту арқылы табуға болады: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 арқылы жүктелмеген.

Шығарылым мұрағатымен жұмыс істегенде тарбол, in 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

Листингтің соңғы үш жолында біз салынбаған модульдер туралы хабарламаны көреміз:

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 (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 құру үшін C++ GCC компиляторын пайдаланады ( g ++). Дегенмен, сіз қолданатынды өзгерте аласыз Waf CXX ортасының айнымалы мәнін анықтау арқылы C++ компиляторы. Мысалы, 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 орнату бағдарламаларды орнатады / usr / local / bin, кітапханалар / usr / local / 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 каталогынан тыс бағдарламалармен жұмыс істеуді қамтыса, бұл пайдалы болуы мүмкін.

Ваф жалғыз

Ns-3 бастапқы тармағының жоғарғы деңгейінде бір ғана Waf сценарийі бар. Жұмысты бастағаннан кейін сіз анықтамалықта көп уақытыңызды өткізесіз scratch/ немесе тереңірекsrc/... және сонымен бірге жүгіру керек Waf. Сіз қайда екеніңізді еске түсіріп, жүгіре аласыз Waf келесідей:

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

бірақ бұл жалықтырады және қателеседі, сондықтан жақсы шешімдер бар. сияқты мәтіндік редакторды пайдалану кең таралған әдіс болып табылады emacs немесе ВИМ, онда екі терминал сеансы ашылады, біреуі 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. Барлық жерде қолданылатын бағдарламаның ns-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) немесе жадты тексеру құралы (мысалы, вальгринд), ұқсас пішінді пайдаланыңыз - -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 Жұмыс каталогы

Вафты ns-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-тарау

Ақпарат көзі: www.habr.com

пікір қалдыру