дастури симулятори шабакавӣ ns-3. Боби 3

дастури симулятори шабакавӣ ns-3. Боби 3
боби 1,2

3 Оғози кор
3.1 Барраси
3.2 Шартҳои пешакӣ
3.2.1 Зеркашии версияи ns-3 ҳамчун бойгонии манбаъ
3.3 Зеркашии ns-3 бо истифода аз Git
3.3.1 Боркунии ns-3 бо истифода аз Bake
3.4 Маҷмаи ns-3
3.4.1 Сохтмон бо build.py
3.4.2 Сохтмон бо Bake
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
  • Рафтааст
    ҳама гуна версияи охирин (барои дастрасӣ ба ns-3 дар GitLab.com)
  • т
    ҳама версияи охирин (барои кушодани 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 Зеркашии ns-3 бо истифода аз Git

Рамзи ns-3 дар анбори Git дар GitLab.com дастрас аст 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-аллинон анборҳои иловагӣ бор карда мешаванд нс-3, офтоб, пибиндген и нетаним.

эрод гирифтан
Дар мошини дорои Ubuntu16.04 тоза, ба ман лозим буд, ки фармонро ба ин тағир диҳам: $ sudo python3 download.py -n ns-3.29 (минбаъд қайдҳои тарҷумон).

3.3.1 Боркунии ns-3 бо истифода аз Bake

Ду усули дар боло зикршуда (архиви манбаъ ё анбори ns-3-аллинон тавассути Git) барои дарёфти соддатарин насби ns-3 бо иловаҳои сершумор муфид аст (пибиндген барои тавлиди пайвандҳои 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.

Пас аз анҷом додани фармон Clone шумо бояд феҳристи ном дошта бошед офтоб, ки мундариҷаи он бояд чунин бошад:

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

Дар хотир доред, ки шумо якчанд скриптҳои Python-ро бор кардаед, ки модули Python ном дорад офтоб ва файли конфигуратсияи XML. Қадами навбатӣ истифодаи ин скриптҳо барои зеркашӣ ва сохтани тақсимоти ns-3-и интихобкардаи шумост. Якчанд ҳадафҳои мутобиқсозӣ дастрасанд:

  1. нс-3.29: модули мувофиқ ба релиз; он ҷузъҳои шабеҳро ба нашр дар tarball зеркашӣ мекунад;

  2. ns-3-dev: модули шабеҳ, аммо бо истифода аз рамзи дарахти рушд;

  3. ns-allinone-3.29: Модул, ки дигар хусусиятҳои иловагиро дар бар мегирад, аз қабили клик масир ва Cradle Simulation Network, Openflow for ns-3.

  4. ns-3-аллинон: монанд ба версияи барориши модул аллинон, балки барои коди рушд.

эрод гирифтан
ангушт занед — меъмории нармафзори модулӣ барои эҷоди роутерҳо.

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 shell). Ба директорияи "нонпазӣ" равед ва пас тағирёбандаҳои муҳити зеринро танзим кунед:

$ 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 бо истифода аз асбоби сохтани ном сохта шудааст Вафдар зер тавсиф карда шудааст. Аксари корбарон бо онҳо кор хоҳанд кард Ваф, аммо якчанд скриптҳои муфид мавҷуданд, ки ба шумо дар оғоз ё ташкили сохтани мураккабтар кӯмак мерасонанд. Пас, лутфан, пеш аз хондан дар ин бора Ваф, тамошо кунед build.py ва монтаж бо офтоб.

3.4.1 Сохтмон бо build.py

Диққат! Ин қадами сохтан танҳо аз версияи бойгонии сарчашма дастрас аст, ки тавре дар боло тавсиф шудааст; ва тавассути git ё bake зеркашӣ карда намешавад.

Ҳангоми кор бо архиви релиз тарболдар дохили ns-3-аллинон Скрипти қулай вуҷуд дорад, ки метавонад васл кардани ҷузъҳоро осонтар кунад. Он build.py номида мешавад. Ин барнома лоиҳаро барои шумо ба таври муфидтарин муқаррар мекунад. Аммо, қайд кунед, ки танзимоти пешрафта ва кор бо ns-3 одатан истифодаи системаи сохтани худи ns-3, Waf-ро дар бар мегирад, ки баъдтар дар ин дарс ҷорӣ карда мешавад.

Агар шумо бо истифода аз зеркашӣ тарбол, пас дар феҳристи худ ~/фазои корӣ директория бо номи чизе монанди ns-allinone-3.29. Инҳоро ворид кунед:

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

Ҳангоми занг задан build.py Мо далелҳои сатри фармонро барои сохтани мисолҳо ва санҷишҳои дар ин омӯзиш истифодашуда истифода бурдем, ки дар ns-3 бо нобаёнӣ сохта нашудаанд. Бо нобаёнӣ, барнома инчунин ҳамаи модулҳои дастрасро месозад. Пас, агар хоҳед, шумо метавонед ns-3-ро бидуни мисолҳо ва санҷишҳо созед ё модулҳоеро, ки барои кори шумо лозим нестанд, хориҷ кунед.

Шумо бисёр паёмҳои баромади компиляторро хоҳед дид, ки скрипт нишон медиҳад, зеро он қисмҳои гуногуни боркардаатонро месозад. Аввал скрипт кӯшиш мекунад, ки аниматорро созад нетаним, баъд генератори ҳатмӣ пибиндген ва дар охир нс-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

Агар шумо 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 ва нигоҳдории китобхонаҳо муфиданд. Дар асл, барои сохтани онҳо асбоби сохтмонро иҷро мекунанд Ваф аз директорияи 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 барои насб кардани суид бит "танзими ID гурӯҳ дар вақти корӣ" барои барномаҳои муайян. Он бо нобаёнӣ фаъол нест ва аз ин рӯ, ин хусусият ҳамчун "фаъол нест" пайдо мешавад. Дар ниҳоят, барои гирифтани рӯйхати имконоти фаъол, истифода баред Ваф бо параметр --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, балки имконоти дигар Ваф бевосита дастгирй намекунад. Масалан, ин кор намекунад:

$ ./build.py --disable-python

вокуниш чунин хоҳад буд:

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

Аммо, оператори махсуси - - метавонад барои интиқоли параметрҳои иловагӣ тавассути вафПас ба ҷои ин фармони зерин кор хоҳад кард:

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

зеро он фармони асосиро тавлид мекунад ./waf configure --disable-python. Инҳоянд чанд маслиҳатҳои муқаддимавӣ дар бораи Ваф.

Мубориза бо хатогиҳои сохтмон

Варақаҳои ns-3 дар охирин компиляторҳои C++, ки дар вақти нашр дар дистрибюторҳои маъмулии Linux ва MacOS мавҷуданд, санҷида мешаванд. Бо вуҷуди ин, бо мурури замон, дистрибюторҳои нав бо компиляторҳои нав бароварда мешаванд ва ин компиляторҳои навтар одатан дар бораи огоҳиҳо бештар педантикӣ мекунанд. ns-3 сохти худро ба танзим медарорад, то ҳама огоҳиҳо ҳамчун иштибоҳ муносибат кунад, бинобар ин баъзан агар шумо версияи кӯҳнаро дар системаи навтар иҷро кунед, огоҳии компилятор метавонад сохтмонро боздорад.

Масалан, қаблан нашри ns-3.28 барои Fedora 28 мавҷуд буд, ки версияи нави асосиро дар бар мегирад gcc (gcc-8). Сохтани версияи ns-3.28 ё версияҳои қаблии Fedora 28 бо насби Gtk2+, хатогии зерин рух медиҳад:

/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, дар Ваф як вариант барои ҳалли ин мушкилот мавҷуд аст. Он танзими парчами "-Werror" -ро дар g++ ва clang++ ғайрифаъол мекунад. Ин варианти "--disable-werror" аст ва бояд ҳангоми конфигуратсия татбиқ карда шавад:

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

Конфигуратсия кунед ё ҷамъ кунед

Баъзе фармонҳо Ваф танҳо дар марҳилаи конфигуратсия маъно доранд ва баъзеҳо танҳо дар марҳилаи сохтмон эътибор доранд. Масалан, агар шумо хоҳед, ки хусусиятҳои эмулятории ns-3-ро истифода баред, шумо метавонед танзимоти битро фаъол созед суд истифода sudo, чунон ки дар боло тавсиф карда шудааст. Ин фармонҳои қадами конфигуратсияро бекор мекунад ва аз ин рӯ шумо метавонед конфигуратсияро бо истифода аз фармони зерин тағир диҳед, ки он инчунин мисолҳо ва санҷишҳоро дар бар мегирад.

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

Агар шумо ин корро кунед Ваф оғоз хоҳад кард sudoбарои тағир додани барномаҳои эҷоди васлаки рамзи эмулятсия барои кор бо иҷозатҳо реша. Дар Ваф Бисёр имконоти дигар барои конфигуратсия ва қадамҳои сохтмон мавҷуданд. Барои омӯхтани имконоти худ, ворид кунед:

$ ./waf --help

Дар фасли оянда мо баъзе вариантҳои марбут ба санҷишро истифода хоҳем кард.

Профилҳои Ассамблея

Мо аллакай дидаем, ки чӣ тавр шумо метавонед танзим кунед Ваф барои маҷлисҳо сознамоии и optimized:

$ ./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;)

Пешфарз, Ваф ҷойҳо сохтани артефактҳо дар феҳристи сохтмон. Шумо метавонед бо истифода аз интихоб директорияи баромади дигарро муайян кунед - -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 компилятори C++ аз GCC ( g ++). Бо вуҷуди ин, шумо метавонед он чизеро, ки шумо истифода мебаред, иваз кунед Ваф C++ compiler, бо муайян кардани тағирёбандаи муҳити CXX. Масалан, барои истифодаи компилятори C++ Clang, clang++,

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

Ба ҳамин тариқ шумо метавонед танзим кунед Ваф бо истифода аз маҷмӯаи тақсимшуда истифода баред distcc:

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

Маълумоти бештарро дар бораи distcc ва маҷмӯаи тақсимшуда дар саҳифаи лоиҳа дар бахши Ҳуҷҷатҳо пайдо кардан мумкин аст. Барои илова кардани парчамҳои компилятор ҳангоми конфигуратсияи ns-3, тағирёбандаи муҳити CXXFLAGS_EXTRA -ро истифода баред.

параметр

Ваф метавонад барои насб кардани китобхонаҳо дар ҷойҳои гуногуни система истифода шавад. Бо нобаёнӣ, китобхонаҳо ва файлҳои иҷрошаванда дар директория ҷойгиранд сохтан, ва азбаски Waf ҷойгиршавии ин китобхонаҳо ва файлҳои иҷрошавандаро медонад, зарурати насб кардани китобхонаҳо дар ҷои дигар нест.

Агар корбарон бартарӣ медиҳанд, ки берун аз феҳристи сохтмон насб кунанд, онҳо метавонанд фармонро иҷро кунанд ./waf насб кунед. Префикси пешфарз барои насб ин аст / usr / local, ҳамин тавр ./waf насб кунед барномаҳоро дар / usr / local / bin, китобхонахо дар / usr / local / lib ва файлҳои сарлавҳа дар /usr/local/include. Ҳуқуқҳои суперистифодабаранда одатан бояд бо префикси пешфарз муқаррар карда шаванд, аз ин рӯ фармони маъмулӣ хоҳад буд sudo ./waf насб кунед. Вақте ки ба кор андохта мешавад, Waf аввал истифода бурдани китобхонаҳои муштаракро дар феҳристи сохтмон интихоб мекунад, пас китобхонаҳоро дар роҳ ба китобхонаҳои дар муҳити маҳаллӣ танзимшуда ҷустуҷӯ мекунад. Ҳамин тавр, ҳангоми насб кардани китобхонаҳо дар система, тафтиш кардани он, ки китобхонаҳои дуруст истифода мешаванд, як таҷрибаи хуб аст. Истифодабарандагон метавонанд бо гузоштани интихоб ҳангоми конфигуратсия бо префикси дигар насб кунанд --prefix, масалан:

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

Агар дертар, пас аз сохтан, корбар фармони насбро ворид кунад ./waf, префикс истифода мешавад /opt/local.

гурӯҳ ./waf clean бояд пеш аз аз нав танзимкунии лоиҳа истифода шавад, агар насбкунӣ истифода шавад Ваф зери префикси дигар.

Ҳамин тариқ, барои истифодаи ns-3 занг задан лозим нест ./waf install. Аксари корбарон ба ин фармон ниёз надоранд, зеро Ваф китобхонаҳои ҷориро аз феҳристи сохта хоҳанд гирифт, аммо баъзе корбарон метавонанд ин корро муфид донанд, агар фаъолияти онҳо кор бо барномаҳои берун аз феҳристи ns-3 дошта бошад.

Ваф ягона

Дар сатҳи болоии дарахти сарчашмаи ns-3 танҳо як скрипти Waf мавҷуд аст. Вақте ки шумо ба кор шурӯъ мекунед, шумо вақти зиёдеро дар директория сарф мекунед scratch/ ё амиқтарsrc/... ва дар баробари ин ran задан лозим меояд Ваф. Шумо метавонед танҳо дар хотир доред, ки дар куҷо буданатон ва гурезед Ваф чунин аст:

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

аммо ин дилгиркунанда ва хатогиҳо хоҳад буд, аз ин рӯ роҳҳои ҳалли беҳтар вуҷуд доранд. Яке аз роҳҳои маъмул ин истифодаи муҳаррири матнӣ ба монанди emacs ё зеро, ки дар он ду сессияи терминал кушода мешавад, яке барои сохтани ns-3 ва дуюм барои таҳрир кардани коди манбаъ истифода мешавад. Агар шумо танҳо дошта бошед тарбол, пас як тағирёбандаи муҳити зист метавонад кӯмак кунад:

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

$ cd scratch 
$ waff build

Дар феҳристи модул он метавонад васвасаи илова кардани скрипти ночиз waf ба монанди exec ../../waf. Лутфан oнро накунед. Ин барои навоварон печида аст ва вақте ки бади кор анҷом намедиҳад, боиси хатогиҳои сохтан душвор мегардад. Роҳҳои дар боло нишондодашуда роҳе мебошанд, ки бояд истифода шаванд.

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: ..." метавонад гуногун бошад, ин муқаррарӣ аст. Муҳим он аст, ки хати ҷамъбастии охири гузориш нишон медиҳад, ки ҳама санҷишҳо гузаштаанд; ягон санҷиш ноком ё садама надидааст.) Ва Вафва test.py корро дар ядрои протсессори мавҷудаи мошин параллел мекунад.

3.6 Иҷрои скрипт

Мо одатан скриптҳоро зери назорат иҷро мекунем Ваф. Ин ба системаи сохта имкон медиҳад, ки роҳҳои китобхонаҳои муштарак дуруст танзим карда шаванд ва китобхонаҳо дар вақти корӣ дастрас бошанд. Барои иҷро кардани барнома, танҳо истифода баред Ваф бо параметр - -run. нс-3 баробарн программаи дар хама чо мавчударо ичро кунем Салом Ҷаҳонбо навиштани зерин:

$ ./waf --run hello-simulator

Waf аввал тафтиш мекунад, ки барнома дуруст сохта шудааст ва агар лозим бошад, созад. Баъд Ваф барномаеро иҷро хоҳад кард, ки натиҷаи зеринро медиҳад.

Hello Simulator

Табрик мекунем! Шумо ҳоло корбари ns-3 ҳастед!

Чӣ бояд кард, агар ман натиҷаҳоро набинам?

Агар шумо паёмҳоро бинед Вафнишон медиҳад, ки сохтмон бомуваффақият анҷом ёфт, аммо шумо натиҷаро намебинед "Салом симулятор", пас эҳтимол вуҷуд дорад, ки дар бахши [Сохта-бо-Ваф] шумо режими сохтани худро ба optimized, аммо гузаштан ба реҷаро аз даст дод сознамоии. Ҳама баромади консоле, ки дар ин дарс истифода мешавад, ҷузъи махсуси 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 ...'

Мисоли дигари муфид ин аст, ки маҷмӯи санҷишҳоро интихобан иҷро кунед. Фарз мекунем, ки як пакети санҷишӣ бо номи 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 Феҳристи корӣ

Ваф бояд аз чои худ дар болои дарахти нс-3 cap дода шавад. Ин папка ба феҳристи корӣ табдил меёбад, ки дар он файлҳои баромад навишта мешаванд. Аммо агар шумо хоҳед, ки ин файлҳоро берун аз дарахти сарчашмаи ns-3 нигоҳ доред? Аргументро истифода баред - -cwd:

$ ./waf --cwd=...

Шумо метавонед барои гирифтани файлҳои баромад дар феҳристи кории худ қулайтар ёбед. Дар ин ҳолат, амали ғайримустақими зерин метавонад кӯмак кунад:

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

Ин ороиши версияи қаблии фармон директорияи кории ҷорӣро нигоҳ медорад, ба директория меравад Вафва баъд дастур медиҳад Ваф барои тағир додани директорияи корӣ ба директорияи кории ҷорӣ, ки пеш аз оғози барнома захира шудааст. Мо дастаро зикр мекунем - -cwd Барои пуррагӣ, аксари корбарон танҳо Waf-ро аз директорияи сатҳи боло иҷро мекунанд ва дар он ҷо файлҳои баромад тавлид мекунанд.

Давомаш: Боби 4

Манбаъ: will.com

Илова Эзоҳ