Mënyra e përdorimit të simuluesit të rrjetit ns-3. Kaptina 3

Mënyra e përdorimit të simuluesit të rrjetit ns-3. Kaptina 3
kapitujt 1,2

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: https://www.nsnam.org/wiki/Installation.

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: https://www.nsnam.org, 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.py

Tani 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 https://gitlab.com/nsnam/. 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.py

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

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

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

Në 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 TODO

Kujdes, 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:

  1. ns‑3.29: modul qĂ« pĂ«rputhet me versionin; do tĂ« shkarkojĂ« komponentĂ«t e ngjashĂ«m me versionin nĂ« tarball;

  2. ns‑3-dev: njĂ« modul i ngjashĂ«m, por duke pĂ«rdorur kodin nga struktura e zhvillimit;

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

  4. 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:https://gitlab.com/nsnam/ns-3-dev.git.

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":https://www.nsnam.org/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/lib

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

Më 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 check

Duhet 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 download

rezultati 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 - OK

Kjo 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 pybindgen

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

Në 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                     click

Kjo 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 build

dhe 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 - OK

Kë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 show

Do 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-tests

Kjo 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-tests

Sistemi i ndërtimit tani është konfiguruar, dhe mund të ndërtoni versionet për debug të programeve ns-3, thjesht duke shkruar:

$ ./waf

Një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: debug

Skema 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-python

reagimi do të jetë:

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

Megjithatë, 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-python

pasi 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-tests

Konfiguro 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-tests

Në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 --help

Në 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=debug

Pë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:

Mënyra e përdorimit të simuluesit të rrjetit ns-3. Kaptina 3

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

Duke 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 build

Kompilatorë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/local

Në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 build

Në 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.py

Kë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-simulator

Waf 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 Simulator

PĂ«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-tests

pĂ«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:

$ ./waf

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

Vazhdimi: kapitulli 4

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster