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

Udhëzues për simulatorin e rrjetit ns-3. Këndi 3
kaptinat 1,2

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

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

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

Kujdesi 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.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Ă« 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.git

Kursh 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 TODO

Vini 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:

  1. ns-3.29: modul, përkatës për publikimin; ai do të shkarkojë komponentët, të ngjashëm me publikimin në tarball;

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

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

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

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":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 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/lib

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

Pastaj 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 check

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

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

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

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

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

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

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

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

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

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

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

$ ./waf

Le 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: debug

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

reaksioni do të jetë:

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

MegjithatĂ«, 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-python

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

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

NĂ«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 --help

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

Ka 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:

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

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

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

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

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

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

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

Waf 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 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, 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ë konfiguruar

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

$ ./waf

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

Vazhdimi: kapitulli 4

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster