
3 Duke të filloni punën
3.1 Pasqyrë
3.2 Kushtet paraprake
3.2.1 Shkarkimi i nxjerrjes ns-3 si arkiv burimi
3.3 Shkarkimi i ns-3 me Git
3.3.1 Shkarkimi i ns-3 me Bake
3.4 Ndërtimi i ns-3
3.4.1 Ndërtimi me build.py
3.4.2 Ndërtimi me Bake
3.4.3 Ndërtimi me Waf
3.5 Testimi i ns-3
3.6 Ekzekutimi i skriptit
3.6.1 Argumentet e komandës
3.6.2 Debugging
3.6.3 Drejtoria e punës
Kreu 3
Duke të filloni punën
Ky kapitull ka për qëllim të përgatitë lexuesin për punë, duke filluar nga kompjuterët, në të cilat ndoshta, ndonjëherë, nuk është instaluar kurrë ns-3. Përshkrimi mbulon platformat e mbështetura, kushtet paraprake, mënyrat për të marrë ns-3, mënyrat për të ndërtuar ns-3 dhe mënyrat për të verifikuar ndërtimin tuaj dhe për të ekzekutuar programe të thjeshta.
3.1 Pasqyrë
Simulatori ns-3 është ndërtuar si një sistem bibliotekash programore që punojnë së bashku. Gjatë ndërtimit, kodi i programeve të përdoruesve lidhët me këto biblioteka. Për të shkruar programe të përdoruesve, përdoren gjuhët e programimit C++ ose Python.
Nsâ3 shpĂ«rndahet si kod burimi, qĂ« do tĂ« thotĂ« se sistemi i destinacionit duhet tĂ« ketĂ« njĂ« mjedis zhvillimi softuerik pĂ«r tĂ« ndĂ«rtuar bibliotekat fillimisht dhe pastaj pĂ«r tĂ« ndĂ«rtuar programin e personalizuar. NĂ« parim, nsâ3 mund tĂ« shpĂ«rndahet si biblioteka tĂ« gatshme pĂ«r njĂ« sistem tĂ« caktuar, dhe nĂ« tĂ« ardhmen ato mund tĂ« shpĂ«rndahen nĂ« kĂ«tĂ« mĂ«nyrĂ«. Por aktualisht, shumĂ« pĂ«rdorues nĂ« fakt e bĂ«jnĂ« punĂ«n e tyre duke redaktuar vetĂ« nsâ3, prandaj Ă«shtĂ« e dobishme tĂ« kesh kodin burimor pĂ«r ndĂ«rtimin e bibliotekave. NĂ«se dikush do tĂ« dĂ«shironte tĂ« merrte pĂ«rsipĂ«r punĂ«n e krijimit tĂ« bibliotekave dhe paketave tĂ« gatshme pĂ«r sistemet operative, ju lutemi kontaktoni listĂ«n e diskutimeve. ns-developers.
Më herët, ne do të shqyrtojmë tri mënyra për të shkarkuar dhe ndërtuar ns-3. Mënyra e parë është të shkarkoni dhe ndërtoni.versionin zyrtar nga faqja kryesore. Mënyra e dytë është të përzgjedhni dhe ndërtoni kopje të versioneve zhvillimore të instalimit bazë të ns-3. Mënyra e tretë është përdorimi i mjeteve shtesë të ndërtimit për të shkarkuar më shumë zgjerime për ns-3. Do të kalojmë nëpër çdo njëri, pasi mjetet duken pak ndryshe.
Përdoruesit e avancuar të Linux mund të pyesin pse ns-3 nuk ofrohet si një pakot, si shumica e bibliotekave të tjera që përdorin menaxherët e paketave? Megjithëse ekzistojnë paketa binare për shpërndarje të ndryshme Linux (p.sh., Debian), shumica e përdoruesve përfundojnë duke redaktuar bibliotekat dhe janë të detyruar të rikonstruktojnë vetë ns-3, prandaj disponibiliteti i kodit burimor është i favorshëm. Për këtë arsye ne do të përqendrohemi në instalimin nga kodi burimor.
PĂ«r shumicĂ«n e aplikacioneve, ns-3 nuk kĂ«rkon tĂ« drejtat e pĂ«rdoruesit. root ĂshtĂ« e rekomanduar tĂ« pĂ«rdorni njĂ« llogari pĂ«rdoruesi tĂ« papĂ«rhapur.
3.2 Kushtet paraprake
E gjithĂ« grupi i bibliotekave tĂ« disponueshme nsâ3 ka njĂ« sĂ«rĂ« varĂ«sish nga bibliotekat e tjera, por nĂ« pjesĂ«n mĂ« tĂ« madhe nsâ3 mund tĂ« ndĂ«rtohet dhe pĂ«rdoret me mbĂ«shtetje pĂ«r disa komponentĂ« tĂ« zakonshĂ«m (shpesh tĂ« instaluar si parazgjedhje): kompajleri C++, Python, editori i kodit burimor (p.sh., vim, emacs ose Eclipse) dhe, nĂ«se pĂ«rdoren depo zhvillimi, sistemet e kontrollit tĂ« versioneve Git. Shumica e pĂ«rdoruesve tĂ« rinj nuk duhet tĂ« shqetĂ«sohen nĂ«se konfigurimi i tyre raporton disa funkcionalitete shtesĂ« tĂ« mungojnĂ« nga nsâ3, por pĂ«r ata qĂ« dĂ«shirojnĂ« njĂ« instalim tĂ« plotĂ«, projekti ofron njĂ« wiki qĂ« pĂ«rfshin faqe me shumĂ« kĂ«shilla dhe sugjerime tĂ« dobishme. NjĂ« nga kĂ«to faqe Ă«shtĂ« faqja "Instalimi" me udhĂ«zime pĂ«r instalim pĂ«r sistemet e ndryshme, tĂ« cilat janĂ« tĂ« disponueshme nĂ« adresĂ«n: .
Sekcioni "KĂ«rkesat paraprake" i kĂ«saj wiki-shpjegimi shpjegon se cilat paketa kĂ«rkohen pĂ«r tĂ« mbĂ«shtetur opsionet e zakonshme nsâ3 dhe gjithashtu ofron komandat qĂ« pĂ«rdoren pĂ«r t'i instaluar ato nĂ« variantet e zakonshme tĂ« Linux ose macOS.
Ju mund të shfrytëzoni mundësinë për të studiuar faqen e wiki-t ns-3 ose faqen kryesore të internetit: , sepse aty ka shumë informacion. Duke filluar nga versioni më i fundit i ns-3 (ns-3.29), për të ekzekutuar ns-3 nevojiten mjetet e mëposhtme:
Mjeti Paketë/version
- Kompilator C++
clang++ ose g++ (g++ versioni 4.9 ose më i madh) - Python
python2 versioni >= 2.7.10, ose python3 versioni >= 3.4 - Git
çdo version i fundit (për akses në ns-3 në GitLab.com) - tar
çdo version i fundit (për shpërndarjen e versionit të ns-3) - bunzip2
çdo version i fundit (për shpërndarjen e versionit të ns-3)
Për të kontrolluar versionin e Python-it të instaluar si default, shkruani python -V. Për të kontrolluar versionin e g++, shkruani g++ -v. Nëse ndonjë nga mjetet mungon ose është shumë e vjetër, konsultohuni me udhëzimin për instalim në faqen wiki të ns-3.
Nga ky moment, ne supozojmë se lexuesi po punon në Linux, MacOS ose një emulator të ambientit Linux, dhe ka të paktën mjetet e përmendura më sipër.
3.2.1 Shkarkimi i nxjerrjes ns-3 si arkiv burimi
Ky Ă«shtĂ« njĂ« proces veprimi pĂ«r njĂ« pĂ«rdorues tĂ« ri qĂ« dĂ«shiron tĂ« shkarkojĂ« dhe tĂ« eksperimentojĂ« me versionet mĂ« tĂ« fundit tĂ« lĂ«shimeve dhe pakove tĂ« ns-3. LĂ«shimet e ns-3 publikohen si arkiva tĂ« zhurmshme tĂ« burimeve, ndonjĂ«herĂ« tĂ« quajtura tarball. tarball â Ă«shtĂ« njĂ« format i veçantĂ« arkivash programi, ku disa skedarĂ« janĂ« tĂ« bashkuar sĂ« bashku. Arkivi zakonisht Ă«shtĂ« i compraktuar. Procesi i ngarkimit tĂ« nsâ3 pĂ«rmes tarball Ă«shtĂ« i thjeshtĂ«, ju vetĂ«m duhet tĂ« zgjidhni versionin, tĂ« shkarkoni dhe ta çaroni atĂ«.
Supozoni se ju, si pĂ«rdorues, dĂ«shironi tĂ« krijoni nsâ3 nĂ« njĂ« direktori lokale me emrin workspace. Ju do tĂ« jeni nĂ« gjendje tĂ« merrni njĂ« kopje pune tĂ« versionit, duke futur nĂ« terminalin Linux tĂ« dhĂ«nat e mĂ«poshtme (sigurisht, duke zĂ«vendĂ«suar numrat pĂ«rkatĂ«s tĂ« versioneve)
$ 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 Vini re utilitarin e përdorur më sipër, wget, i cili është një mjet komandues për shkarkimin e objekteve nga Interneti. Nëse nuk e keni instaluar, mund ta përdorni shfletuesin tuaj për këtë.
Duke ndjekur këto hapa, do të kaloni në direktorinë ns-allinone-3.29, ku duhet të shihni disa skedarë dhe drejtoritë
$ 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.pyTani jeni gati pĂ«r tĂ« ndĂ«rtuar distribucionin bazĂ« tĂ« nsâ3 dhe mund tĂ« kaloni nĂ« seksionin qĂ« pĂ«rkon me ndĂ«rtimin e nsâ3.
3.3 Shkarkimi i ns-3 me Git
Kodi i nsâ3 Ă«shtĂ« nĂ« dispozitat e repozitoreve Git nĂ« shĂ«rbimin GitLab.com nĂ« adresĂ«n . Grupi nsnam bashkon repositorĂ«t e ndryshĂ«m qĂ« pĂ«rdoren nga projekti me burim tĂ« hapur.
MĂ«nyra mĂ« e thjeshtĂ« pĂ«r tĂ« filluar pĂ«rdorimin e repositorĂ«ve Git Ă«shtĂ« tĂ« bĂ«ni njĂ« fork ose tĂ« klononi mjedisin. nsâ3-allinone. Ky Ă«shtĂ« njĂ« set skriptesh qĂ« menaxhon shkarkimin dhe ndĂ«rtimin e njesive mĂ« tĂ« pĂ«rdorura nsâ3. NĂ«se jeni fillestar nĂ« Git, termat 'fork' dhe 'klonim' mund tĂ« mos ju jenĂ« tĂ« njohur; nĂ«se Ă«shtĂ« kĂ«shtu, ne ju rekomandojmĂ« tĂ« klononi (krijoni kopjen tuaj) tĂ« repositorit nĂ« GitLab.com, si mĂ« poshtĂ«:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone NĂ« kĂ«tĂ« pikĂ«, pamja e direktorisĂ« tuaj nsâ3-allinone differon pak nga direktorja e pĂ«rshkruar mĂ« sipĂ«r me arkivin e lĂ«shimit. Ajo duhet tĂ« duket mĂ« shumĂ« kĂ«shtu:
$ ls
build.py constants.py download.py README util.pyKujdesi pĂ«r prani tĂ« skriptit download.py, i cili do tĂ« nxjerrĂ« gjithashtu nsâ3 dhe kodin burimor pĂ«rkatĂ«s. KĂ«tu keni njĂ« zgjedhje: ose tĂ« shkarkoni snapshot-in e fundit tĂ« zhvillimit tĂ« nsâ3:
$ python download.pyose tĂ« preferoni lĂ«shimin e nsâ3, duke pĂ«rdorur flamurin -n pĂ«r tĂ« specifikuar numrin e lĂ«shimit:
$ python download.py -n ns-3.29Pas kĂ«tij hapi nĂ« direktorinĂ« nsâ3-allinone do tĂ« ngarkohen depo tĂ« tjera nsâ3, bake, pybindgen dhe netanim.
Shënim
Në një makinë me Ubuntu 16.04 të pastër, më kërkohej të ndryshoja komandën në këtë formë: $ sudo python3 download.py -n ns-3.29 (këtu dhe më tej shënime nga përkthyesi).
3.3.1 Shkarkimi i ns-3 me Bake
Dy metodat e pĂ«rmendura mĂ« sipĂ«r (arkivi i kodit burimor ose depoja nsâ3-allinone pĂ«rmes Git) janĂ« tĂ« dobishme pĂ«r tĂ« marrĂ« njĂ« instalim sa mĂ« tĂ« thjeshtĂ« tĂ« nsâ3 me disa shtesa (pybindgen pĂ«r tĂ« gjeneruar lidhje Python dhe netanim pĂ«r animimin e rrjetit). Depoja e tretĂ«, e ofruar si standard nĂ« nsâ3-allinone, quhet bake.
Bake â Ă«shtĂ« njĂ« mjet pĂ«r ndihmĂ« nĂ« ndĂ«rtimin e softuerit nga disa depo, e zhvilluar pĂ«r projektin nsâ3. Bake mund tĂ« pĂ«rdoret pĂ«r tĂ« marrĂ« versionet nĂ« zhvillim tĂ« nsâ3, si dhe pĂ«r tĂ« shkarkuar dhe ndĂ«rtuar zgjerime tĂ« versionit bazĂ« tĂ« shpĂ«rndarjes nsâ3, siç Ă«shtĂ« mjedisi Ekzekutimi i Kodit tĂ« DrejtĂ«, CradleNetwork Simulation Cradle, mundĂ«sia pĂ«r tĂ« krijuar lidhje tĂ« reja Python dhe aplikacione tĂ« ndryshme" nsâ3.
Shënim
CradleNetwork Simulation Cradle â njĂ« framework qĂ« lejon pĂ«rdorimin e stekĂ«ve tĂ« vĂ«rtetĂ« TCP/IP brenda njĂ« simulatori rrjeti.
Nëse mendoni se instalimi juaj i ns-3 duhet të ketë funksione shtesë ose të avancuara, mund të ndiqni këtë rrugë instalimi.
Në versionet e fundit të ns-3 Bake është shtuar në publikimin tar. Në publikim është përfshirë një skedar konfigurimi, i cili lejon të shkarkoni versionet e softuerit që janë aktuale në momentin e krijimit të publikimit. Kështu, për shembull, versioni Bake, i cili shpërndahet me publikimin ns-3.29, mund të përdoret për të marrë komponentët për këtë publikim të ns-3 ose më herët, por nuk mund të përdoret për të nxjerrë komponentët për publikimet më vonë (nëse skedari i përshkrimit të paketës bakeconf.xml nuk është përditësuar).
Po ashtu, mund të merrni kopjen më të fundit të bake, duke futur komandën e mëposhtme në konsolën tuaj Linux (me kusht që të keni instaluar Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitNë momentin e ekzekutimit të komandës git, duhet të shihni diçka të tillë:
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.Pas përfundimit të komandës clone duhet të keni një katalog me emrin bake, përmbajtja e të cilit duhet të duket kështu:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOKujdes, se keni shkarkuar disa skenarĂ« Python, njĂ« modul Python me emrin bake dhe njĂ« skedar konfigurimi XML. Hapi tjetĂ«r do tĂ« jetĂ« pĂ«rdorimi i kĂ«tyre skenarĂ«ve pĂ«r tĂ« shkarkuar dhe ndĂ«rtuar distribuimin e nsâ3 sipas zgjedhjes suaj. Ka disa qĂ«llime konfigurimi:
nsâ3.29: modul qĂ« pĂ«rputhet me versionin; do tĂ« shkarkojĂ« komponentĂ«t e ngjashĂ«m me versionin nĂ« tarball;
nsâ3-dev: njĂ« modul i ngjashĂ«m, por duke pĂ«rdorur kodin nga struktura e zhvillimit;
ns-allinone-3.29: modul që përfshin veçori të tjera shtesë si ruter Click dhe Network Simulation Cradle, Openflow për ns-3.
nsâ3-allinone: ngjashĂ«m me versionin e modulit allinone, por pĂ«r kodin e zhvillimit.
Shënim
Click â arkitekturĂ« programore modulare pĂ«r ndĂ«rtimin e routerave.
Openflow është një protokoll i menaxhimit të procesit të përpunimit të të dhënave që kalojnë përmes rrjetit të transmetimit nga routerat dhe switch-at, duke zbatuar teknologjinë e rrjetit të programueshëm.
Snapshot-i aktual i zhvillimit (nuk Ă«shtĂ« botim) i nsâ3 mund tĂ« gjendet nĂ« adresĂ«n:.
Zhvilluesit përpiqen të mbajnë këto depo në një gjendje të mirë funksionimi, por ato janë në fazën e zhvillimit dhe përmbajnë kod jo të publikuar, prandaj nëse nuk planifikoni të përdorni karakteristika të reja, zgjidhni versionin zyrtar.
Mund tĂ« gjeni versionin mĂ« tĂ« fundit tĂ« kodit duke parĂ« listĂ«n e depo-ve ose duke kaluar nĂ« faqen e internetit "nsâ3 Releases": dhe duke klikuar nĂ« lidhjen e versionit mĂ« tĂ« fundit. NĂ« kĂ«tĂ« shembull do tĂ« vazhdojmĂ« me nsâ3.29.
Tani, pĂ«r tĂ« marrĂ« komponentĂ«t e nevojshĂ«m tĂ« nsâ3, do tĂ« aplikojmĂ« mjetin Bake. Le tĂ« themi disa fjalĂ« hyrĂ«se rreth funksionimit tĂ« Bake.
Bake punon duke ngarkuar burimet e pakove në direktorinë source dhe duke instaluar bibliotekat në direktorinë e ndërtimit. Bake mund të ekzekutohet duke iu referuar skedarit binar, por nëse dëshironi ta ekzekutoni Bake jo nga direktoria në të cilën është ngarkuar, është e preferueshme të shtoni rrugën në bake në rrugën tuaj (variablin e mjedisit PATH), për shembull, në këtë mënyrë (shembulli për shell-in Linux bash). Shkoni në direktorinë "bake", dhe më pas vendosni këto variabla mjedisi:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libKjo do të vendosë programin bake.py do t'ju ndihmojë të gjeni skedarët ekzekutivë dhe bibliotekat që krijuat bake. Në disa raste përdorimi bake, instalimi i PATH dhe PYTHONPATH sipas përshkrimit më lart nuk është i nevojshëm, por për ndërtimin e plotë të ns-3-allinone (me pakete shtesë) zakonisht nevojitet.
Shkoni në direktorinë e punës dhe shkruani në konsolë:
$ ./bake.py configure -e ns-3.29Më pas do të kërkojmë Bake të kontrollojmë nëse kemi mjaftueshëm mjete për të shkarkuar komponentët e ndryshëm. Shkruani:
$ ./bake.py checkDuhet të shihni diçka si më poshtë:
> 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 ...Në veçanti, mjetet e shkarkimit, si Mercurial, CVS, Git dhe Bazaar, janë thelbësore në këtë hap, pasi na lejojnë të marrim kodin. Në këtë fazë, instaloni mjetet që mungojnë në mënyrën standarde për sistemin tuaj (nëse e dini) ose kërkoni ndihmë nga administratorët tuaj të sistemit.
Më pas provoni të shkarkoni softuerin:
$ ./bake.py downloadrezultati duhet të jetë diçka si:
>> Kërkimi për varen sistemore setuptools - OK
>> Kërkimi për varen sistemore libgoocanvas2 - OK
>> Kërkimi për varen sistemore gi-cairo - OK
>> Kërkimi për varen sistemore pygobject - OK
>> Kërkimi për varen sistemore pygraphviz - OK
>> Kërkimi për varen sistemore python-dev - OK
>> Kërkimi për varen sistemore qt - OK
>> Kërkimi për varen sistemore g++ - OK
>> Shkarkimi i pybindgen-0.19.0.post4+ng823d8b2 (direktoria e targetit: pybindgen) - OK
>> Shkarkimi i netanim-3.108 - OK
>> Shkarkimi i ns-3.29 - OKKjo do të thotë se janë shkarkuar tri burime. Tani kaloni në direktorinë source dhe shkruani ls; duhet të shihni:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenTani jeni gati pĂ«r tĂ« ndĂ«rtuar distribucionin nsâ3.
3.4 Ndërtimi i ns-3
Ashtu si me shkarkimin e nsâ3, ka disa mĂ«nyra pĂ«r tĂ« ndĂ«rtuar nsâ3. E rĂ«ndĂ«sishme, duam tĂ« theksojmĂ« se nsâ3 ndĂ«rtohet me njĂ« mjet ndĂ«rtimi tĂ« quajtur Waf, i pĂ«rshkruar mĂ« poshtĂ«. Pjesa mĂ« e madhe e pĂ«rdoruesve do tĂ« punojnĂ« me Waf, por ka disa skenarĂ« tĂ« pĂ«rshtatshĂ«m qĂ« do t'ju ndihmojnĂ« tĂ« filloni ose tĂ« organizoni ndĂ«rtimet mĂ« tĂ« ndĂ«rlikuara. Prandaj, lutemi, para se tĂ« lexoni pĂ«r Waf, shikoni nĂ« build.py dhe ndĂ«rtimin me bake.
3.4.1 Ndërtimi me build.py
Kujdes! Ky hap i ndërtimit është i disponueshëm vetëm nga versioni i arkivuar i burimit, siç është përshkruar më lart; dhe jo i shkarkuar përmes git ose bake.
Kur punoni me arkivin e lĂ«shimit tarball, nĂ« nsâ3âallinone ka njĂ« skenar tĂ« pĂ«rshtatshĂ«m qĂ« mund tĂ« thjeshtojĂ« ndĂ«rtimin e komponentĂ«ve. Ai quhet build.py. Ky program do tĂ« konfigurojĂ« projektin pĂ«r ju nĂ« mĂ«nyrĂ«n mĂ« tĂ« dobishme. MegjithatĂ«, vini re se konfigurimet mĂ« tĂ« kompleksuara dhe puna me ns-3 zakonisht pĂ«rfshijnĂ« pĂ«rdorimin e sistemit tĂ« ndĂ«rtimit ns-3, Waf, i cili do tĂ« prezantohet mĂ« vonĂ« nĂ« kĂ«tĂ« udhĂ«zues.
Nëse keni bërë shkarkimin me anë të tarball, atëherë në direktorinë tuaj ~/workspace duhet të shfaqet një direktor me emrin diçka si ns-allinone-3.29. Shkruani në vijim:
$ ./build.py --enable-examples --enable-tests
Në thirrje build.py aplikuam argumentet e komandës në mënyrë që të ndërtojmë shembujt dhe testet që përdoren në këtë udhëzues, të cilat në ns-3 me defolt nuk ndodhin. Në mënyrë të paracaktuar, programi gjithashtu ndërtuon të gjithë modulet e disponueshme. Pastaj, nëse dëshironi, mund të ndërtoni ns-3 pa shembuj dhe teste ose të përjashtoni modulet që nuk ju nevojiten për punën tuaj.
Do të shihni shumë mesazhe dalëse të kompilerit, të shfaqura nga skripti gjatë ndërtimit të pjesëve të ndryshme që keni ngarkuar. Fillimisht, skripti do të përpiqet të ndërtojë animuesin netanim, pastaj gjeneruesin e lidhjeve. pybindgen dhe në fund, ns-3. Pas përfundimit të procesit, duhet të shihni sa vijon:
Waf: Duke lënë direktorin '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' përfundoi me sukses (6m25.032s)
Modulet e ndërtuara:
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 (pa Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (pa Python)
topology-read trafik-kontroll uan
virtual-net-device visualizer wave
wifi wimax
Modulet nuk janë ndërtuar (shihni tutorialin ns-3 për shpjegimin):
brite click openflow
Duke lënë direktorin ./ns-3.29Në tri rreshtat e fundit të listës, ne shohim një mesazh për modulet që nuk janë ndërtuar:
Modulet nuk janë ndërtuar (shihni tutorialin ns-3 për shpjegimin):
brite clickKjo thjesht do të thotë se disa module ns-3, të cilat varen nga bibliotekat e jashtme, ndoshta nuk janë ndërtuar, ose që për këtë konfigurim ndërtimi i tyre nuk kërkohet. Kjo nuk do të thotë se simulatori nuk u ndërtua ose se modulet e ndërtuara do të funksionojnë gabim.
3.4.2 Ndërtimi me Bake
Nëse keni përdorur bake për të marrë kodin burimor nga depozitë e projektit, mund të vazhdoni ta përdorni atë për të ndërtuar ns-3. Shkruani:
$ ./bake.py builddhe duhet të shihni diçka si:
>> Ndërtimi i pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Ndërtimi i netanim-3.108 - OK
>> Ndërtimi i ns-3.29 - OKKëshillë: gjithashtu mund të realizoni të dy hapet njëherësh, shkarkimin dhe ndërtimin, duke thirrur "bake.py deploy".
Gjatë ndërtimit të të gjitha komponentëve, mund të ketë dështime, por ndërtimi do të vazhdojë nëse komponenti nuk është thelbësor. Për shembull, një problem i fundit me portimin është se castxml mund të ndërtohet nga mjeti bake në të gjitha platformat. Në këtë rast do të shfaqet një mesazh si:
>> Ndërtimi i castxml - Problem
> Problem: Varësia opcionale, moduli "castxml" dështoi
Kjo mund të reduktojë funksionalitetin e ndërtimit përfundimtar.
Sidoqoftë, bake do të vazhdojë pasi "castxml" nuk është një varësi thelbësore.
Për më shumë informacion thirrni bake me -v ose -vvv, për modalitetin e plotë verbose.Megjithatë castxml nevojitet vetëm në rast se dëshironi të krijoni lidhjet e përditësuara Python. Për shumicën e përdoruesve, nuk ka nevojë për këtë (të paktën deri sa të fillojnë të ndryshojnë ns-3), prandaj paralajmërimet e tilla për momentin mund të injorohen me siguri.
Në rast se ndodh një gabim, komandat e mëposhtme do t'ju japin një udhëzim mbi varësitë që mungojnë:
$ ./bake.py showDo të listohen varësitë e ndryshme të paketave që po përpiqeni të grumbulloni.
3.4.3 Ndërtimi me Waf
Derisa tĂ« arrijmĂ« kĂ«tu, pĂ«r tĂ« filluar grumbullimin e nsâ3, ne kemi pĂ«rdorur ose skenarin build.py, ose mjetin bake. KĂ«ta mjete janĂ« tĂ« dobishme pĂ«r grumbullimin e nsâ3 dhe pĂ«r mbĂ«shtetje tĂ« bibliotekave. NĂ« fakt, pĂ«r grumbullim ata ekzekutojnĂ« mjetin e grumbullimit Waf nga direktoria nsâ3. Waf instalohet sĂ« bashku me kodin burimor tĂ« nsâ3. Shumica e pĂ«rdoruesve, pĂ«r tĂ« konfiguruar dhe grumbulluar nsâ3, shpejt kalojnĂ« nĂ« pĂ«rdorimin e drejtpĂ«rdrejtĂ« tĂ« Waf. Pra, pĂ«r tĂ« vazhduar, ju lutemi kaloni nĂ« direktorinĂ« nsâ3 qĂ« e keni krijuar fillimisht.
Aktualisht nuk është e nevojshme, por do të ishte e dobishme të bëni një shkëputje të vogël dhe të shikoni se si të bëni ndryshime në konfigurimin e projektit. Ndoshta ndryshimi më i dobishëm i konfigurimit që mund të bëni do të ishte krijimi i një versioni të optimizuar të kodit. Sipas parazgjedhjes, ju keni konfiguruar projektin tuaj për të ndërtuar versionin debug. Le të shqyrtojmë projektin për të krijuar një ndërtim të optimizuar. Për t'i shpjeguar Waf-it se duhet të krijojë ndërtime të optimizuara, duke përfshirë shembuj dhe teste, do t'ju duhet të ekzekutoni komandat e mëposhtme:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-testsKjo do të nxisë Waf jashtë direktorisë lokale (për lehtësinë tuaj). Komanda e parë kryen pastrimin e ndërtimit të mëparshëm, ajo zakonisht nuk është rigorozisht e nevojshme, por është një praktikë e mirë (shihni gjithashtu profilin e ndërtimit më poshtë); kjo do të fshijë bibliotekat dhe skedat objekt që janë krijuar më parë në direktorinë build/. Kur projekti të rimarrë konfigurimin dhe sistemi i ndërtimit të kontrollojë varësitë e ndryshme, duhet të shihni një dalje të ngjashme me këtë:
Cakto lartësinë në : /home/ns3user/workspace/bake/source/ns-3-dev
Cakto rezultatin në : /home/ns3user/workspace/bake/source/ns-3-dev/build
Kontrollimi për 'gcc' (kompiluesi C) : /usr/bin/gcc
Kontrollimi për versionin e cc : 7.3.0
Kontrollimi për 'g++' (kompiluesi C++) : /usr/bin/g++
Kontrollimi për mbështetje të flamurit të kompilimit -march=native : ok
Kontrollimi për mbështetje të flamurit të kompilimit -Wl,--soname=foo : ok
Kontrollimi për mbështetje të flamurit të kompilimit -std=c++11 : ok
Kontrollimi për përfshirjet e boost : titujt nuk u gjetën, ju lutemi, sigurohuni që të ofroni një argument --boost-includes (shihni ndihmën)
Kontrollimi për përfshirjet e boost : titujt nuk u gjetën, ju lutemi, sigurohuni që të ofroni një argument --boost-includes (shihni ndihmën)
Kontrollimi për programin 'python' : /usr/bin/python
Kontrollimi për versionin e python >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Kërkesa për python-config për flamujt pyembed '--cflags --libs --ldflags' : po
Testimi i konfigurimit të pyembed : po
Kërkesa për python-config për flamujt pyext '--cflags --libs --ldflags' : po
Testimi i konfigurimit të pyext : po
Kontrollimi për mbështetje të flamurit të kompilimit -fvisibility=hidden : ok
Kontrollimi për mbështetje të flamurit të kompilimit -Wno-array-bounds : ok
Kontrollimi për vendndodhjen e pybindgen : ../pybindgen ,!(e supozuar)
Kontrollimi për modul python 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Kontrollimi për versionin e pybindgen : 0.19.0. ,!post4+g823d8b2
Kontrollimi për copë kodi : po
Kontrollimi për ekuivalencën e llojeve uint64_t dhe unsigned long : jo
Kontrollimi për copë kodi : jo
Kontrollimi për ekuivalencën e llojeve uint64_t dhe unsigned long long : po
Kontrollimi për apidef që mund të përdoren për lidhje Python : gcc-LP64
Kontrollimi për cxxabi të brendshëm GCC : përfunduar
Kontrollimi për modul python 'pygccxml' : nuk u gjet
Kontrollimi për vendndodhjen e click : nuk u gjet
Kontrollimi për programin 'pkg-config' : /usr/bin/pkg- ,!config
Kontrollimi për 'gtk+-3.0' : nuk u gjet
Kontrollimi për 'libxml-2.0' : po
kontrollimi për uint128_t : nuk u gjet
kontrollimi për __uint128_t : po
Kontrollimi për implementim me precizion të lartë : integer 128-bit ,!(default)
Kontrollimi për titullin stdint.h : po
Kontrollimi për titullin inttypes.h : po
Kontrollimi për titullin sys/inttypes.h : nuk u gjet
Kontrollimi për titullin sys/types.h : po
Kontrollimi për titullin sys/stat.h : po
Kontrollimi për titullin dirent.h : po
Kontrollimi për titullin stdlib.h : po
Kontrollimi për titullin signal.h : po
Kontrollimi për titullin pthread.h : po
Kontrollimi për titullin stdint.h : po
Kontrollimi për titullin inttypes.h : po
Kontrollimi për titullin sys/inttypes.h : nuk u gjet
Kontrollimi për bibliotekën rt : po
Kontrollimi për titullin sys/ioctl.h : po
Kontrollimi për titullin net/if.h : po
Kontrollimi për titullin net/ethernet.h : po
Kontrollimi për titullin linux/if_tun.h : po
Kontrollimi për titullin netpacket/packet.h : po
Kontrollimi për vendndodhjen e NSC : nuk u gjet
Kontrollimi për 'sqlite3' : nuk u gjet
Kontrollimi për titullin linux/if_tun.h : po
Kontrollimi për modul python 'gi' : 3.26.1
Kontrollimi për modul python 'gi.repository.GObject' : ok
Kontrollimi për modul python 'cairo' : ok
Kontrollimi për modul python 'pygraphviz' : 1.4rc1
Kontrollimi për modul python 'gi.repository.Gtk' : ok
Kontrollimi për modul python 'gi.repository.Gdk' : ok
Kontrollimi për modul python 'gi.repository.Pango' : ok
Kontrollimi për modul python 'gi.repository.GooCanvas' : ok
Kontrollimi për programin 'sudo' : /usr/bin/sudo
Kontrollimi për programin 'valgrind' : nuk u gjet
Kontrollimi për 'gsl' : nuk u gjet python-config : nuk u gjet
Kontrollimi për mbështetje të flamurit të kompilimit -fstrict-aliasing : ok
Kontrollimi për mbështetje të flamurit të kompilimit -fstrict-aliasing : ok
Kontrollimi për mbështetje të flamurit të kompilimit -Wstrict-aliasing : ok
Kontrollimi për mbështetje të flamurit të kompilimit -Wstrict-aliasing : ok
Kontrollimi për programin 'doxygen' : /usr/bin/doxygen
---- Përmbledhja e veçorive opsionale të ns-3:
Profil i ndërtimit : i optimizuar
Direktori e ndërtimit :
Integrimi i BRITE : nuk është aktivizuar (BRITE nuk është aktivizuar (shihni opsionin --with- ,!brite))
Mbledhja e ngjarjeve të metrike të DES : nuk është aktivizuar (duke u paraparë që është çaktivizuar)
Emulimi FdNetDevice : i aktivizuar
Shembuj : të aktivizuar
File descriptor NetDevice : i aktivizuar
Biblioteka Shkencore GNU (GSL) : nuk është aktivizuar (GSL nuk u gjet)
Biblioteka Gcrypt : nuk është aktivizuar
(libgcrypt nuk u gjet: mund të përdorni ,!libgcrypt-config për të gjetur vendndodhjen e tij.) GtkConfigStore : nuk është aktivizuar (biblioteka 'gtk+-3.0 >= 3.0' nuk u gjet)
Mbështetje MPI : nuk është aktivizuar (opsioni --enable-mpi nuk është përzgjedhur)
Integrimi i ns-3 Click : nuk është aktivizuar (nsclick nuk është aktivizuar (shihni opsionin --with- ,!nsclick))
Integrimi i ns-3 OpenFlow : nuk është aktivizuar (Bibliotekat e nevojshme të boost nuk u gjetën)
Krahina e Simulimit të Rrjetit : nuk është aktivizuar (NSC nuk u gjet (shihni opsionin --with-nsc))
PlanetLab FdNetDevice : nuk është aktivizuar (sistemi operativ PlanetLab nuk u zbulua ,!(shihni opsionin --force-planetlab)) PyViz vizualizuesi : i aktivizuar
Mbështetje për Skemat API në Python : nuk është aktivizuar (Moduli 'pygccxml' i humbur)
Lidhjet Python : të aktivizuara
Simuluesi në Kohë Reale : i aktivizuar
Nxjerrja e të dhënave statistikore SQlite : nuk është aktivizuar (biblioteka 'sqlite3' nuk u gjet)
Tap Bridge : i aktivizuar
Tap FdNetDevice : i aktivizuar
Teste : të aktivizuara
Primitivat e Threading : të aktivizuara
Përdor sudo për të vendosur bitin suid : nuk është aktivizuar (opsioni --enable-sudo nuk është përzgjedhur)
XmlIo : i aktivizuar
'configure' përfundoi me sukses (6.387s)Kujdesi në pjesën e fundit të listës së mësipërme. Disa opsione ns-3 nuk janë përfshirë në mënyrë të paracaktuar apo kërkojnë mbështetje nga sistemi për të funksionuar siç duhet. Për shembull, për të aktivizuar XmlTo, biblioteka libxml-2.0duhet të jetë e pranishme në sistem. Nëse kjo bibliotekë nuk u gjet dhe funksioni përkatës ns-3 nuk ishte aktivizuar, atëherë një mesazh do të shfaqej. Gjithashtu, vini re se ka mundësinë për të përdorur komandën sudo për të vendosur bitin suid «vendosja e ID grupit në kohë ekzekutimi» për disa programe. Ai nuk është aktivizuar si parazgjedhje, dhe prandaj kjo funksionalitet shfaqet si «nuk është aktivizuar» («not enabled»). Së fundi, për të marrë një listë të opsioneve të aktivizuara, përdorni Waf me parametrin --check-config.
Tani le të kthehemi dhe të kthehemi në ndërtimin për debug, i cili përmban shembuj dhe teste.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-testsSistemi i ndërtimit tani është konfiguruar, dhe mund të ndërtoni versionet për debug të programeve ns-3, thjesht duke shkruar:
$ ./wafNjëherë le të mendoni se hapat e përmendur më sipër ju bënë të ndiheni se keni ndërtuar një pjesë të sistemit ns-3 dy herë, por tani e dini se si të ndryshoni konfigurimin dhe të ndërtoni kodin e optimizuar.
Për të verifikuar se cila profil është aktiv për këtë konfigurim projekti, ekziston komanda:
$ ./waf --check-profile
Waf: Duke hyrë në direktorinë `/path/to/ns-3-allinone/ns-3.29/build'
Profil ndërtimi: debugSkema e shqyrtuar më lart build.py po ashtu mbështet argumentet --enable-examples dhe --enable-tests, por opsionet e tjera Waf ai nuk i mbështet drejtpërdrejt. Për shembull, kjo nuk do të funksionojë:
$ ./build.py --disable-pythonreagimi do të jetë:
build.py: error: no such option: --disable-pythonMegjithatë, operatori special -- mund të përdoret për të kaluar parametra shtesë përmes waf, prandaj në vend të asaj që përmenda më lart, do të funksionojë komanda e mëposhtme:
$ ./build.py -- --disable-pythonpasi ajo gjeneron komandën kryesore ./waf configure --disable-python. Ja disa këshilla të tjera hyrëse në lidhje me Waf.
Trajtimi i gabimeve të ndërtimit
Lëshimet e ns-3 janë testuar në kompajlerët më të fundit C++, të disponueshëm në momentin e publikimit në distribucione të njohura Linux dhe MacOS. Megjithatë, me kalimin e kohës, dalin distribucione të reja me kompajlerë të rinj, dhe këta kompajlerë më të rinj janë zakonisht më të ndjeshëm ndaj paralajmërimeve. ns-3 e konfiguroni ndërtimin e saj për të trajtuar të gjitha paralajmërimet si gabime, kështu që ndonjëherë, nëse përdorni një version më të vjetër në një sistem më të ri, një paralajmërim i kompajlerit mund ta ndalojë ndërtimin.
Për shembull, më parë ishte një lëshim ns-3.28 për Fedora 28, e cila përfshinte një version të ri madhor. gcc (gcc-8). Ndërtimi i lëshimit ns-3.28 ose versioneve më të hershme nën Fedora 28, me Gtk2+ të instaluar, do të shkaktojë një gabim të tillë:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of â__gtk_reserved1â [-Werror=parentheses] void (*__gtk_reserved1);NĂ« lĂ«shimet qĂ« fillojnĂ« me ns-3.28.1, Waf Ă«shtĂ« nĂ« dispozicion njĂ« opsion pĂ«r tĂ« zgjidhur kĂ«to probleme. Ai çaktivizon vendosjen e flagut "-Werror" nĂ« g++ dhe clang++. Ky Ă«shtĂ« opsioni "--disable-werror", dhe duhet tĂ« aplikohet gjatĂ« konfigurimit:
$ ./waf configure --disable-werror --enable-examples --enable-testsKonfiguro ose ndërtosh
Disa komanda Waf kanë kuptim vetëm në fazën e konfigurimit, dhe disa veprojnë vetëm në fazën e ndërtimit. Për shembull, nëse dëshironi të përdorni funksionet e emulimit ns-3, mund të aktivizoni instalimin e bitit suid duke përdorur sudo, siç përshkruhet më sipër. Kjo do të anullojë urdhërat e fazës së konfigurimit, kështu që do të mund të ndryshoni konfigurimin duke përdorur komandën në vazhdim, e cila gjithashtu përfshin shembuj dhe teste.
$ ./waf configure --enable-sudo --enable-examples --enable-testsNëse e bëni këtë, Waf do të ekzekutojë sudo, për të ndryshuar programet e ndërtimit të kodit të emulimit për të ekzekutuar me të drejta root. Në Waf ka shumë mundësi të tjera për fazat e konfigurimit dhe ndërtimit. Për të eksploruar opsionet, shkruani:
$ ./waf --helpNë seksionin në vazhdim, do të përdorim disa opsione të lidhura me testimin.
Profillet e ndërtimit
Ne tashmë kemi parë se si të konfigurojmë Waf për ndërtime debug dhe optimizuar:
$ ./waf --build-profile=debugPërveç kësaj, ka një profil ndërtimi të ndërmjetëm, release. Opcioni -d është sinonim i --build-profile. Profili i ndërtimit menaxhon përdorimin e regjistrimit, pohimeve (assertions) dhe çelësave të optimizimit të kompilatorit:

Si mund të shihet, regjistrimi dhe konfirmimet janë të disponueshme vetëm në ndërtimet e shkëputura. Praktika më e rekomanduar është të zhvilloni skenarin tuaj në modin e shkëputjes, pastaj të kryeni përsëritje (për statistika ose ndryshime parametrash) në profilin e ndërtimit të optimizuar.
Nëse keni kod që duhet të ekzekutohet vetëm në profile të caktuar ndërtimi, përdorni makron Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "Pjesa e një rreshti daljeje..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Përfunduar: " << timer << std::endl;)Nga e drejta, Waf vë artefaktet e ndërtimit në direktorinë e ndërtimit. Mund të specifikoni një direktori tjetër dalëse me opsionin - out, për shembull:
$ ./waf configure --out=my-build-dirDuke kombinuar këtë me profile të ndërtimit, mund të kaloni lehtësisht mes opsioneve të ndryshme të kompilimit:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...Kjo ju lejon të punoni me disa ndërtime, pa e shkruar për herë të fundit ndërtimin. Kur kaloni në një profil tjetër, Waf do të kompiloni vetëm atë, pa e ripërpiluar tërësisht gjithçka.
Kur aktivizoni profilet e ndërtimit në këtë mënyrë, është e nevojshme të siguroheni që çdo herë të ofroni parametrat e njëjtë të konfigurimit. Përcaktimi i disa variablave të ambientit do t'ju ndihmojë të shmangi gabimet:
$ 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 buildKompilatorët dhe flamujt
Në shembujt e mësipërm Waf për ndërtimin e ns-3 përdor kompilatorin C++ nga GCC ( g++). Megjithatë, mund të ndryshoni kompilatorin C++ të përdorur, duke përcaktuar variablin e ambientit CXX. Për shembull, për të përdorur kompilatorin C++ Clang, clang++, Waf $ CXX="clang++" ./waf configure $ ./waf build
Po ashtu, mund të konfiguroni për të përdorur kompilimin e shpërndarë me Waf distcc $ CXX="distcc g++" ./waf configure $ ./waf build:
Informacione mĂ« tĂ« detajuara rreth distcc dhe kompilimit tĂ« shpĂ«rndarĂ« mund tĂ« gjenden nĂ« faqen e projektit nĂ« seksionin "Dokumentacioni". PĂ«r tĂ« shtuar flamujt e kompilatorit gjatĂ« konfigurimit tĂ« ns-3, pĂ«rdorni variablin e ambientit CXXFLAGS_EXTRA.ĐĐŸĐ»Đ”Đ” ĐżĐŸĐŽŃĐŸĐ±ĐœŃŃ ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ distcc Đž ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐč ĐșĐŸĐŒĐżĐžĐ»ŃŃОО ĐŒĐŸĐ¶ĐœĐŸ ĐœĐ°ĐčŃĐž ĐœĐ° ŃŃŃĐ°ĐœĐžŃĐ” ĐżŃĐŸĐ”ĐșŃа ĐČ ŃазЎДлД «ĐĐŸĐșŃĐŒĐ”ĐœŃаŃОѻ. ЧŃĐŸĐ±Ń ĐżŃĐž ĐșĐŸĐœŃОгŃŃĐžŃĐŸĐČĐ°ĐœĐžĐž nsâ3 ĐŽĐŸĐ±Đ°ĐČĐžŃŃ ŃлагО ĐșĐŸĐŒĐżĐžĐ»ŃŃĐŸŃа, ĐžŃĐżĐŸĐ»ŃĐ·ŃĐčŃĐ” пДŃĐ”ĐŒĐ”ĐœĐœŃŃ ŃŃĐ”ĐŽŃ CXXFLAGS_EXTRA .
Instalimi
Waf mund të përdoret për instalimin e bibliotekave në vende të ndryshme të sistemit. Nga ana tjetër, bibliotekat dhe skedarët e ekzekutimit të ndërtuar ndodhen në katalogun ndërto, dhe pasi Waf e di vendndodhjen e këtyre bibliotekave dhe skedarëve të ekzekutimit, nuk ka nevojë të instaloni bibliotekat diku tjetër.
Nëse përdoruesit preferojnë instalimin jashtë katalogut të ndërtimit, ata mund të ekzekutojnë komandën ./waf install. Nga ana tjetër, prefiksi për instalim është /usr/local, prandaj ./waf install do të instalojë programet në /usr/local/bin, bibliotekat në /usr/local/lib dhe skedarët e titujve në /usr/local/include. Përdorimi i privilegjeve të superpërdoruesit zakonisht është e nevojshme për të instaluar me prefiksin e paracaktuar, prandaj komanda tipike do të jetë sudo ./waf install. Gjatë ekzekutimit, Waf së pari do të preferojë të përdorë bibliotekat e zakonshme në katalogun e ndërtimit, pastaj do të kërkojë bibliotekat sipas rrugës së bibliotekave të cilat janë konfiguruar në mjedisin lokal. Pra, kur instaloni bibliotekat në sistem, është një praktikë e mirë të verifikoni që bibliotekat e duhura po përdoren. Përdoruesit mund të zgjedhin instalimin me një prefiks tjetër duke kaluar gjatë konfigurimit opsionin --prefix, për shembull:
./waf configure --prefix=/opt/localNëse më vonë, pas ndërtimit, përdoruesi fut komandën e instalimit ./waf, do të përdoret prefiksi /opt/local.
Ekipa ./waf clean duhet të përdoret para ripërshtatjes së projektit, nëse për instalim do të përdoret Waf me një prefiks tjetër.
Pra, pĂ«r tĂ« pĂ«rdorur nsâ3, nuk Ă«shtĂ« e nevojshme tĂ« thĂ«rrisni ./waf install. ShumicĂ«s sĂ« pĂ«rdoruesve, kjo komandĂ« nuk do t'u nevojitet, sepse Waf do tĂ« kapĂ« bibliotekat aktuale nga direktoria e ndĂ«rtimit, por disa pĂ«rdorues mund ta gjejnĂ« tĂ« dobishme, nĂ«se aktiviteti i tyre pĂ«rfshin punĂ«n me programe jashtĂ« direktorisĂ« nsâ3.
Waf është një
NĂ« nivelin mĂ« tĂ« lartĂ« tĂ« pemĂ«s sĂ« kodit burimor nsâ3, ekziston njĂ« skenar i vetĂ«m Waf. Pasi tĂ« filloni punĂ«n, do tĂ« kaloni shumĂ« kohĂ« nĂ« direktorinĂ« scratch/ ose mĂ« thellĂ«, nĂ«src/... dhe gjatĂ« kĂ«saj do tĂ« keni nevojĂ« tĂ« ekzekutoni Waf. Thjesht mund tĂ« mbani mend ku jeni, dhe tĂ« ekzekutoni Waf si nga:
$ ../../../waf ...por do tĂ« jetĂ« e mĂ«rzitshme dhe e prirur pĂ«r gabime, kĂ«shtu qĂ« ekzistojnĂ« zgjidhje mĂ« tĂ« mira. NjĂ« nga mĂ«nyrat e zakonshme Ă«shtĂ« pĂ«rdorimi i njĂ« redaktori teksti, si emacs ose vim, nĂ« tĂ« cilin hapen dy seanca terminali, njĂ«ra pĂ«rdoret pĂ«r ndĂ«rtimin e nsâ3, ndĂ«rsa tjetra pĂ«r redaktimin e kodit burimor. NĂ«se keni vetĂ«m tarball, atĂ«herĂ« variable ambientale mund tĂ« ndihmojĂ«:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff buildNë direktoriumin e modulit mund të duket joshëse të shtoni një skenar të thjeshtë waf sipas shembullit exec ../../waf. Ju lutem, mos e bëni këtë. Kjo ngatërron fillestarët dhe, nëse nuk kryhet mirë, çon në gabime të ndërlikuara ndërtimi. Zgjidhjet e të cilave ju tregova janë rruga që duhen ndjekur.
3.5 Testimi i ns-3
Ju mund tĂ« kryeni testet modulin e shpĂ«rndarjes nsâ3 duke e ekzekutuar skriptin ./test.py:
$ ./test.pyKëta teste ekzekutohen paralelisht me Waf. Në fund, duhet të shihni një mesazh që thotë se
92 nga 92 teste kaluan (92 kaluan, 0 dështuan, 0 ranë, 0 gabime valgrind)Ky është një mesazh i rëndësishëm për identifikimin e dështimeve, rënieve, ose gabimeve valgrind, që tregon për probleme me kodin ose papajtueshmëri midis veglave dhe kodit.
Do të shihni gjithashtu përfundim nga Waf dhe testuesi që ekzekuton çdo provë, që do të duket diçka si:
Waf: Po hy in dosjen `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Po daljen nga dosja `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'ndërtimi' përfundoi me sukses (1.799s)
Modulet e ndërtuara:
aodv aplikacionet ura
klik magazina-konfigurimi bërthamë
csma dispozita-csma dsdv
emu energji monitorimi-i-fluksit
internet lte rrjet
mobiliteti mpi netanim
rrjeti nix-vector-routing ns3tcp
ns3wifi olsr openflow
pikë-pikë pikë-pikë-ndërtimi përhapje
spektri statistika tap-bridge
të templatuara test mjetet
topologji-lexo uan pajisje-virtuale-rrjeti
vizualizues wifi wimax
KALUAR: Testi ns3-wifi-interference
KALUAR: Testi histogram
...
KALUAR: Testi objekt
KALUAR: Testi gjenerues-numra-rashtor
92 nga 92 testet kaluan (92 kaluan, 0 dështuan, 0 u çaktivizua, 0 gabime valgrind)
Ky komandë zakonisht ekzekutohet nga përdoruesit për të verifikuar shpejt saktësinë e ndërtimit të shpërndarjes ns-3. (Vini re se rendi i rreshtave "KALUAR: ..." mund të ndryshojë, kjo është normale. E rëndësishme është që në rreshtin përfundimtar në fund të raportit të gjitha verifikimet janë kaluar; asnjë test nuk përfundoi me dështim ose u çaktivizua.) Dhe Waf, dhe test.py do të paralelizojnë punën në bërthamët e disponueshme të procesorit të makinës.
3.6 Ekzekutimi i skriptit
Zakonisht ne e ekzekutojmĂ« skenarin nĂ«n mbikĂ«qyrje Waf. Kjo lejon sistemin e ndĂ«rtimit tĂ« garantojĂ« qĂ« rrugĂ«t ndaj bibliotekĂ«s sĂ« pĂ«rbashkĂ«t janĂ« tĂ« vendosura saktĂ« dhe qĂ« bibliotekat janĂ« tĂ« disponueshme gjatĂ« ekzekutimit. PĂ«r tĂ« ekzekutuar programin, thjesht pĂ«rdorni Waf me parametrin -âŻekzekuto. Do tĂ« ekzekutojmĂ« pĂ«r nsâ3 ekuivalentin e programit univers.al hello world, duke shkruar kĂ«tĂ«:
$ ./waf --run hello-simulatorWaf së pari do të verifikojë se programi është ndërtuar saktë, dhe nëse është e nevojshme, do të kryejë ndërtimin. Më pas Waf do të ekzekutojë programin që do të prodhojë këtë dalje.
Hello SimulatorPĂ«rshĂ«ndetje! Tani ju jeni njĂ« pĂ«rdorues i nsâ3!
ĂfarĂ« duhet tĂ« bĂ«j nĂ«se nuk e shoh rezultatin?
NĂ«se shihni mesazhe Waf, tĂ« cilat tregojnĂ« se ndĂ«rtimi u pĂ«rfundua me sukses, por nuk e shihni daljen «Hello Simulator», atĂ«herĂ« ka njĂ« mundĂ«si qĂ« keni kaluar nĂ« seksionin [NdĂ«rtimi-me-Waf] dhe keni kaluar pa u kthyer nĂ« modin optimizuar. debug. TĂ« gjitha daljet e konsolĂ«s qĂ« pĂ«rdoren nĂ« kĂ«tĂ« udhĂ«zues pĂ«rdorin njĂ« komponent tĂ« veçantĂ« nsâ3, i cili pĂ«rmban regjistrimin e logjeve dhe aplikohet pĂ«r tĂ« printuar mesazhe pĂ«rdoruesi nĂ« konsolĂ«. Dalja nga ky komponent automatikisht Ă«shtĂ« e çaktivizuar kur kompiloni kodin e optimizuar â ai Ă«shtĂ« "i optimizuar". NĂ«se nuk e shihni daljen "Hello Simulator", shkruani tĂ« following:
$ ./waf configure --build-profile=debug --enable-examples --enable-testspĂ«r ta konfiguruar Waf pĂ«r ndĂ«rtimin e versioneve tĂ« debuguara tĂ« programeve nsâ3, tĂ« cilat pĂ«rfshijnĂ« shembuj dhe teste. MĂ« pas duhet tĂ« rindĂ«rtoni versionin aktual tĂ« debuguar tĂ« kodit, duke shkruar:
$ ./wafTani, nëse e filloni programin hello-simulator, duhet të shihni rezultatet e pritshme.
3.6.1 Argumentet e komandës
PĂ«r tĂ« kaluar argumentet e komandĂ«s nĂ« programin nsâ3, pĂ«rdorni kĂ«tĂ« model:
$ ./waf --run --command-template="%s "ZĂ«vendĂ«soni me emrin e programit tuaj dhe me argumentet. Argumenti -âŻ-command-template pĂ«r Waf Ă«shtĂ«, nĂ« esencĂ«, njĂ« recetĂ« pĂ«r ndĂ«rtimin e komandĂ«s aktuale. Waf pĂ«rdorur pĂ«r ekzekutimin e programit. Waf kontrollon qĂ« ndĂ«rtimi tĂ« pĂ«rfundojĂ«, vendos rrugĂ«t pĂ«r bibliotekat e pĂ«rbashkĂ«ta dhe pastaj, duke pĂ«rdorur modelin e dhĂ«nĂ« tĂ« komandĂ«s dhe duke zĂ«vendĂ«suar emrin e programit me vend shkarkuesin %s, thĂ«rret skedarin ekzekutues. NĂ«se ky sintaksĂ« ju duket e ndĂ«rlikuar, ekziston njĂ« variant mĂ« i thjeshtĂ« qĂ« pĂ«rfshin programin nsâ3 dhe argumentet e tij tĂ« mbyllura nĂ« thonjĂ«za tĂ« vetme:
$ ./waf --run ' --arg1=value1 --arg2=value2 ...'Një shembull tjetër, veçanërisht i dobishëm, është ekzekutimi selektiv i grupeve të testeve. Supozojmë se ekziston një grup testi (suite) mytest (në të vërtetë nuk ekziston). Më lart, ne përdorëm skriptin ./test.py për të ekzekutuar një sërë testesh në mënyrë paralele, i cili thërret shumë herë programin e testimit test-runner. Thirrja test-runner drejt për ekzekutimin e një testi:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"Argumentet do të kalohen programit test-runner. Duke qenë se mytest nuk ekziston, do të gjenerohet një mesazh gabimi. Për të printuar parametrat e disponueshëm të test-runner shkruani:
$ ./waf --run test-runner --command-template="%s --help"3.6.2 Debugging
PĂ«r tĂ« nisur programet nsâ3 nĂ«n njĂ« utilitar tjetĂ«r, siç Ă«shtĂ« debuggueri (p.sh., gdb) ose mjeti i verifikimit tĂ« memories (p.sh., valgrind), pĂ«rdorni njĂ« formĂ« tĂ« ngjashme -âŻ-command-template = "âŠ". PĂ«r shembull, pĂ«r tĂ« nisur nĂ« debugguer gdb programin tuaj hello-simulator nsâ3 me argumentet:
$ ./waf --run=hello-simulator --command-template="gdb %s --args "Vini re se emri i programit nsâ3 vjen me argumentin -âŻekzekuto, dhe utilitari i menaxhimit (kĂ«tu gdb) Ă«shtĂ« tokeni i parĂ« nĂ« argumentin -âŻ-command-template. Opcioni -âŻ-args raporton gdb, qĂ« pjesa tjetĂ«r e komandĂ«s i pĂ«rket programit 'tĂ« ulĂ«t'. (Disa versione gdb nuk e kuptojnĂ« opsionin -âŻ-args. NĂ« kĂ«tĂ« rast hiqni argumentet e programit nga -âŻ-command-template dhe pĂ«rdorni grupin e komanduara gdb args. Ne mund tĂ« bashkojmĂ« kĂ«tĂ« recetĂ« dhe tĂ« mĂ«parshmen pĂ«r tĂ« nisur testen nĂ«n debugguer:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Drejtoria e punës
Waf duhet tĂ« nisĂ« nga pozita e saj nĂ« majĂ« tĂ« pemĂ«s nsâ3. Kjo dosje bĂ«het direktorija e punĂ«s ku do tĂ« shkruhen skedarĂ«t e daljes. Por çfarĂ« tĂ« bĂ«ni nĂ«se dĂ«shironi tĂ« ruani kĂ«to skedarĂ« jashtĂ« pemĂ«s sĂ« kodit burimor nsâ3? PĂ«rdorni argumentin -âŻ-cwd:
$ ./waf --cwd=...Mund të jetë më e lehtë të merrni skedarët e daljes në direktorinë tuaj të punës. Në këtë rast, një veprim i tillë i tërthortë mund të ndihmojë:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}Dekorimi i tillĂ« i versionit tĂ« mĂ«parshĂ«m tĂ« komandĂ«s ruan direktorinĂ« aktuale tĂ« punĂ«s, kalon nĂ« direktorinĂ« Waf, dhe mĂ« pas udhĂ«zon Waf pĂ«r tĂ« ndryshuar direktorinĂ« e punĂ«s pĂ«rsĂ«ri nĂ« atĂ« tĂ« ruajtur pĂ«rpara se tĂ« ekzekutohet programa aktuale. Ne e pĂ«rmendim komandĂ«n -âŻ-cwd nĂ« interes tĂ« plotĂ«sisĂ«, shumica e pĂ«rdoruesve thjesht ekzekutojnĂ« Waf nga direktoria e niveleve tĂ« larta dhe atje gjenerojnĂ« skedarĂ«t e daljes.
Burimi: habr.com
