
3 Duke me punë
3.1 Përmbledhje
3.2 Kushtet paraprake
3.2.1 Shkarkimi i versionit ns-3 si arkiv burimor
3.3 Shkarkimi i ns-3 me anë të 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 skenarit
3.6.1 Aksionet e komandës
3.6.2 Debugging
3.6.3 Direktoria e punës
Kapitulli 3
Duke me punë
Ky kapitull Ă«shtĂ« i destinuar pĂ«r tĂ« pĂ«rgatitur lexuesin pĂ«r punĂ«, duke filluar nga kompjuteri, nĂ« tĂ« cilin ndoshta kurrĂ« nuk Ă«shtĂ« instaluar nsâ3. Shtjellimi pĂ«rfshin platformat e mbĂ«shtetura, kushtet paraprake, mĂ«nyrat e marrjes sĂ« nsâ3, mĂ«nyrat e ndĂ«rtimit tĂ« nsâ3 dhe mĂ«nyrat e verifikimit tĂ« ndĂ«rtimit tuaj dhe ekzekutimit tĂ« programeve tĂ« thjeshta.
3.1 Përmbledhje
Simulatori nsâ3 Ă«shtĂ« ndĂ«rtuar si njĂ« sistem bibliotekash programore qĂ« punojnĂ« sĂ« bashku. GjatĂ« ndĂ«rtimit, kodi i programeve tĂ« pĂ«rdoruesit lidhĂ«t me kĂ«to biblioteka. PĂ«r tĂ« shkruar programet e pĂ«rdoruesit, pĂ«rdoren gjuhĂ«t e programimit C++ ose Python.
Nsâ3 shpĂ«rndahet nĂ« formĂ« burimore, qĂ« do tĂ« thotĂ« se sistemi i targetuar duhet tĂ« ketĂ« njĂ« mjedis zhvillimi softuerik pĂ«r tĂ« ndĂ«rtuar fillimisht bibliotekat dhe pastaj pĂ«r tĂ« ndĂ«rtuar programin e pĂ«rdoruesit. NĂ« parim, nsâ3 mund tĂ« shpĂ«rndahet si biblioteka tĂ« gatshme pĂ«r njĂ« sistem tĂ« veçantĂ«, dhe nĂ« tĂ« ardhmen mund tĂ« shpĂ«rndahen nĂ« kĂ«tĂ« mĂ«nyrĂ«. Por aktualisht, shumĂ« pĂ«rdorues realisht kryejnĂ« punĂ«n e tyre duke redaktuar vetĂ« nsâ3, kĂ«shtu qĂ« Ă«shtĂ« e dobishme tĂ« kesh kodin burimor pĂ«r ndĂ«rtimin e bibliotekave. NĂ«se dikush do tĂ« donte tĂ« merrte pĂ«rsipĂ«r punĂ«n e krijimit tĂ« bibliotekave dhe paketave tĂ« gatshme pĂ«r sistemet operative, ju lutem kontaktoni me listĂ«n e postĂ«s ns-developers.
MĂ« pas do tĂ« shqyrtojmĂ« tri mĂ«nyra pĂ«r tĂ« shkarkuar dhe ndĂ«rtuar nsâ3. E para Ă«shtĂ« tĂ« shkarkoni dhe tĂ« ndĂ«rtoni versionin zyrtar nga faqja kryesore. E dyta Ă«shtĂ« grumbullimi dhe ndĂ«rtimi i kopjeve tĂ« versioneve zhvillimore tĂ« installimit tĂ« bazĂ«s nsâ3. E treta Ă«shtĂ« pĂ«rdorimi i mjeteve tĂ« tjera tĂ« ndĂ«rtimit pĂ«r tĂ« shkarkuar mĂ« shumĂ« zgjerime pĂ«r nsâ3. Do tĂ« kalojmĂ« pĂ«rmes secilĂ«s, pasi mjetet paksa ndryshojnĂ«.
Përdoruesit e avancuar të Linux mund të pyesin se pse ns-3 nuk ofrohet si një paketë, si shumica e biblioteka të tjera që përdorin menaxherin e pakove? Megjithatë, megjithëse ekzistojnë paketa binare për shpërndarje të ndryshme Linux (p.sh. Debian), shumica e përdoruesve përfundojnë duke redaktuar libraritë dhe janë të detyruar ta rindërtojnë vetë ns-3, prandaj disponueshmëria e kodit burimor është e leverdisshme. Për këtë arsye, do t'i kushtojmë vëmendje instalimit nga kodi burimor.
Për shumicën e aplikacioneve ns-3 të drejtat root nuk janë të nevojshme, rekomandohet të përdoret një llogari përdoruesi pa privilegje.
3.2 Kushtet paraprake
I gjithë seti i librarive të disponueshme ns-3 ka një sërë varësish nga libraritë e jashtme, por në shumicën e rasteve ns-3 mund të ndërtohet dhe të përdoret me mbështetje nga disa komponente të zakonshme ( shpesh të instaluara si parazgjedhje): kompajleri C++, Python, redaktori i kodit burimor (p.sh., vim, emacs ose Eclipse) dhe, nëse përdoren repo zhvillimi, sistemet e kontrollit të versioneve Git. Shumica e përdoruesve fillestarë nuk duhet të shqetësohen nëse konfigurimi i tyre raporton disa funksione shtesë të humbura të 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 instalimin në sisteme të ndryshme, të cilat janë të disponueshme në adresën: .
Kapitulli "Kërkesat e Mëparshme" i kësaj wiki-shpjegimi tregon se cilat paketa kërkohen për mbështetje të opsioneve të zakonshme ns-3, si dhe ofron komandat që përdoren për të instaluar ato në shpërndarjet e zakonshme Linux ose macOS.
Mund të shfrytëzoni një mundësi të tillë si shqyrtimi i faqes wiki të ns-3 ose të faqes kryesore: , pasi aty ka shumë informacione. Duke filluar nga versioni i fundit ns-3 (ns-3.29), për të ekzekutuar ns-3 kërkohen mjetet e mëposhtme:
Mjeti Paketë/Version
- Kompajleri C++
clang++ ose g++ (g++ version 4.9 ose më shumë) - Python
python2 version >= 2.7.10, ose python3 version >=3.4 - Git
çdo version i fundit (për qasje në ns-3 në GitLab.com) - tar
çdo version i fundit (për shkarkimin e lëshimit të ns-3) - bunzip2
çdo version i fundit (për shkarkimin e lëshimit të ns-3)
PĂ«r tĂ« kontrolluar versionin e Python tĂ« instaluar si parazgjedhje, shkruani python -V. PĂ«r tĂ« kontrolluar versionin e g++, shkruani g++ -v. NĂ«se ndonjĂ«nga mjetet mungon ose janĂ« shumĂ« tĂ« vjetra, referohuni udhĂ«zimeve tĂ« instalimit nĂ« faqen wiki tĂ« nsâ3.
Nga ky moment, ne supozojmë se lexuesi po punon në Linux, MacOS ose emulatorin e mjedisit Linux, dhe ka të paktën mjetet e përmendura më sipër.
3.2.1 Shkarkimi i versionit ns-3 si arkiv burimor
Ky Ă«shtĂ« njĂ« mĂ«nyrĂ« veprimi pĂ«r pĂ«rdoruesit e rinj qĂ« dĂ«shirojnĂ« tĂ« shkarkojnĂ« dhe tĂ« eksperimentojnĂ« me versionet e fundit tĂ« lĂ«shuara dhe paketave tĂ« nsâ3. LĂ«shimet e nsâ3 publikohen nĂ« formĂ«n e arkivave tĂ« kompresuar tĂ« burimeve, tĂ« njohura ndonjĂ«herĂ« si tarball. tarball â ky Ă«shtĂ« njĂ« format i veçantĂ« i arkivit tĂ« programeve, nĂ« tĂ« cilin disa skedarĂ« janĂ« bashkuar sĂ« bashku. Arkivi zakonisht Ă«shtĂ« i kompresuar. Procesi i shkarkimit tĂ« nsâ3 Ă«shtĂ« tarball i thjeshtĂ«, ju vetĂ«m duhet tĂ« zgjidhni lĂ«shimin, ta shkarkoni dhe ta shpaketoni atĂ«.
Le tĂ« supozojmĂ« se, si pĂ«rdorues, dĂ«shironi tĂ« ndĂ«rtosh nsâ3 nĂ« njĂ« direktor tĂ« quajtur workspace. Ju do tĂ« jeni nĂ« gjendje tĂ« merrni njĂ« kopje tĂ« punĂ«s sĂ« lĂ«shimit duke shkruar nĂ« konsolĂ«n e Linux kĂ«to komanda (sigurohuni tĂ« zĂ«vendĂ«soni 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 Kujdesi për utilitarin e përdorur më sipër wget, i cili është një mjet i linjës së komandave për shkarkimin e objekteve nga interneti. Nëse nuk e keni instaluar atë, mund të përdorni shfletuesin tuaj për këtë qëllim.
Duke ndjekur këto hapa, do të kaloni në direktorinë ns-allinone-3.29, atje duhet të shihni disa skedarë dhe drejtime
$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.pyTani jeni gati pĂ«r tĂ« ndĂ«rtuar distribucionin bazĂ« tĂ« nsâ3 dhe mund tĂ« kaloni nĂ« seksionin qĂ« i kushtohet ndĂ«rtimit tĂ« nsâ3.
3.3 Shkarkimi i ns-3 me anë të Git
Kodi i nsâ3 Ă«shtĂ« i disponueshĂ«m nĂ« depozitĂ« Git nĂ« shĂ«rbimin GitLab.com nĂ« adresĂ«n . Grupi nsnam bashkon depo tĂ« ndryshme qĂ« pĂ«rdoren nga projekti me burim tĂ« hapur.
MĂ«nyra mĂ« e thjeshtĂ« pĂ«r tĂ« filluar pĂ«rdorimin e depozita Git Ă«shtĂ« tĂ« bĂ«ni fork ose tĂ« kloni ambientin nsâ3-allinone. Ky Ă«shtĂ« njĂ« grup skripta qĂ« menaxhon shkarkimin dhe ndĂ«rtimin e nĂ«n-sistemeve mĂ« tĂ« pĂ«rdorura tĂ« nsâ3. NĂ«se jeni tĂ« rinj nĂ« Git, termat "fork" dhe "klonim" mund tĂ« mos ju jenĂ« tĂ« njohur; nĂ«se Ă«shtĂ« kĂ«shtu, ne rekomandojmĂ« thjesht tĂ« kloni (krijoni kopjen tuaj) tĂ« depozitĂ«s qĂ« ndodhet nĂ« GitLab.com, nĂ« kĂ«tĂ« mĂ«nyrĂ«:
$ 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Ă« suaj nsâ3-allinone pak njĂ« pak mĂ« ndryshe nga direktoria e pĂ«rshkruar mĂ« sipĂ«r me arkivĂ«n e lĂ«shimit. Ajo duhet tĂ« duket afĂ«rsisht kĂ«shtu:
$ ls
build.py constants.py download.py README util.pyKujdesi nĂ« praninĂ« e skenarit download.py, i cili do tĂ« nxjerrĂ« pĂ«rveç nsâ3 dhe kodin burimor pĂ«rkatĂ«s. KĂ«tu keni njĂ« zgjedhje: ose tĂ« shkarkoni snapshot-in mĂ« tĂ« fundit tĂ« zhvillimit tĂ« nsâ3:
$ python download.pyose tĂ« preferoni lĂ«shimin e nsâ3, duke pĂ«rdorur flamurin -n pĂ«r tĂ« specifikuar numrin e lĂ«shimit:
$ python download.py -n ns-3.29Pas kĂ«tij hapi, nĂ« direktorinĂ« nsâ3-allinone do tĂ« shkarkohen repozitoritĂ« shtesĂ« nsâ3, bake, pybindgen dhe netanim.
Shënim
Në një makinë të pastër Ubuntu16.04, më duhej të ndryshoja komandën në këtë formë: $ sudo python3 download.py -n ns-3.29 (këtu dhe më tej shënimet e përkthyesit).
3.3.1 Shkarkimi i ns-3 me Bake
Dy metodat e pĂ«rmendura mĂ« sipĂ«r (arkivi i burimeve ose repozitari nsâ3-allinone nĂ«pĂ«rmjet Git) janĂ« tĂ« dobishme pĂ«r tĂ« marrĂ« njĂ« instalim sa mĂ« tĂ« thjeshtĂ« tĂ« nsâ3 me disa shtesa (pybindgen pĂ«r gjenerimin e lidhjeve Python dhe netanim pĂ«r animimin e rrjetit). Repozitori i tretĂ«, qĂ« ofrohet si standard nĂ« nsâ3-allinone, quhet bake.
Bake â ky Ă«shtĂ« njĂ« mjet pĂ«r ndĂ«rtim tĂ« koordinuar tĂ« softuerit nga disa repozita, zhvilluar pĂ«r projektin nsâ3. Bake mund tĂ« pĂ«rdoret pĂ«r tĂ« marrĂ« versionet zhvillimore 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Ă« DrejtpĂ«rdrejtĂ«, CradleNetwork Simulation Cradle, mundĂ«sia pĂ«r tĂ« krijuar lidhje tĂ« reja Python dhe aplikacione tĂ« ndryshme "nsâ3."
Shënim
CradleNetwork Simulation Cradle është një kuadër që lejon përdorimin e steka të vërteta të rrjetit TCP/IP brenda simulatorit të rrjetit.
NĂ«se mendoni se instalimi juaj i nsâ3 duhet tĂ« ketĂ« funksione tĂ« avancuara ose shtesĂ«, mund tĂ« ndiqni kĂ«tĂ« rrugĂ« instalimi.
NĂ« versionet e fundit tĂ« nsâ3 Bake u shtua nĂ« lĂ«shimin tar. NĂ« lĂ«shim pĂ«rfshihet njĂ« skedar konfigurimi qĂ« lejon shkarkimin e versioneve tĂ« softuerit qĂ« janĂ« aktuale nĂ« momentin e krijimit tĂ« lĂ«shimit. KĂ«shtu, pĂ«r shembull, versione Bake, qĂ« shpĂ«rndahet me lĂ«shimin e nsâ3.29, mund tĂ« pĂ«rdoret pĂ«r tĂ« marrĂ« komponentĂ«t pĂ«r kĂ«tĂ« lĂ«shim nsâ3 ose mĂ« herĂ«t, por nuk mund tĂ« pĂ«rdoret pĂ«r tĂ« nxjerrĂ« komponentĂ«t pĂ«r lĂ«shime mĂ« tĂ« fundit (nĂ«se skedari i pĂ«rshkrimit tĂ« paketĂ«s bakeconf.xml nuk Ă«shtĂ« pĂ«rditĂ«suar).
Ju gjithashtu 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.gitKursh në kryerjen e komandës git, duhet të shihni diçka si kjo:
Klonimi në 'bake'...
remote: Enumerimi i objekteve: 2086, përfunduar.
remote: Numërimi i objekteve: 100% (2086/2086), përfunduar.
remote: Kompresimi i objekteve: 100% (649/649), përfunduar.
remote: Totali 2086 (delta 1404), ri përdorur 2078 (delta 1399)
Marrja e objekteve: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, përfunduar.
Zgjidhja e deltas: 100% (1404/1404), përfunduar.Pas përfundimit të komandës clone duhet të keni një director me emrin bake, përmbajtja e të cilit duhet të duket pak a shumë kështu:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOVini re se keni shkarkuar disa skripte Python, një modul Python me emrin bake dhe një skedë konfigurimi XML. Hapi në vazhdim do të jetë përdorimi i këtyre skripteve për të shkarkuar dhe ndërtuar shpërndarjen e ns-3 sipas zgjedhjes tuaj. Ka disa qëllime konfigurimi të disponueshme:
ns-3.29: modul, përkatës për publikimin; ai do të shkarkojë komponentët, të ngjashëm me publikimin në tarball;
ns-3-dev: modul i ngjashëm, por duke përdorur kod nga pema e zhvillimit;
ns-allinone-3.29: modul që përfshin funksione shtesë të tjera, si ruterimi Click dhe Cradle e Simulimit të Rrjetit, Openflow për ns-3.
nsâ3-allinone: ngjashĂ«m me versionin e publikimit tĂ« modulit allinone, por pĂ«r kodin e zhvillimit.
Shënim
Click â njĂ« arkitekturĂ« programore modulare pĂ«r krijimin e ruterĂ«ve.
Openflow â protokolli i menaxhimit tĂ« procesit tĂ« trajtimit tĂ« tĂ« dhĂ«nave qĂ« kalojnĂ« pĂ«rmes rrjetit tĂ« transmetimit nga ruterĂ«t dhe switch-as, duke realizuar teknologjinĂ« e rrjeteve tĂ« konfiguroheshin nga programe.
Snapshot-i aktual i zhvillimit (jo-publikim) të ns-3 mund të gjendet në adresën:.
Zhvilluesit përpiqen të mbajnë të gjithë këto depo në gjendje koherente pune, por ato ndodhen në fushën e zhvillimit dhe përmbajnë kod jo-publikim, kështu që nëse nuk planifikoni të përdorni karakteristika të reja, atëherë zgjidhni publikimin zyrtar.
Mund të gjeni versionin më të fundit të kodit duke shqyrtuar listën e depove, ose duke vizituar faqen e internetit të "ns-3 Releases": dhe duke klikuar në lidhjen e versionit më të fundit. Në këtë shembull do të vazhdojmë me ns-3.29.
Tani, për të marrë komponentët që na nevojiten të ns-3, do të aplicojmë mjetin Bake. Le të themi disa fjalë hyrëse mbi funksionimin e Bake.
Bake funksionon duke shkarkuar burimet e pakove në direktorinë source dhe instalon bibliotekat në direktorinë e ndërtimit. Bake mund të nisni, duke iu referuar skedës binar, por nëse doni të nisni Bake jo nuk ndodhet në dosjen ku u ngarkua, është e preferueshme të shtoni rrugën në bake rrugën tuaj (variabël mjedisi PATH), për shembull si më poshtë (shembuj për shell-in Linux bash). Shkoni në dosjen "bake" dhe pastaj vendosni këto variabla mjedisi:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libKjo do ta vendosĂ« programin bake.py nĂ« rrugĂ«n e shell-it dhe do tĂ« lejojĂ« qĂ« programet e tjera tĂ« gjejnĂ« skedarĂ«t ekzekutivĂ« dhe bibliotekat qĂ« krijoni. bake. NĂ« disa raste pĂ«rdorimi bake, konfigurimi mĂ« sipĂ«r i PATH dhe PYTHONPATH nuk Ă«shtĂ« i nevojshĂ«m, por pĂ«r ndĂ«rtimin e plotĂ« tĂ« nsâ3-allinone (me paketa shtesĂ«) ai zakonisht Ă«shtĂ« i nevojshĂ«m.
Shkoni në dosjen e punës dhe shkruani në konsolën e mëposhtme:
$ ./bake.py configure -e ns-3.29Pastaj ne do t'ju kërkojmë Bake të kontrolloni nëse kemi mjaft mjete për të shkarkuar komponentët e ndryshëm. Shkruani:
$ ./bake.py checkDuhet të shihni diçka të ngjashme me këtë:
> Python - OK
> GNU C++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Rruga e kërkuar për mjete: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...Veçanërisht, mjetet e shkarkimit si Mercurial, CVS, Git dhe Bazaar janë kryesore në këtë hap, pasi ato 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 dini si) ose kërkoni ndihmë nga administratorin tuaj të sistemit.
Pastaj provoni të shkarkoni softuerin:
$ ./bake.py downloadrezultati duhet të jetë diçka si:
>> Duke kërkuar për varësinë e sistemit setuptools - OK
>> Duke kërkuar për varësinë e sistemit libgoocanvas2 - OK
>> Duke kërkuar për varësinë e sistemit gi-cairo - OK
>> Duke kërkuar për varësinë e sistemit pygobject - OK
>> Duke kërkuar për varësinë e sistemit pygraphviz - OK
>> Duke kërkuar për varësinë e sistemit python-dev - OK
>> Duke kërkuar për varësinë e sistemit qt - OK
>> Duke kërkuar për varësinë e sistemit g++ - OK
>> Shkarkimi i pybindgen-0.19.0.post4+ng823d8b2 (direktoria qëllimi:pybindgen) - OK
>> Shkarkimi i netanim-3.108 - OK
>> Shkarkimi i ns-3.29 - OKKjo do të thotë se janë shkarkuar tre burime. Tani shkoni në dosjen source dhe shkruani ls; duhet të shihni:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenTani jeni gati pĂ«r tĂ« ndĂ«rtuar shpĂ«rndarjen e nsâ3.
3.4 Ndërtimi i ns-3
PĂ«rveç shkarkimit tĂ« nsâ3, ka disa mĂ«nyra pĂ«r tĂ« ndĂ«rtuar nsâ3. E rĂ«ndĂ«sishme Ă«shtĂ« tĂ« theksojmĂ« se nsâ3 ndĂ«rtohet duke pĂ«rdorur mjetin e ndĂ«rtimit tĂ« quajtur Waf, i pĂ«rshkruar mĂ« poshtĂ«. Shumica e pĂ«rdoruesve do tĂ« punojnĂ« me Waf, por ka disa skenarĂ« tĂ« dobishĂ«m qĂ« do t'ju ndihmojnĂ« tĂ« filloni ose tĂ« organizoni mbledhje mĂ« komplekse. Prandaj, ju lutemi, para se tĂ« lexoni rreth Waf, shikoni build.py dhe ndĂ«rtimin me bake.
3.4.1 Ndërtimi me build.py
Kujdes! Ky hap ndërtimi është i disponueshëm vetëm nga versioni i arkivës burimore, marrë ashtu siç përshkruhet më sipër; dhe jo e shkarkuar përmes git ose bake.
Kur punoni me arkivĂ«n e versionit tarball, nĂ« nsâ3âallinone ka njĂ« skenar tĂ« dobishĂ«m qĂ« mund tĂ« thjeshtojĂ« ndĂ«rtimin e komponenteve. Quhet build.py. Ky program do ta konfigurojĂ« projektin pĂ«r ju nĂ« mĂ«nyrĂ«n mĂ« tĂ« dobishme. MegjithatĂ«, vini re se konfigurimet mĂ« tĂ« komplikuara dhe puna me nsâ3 zakonisht pĂ«rfshijnĂ« pĂ«rdorimin e sistemit tĂ« tij tĂ« ndĂ«rtimit, Waf, i cili do tĂ« paraqitet mĂ« vonĂ« nĂ« kĂ«tĂ« udhĂ«zues.
Nëse e keni shkarkuar me tarball, atëherë në drejtorinë tuaj ~\/workspace duhet të ketë një direktori me emrin diçka si ns-allinone-3.29. Shkruani në vijim:
$ .\/build.py --enable-examples --enable-tests
Kur thirret build.py ne aplikuam argumentet e linjĂ«s sĂ« komandĂ«s pĂ«r tĂ« ndĂ«rtuar shembujt dhe testet e pĂ«rdorura nĂ« kĂ«tĂ« udhĂ«zues, tĂ« cilat nuk ndĂ«rtohen automatikisht nĂ« nsâ3. NĂ« mĂ«nyrĂ« tĂ« paracaktuar, programi gjithashtu ndĂ«rtom ndonjĂ« modul tjetĂ«r tĂ« disponueshĂ«m. 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 tĂ« daljes nga kompjuterĂ«t qĂ« shfaqen nga skripti gjatĂ« ndĂ«rtimit tĂ« pjesĂ«ve tĂ« ndryshme qĂ« keni shkarkuar. Fillimisht, skripti do tĂ« pĂ«rpiqet tĂ« ndjekĂ« animuesin netanim, pastaj gjeneratorin e lidhjeve pybindgen dhe, nĂ« fund, nsâ3. NĂ« pĂ«rfundim tĂ« procesit, duhet tĂ« shihni sa vijon:
Waf: Duke lënë katalogun '\/path\/to\/workspace\/ns-allinone-3.29\/ns-3.29\/build'\n'duild' përfundoi me sukses (6m25.032s) \n\nModulet e ndërtuara:\nantenna aodv applications\nbridge buildings config-store\ncore csma csma-layout\ndsdv dsr energy \nfd-net-device flow-monitor internet\ninternet-apps lr-wpan lte\nmesh mobility mpi\nnetanim (pa Python) network nix-vector-routing \nolsr point-to-point point-to-point-layout \npropagation sixlowpan spectrum \nstats tap-bridge test (pa Python) \ntopology-read traffic-control uan \nvirtual-net-device visualizer wave \nwifi wimax \n\nModulet e pa ndërtuara (shihni udhëzuesin ns-3 për shpjegim):\nbrite click openflow \nDuke lënë katalogun .\/ns-3.29Në tri rreshtat e fundit të listës, ne shohim mesazhin për modulet që nuk u ndërtuan:
Modulet e pa ndërtuara (shihni udhëzuesin ns-3 për shpjegim):\nbrite clickKjo thjesht do të thotë se disa module ns-3, të cilat varen nga biblioteka të jashtme, mund të mos kenë qenë të ndërtuara, ose që për këtë konfigurim ndërtimi i tyre nuk kërkohet. Kjo nuk do të thotë se simulatori nuk është ndërtuar ose se modulet e ndërtuara do të funksionojnë gabimisht.
3.4.2 Ndërtimi me Bake
Nëse më lart për të marrë kodin burimor nga depoja e projektit përdorët bake, mund të vazhdoni ta përdorni atë gjithashtu për ndërtimin e ns-3. Shkruani:
$ ./bake.py builddhe duhet të shihni diçka të tillë:
>> Ndërtimi i pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Ndërtimi i netanim-3.108 - OK
>> Ndërtimi i ns-3.29 - OKKëshillë: gjithashtu mund të kryeni dy hapat njëherësh, ngarkimin dhe ndërtimin, duke thirrur «bake.py deploy».
Në ndërtimin e të gjitha componenteve mund të ndodhin dështime, por ndërtimi do të vazhdojë nëse komponenti nuk është thelbësor. Për shembull, një problem i fundit me portabilitetin ka qenë se castxml mund të ndërtohet me mjetin bake në të gjitha platformat. Në këtë rast do të shfaqet një mesazh si:
>> Ndërtimi i castxml - Problem
> Problemi: Varësia opsionale, moduli "castxml" dështoi
Kjo mund të zvogëlojë funksionalitetin e ndërtimit përfundimtar.
Megjithatë, 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ëse dëshironi të krijoni lidhjet e përditësuara të Python. Për shumicën e përdoruesve, nuk ka nevojë për këtë (të paktën deri sa ata të fillojnë të modifikojnë ns-3), prandaj këto paralajmërime mund të injorohen për tani.
Nëse ndodh një dështim, komanda e mëposhtme do t'ju japë një këshillë rreth varësive të munguar:
$ ./bake.py showDo të listohen varësitë e ndryshme të paketave që po përpiqeni të ndërtoni.
3.4.3 Ndërtimi me Waf
Derisa të arrijmë në këtë pikë, për të filluar ndërtimin e ns-3, kemi përdorur ose skriptin build.py, ose mjetin bake. Këto mjete janë të dobishme për ndërtimin e ns-3 dhe për mbështetje të bibliotekave. Në të vërtetë, për ndërtimin e tyre, ata ekzekutojnë mjetin e ndërtimit Waf nga drejtorinë ns-3. Waf instalohet së bashku me kodin burimor të ns-3. Shumica e përdoruesve për konfigurimin dhe ndërtimin e shpejtë të ns-3 kalojnë direkt në përdorimin e Waf. Pra, për të vazhduar, ju lutemi kaloni në drejtorinë ns-3, e cila e keni krijuar fillimisht.
Aktualisht, kjo nuk është absolutisht 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 është krijimi i një versioni të optimizuar të kodit. Në mënyrë për default, ju keni konfiguruar projektin tuaj për të ndërtuar një version debug. Le të shqyrtojmë projektin për të krijuar një ndërtim të optimizuar. Për t'i shpjeguar Waf se çfarë duhet të bëjë për ndërtimet e optimizuara, duke përfshirë shembuj dhe teste, do t'ju nevojitet të ekzekutoni komandat në vijim:
$ .\/waf clean
$ .\/waf configure --build-profile=optimized --enable-examples --enable-testsKjo do të fillojë Waf jashtë drejtorisë lokale (për lehtësinë tuaj). Komanda e parë ekzekuton pastrimin nga ndërtimi i mëparshëm, ajo zakonisht nuk është në mënyrë strikte e nevojshme, por është një praktikë e mirë (shihni gjithashtu profilin e ndërtimit më poshtë); kjo do të fshijë bibliotekat dhe skedarët e objektit të krijuara më parë të ndodhura në drejtorinë build\/. Kur projekti është rindërtuar dhe sistemi i ndërtimit kontrollon varësitë përkatëse, ju duhet të shihni një dalje që duket si kjo:
Vendosja e sipërme në : /home/ns3user/workspace/bake/source/ns-3-dev
Vendosja për të : /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 boost : titujt nuk u gjetën, ju lutemi, jepni një argument --boost-includes (shih ndihmën)
Kontrollimi për përfshirjet boost : titujt nuk u gjetën, ju lutemi, jepni një argument --boost-includes (shih 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 e pyembed '--cflags --libs --ldflags' : po
Testimi i konfigurimit të pyembed : po
Kërkesa për python-config për flamujt e 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 lokacionin e pybindgen : ../pybindgen ,!(e parashikuar)
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 tipeve uint64_t dhe long jo të nënshkruar : jo
Kontrollimi për copë kodi : jo
Kontrollimi për ekuivalencën e tipeve uint64_t dhe long long të nënshkruar : po
Kontrollimi për apidefs që mund të përdoren për lidhjet Python : gcc-LP64
Kontrollimi për cxxabi të brendshëm GCC : i plotë
Kontrollimi për modul python 'pygccxml' : nuk u gjet
Kontrollimi për lokacionin 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 implementimin e saktë të lartë : 128-bit integer ,!(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 lokacionin 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ërmbledhje e karakteristikave opsionale të ns-3:
Profili i ndërtimit : i optimizuar
Direktori i ndërtimit :
Integrimi BRITE : nuk është aktivizuar (BRITE nuk është aktivizuar (shih opsionin --with-brite))
Koleksioni i ngjarjeve të DS Metrics : nuk është aktivizuar (deri tani të ç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
(klasa libgcrypt nuk u gjet: ju mund ta përdorni ,!libgcrypt-config për të gjetur lokacionin e saj.) GtkConfigStore : nuk është aktivizuar (biblioteka 'gtk+-3.0 >= 3.0' nuk u gjet)
Mbështetje MPI : nuk është aktivizuar (opsioni --enable-mpi nuk është zgjedhur)
Integrimi ns-3 Click : nuk është aktivizuar (nsclick nuk është aktivizuar (shih opsionin --with-nsclick))
Integrimi ns-3 OpenFlow : nuk është aktivizuar (Bibliotekat standard të boost nuk u gjetën)
Shalët e Simulimit të Rjetit : nuk është aktivizuar (NSC nuk u gjet (shih opsionin --with-nsc))
PlanetLab FdNetDevice : nuk është aktivizuar (sistemi operativ PlanetLab nuk u zbulua ,!(shih opsionin --force-planetlab)) PyViz vizualizuesi : i aktivizuar
Përkrahja e Skanning për API-në Python : nuk është aktivizuar (Moduli python 'pygccxml' i mungon)
Lidhjet Python : të aktivizuara
Simulatori i Kohës Reale : i aktivizuar
Nxjerrja e të dhënave statistikore SQlite : nuk është aktivizuar (biblioteka 'sqlite3' nuk u gjet)
Ura Tap : e aktivizuar
FdNetDevice Tap : i aktivizuar
Testet : të aktivizuara
Përbërësit e Threading : të aktivizuar
Përdor sudo për të vendosur bitin e suid : nuk është aktivizuar (opsioni --enable-sudo nuk është zgjedhur)
XmlIo : i aktivizuar
'konfiguro' pĂ«rfundoi me sukses (6.387s)Kujdesi pĂ«r pjesĂ«n e fundit tĂ« listĂ«s tĂ« lartpĂ«rmendur. Disa opsione tĂ« ns-3 nuk aktivizohen si parazgjedhje ose kĂ«rkojnĂ« mbĂ«shtetje nga sistemi pĂ«r funksionimin e duhur. PĂ«r shembull, pĂ«r tĂ« aktivizuar XmlTo, duhet tĂ« jetĂ« e pranishme biblioteka libxml-2.0. NĂ«se kjo bibliotekĂ« nuk gjendet dhe funksioni pĂ«rkatĂ«s i ns-3 nuk aktivizohet, do tĂ« shfaqet njĂ« mesazh. Gjithashtu, vini re se ka mundĂ«sinĂ« tĂ« pĂ«rdorni komandĂ«n â informasiya tÉhlĂŒkÉsizliyi pĂ«r tĂ« vendosur bitin suid "vendosja e ID-sĂ« sĂ« grupit gjatĂ« ekzekutimit" pĂ«r disa programe. Ai nuk Ă«shtĂ« aktivizuar si parazgjedhje, dhe kĂ«shtu kjo funksionalitet shfaqet si "nuk Ă«shtĂ« aktivizuar" ("not enabled"). SĂ« fundmi, pĂ«r tĂ« marrĂ« njĂ« listĂ« tĂ« opsioneve tĂ« aktivizuara, pĂ«rdorni Waf me parametrin --check-config.
Tani kthehemi dhe kalojmë prapa në ndërtimin e dekomanduar, që përmban shembuj dhe teste.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-testsSistemi i ndërtimit tani është konfiguruar, dhe mund të ndërtoni versionet e dekomanduara të programeve ns-3, thjesht duke shkruar:
$ ./wafLe të themi se hapat e përshkruar më lart ju bënë të ndërroni pjesën e sistemit ns-3 dy herë, por tani e dini si të ndryshoni konfigurimin dhe të ndërtoni kodin e optimizuar.
Për të kontrolluar se cili profil është aktiv për këtë konfigurim projekti, ekziston komanda:
$ ./waf --check-profile
Waf: Duke hyrë në direktorium `path/to/ns-3-allinone/ns-3.29/build'
Profil i ndërtimit: debugSkenari i mbuluar më sipër build.py po ashtu mbështet argumentet --enable-examples dhe --enable-tests, por opsione të tjera Waf ai nuk i mbështet drejtpërdrejt. Për shembull, kjo nuk do të funksionojë:
$ ./build.py --disable-pythonreaksioni do të jetë:
build.py: error: no such option: --disable-pythonMegjithatĂ«, operatori special -âŻ- mund tĂ« pĂ«rdoret pĂ«r tĂ« kaluar parametra tĂ« tjerĂ« pĂ«rmes waf, kĂ«shtu qĂ« nĂ« vend tĂ« asaj qĂ« pĂ«rmendet mĂ« sipĂ«r do tĂ« funksionojĂ« komanda e mĂ«poshtme:
$ ./build.py -- --disable-pythonsepse ajo krijon komandën kryesore ./waf configure --disable-python. Këtu janë edhe disa këshilla fillestare për Waf.
Trajtimi i gabimeve të ndërtimit
LĂ«shimet e nsâ3 janĂ« testuar nĂ« kompilatorĂ«t mĂ« tĂ« fundit C++, qĂ« ishin nĂ« dispozicion nĂ« momentin e lĂ«shimit nĂ« distribuime tĂ« zakonshme Linux dhe MacOS. MegjithatĂ«, me kalimin e kohĂ«s, dalin distribucione tĂ« reja me kompilatorĂ« tĂ« rinj, dhe kĂ«ta kompilatorĂ« mĂ« tĂ« rinj, nĂ« pĂ«rgjithĂ«si, janĂ« mĂ« tĂ« rreptĂ« nĂ« lidhje me paralajmĂ«rimet. Nsâ3 e konfiguron ndĂ«rtimin e saj pĂ«r tĂ« trajtuar tĂ« gjitha paralajmĂ«rimet si gabime, prandaj ndonjĂ«herĂ«, nĂ«se pĂ«rdorni njĂ« version mĂ« tĂ« vjetĂ«r nĂ« njĂ« sistem mĂ« tĂ« ri, njĂ« paralajmĂ«rim nga kompilatori mund tĂ« ndalĂ« ndĂ«rtimin.
PĂ«r shembull, mĂ« parĂ« u publikua nsâ3.28 pĂ«r Fedora 28, e cila pĂ«rfshinte njĂ« version tĂ« ri kryesor gcc (gcc-8). NdĂ«rtimi i lĂ«shimit nsâ3.28 ose versioneve mĂ« tĂ« vjetra 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, duke filluar nga nsâ3.28.1, Waf Ă«shtĂ« nĂ« dispozicion njĂ« opsion pĂ«r tĂ« zgjidhur kĂ«to probleme. Ai çon nĂ« çaktivizimin e flamurit "-Werror" nĂ« g++ dhe clang++. Ky Ă«shtĂ« opsioni "--disable-werror", ai duhet tĂ« aplikohet gjatĂ« konfigurimit:
$ ./waf configure --disable-werror --enable-examples --enable-testsKonfiguro ose ndërto
Disa komandĂ« Waf kanĂ« kuptim vetĂ«m nĂ« fazĂ«n e konfigurimit, ndersa disa veprojnĂ« vetĂ«m nĂ« fazĂ«n e ndĂ«rtimit. PĂ«r shembull, nĂ«se dĂ«shironi tĂ« pĂ«rdorni funksionet e emulimit nĂ« nsâ3, mund tĂ« aktivizoni vendosjen e bitit suid duke pĂ«rdorur â informasiya tÉhlĂŒkÉsizliyi, siç pĂ«rshkruhet mĂ« lart. Kjo do tĂ« anashkalojĂ« komandat e fazĂ«s sĂ« konfigurimit, dhe kĂ«shtu do tĂ« mund tĂ« ndryshoni konfigurimin duke pĂ«rdorur komandĂ«n e mĂ«poshtme, e cila gjithashtu aktivizon shembujt dhe testet.
$ ./waf configure --enable-sudo --enable-examples --enable-testsNĂ«se e bĂ«ni kĂ«tĂ«, Waf do tĂ« nisi â informasiya tÉhlĂŒkÉsizliyi, pĂ«r tĂ« ndryshuar programet e ndĂ«rtimit tĂ« soketeve tĂ« kodit tĂ« emulimit pĂ«r t'u ekzekutuar me tĂ« drejta root. NĂ« Waf ka njĂ« shumicĂ« opsionesh tĂ« tjera pĂ«r fazat e konfigurimit dhe ndĂ«rtimit. PĂ«r tĂ« eksploruar opsionet, shkruani:
$ ./waf --helpNë seksionin e ardhshëm do të përdorim disa opsione të lidhura me testimin.
Profilet e ndërtimit
Tani kemi parë se si mund ta konfigurojmë Waf për ndërtimet debug dhe optimized:
$ ./waf --build-profile=debugKa gjithashtu një profil të përkohshëm të ndërtimit, release. Opsioni -d është një sinonim për --build-profile. Profili i ndërtimit kontrollon përdorimin e regjistrimeve, deklaratave (assertions) dhe çelësave të optimizimit të kompilatorit:

Si për të parë, regjistrimi dhe vërtetimet janë të disponueshme vetëm në ndërtimet e diagnostikimit. Praktika e rekomanduar është të zhvilloni skenarin tuaj në modin e diagnostikimit, pastaj të kryeni prozheksionet e përsëritura (për statistikat ose ndryshimin e parametrave) në profilin e ndërtimit optimizuar.
Nëse keni kod që duhet të ekzekutohet vetëm në profile të caktuara ndërtimi, përdorni makron Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "Pjesë e një linje dalje..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Kryer: " << timer << std::endl;)Për default, Waf vendos artefaktet e ndërtimit në direktorinë e ndërtimit. Mund të specifikoni një direktori tjetër daljeje me opsionin - -out, për shembull:
$ ./waf configure --out=my-build-dirDuke e kombinuar këtë me profile të ndërtimit, mund të kaloni lehtësisht midis 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 ndërtime të shumta, pa e shkruar përsëri çdo herë ndërtimin e fundit. Kur kaloni në një profil tjetër, Waf do të kompilohet vetëm ai, pa e rikonvertuar tërë.
Kur kaloni në këtë mënyrë midis profileve të ndërtimit, duhet të kujdeseni që çdo herë të jepni të njëjtat parametra konfigurimi. Do t'ju ndihmojë të shmangni gabimet përcaktimi i disa variablave të mjedisit:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf buildKompilatorët dhe flamujt
Në shembujt e mësipërm Waf për ndërtimin e ns-3 përdor kompilerin C++ nga GCC ( g++). Megjithatë, mund të ndryshoni kompilerin C++ të përdorur, duke ndihmuar variablën e mjedisit CXX. Për shembull, për të përdorur kompilerin 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:
Informata mĂ« tĂ« detajuara rreth distcc dhe kompilimit tĂ« shpĂ«rndarĂ« mund tĂ« gjenden nĂ« faqen e projektit nĂ« seksionin "Dokumentacioni". PĂ«r tĂ« shtuar flamuj kompiliues gjatĂ« konfigurot tĂ« ns-3, pĂ«rdorni variablĂ«n e mjedisit CXXFLAGS_EXTRA.MĂ« shumĂ« informacion rreth distcc dhe kompilimit tĂ« shpĂ«rndarĂ« mund tĂ« gjeni nĂ« faqen e projektit nĂ« seksionin "Dokumentacia". PĂ«r tĂ« shtuar flamujt e kompilatorit gjatĂ« konfigurimit tĂ« nsâ3, pĂ«rdorni ndryshoren mjedisore CXXFLAGS_EXTRA.
Instalimi
Waf mund të përdoret për të instaloni biblioteka në vende të ndryshme të sistemit. Sipas parashikimit, bibliotekat e mbledhura dhe skedarët ekzekutivë ndodhen në direktorine build, dhe përsa Waf di vendndodhjen e këtyre bibliotekave dhe skedarëve ekzekutivë, nuk është e nevojshme të instaloni bibliotekat diku tjetër.
Nëse përdoruesit preferojnë instalimin jashtë direktorive të mbledhjes, ata mund të ekzekutojnë komandën .\/waf install. Sipas parazgjedhjes, prefiksi për instalim është /usr/local, prandaj .\/waf install do të instaloje programet në /usr/local/bin, bibliotekat në /usr/local/lib dhe skedarët e titujve në /usr/local/include. Të drejtat e super përdoruesit zakonisht kërkohen për të instaluar me prefiksin e parazgjedhur, kështu që komanda tipike do të jetë sudo .\/waf install. Kur ekzekutohet, Waf do të preferojë fillimisht të përdorë bibliotekat e përbashkëta në direktorine e mbledhjes, pastaj do të kërkojë bibliotekat përgjatë rrugës së bibliotekave të konfiguruara në ambientin lokal. Pra, kur instaloni bibliotekat në sistem është një praktikë e mirë të verifikoni se po përdoren bibliotekat e duhura. Përdoruesit mund të zgjedhin instalimin me një prefiks tjetër, duke kaluar gjatë konfigurimit opsionin --prefix, për shembull:
.\/waf configure --prefix=\/opt\/localNëse më vonë, pas mbledhjes, përdoruesi jep komandën e instalimit . /waf, do të përdoret prefiksi /opt/local.
Ekipa .\/waf clean duhet të përdoret para rikonfigurimit të projektit, nëse për instalimin do të përdoret Waf me një prefiks tjetër.
KĂ«shtu, pĂ«r tĂ« pĂ«rdorur nsâ3 nuk Ă«shtĂ« e nevojshme tĂ« thirreni .\/waf install. PĂ«r shumicĂ«n e pĂ«rdoruesve, kjo komandĂ« nuk do tĂ« nevojitet, pasi Waf do tĂ« kapĂ« bibliotekat aktuale nga direktorina e mbledhjes, por disa pĂ«rdorues mund ta gjejnĂ« kĂ«tĂ« tĂ« dobishĂ«m, nĂ«se aktiviteti i tyre pĂ«rfshin punĂ«n me programe jashtĂ« direktorive nsâ3.
Waf është unik
NĂ« nivelin e lartĂ« tĂ« pemĂ«s sĂ« burimit tĂ« nsâ3 ekziston vetĂ«m njĂ« skenar Waf. Pasi tĂ« filloni punĂ«n, do tĂ« kaloni shumĂ« kohĂ« nĂ« direktorine scratch\/ ose mĂ« thellĂ«, nĂ«src\/... dhe nĂ« tĂ« njĂ«jtĂ«n kohĂ« do tĂ« keni nevojĂ« tĂ« ekzekutoni Waf. Mund ta mbani mend se ku jeni dhe tĂ« ekzekutoni Waf nĂ« mĂ«nyrĂ« tĂ« tillĂ«:
$ ..\/..\/..\/waf ...por kjo do tĂ« jetĂ« e lodhshme dhe e prirur ndaj gabimeve, kĂ«shtu qĂ« ekzistojnĂ« zgjidhje mĂ« tĂ« mira. NjĂ« nga mĂ«nyrat mĂ« tĂ« 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, dhe tjetra pĂ«r redaktimin e kodit burimor. NĂ«se keni vetĂ«m tarball, atĂ«herĂ« mund tĂ« ndihmojĂ« variabli i ambientit:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && .\/waf $* ; }
$ cd scratch
$ waff buildNë direktorinë e modulit, mund të duket joshëse të shtoni një skenar trivial waf sipas shembullit exec ..\/..\/waf. Ju lutemi, mos e bëni këtë. Kjo ngatërron fillestarët dhe nëse kryhet keq, çon në gabime të vështira për t'u zbuluar gjatë ndërtimit. Zgjidhjet e treguara më lart janë rruga që duhet ndjekur.
3.5 Testimi i ns-3
Mund tĂ« ekzekutoni testet modulare tĂ« distribucionit nsâ3 duke ekzekutuar skenarin .\/test.py:
$ .\/test.pyKëto teste ekzekutohen paralelisht me Waf. Në fund, duhet të shihni një mesazh që tregon se
92 nga 92 testet kaluan (92 kaluan, 0 dështuan, 0 u rrëzuan, 0 gabime valgrind)Ky është një mesazh i rëndësishëm për identifikimin e dështimeve, rrëzimeve ose gabimeve valgrind, dhe tregon për probleme në kod ose moskompatibilitet midis mjeteve dhe kodit.
Do të shihni gjithashtu përfundimin përfundimtar nga Waf dhe testuesi që ekzekuton çdo test, i cili do të duket kështu:
Waf: Duke hyrë në direktorine `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
Waf: Duke lënë direktorine `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
'ndërtimi' përfundoi me sukses (1.799s)
Modulet e ndërtuara:
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
KALUAR: TestSuite ns3-wifi-interference
KALUAR: TestSuite histogram
...
KALUAR: TestSuite object
KALUAR: TestSuite random-number-generators
92 nga 92 testet kaluan (92 kaluan, 0 dështuan, 0 u rrëzuan, 0 gabime valgrind)
Kjo komandĂ« zakonisht ekzekutohet nga pĂ«rdoruesit pĂ«r tĂ« bĂ«rĂ« njĂ« verifikim tĂ« shpejtĂ« tĂ« saktĂ«sisĂ« sĂ« ndĂ«rtimit tĂ« distribucionit nsâ3. (Mbani nĂ« mend se rendi i rreshtave «KALUAR: âŠÂ» mund tĂ« ndryshojĂ«, kjo Ă«shtĂ« nĂ« rregull. E rĂ«ndĂ«sishme Ă«shtĂ« qĂ« nĂ« rreshtin pĂ«rfundimtar nĂ« fund tĂ« raportit, tĂ« gjitha kontrollimet tĂ« kalojnĂ«; asnjĂ« test nuk pĂ«rfundoi me dĂ«shtim apo u rrĂ«zua.) Dhe Waf, dhe test.py do tĂ« shpĂ«rndajĂ« punĂ«n nĂ« bĂ«rthamĂ«t e disponueshme tĂ« procesorit tĂ« makinerisĂ«.
3.6 Ekzekutimi i skenarit
Zakonisht, ne ekzekutojmĂ« skenarĂ«t nĂ«n mbikĂ«qyrjen e Waf. Kjo lejon sistemin e ndĂ«rtimit tĂ« garantojĂ« se rrugĂ«t pĂ«r biblioteka tĂ« pĂ«rgjithshme janĂ« vendosur saktĂ« dhe qĂ« bibliotekat janĂ« tĂ« disponueshme gjatĂ« ekzekutimit. PĂ«r tĂ« ekzekutuar programin, thjesht pĂ«rdorni Waf me parametrin -âŻ-run. Le tĂ« ekzekutojmĂ« pĂ«r nsâ3 ekuivalentin e programit tĂ« pranishĂ«m hello world, duke shkruar kĂ«tĂ«:
$ .\/waf --run hello-simulatorWaf do të kontrollojë së pari nëse programi është ndërtuar si duhet dhe nëse është e nevojshme do të kryejë ndërtimin. Pastaj Waf do të ekzekutojë programin, i cili do të japë nga ky rezultatin.
Hello SimulatorPĂ«rshĂ«ndetje! Tani ju jeni njĂ« pĂ«rdorues i nsâ3!
ĂfarĂ« duhet tĂ« bĂ«j nĂ«se nuk e shoh rezultatin?
NĂ«se shihni mesazhe Waf, qĂ« tregojnĂ« se ndĂ«rtimi u pĂ«rfundua me sukses, por nuk e shihni rezultatin «Hello Simulator», atĂ«herĂ« ka mundĂ«si qĂ« keni kaluar nĂ« seksionin [NdĂ«rtimi-me-Waf] dhe e keni kaluar, por keni harruar tĂ« ktheheni mbrapsht nĂ« mod optimized. TĂ« gjithĂ« rezultatin e konsolĂ«s, qĂ« pĂ«rdoret nĂ« kĂ«tĂ« udhĂ«zues, pĂ«rdor njĂ« komponent tĂ« veçantĂ« nsâ3, i cili kryen regjistrimin e log-ave dhe aplikohet pĂ«r tĂ« printuar mesazhe tĂ« pĂ«rdoruesit nĂ« konsolĂ«. Rezultati nga ky komponent automatikisht ndalohet kur kompozohet kodi i optimizuar â ai Ă«shtĂ« "i optimizuar". NĂ«se nuk e shihni rezultatin "Hello Simulator", shkruani kĂ«tĂ«: debug$ .\/waf configure --build-profile=debug --enable-examples --enable-tests
pĂ«r tĂ« konfiguruarpĂ«r ndĂ«rtimin e versioneve tĂ« debug tĂ« programeve nsâ3, tĂ« cilat pĂ«rfshijnĂ« shembuj dhe teste. Pastaj duhet tĂ« rindĂ«rroni versionin aktual tĂ« kodit tĂ« debugg-uar, duke shkruar Waf Tani, nĂ«se ekzekutoni programin
$ ./wafhello-simulator , duhet tĂ« shihni rezultatin e pritur.PĂ«r tĂ« kaluar argumente tĂ« komandĂ«s nĂ« programin nsâ3, pĂ«rdorni kĂ«tĂ« model:
3.6.1 Aksionet e komandës
$ .\/waf --run <ns3-program> --command-template="%s <args>"
ZĂ«vendĂ«soni <ns3-program> me emrin e programit tuaj dhe me argumentet. Argumenti-âŻ-command-template Ă«shtĂ« nĂ« thelb njĂ« recetĂ« pĂ«r ndĂ«rtimin e njĂ«rĂ«s komande reale qĂ« pĂ«rdoret pĂ«r ekzekutimin e programit. Waf kontrollon qĂ« ndĂ«rtimi tĂ« jetĂ« pĂ«rfunduar, vendos rrugĂ«t nĂ« bibliotekĂ«n e pĂ«rbashkĂ«t, pastaj duke pĂ«rdorur modelin e dhĂ«nĂ« tĂ« komandĂ«s dhe duke vendosur emrin e programit nĂ« vend tĂ« mbushĂ«sit %s, thĂ«rret skedarin ekzekutues. NĂ«se ky sintaksis ju duket e komplikuar, ka njĂ« variant mĂ« tĂ« thjeshtĂ« qĂ« pĂ«rfshin programin nsâ3 dhe argumentet e tij tĂ« vendosura nĂ« thonjĂ«za tĂ« vetme: pĂ«r Waf $ .\/waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...' Waf NjĂ« shembull tjetĂ«r, veçanĂ«risht i dobishĂ«m, Ă«shtĂ« ekzekutimi selektiv i grupeve tĂ« testeve. Le tĂ« supozojmĂ« se ekziston njĂ« grup testi (suite) mytest (nĂ« fakt, nuk ekziston). MĂ« parĂ« pĂ«rdorĂ«m skriptin .\/test.py pĂ«r tĂ« ekzekutuar njĂ« numĂ«r tĂ« madh testesh paralelisht, i cili shumĂ« herĂ« thĂ«rret programin e testimit
test-runner. Thirrja test-runner. Thirje test-runner direkt për të kryer një provë:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"Argumentet do të dërgohen në program test-runner. Pasi mytest nuk ekziston, do të gjenerohet një mesazh gabimi. Për të printuar parametrat e disponueshëm për test-runner, shkruani:
$ ./waf --run test-runner --command-template="%s --help"3.6.2 Debugging
PĂ«r tĂ« ekzekutuar programet ns-3 nĂ« menaxherin tjetĂ«r, siç Ă«shtĂ« debugar (p.sh. gdb) ose mjeti pĂ«r kontrollin e memories (p.sh. valgrind), pĂ«rdorni njĂ« formĂ« tĂ« ngjashme -âŻ-command-template = "âŠ". PĂ«r shembull, pĂ«r tĂ« ekzekutuar nĂ« debugarin gdb programin tuaj hello-simulator ns-3 me argumentet :
$ ./waf --run=hello-simulator --command-template="gdb %s --args "Kujdes, emri i programit ns-3 vjen me argumentin -âŻ-run, dhe mjeti i menaxhimit (kĂ«tu gdb) Ă«shtĂ« tokeni i parĂ« nĂ« argumentin Ă«shtĂ« nĂ« thelb njĂ« recetĂ« pĂ«r ndĂ«rtimin e njĂ«rĂ«s komande reale qĂ« pĂ«rdoret pĂ«r ekzekutimin e programit. Waf kontrollon qĂ« ndĂ«rtimi tĂ« jetĂ« pĂ«rfunduar, vendos rrugĂ«t nĂ« bibliotekĂ«n e pĂ«rbashkĂ«t, pastaj duke pĂ«rdorur modelin e dhĂ«nĂ« tĂ« komandĂ«s dhe duke vendosur emrin e programit nĂ« vend tĂ« mbushĂ«sit %s, thĂ«rret skedarin ekzekutues. NĂ«se ky sintaksis ju duket e komplikuar, ka njĂ« variant mĂ« tĂ« thjeshtĂ« qĂ« pĂ«rfshin programin nsâ3 dhe argumentet e tij tĂ« vendosura nĂ« thonjĂ«za tĂ« vetme:. Opsioni -âŻ-args raporton gdb, e cila pjesa tjetĂ«r e komandĂ«s i takon programit 'tĂ« ulĂ«t'. (Disa versione gdb nuk e kuptojnĂ« opsionin -âŻ-args. NĂ« kĂ«tĂ« rast, hiqni argumentet e programit nga Ă«shtĂ« nĂ« thelb njĂ« recetĂ« pĂ«r ndĂ«rtimin e njĂ«rĂ«s komande reale qĂ« pĂ«rdoret pĂ«r ekzekutimin e programit. Waf kontrollon qĂ« ndĂ«rtimi tĂ« jetĂ« pĂ«rfunduar, vendos rrugĂ«t nĂ« bibliotekĂ«n e pĂ«rbashkĂ«t, pastaj duke pĂ«rdorur modelin e dhĂ«nĂ« tĂ« komandĂ«s dhe duke vendosur emrin e programit nĂ« vend tĂ« mbushĂ«sit %s, thĂ«rret skedarin ekzekutues. NĂ«se ky sintaksis ju duket e komplikuar, ka njĂ« variant mĂ« tĂ« thjeshtĂ« qĂ« pĂ«rfshin programin nsâ3 dhe argumentet e tij tĂ« vendosura nĂ« thonjĂ«za tĂ« vetme: dhe pĂ«rdorni grupin e komandave gdb args.) Mund tĂ« pĂ«rbashkojmĂ« kĂ«tĂ« recetĂ« dhe atĂ« tĂ« mĂ«parshme pĂ«r tĂ« ekzekutuar testin nĂ«n debugar:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Direktoria e punës
Waf duhet tĂ« ekzekutohet nga pozita e tij nĂ« krye tĂ« pemĂ«s ns-3. Kjo dosje bĂ«het katalogu i punĂ«s, ku do tĂ« shkruhen skedarĂ«t e daljes. Por çfarĂ« tĂ« bĂ«ni nĂ«se dĂ«shironi tĂ« ruani kĂ«ta skedarĂ« jashtĂ« pemĂ«s sĂ« burimeve ns-3? PĂ«rdorni argumentin -âŻ-cwd:
$ ./waf --cwd=...Ndoshta do t'ju jetë më e lehtë të merrni skedarët e daljes në katalogun tuaj të punës. Në këtë rast, një veprim i tillë jo i drejtpërdrejtë 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 katalogun aktual tĂ« punĂ«s, kalon nĂ« katalogun Waf, dhe pastaj instruon Waf pĂ«r tĂ« ndryshuar katalogun e punĂ«s pĂ«rsĂ«ri nĂ« atĂ« tĂ« ruajtur para se tĂ« niste programin nĂ« katalogun aktual tĂ« punĂ«s. E pĂ«rmendim komandĂ«n -âŻ-cwd pĂ«r plotĂ«sinĂ« e shpjegimit, shumica e pĂ«rdoruesve thjesht ekzekutojnĂ« Waf nga katalogu i nivelit tĂ« lartĂ« dhe atje gjenerojnĂ« skedarĂ«t e daljes.
Burimi: habr.com
