Udhëzues për simulatorin e rrjetit ns-3. Kapitulli 3

Udhëzues për simulatorin e rrjetit ns-3. Kapitulli 3
kapitulli 1,2

3 Fillimi
3.1 Vështrim i përgjithshëm
3.2 Parakushtet
3.2.1 Shkarkimi i lëshimit të ns-3 si një arkiv burimor
3.3 Shkarkimi i ns-3 duke përdorur Git
3.3.1 Ngarkimi i ns-3 duke përdorur Bake
3.4 Asambleja ns-3
3.4.1 Ndërtesa me build.py
3.4.2 Ndërtesa me Bake
3.4.3 Ndërtimi me Waf
3.5 Testimi ns-3
3.6 Ekzekutimi i skenarit
3.6.1 Argumentet e linjës së komandës
3.6.2 Korrigjimi
3.6.3 Drejtoria e punës

Kapitulli 3

Fillimi

Ky kapitull synon të përgatisë lexuesin për të filluar me një kompjuter që mund të mos ketë instaluar kurrë ns-3. Ai mbulon platformat e mbështetura, parakushtet, si të merrni ns-3, si të ndërtoni ns-3 dhe si të testoni ndërtimin tuaj dhe të ekzekutoni programe të thjeshta.

3.1 Vështrim i përgjithshëm

Simulatori ns-3 është ndërtuar si një sistem i bibliotekave të softuerit bashkëpunues. Gjatë montimit, kodi i programeve të përdoruesve lidhet me këto biblioteka. Gjuhët e programimit C++ ose Python përdoren për të shkruar programe të personalizuara.

Ns-3 shpërndahet si kod burim, që do të thotë se sistemi i synuar duhet të ketë një mjedis të zhvillimit të softuerit në mënyrë që fillimisht të ndërtojë bibliotekat dhe më pas të ndërtojë programin e përdoruesit. Në parim, ns-3 mund të shpërndahen si biblioteka të gatshme për një sistem specifik, dhe në të ardhmen ato mund të shpërndahen në këtë mënyrë. Por në ditët e sotme shumë përdorues e bëjnë punën e tyre duke redaktuar vetë ns-3, kështu që është e dobishme të keni kodin burimor për të ndërtuar bibliotekat. Nëse dikush dëshiron të marrë përsipër punën e krijimit të bibliotekave dhe paketave të gatshme për sistemet operative, ju lutemi kontaktoni listën e postimeve ns-zhvilluesit.

Më pas, do të shikojmë tre mënyra për të shkarkuar dhe ndërtuar ns-3. E para është të shkarkoni dhe ndërtoni versionin zyrtar nga faqja kryesore. E dyta është zgjedhja dhe montimi i kopjeve të versioneve të zhvillimit të instalimit bazë ns-3. E treta është përdorimi i mjeteve shtesë të ndërtimit për të ngarkuar më shumë shtesa për ns-3. Ne do të kalojmë nëpër secilën prej tyre pasi mjetet janë paksa të ndryshme.

Përdoruesit me përvojë të Linux mund të pyesin veten pse ns-3 nuk ofrohet si një paketë si shumica e bibliotekave të tjera që përdorin një menaxher paketash? Megjithëse ka paketa binare për shpërndarje të ndryshme Linux (p.sh. Debian), shumica e përdoruesve përfundojnë duke redaktuar bibliotekat dhe duhet të rindërtojnë vetë ns-3, kështu që disponueshmëria e kodit burimor është e dobishme. Për këtë arsye, ne do të fokusohemi në instalimin nga burimi.

Për shumicën e aplikacioneve të drejtat ns-3 rrënjë nuk janë të nevojshme, rekomandohet të përdorni një llogari përdoruesi të paprivilegjuar.

3.2 Parakushtet

I gjithë grupi i bibliotekave të disponueshme ns-3 ka një numër varësish nga bibliotekat e palëve të treta, 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): një përpilues C++, Python, një redaktues i kodit burimor (për shembull, vrull, Emacs ose Eklips) dhe, nëse përdoren depot e zhvillimit, sistemet e kontrollit të versionit Git. Shumica e përdoruesve për herë të parë nuk do të kenë nevojë të shqetësohen nëse konfigurimi i tyre raporton se disa veçori të avancuara ns-3 mungojnë, por për ata që duan një instalim të plotë, projekti ofron një wiki që përfshin faqe me shumë këshilla dhe truke të dobishme. Një faqe e tillë është faqja e instalimit, me udhëzime instalimi për sisteme të ndryshme, të disponueshme në: https://www.nsnam.org/wiki/Installation.

Seksioni Parakushtet e kësaj wiki shpjegon se cilat paketa kërkohen për të mbështetur opsionet e zakonshme ns-3 dhe gjithashtu ofron komandat e përdorura për t'i instaluar ato në shijet e zakonshme të Linux ose macOS.

Ju mund të përfitoni nga kjo mundësi për të eksploruar faqen wiki ns-3 ose faqen kryesore të internetit: https://www.nsnam.org, sepse aty ka shumë informacion. Duke filluar me versionin më të fundit të ns-3 (ns-3.29), mjetet e mëposhtme kërkohen për të ekzekutuar ns-3:

Paketa/Versioni i Mjeteve

  • Përpiluesi C++
    clang++ ose g++ (g++ versioni 4.9 ose më i lartë)
  • Piton
    versioni python2 >= 2.7.10, ose versioni python3 >=3.4
  • git
    çdo version më të fundit (për të hyrë në ns-3 në GitLab.com)
  • katran
    çdo version më i fundit (për paketimin e lëshimit të ns-3)
  • bunzip2
    çdo version i fundit (për shpaketimin e versionit ns-3)

Për të kontrolluar versionin e paracaktuar të Python, shkruani python -V. Për të kontrolluar versionin g++, shkruani g++ -v. Nëse ndonjë mjet mungon ose është shumë i vjetër, ju lutemi referojuni udhëzuesit të instalimit në faqen wiki ns-3.

Që tani e tutje, supozojmë se lexuesi po ekzekuton Linux, MacOS ose një emulator Linux dhe ka të paktën mjetet e mësipërme.

3.2.1 Shkarkimi i lëshimit të ns-3 si një arkiv burimor

Ky është kursi i veprimit për një përdorues të ri që dëshiron të shkarkojë dhe eksperimentojë me versionet më të fundit të lëshimit dhe paketës së ns-3. Publikimet ns-3 publikohen si arkiva me burim të ngjeshur, të quajtura ndonjëherë topuz. topuz është një format i posaçëm i arkivit të softuerit në të cilin disa skedarë kombinohen së bashku. Arkivi zakonisht është i ngjeshur. Procesi i nisjes ns-3 nëpërmjet topuz është e thjeshtë, ju vetëm duhet të zgjidhni një version, ta shkarkoni dhe shpaketoni atë.

Le të supozojmë se ju, si përdorues, dëshironi të ndërtoni ns-3 në një direktori lokale të quajtur hapësira e punës. Ju mund të merrni një kopje funksionale të lëshimit duke futur sa vijon në tastierën Linux (duke zëvendësuar numrat e duhur të versionit, natyrisht)

$ 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 

Kushtojini vëmendje mjetit të përdorur më sipër wget, i cili është një mjet i linjës komanduese për shkarkimin e objekteve nga Interneti. Nëse nuk e keni instaluar, mund të përdorni shfletuesin tuaj për këtë.

Ndjekja e këtyre hapave do t'ju çojë në direktorinë ns-allinone-3.29, aty duhet të shihni disa skedarë dhe drejtori

$ 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 shpërndarjen bazë ns-3 dhe mund të kaloni në seksionin e ndërtimit ns-3.

3.3 Shkarkimi i ns-3 duke përdorur Git

Kodi ns-3 është i disponueshëm në magazinat Git në GitLab.com në https://gitlab.com/nsnam/... Grupi nsnam bashkon depo të ndryshme të përdorura nga një projekt me burim të hapur.

Mënyra më e lehtë për të filluar përdorimin e depove Git është të forkoni ose klononi mjedisin ns-3-allinone. Ky është një grup skriptesh që menaxhon ngarkimin dhe montimin e nënsistemeve ns-3 më të përdorura. Nëse jeni i ri në Git, termat "fork" dhe "klon" mund të jenë të panjohura për ju; nëse po, ju rekomandojmë që thjesht të klononi (bëni kopjen tuaj) depon e vendosur në GitLab.com si kjo:

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

Në këtë fazë, pamja e drejtorisë suaj ns-3-allinone pak më ndryshe nga drejtoria e arkivit të lëshimit të përshkruar më sipër. Duhet të duket diçka si kjo:

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

Ju lutemi vini re se ekziston një skenar shkarko.py, i cili gjithashtu do të nxjerrë ns-3 dhe kodin burimor shoqërues. Këtu keni një zgjedhje: ose shkarkoni fotografinë më të fundit të zhvillimit të ns-3:

$ python download.py

ose preferoni lëshimin ns-3 duke përdorur flamurin -n për të treguar numrin e lëshimit:

$ python download.py -n ns-3.29

Pas këtij hapi në drejtori ns-3-allinone do të shkarkohen depo shtesë ns-3, piqem, pjatë и netanim.

Shënim
Në një makinë me Ubuntu16.04 të pastër, më duhej të ndryshoja komandën në këtë: $ sudo python3 download.py -n ns-3.29 (në tekstin e mëtejmë shënimet e përkthyesit).

3.3.1 Ngarkimi i ns-3 duke përdorur Bake

Dy metodat e mësipërme (arkivi i burimit ose depoja ns-3-allinone via Git) janë të dobishme për marrjen e instalimit më të thjeshtë ns-3 me shtesa të shumta(pjatë për të gjeneruar lidhje Python dhe netanim për animimin e rrjetit). Depoja e tretë e ofruar si parazgjedhje në ns-3-allinone quhet piqem.

piqem është një mjet për ndërtimin e koordinuar të softuerit nga depo të shumta, i zhvilluar për projektin ns-3. piqem mund të përdoret për të marrë versionet e zhvillimit të ns-3, si dhe për të shkarkuar dhe ndërtuar shtesa të versionit bazë të shpërndarjes ns-3, siç është mjedisi Ekzekutimi i drejtpërdrejtë i kodit, CradleNetwork Simulation Cradle, aftësia për të krijuar lidhje të reja Python dhe "aplikacione" të ndryshme ns-3.

Shënim
CradleNetwork Simulation Cradle është një kornizë që ju lejon të përdorni grupe reale të rrjetit TCP/IP brenda një simulatori rrjeti.

Nëse prisni që instalimi juaj ns-3 të ketë veçori të avancuara ose shtesë, mund të ndiqni këtë rrugë instalimi.

Në lëshimet më të fundit të ns-3 piqem iu shtua lirimi i katranit. Publikimi përfshin një skedar konfigurimi që ju lejon të shkarkoni versionet aktuale të softuerit në kohën e lëshimit. Ky është, për shembull, versioni piqem, i cili shpërndahet me lëshimin ns-3.29, mund të përdoret për të tërhequr komponentët për atë lëshim të ns-3 ose më herët, por nuk mund të përdoret për të tërhequr komponentët për lëshimet e mëvonshme (nëse skedari i përshkrimit të paketës bakeconf.xml i pa përditësuar).

Ju gjithashtu mund të merrni kopjen më të fundit piqemduke futur komandën e mëposhtme në konsolën tuaj Linux (duke supozuar se keni instaluar Git):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

Kur ekzekutoni komandën git, duhet të shihni diçka si më poshtë:

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.

Pasi të përfundojë komanda klon ju duhet të keni një drejtori me emrin piqem, përmbajtja e së cilës duhet të duket diçka si kjo:

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

Vini re se keni ngarkuar disa skripta Python, një modul Python i quajtur piqem dhe një skedar konfigurimi XML. Hapi tjetër është përdorimi i këtyre skripteve për të shkarkuar dhe ndërtuar shpërndarjen ns-3 sipas dëshirës tuaj. Ekzistojnë disa objektiva personalizimi:

  1. ns-3.29: moduli që korrespondon me lëshimin; do të shkarkojë komponentë të ngjashëm me lëshimin në tarball;

  2. ns-3-dev: një modul i ngjashëm, por duke përdorur kodin nga pema e zhvillimit;

  3. ns-allinone-3.29: Një modul që përfshin veçori të tjera shtesë, si drejtimi i klikimeve dhe Djepi i simulimit të rrjetit, Openflow për ns-3.

  4. ns-3-allinone: e ngjashme me versionin e lëshimit të modulit të gjitha në një, por për kodin e zhvillimit.

Shënim
Kliko — Arkitektura modulare e softuerit për krijimin e ruterave.

Openflow është një protokoll për menaxhimin e procesit të përpunimit të të dhënave të transmetuara përmes një rrjeti të dhënash nga ruterat dhe ndërprerësit, duke zbatuar teknologjinë e rrjetit të përcaktuar nga softueri.

Pamja aktuale e zhvillimit (jo-publikuar) ns-3 mund të gjendet në:https://gitlab.com/nsnam/ns-3-dev.git.

Zhvilluesit përpiqen t'i mbajnë këto depo në një mënyrë të qëndrueshme pune, por ato janë në zonën e zhvillimit dhe përmbajnë kod të papublikuar, kështu që nëse nuk planifikoni të përdorni veçori të reja, atëherë zgjidhni lëshimin zyrtar.

Mund të gjeni versionin më të fundit të kodit duke shfletuar listën e depove ose duke shkuar në faqen e internetit ns-3 Releases:https://www.nsnam.org/releases/ dhe duke klikuar në lidhjen e versionit të fundit. Në këtë shembull do të vazhdojmë me ns-3.29.

Tani, për të marrë komponentët ns-3 që na duhen, do të përdorim mjetin piqem. Le të themi disa fjalë hyrëse për veprën piqem.

Bake funksionon duke ngarkuar burimet e paketave në një direktori burim dhe instalimi i bibliotekave në drejtorinë e ndërtimit. piqem mund të ekzekutohet duke iu referuar binarit, por nëse dëshironi të ekzekutoni piqem jo nga drejtoria në të cilën është shkarkuar, këshillohet të shtoni shtegun në piqem në rrugën tuaj (ndryshore e mjedisit PATH), për shembull si më poshtë (shembull për Linux bash shell). Shkoni te drejtoria "bake" dhe më pas vendosni variablat e mjedisit të mëposhtëm:

$ 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 piqem.py në shtegun e guaskës dhe do të lejojë programet e tjera të gjejnë ekzekutuesit dhe bibliotekat që ka krijuar piqem. Në disa raste përdorimi piqem, cilësimi PATH dhe PYTHONPATH i përshkruar më sipër nuk kërkohet, por zakonisht e kërkon një ndërtim i plotë i ns-3-allinone (me paketa shtesë).

Shkoni te drejtoria juaj e punës dhe futni sa vijon në tastierë:

$ ./bake.py configure -e ns-3.29

Më pas do të pyesim piqem kontrolloni nëse kemi mjete të mjaftueshme për të ngarkuar komponentët e ndryshëm. Telefono:

$ ./bake.py check

Ju 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 ngarkimit si Mercurial, CVS, Git dhe Bazaar janë thelbësore në këtë hap pasi na lejojnë të marrim kodin. Në këtë pikë, instaloni mjetet që mungojnë në mënyrën e zakonshme për sistemin tuaj (nëse e dini se si) ose kontaktoni administratorin e sistemit tuaj për ndihmë.

Tjetra, provoni të shkarkoni softuerin:

$ ./bake.py download

rezultati duhet të jetë diçka e tillë:

>> Searching for system dependency setuptools - OK 
>> Searching for system dependency libgoocanvas2 - OK 
>> Searching for system dependency gi-cairo - OK 
>> Searching for system dependency pygobject - OK 
>> Searching for system dependency pygraphviz - OK 
>> Searching for system dependency python-dev - OK 
>> Searching for system dependency qt - OK 
>> Searching for system dependency g++ - OK 
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK 
>> Downloading netanim-3.108 - OK 
>> Downloading ns-3.29 - OK

Kjo do të thotë se tre burime janë shkarkuar. Tani shkoni te direktoria burimore dhe shkruani ls; Ju duhet të shihni:

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

Tani jeni gati për të ndërtuar shpërndarjen ns-3.

3.4 Asambleja ns-3

Ashtu si me shkarkimin e ns-3, ka disa mënyra për të ndërtuar ns-3. Gjëja kryesore që duam të theksojmë është se ns-3 është ndërtuar duke përdorur një mjet ndërtimi të quajtur WAFpërshkruar më poshtë. Shumica e përdoruesve do të punojnë me WAF, por ka disa skripta të dobishëm për t'ju ndihmuar të filloni ose të organizoni ndërtime më komplekse. Pra, ju lutem, para se të lexoni rreth WAF, hidhini një sy ndërtoj.py dhe montimi me piqem.

3.4.1 Ndërtesa me build.py

Kujdes! Ky hap i ndërtimit është i disponueshëm vetëm nga versioni i arkivit burimor i marrë siç përshkruhet më sipër; dhe nuk shkarkohet nëpërmjet git ose bake.

Kur punoni me një arkiv lëshimi topuz, në ns-3-allinone Ekziston një skenar i dobishëm që mund ta bëjë më të lehtë montimin e komponentëve. Quhet build.py. Ky program do ta konfigurojë projektin për ju në mënyrën më të dobishme. Megjithatë, vini re se konfigurimi dhe puna më e avancuar me ns-3 zakonisht përfshin përdorimin e sistemit të ndërtimit të vetë ns-3, Waf, i cili do të prezantohet më vonë në këtë tutorial.

Nëse keni shkarkuar duke përdorur topuz, pastaj në drejtorinë tuaj ~/hapësirë ​​pune një drejtori me një emër diçka si ns-allinone-3.29. Futni sa vijon:

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

Kur thirret ndërtoj.py Ne përdorëm argumentet e linjës së komandës për të ndërtuar shembujt dhe testet e përdorura në këtë tutorial, të cilat nuk janë ndërtuar si parazgjedhje në ns-3. Si parazgjedhje, programi gjithashtu ndërton të gjitha 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 janë të nevojshme për punën tuaj.

Do të shihni shumë mesazhe dalëse të përpiluesit të shfaqura nga skripti ndërsa ndërton pjesët e ndryshme që keni ngarkuar. Së pari, skenari do të përpiqet të ndërtojë animatorin netanim, pastaj gjeneratori i lidhjes pjatë dhe në fund ns-3. Kur procesi të përfundojë, duhet të shihni sa vijon:

Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s) 

Modules built:
antenna                aodv                     applications
bridge                 buildings                config-store
core                   csma                     csma-layout
dsdv                   dsr                      energy 
fd-net-device          flow-monitor             internet
internet-apps          lr-wpan                  lte
mesh                   mobility                 mpi
netanim (no Python)    network                  nix-vector-routing 
olsr                   point-to-point           point-to-point-layout 
propagation            sixlowpan                spectrum 
stats                  tap-bridge               test (no Python) 
topology-read          traffic-control          uan 
virtual-net-device     visualizer               wave 
wifi                   wimax 

Modules not built (see ns-3 tutorial for explanation):
brite                  click                    openflow 
Leaving directory ./ns-3.29

Në tre rreshtat e fundit të listimit shohim një mesazh në lidhje me modulet që nuk janë ndërtuar:

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

Kjo thjesht do të thotë se disa module ns-3 që varen nga bibliotekat e jashtme mund të mos jenë ndërtuar ose që nuk kërkohet të ndërtohen për këtë konfigurim. Kjo nuk do të thotë që simulatori nuk është montuar ose që modulet e montuara nuk do të funksionojnë siç duhet.

3.4.2 Ndërtesa me Bake

Nëse keni përdorur bake më lart për të marrë kodin burim nga depot e projektit, mund të vazhdoni ta përdorni atë për të ndërtuar ns-3. Telefono:

$ ./bake.py build

dhe ju duhet të shihni diçka si:

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

të shpejtë: Mund t'i kryeni gjithashtu hapat e shkarkimit dhe të ndërtimit menjëherë duke thirrur "bake.py deploy".

Montimi i të gjithë komponentëve mund të dështojë, por montimi do të vazhdojë nëse nuk kërkohet një komponent. Për shembull, një çështje e fundit e transportueshmërisë ishte ajo castxml mund të montohet me mjet piqem jo në të gjitha platformat. Në këtë rast, një mesazh si ky do të shfaqet:

>> Building castxml - Problem 
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.

Por castxml nevojitet vetëm nëse doni të krijoni lidhje të përditësuara të Python. Për shumicën e përdoruesve nuk ka nevojë për këtë (të paktën derisa të ndryshojnë ns-3), kështu që paralajmërime të tilla mund të injorohen me siguri tani për tani.

Nëse dështon, komanda e mëposhtme do t'ju japë një sugjerim për varësitë që mungojnë:

$ ./bake.py show

Do të renditen varësitë e ndryshme të paketave që po përpiqeni të ndërtoni.

3.4.3 Ndërtimi me Waf

Deri në këtë pikë, për të filluar ndërtimin e ns-3, ne përdorëm ose skriptin ndërtoj.py, ose mjet piqem. Këto mjete janë të dobishme për ndërtimin e ns-3 dhe mirëmbajtjen e bibliotekave. Në fakt, për të ndërtuar ata ekzekutojnë mjetin e ndërtimit WAF nga drejtoria ns-3. WAF instaluar me kodin burimor ns-3. Shumica e përdoruesve kalojnë shpejt në përdorimin e drejtpërdrejtë për të konfiguruar dhe montuar ns‑3 WAF. Pra, për të vazhduar, ju lutemi shkoni te drejtoria ns-3 që keni krijuar fillimisht.

Kjo nuk kërkohet rreptësisht në këtë moment, por do të jetë e dobishme të tërhiqeni pak dhe të shihni se si të bëni ndryshime në konfigurimin e projektit. Ndoshta ndryshimi më i dobishëm i konfigurimit që mund të bëni është krijimi i një versioni të optimizuar të kodit. Si parazgjedhje, ju keni konfiguruar projektin tuaj për të ndërtuar një version korrigjimi. Le të hedhim një vështrim në një projekt për të krijuar një ndërtim të optimizuar. Për t'i shpjeguar Waf-it se duhet të bëjë ndërtime të optimizuara që përfshijnë 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ë nisë WAF jashtë drejtorisë lokale (për lehtësinë tuaj). Komanda e parë pastrohet nga ndërtimi i mëparshëm, kjo zakonisht nuk është rreptësisht e nevojshme, por është praktikë e mirë (shih gjithashtu profilet e ndërtimit më poshtë); kjo do të fshijë bibliotekat e krijuara më parë dhe skedarët e objekteve të vendosura në drejtori ndertoj/. Kur projekti rikonfigurohet dhe sistemi i ndërtimit kontrollon varësitë e ndryshme, duhet të shihni rezultate të ngjashme me sa vijon:

Setting top to      : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to      : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler)        : /usr/bin/gcc 
Checking for cc version                : 7.3.0 
Checking for 'g++' (C++ compiler)      : /usr/bin/g++ 
Checking for compilation flag -march=native support : ok 
Checking for compilation flag -Wl,--soname=foo support : ok 
Checking for compilation flag -std=c++11 support       : ok 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking for program 'python'            : /usr/bin/python 
Checking for python version >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration                                      : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags   : yes
Testing pyext configuration                                        : yes

Checking for compilation flag -fvisibility=hidden support          : ok 
Checking for compilation flag -Wno-array-bounds support            : ok 
Checking for pybindgen location          : ../pybindgen ,!(guessed) 
Checking for python module 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Checking for pybindgen version           : 0.19.0. ,!post4+g823d8b2 
Checking for code snippet                : yes 
Checking for types uint64_t and unsigned long equivalence : no 
Checking for code snippet                                 : no 
Checking for types uint64_t and unsigned long long equivalence     : yes 
Checking for the apidefs that can be used for Python bindings                       : gcc-LP64 
Checking for internal GCC cxxabi         : complete 
Checking for python module 'pygccxml'    : not found 
Checking for click location              : not found 
Checking for program 'pkg-config'        : /usr/bin/pkg- ,!config 
Checking for 'gtk+-3.0'                  : not found 
Checking for 'libxml-2.0'                : yes 
checking for uint128_t                   : not found 
checking for __uint128_t                 : yes 
Checking high precision implementation   : 128-bit integer ,!(default) 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found 
Checking for header sys/types.h          : yes 
Checking for header sys/stat.h           : yes 
Checking for header dirent.h             : yes 
Checking for header stdlib.h             : yes 
Checking for header signal.h             : yes 
Checking for header pthread.h            : yes 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found
Checking for library rt                  : yes 
Checking for header sys/ioctl.h          : yes 
Checking for header net/if.h             : yes 
Checking for header net/ethernet.h       : yes 
Checking for header linux/if_tun.h       : yes 
Checking for header netpacket/packet.h   : yes 
Checking for NSC location                : not found 
Checking for 'sqlite3'                   : not found 
Checking for header linux/if_tun.h       : yes 
Checking for python module 'gi'          : 3.26.1 
Checking for python module 'gi.repository.GObject'      : ok 
Checking for python module 'cairo'                      : ok 
Checking for python module 'pygraphviz'                 : 1.4rc1 
Checking for python module 'gi.repository.Gtk'          : ok 
Checking for python module 'gi.repository.Gdk'          : ok 
Checking for python module 'gi.repository.Pango'        : ok 
Checking for python module 'gi.repository.GooCanvas'    : ok 
Checking for program 'sudo'                             : /usr/bin/sudo 
Checking for program 'valgrind'                         : not found 
Checking for 'gsl' : not found python-config            : not found 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for program 'doxygen'                          : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory : 
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite)) 
DES Metrics event collection : not enabled (defaults to disabled) 
Emulation FdNetDevice        : enabled 
Examples                     : enabled 
File descriptor NetDevice    : enabled 
GNU Scientific Library (GSL) : not enabled (GSL not found) 
Gcrypt library               : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore               : not enabled (library 'gtk+-3.0 >= 3.0' not fou   nd)
MPI Support                  : not enabled (option --enable-mpi not selected)
ns-3 Click Integration       : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration   : not enabled (Required boost libraries not found) 
Network Simulation Cradle    : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled 
Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled 
Real Time Simulator           : enabled 
SQlite stats data output      : not enabled (library 'sqlite3' not found)
Tap Bridge                    : enabled 
Tap FdNetDevice               : enabled
Tests                         : enabled 
Threading Primitives          : enabled 
Use sudo to set suid bit   : not enabled (option --enable-sudo not selected)
XmlIo                         : enabled
'configure' finished successfully (6.387s)

Ju lutemi vini re pjesën e fundit të listimit të mësipërm. Disa opsione ns-3 nuk janë aktivizuar si parazgjedhje ose kërkojnë mbështetje të sistemit për të funksionuar siç duhet. Për shembull, për të aktivizuar XmlTo, biblioteka duhet të jetë e pranishme në sistem libxml-2.0. Nëse kjo bibliotekë nuk u gjet dhe funksioni përkatës ns-3 nuk ishte i aktivizuar, do të shfaqet një mesazh. Gjithashtu vini re se është e mundur të përdoret komanda sudo për të vendosur bitin suid "cakto ID-në e grupit në kohën e ekzekutimit" për programe të caktuara. Nuk është aktivizuar si parazgjedhje dhe për këtë arsye kjo veçori shfaqet si "jo e aktivizuar". Së fundi, për të marrë një listë të opsioneve të aktivizuara, përdorni WAF me parametër --check-config.

Tani le të kthehemi dhe të kthehemi te ndërtimi i korrigjimit që përmban shembuj dhe teste.

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

Sistemi i ndërtimit është konfiguruar tani dhe mund të ndërtoni versione të korrigjimit të programeve ns-3 thjesht duke shtypur:

$ ./waf

Hapat e mësipërm mund t'ju kenë detyruar të ndërtoni dy herë një pjesë të sistemit ns-3, por tani ju e dini se si të ndryshoni konfigurimin dhe të ndërtoni kodin e optimizuar.

Për të kontrolluar se cili profil është aktiv për një konfigurim të caktuar të projektit, ekziston një komandë:

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

Skenari i mësipërm ndërtoj.py gjithashtu mbështet argumentet --enable-examples и --enable-tests, por opsione të tjera WAF nuk mbështet drejtpërdrejt. Për shembull, kjo nuk do të funksionojë:

$ ./build.py --disable-python

reagimi do të jetë si ky:

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

Megjithatë, operatori special - - mund të përdoret për të kaluar parametra shtesë nëpërmjet meshëkështu që në vend të sa më sipër do të funksionojë komanda e mëposhtme:

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

sepse gjeneron komandën kryesore ./waf configure --disable-python. Këtu janë disa këshilla të tjera hyrëse rreth WAF.

Trajtimi i gabimeve të ndërtimit

Publikimet ns-3 testohen në përpiluesit më të fundit C++ të disponueshëm në kohën e lëshimit në shpërndarjet e zakonshme Linux dhe MacOS. Megjithatë, me kalimin e kohës, shpërndarjet e reja lëshohen me përpilues të rinj dhe këta përpilues më të rinj priren të jenë më pedantë ndaj paralajmërimeve. ns-3 konfiguron ndërtimin e tij për t'i trajtuar të gjitha paralajmërimet si gabime, kështu që ndonjëherë nëse po ekzekutoni një version më të vjetër në një sistem më të ri, një paralajmërim përpilues mund të ndalojë ndërtimin.

Për shembull, më parë kishte një lëshim të ns‑3.28 për Fedora 28, i cili përfshinte një version të ri kryesor gcc (gcc-8). Kur ndërtoni lëshimin ns-3.28 ose versione të mëparshme nën Fedora 28, me Gtk2+ të instaluar, do të ndodhë gabimi i mëposhtëm:

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

Në publikimet duke filluar nga ns-3.28.1, në WAF është në dispozicion një opsion për të zgjidhur këto probleme. Ai çaktivizon vendosjen e flamurit "-Werror" në g++ dhe clang++. Ky është opsioni "--disable-error" dhe duhet të zbatohet gjatë konfigurimit:

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

Konfiguro ose monto

Disa komanda WAF kanë kuptim vetëm në fazën e konfigurimit, dhe disa janë të vlefshme vetëm në fazën e ndërtimit. Për shembull, nëse dëshironi të përdorni veçoritë e emulimit ns-3, mund të aktivizoni cilësimin e bitit e suiduar duke përdorur sudo, siç përshkruhet më sipër. Kjo do të anashkalojë komandat e hapit të konfigurimit, dhe kështu mund të ndryshoni konfigurimin duke përdorur komandën e mëposhtme, 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ë nisë sudopër të ndryshuar programet e krijimit të prizës së kodit emulues për të ekzekutuar me leje rrënjë. Në WAF Ka shumë opsione të tjera të disponueshme për hapat e konfigurimit dhe ndërtimit. Për të eksploruar opsionet tuaja, shkruani:

$ ./waf --help

Në pjesën tjetër do të përdorim disa opsione të lidhura me testimin.

Profilet e Asamblesë

Ne kemi parë tashmë se si mund të konfiguroni WAF për kuvendet rregulloj и optimizuar:

$ ./waf --build-profile=debug

Ekziston gjithashtu një profil i ndërmjetëm montimi, lirimin. Opsioni -d është sinonim me --build-profile. Profili i ndërtimit kontrollon përdorimin e çelsave të regjistrimit, pohimeve dhe optimizimit të përpiluesit:

Udhëzues për simulatorin e rrjetit ns-3. Kapitulli 3

Siç mund ta shihni, regjistrimi dhe pohimet janë të disponueshme vetëm në ndërtimet e korrigjimit. Praktika e rekomanduar është të zhvilloni skriptin tuaj në modalitetin e korrigjimit, më pas të kryeni ekzekutime të përsëritura (për statistika ose ndryshime të parametrave) në një profil të optimizuar ndërtimi.

Nëse keni kod që duhet të ekzekutohet vetëm në profile të caktuara ndërtimi, përdorni Macro Code Wrapper:

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

Default, WAF vendos objekte të ndërtimit në drejtorinë e ndërtimit. Ju mund të specifikoni një direktori të ndryshme të daljes duke përdorur opsionin - -out, për shembull:

$ ./waf configure --out=my-build-dir

Duke e kombinuar këtë me profilet e ndërtimit, mund të kaloni lehtësisht midis opsioneve të ndryshme të përpilimit:

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

E cila ju lejon të punoni me shumë asamble pa pasur nevojë të rishkruani asamblenë më të fundit çdo herë. Kur kaloni në një profil tjetër, WAF do të përpilojë vetëm atë, pa ripërpiluar plotësisht gjithçka.

Kur ndërroni profilet e ndërtimit në këtë mënyrë, duhet të jeni të kujdesshëm që të jepni të njëjtat opsione konfigurimi çdo herë. Përcaktimi i disa variablave të mjedisit do t'ju ndihmojë të shmangni 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

Kompiluesit dhe flamujt

Në shembujt e mësipërm WAF për të ndërtuar ns-3 përdor përpiluesin C++ nga GCC ( g ++). Sidoqoftë, mund ta ndryshoni atë që përdorni WAF Përpiluesi C++, duke përcaktuar variablin e mjedisit CXX. Për shembull, për të përdorur përpiluesin C++ Clang, clang++,

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

Në të njëjtën mënyrë mund të konfiguroni WAF për të përdorur përpilimin e shpërndarë duke përdorur diskcc:

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

Më shumë informacion rreth distcc dhe përpilimit të shpërndarë mund të gjenden në faqen e projektit në seksionin Dokumentacioni. Për të shtuar flamuj të përpiluesit kur konfiguroni ns-3, përdorni ndryshoren e mjedisit CXXFLAGS_EXTRA.

Instalim

WAF mund të përdoret për të instaluar biblioteka në vende të ndryshme të sistemit. Si parazgjedhje, bibliotekat e përpiluara dhe ekzekutuesit ndodhen në drejtori ndërtuar, dhe meqenëse Waf e di vendndodhjen e këtyre bibliotekave dhe ekzekutuesve, nuk ka nevojë të instaloni bibliotekat diku tjetër.

Nëse përdoruesit preferojnë të instalojnë jashtë drejtorisë së ndërtimit, ata mund të ekzekutojnë komandën ./waf instaloj. Prefiksi i paracaktuar për instalim është / usr / lokale, poitom ./waf instaloj do të instalojë programe në / Usr / local / bin, bibliotekat në / Usr / local / lib dhe skedarët e kokës në /usr/lokale/Përfshini. Të drejtat e superpërdoruesit zakonisht duhet të vendosen me një prefiks të paracaktuar, kështu që do të ishte një komandë tipike sudo ./waf instaloj. Kur të lansohet, Waf fillimisht do të zgjedhë të përdorë bibliotekat e përbashkëta në direktorinë e ndërtimit, më pas do të kërkojë bibliotekat përgjatë rrugës drejt bibliotekave të konfiguruara në mjedisin lokal. Pra, kur instaloni biblioteka në një sistem, është një praktikë e mirë të kontrolloni nëse po përdoren bibliotekat e duhura. Përdoruesit mund të zgjedhin të instalojnë me një prefiks tjetër duke kaluar opsionin gjatë konfigurimit --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/lokal.

Ekip ./waf clean duhet të përdoret përpara se të rikonfiguroni projektin nëse instalimi do të përdorë WAF nën një parashtesë tjetër.

Kështu, për të përdorur ns-3 nuk ka nevojë të telefononi ./waf install. Shumica e përdoruesve nuk do të kenë nevojë për këtë komandë sepse WAF do të marrë bibliotekat aktuale nga drejtoria e ndërtimit, por disa përdoruesve mund ta kenë këtë të dobishme nëse aktivitetet e tyre përfshijnë punën me programe jashtë drejtorisë ns-3.

Waf beqare

Në nivelin më të lartë të pemës burimore ns-3, ekziston vetëm një skript Waf. Pasi të filloni të punoni, do të kaloni shumë kohë në drejtori scratch/ ose më thellë nësrc/... dhe në të njëjtën kohë duhet të vraponi WAF. Ju thjesht mund të mbani mend se ku jeni dhe të vraponi WAF si më poshtë:

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

por kjo do të jetë e lodhshme dhe e prirur për gabime, kështu që ka zgjidhje më të mira. Një mënyrë e zakonshme është përdorimi i një redaktuesi teksti si p.sh Emacs ose vrull, në të cilën hapen dy sesione terminale, njëra përdoret për të ndërtuar ns-3 dhe e dyta përdoret për të modifikuar kodin burimor. Nëse keni vetëm topuz, atëherë një variabël mjedisor mund të ndihmojë:

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

$ cd scratch 
$ waff build

Në direktorinë e modulit mund të jetë joshëse të shtoni një skript të parëndësishëm waf si exec ../../waf. Ju lutem, mos e bëni këtë. Kjo është konfuze për fillestarët dhe, kur bëhet keq, çon në gabime ndërtimi të vështira për t'u zbuluar. Zgjidhjet e treguara më sipër janë rruga që duhet përdorur.

3.5 Testimi ns-3

Ju mund të ekzekutoni testet e njësive të shpërndarjes ns-3 duke ekzekutuar skriptin ./test.py:

$ ./test.py

Këto teste kryhen paralelisht me WAF. Në fund ju duhet të shihni një mesazh që thotë:

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

Ky është një mesazh i rëndësishëm për identifikimin e përplasjeve, përplasjeve ose gabimeve të valgrind, duke treguar probleme me kodin ose papajtueshmëri midis veglave dhe kodit.

Do të shihni gjithashtu daljen përfundimtare nga WAF dhe një testues që kryen çdo test, i cili do të duket diçka si kjo:

Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
'build' finished successfully (1.799s) 

Modules built:
aodv           applications          bridge
click          config-store          core
csma           csma-layout           dsdv
emu            energy                flow-monitor
internet       lte                   mesh
mobility       mpi                   netanim
network        nix-vector-routing    ns3tcp
ns3wifi        olsr                  openflow
point-to-point point-to-point-layout propagation
spectrum       stats                 tap-bridge
template       test                  tools
topology-read  uan                   virtual-net-device
visualizer     wifi                  wimax

PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram 

...

PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

Kjo komandë zakonisht ekzekutohet nga përdoruesit për të verifikuar shpejt nëse shpërndarja ns-3 është ndërtuar saktë. (Vini re se rendi i rreshtave "PASS: ..." mund të jetë i ndryshëm, kjo është normale. Ajo që është e rëndësishme është që rreshti përmbledhës në fund të raportit tregon se të gjitha testet kaluan; asnjë test nuk dështoi ose u rrëzua.) Dhe WAFDhe provë.py do të paralelizojë punën nëpër bërthamat e disponueshme të procesorit të makinës.

3.6 Ekzekutimi i skenarit

Ne zakonisht i ekzekutojmë skriptet nën kontroll WAF. Kjo lejon sistemin e ndërtimit të sigurojë që shtigjet e përbashkëta të bibliotekës janë vendosur saktë dhe se bibliotekat janë të disponueshme në kohën e ekzekutimit. Për të ekzekutuar programin, thjesht përdorni WAF me parametër - -run. Le të ekzekutojmë ekuivalentin ns-3 të programit kudo Hello Worldduke shtypur sa vijon:

$ ./waf --run hello-simulator

Waf fillimisht do të kontrollojë nëse programi është ndërtuar saktë dhe do të ndërtohet nëse është e nevojshme. Pastaj WAF do të ekzekutojë një program që prodhon daljen e mëposhtme.

Hello Simulator

urime! Tani jeni përdorues i ns-3!

Çfarë duhet të bëj nëse nuk shoh rezultate?

Nëse shihni mesazhe WAFqë tregon se ndërtimi përfundoi me sukses, por ju nuk e shihni daljen "Përshëndetje Simulator", atëherë ekziston mundësia që në seksionin [Build-with-Waf] të keni ndërruar modalitetin tuaj të ndërtimit në optimizuar, por humbi kalimin në modalitet rregulloj. I gjithë prodhimi i konsolës së përdorur në këtë tutorial përdor një komponent të veçantë ns-3 që kryen regjistrimin dhe përdoret për të printuar mesazhe të personalizuara në tastierë. Dalja nga ky komponent çaktivizohet automatikisht kur përpilohet kodi i optimizuar - ai "optimizohet". Nëse nuk e shihni daljen "Hello Simulator", shkruani sa vijon:

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

për të personalizuar WAF për të ndërtuar versione korrigjimi të programeve ns-3, të cilat përfshijnë shembuj dhe teste. Më pas duhet të rindërtoni versionin aktual të korrigjimit të kodit duke shtypur

$ ./waf

Tani nëse e drejtoni programin përshëndetje-simulator, ju duhet të shihni rezultatin e pritur.

3.6.1 Argumentet e linjës së komandës

Për të kaluar argumentet e linjës së komandës në programin ns-3, përdorni modelin e mëposhtëm:

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

Zëvendësoni për emrin e programit tuaj dhe për argumentet. Argumenti - -command-template për WAF është në thelb një recetë për ndërtimin e linjës aktuale të komandës WAF përdoret për të ekzekutuar programin. Waf kontrollon që ndërtimi është i plotë, vendos shtigjet e bibliotekës së përbashkët, më pas përdor modelin e dhënë të linjës së komandës dhe zëvendëson emrin e programit për mbajtësin e %s për të thirrur ekzekutuesin. Nëse ju duket e ndërlikuar kjo sintaksë, ekziston një version më i thjeshtë që përfshin programin ns-3 dhe argumentet e tij të mbyllura në thonjëza të vetme:

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

Një shembull tjetër veçanërisht i dobishëm është ekzekutimi i grupeve të testeve në mënyrë selektive. Le të supozojmë se ekziston një grup testimi i quajtur mytest (në fakt nuk ka). Më sipër kemi përdorur skriptin ./test.py për të ekzekutuar një numër testesh paralelisht, i cili thërret në mënyrë të përsëritur programin e testimit test-vrapues. Thirrni test-vrapues drejtpërdrejt për të kryer një provë:

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

Argumentet do të kalojnë në program test-vrapues. Meqenëse mytest nuk ekziston, do të gjenerohet një mesazh gabimi. Për të printuar opsionet e disponueshme të test-runner, shkruani:

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 Korrigjimi

Për të ekzekutuar programe ns-3 nën një mjet tjetër, si p.sh. një korrigjues (për shembull, gdb) ose një mjet testimi të kujtesës (për shembull, trim), përdorni një formë të ngjashme - -command-template = "…". Për shembull, për të ekzekutuar në korrigjuesin gdb programi juaj hello-simulator ns-3 me argumente:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

Vini re se emri i programit ns-3 vjen me argumentin - -run, dhe shërbimi i menaxhimit (këtu gdb) është shenja e parë në argument - -command-template. Opsioni - -args raportet gdbse pjesa tjetër e linjës komanduese i takon programit "të ulët". (Disa versione gdb nuk e kuptoj opsionin - -args. Në këtë rast, hiqni argumentet e programit nga - -command-template dhe përdorni grupin e komandave gdb harqe.) Ne mund të kombinojmë këtë recetë dhe atë të mëparshme për të ekzekutuar testin nën korrigjuesin:

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

3.6.3 Drejtoria e punës

Waf duhet të lëshohet nga vendndodhja e tij në majë të pemës ns-3. Kjo dosje bëhet drejtoria e punës ku do të shkruhen skedarët e daljes. Por, çka nëse dëshironi t'i mbani këto skedarë jashtë pemës burimore ns-3? Përdor argumentin - -cwd:

$ ./waf --cwd=...

Mund ta gjeni më të përshtatshëm për të marrë skedarët e daljes në drejtorinë tuaj të punës. Në këtë rast, veprimi indirekt i mëposhtëm mund të ndihmojë:

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

Ky dekorim i versionit të mëparshëm të komandës ruan direktorinë aktuale të punës, shkon në drejtori WAFdhe më pas udhëzon WAF për të ndryshuar drejtorinë e punës përsëri në drejtorinë aktuale të punës të ruajtur para fillimit të programit. Përmendim ekipin - -cwd Për plotësinë, shumica e përdoruesve thjesht ekzekutojnë Waf nga drejtoria e nivelit të lartë dhe gjenerojnë skedarë dalës atje.

Vazhdim: Kapitulli 4

Burimi: www.habr.com

Shto një koment