
3 Alustamine
3.1 Ălevaade
3.2 Eeltingimused
3.2.1 ns-3 vÀljaande allalaadimine lÀhtekoodi arhiivina
3.3 ns-3 allalaadimine Gitiga
3.3.1 ns-3 allalaadimine Bake'i abiga
3.4 ns-3 koostamine
3.4.1 Koostamine build.py abil
3.4.2 Koostamine Bake'i abil
3.4.3 Koostamine Wafi abil
3.5 ns-3 testimine
3.6 Skripti kÀivitamine
3.6.1 KĂ€skluste argumendid
3.6.2 Silumine
3.6.3 Töökaust
LĂŒhipeatĂŒkk 3
Alustamine
See peatĂŒkk on suunatud selleks, et valmistada lugejat ette tööks arvutiga, kuhu ns-3 vĂ”ib-olla kunagi pole installitud. Ălevaade katab toetatud platvormid, eeltingimused, ns-3 saamise meetodid, ns-3 koostamise meetodid ja teie koostamise kontrollimise ning lihtsate programmide kĂ€ivitamise meetodid.
3.1 Ălevaade
Simulaator ns-3 on ĂŒles ehitatud kui töötavate tarkvararaamatukogude sĂŒsteem. Koostamise ajal lingitakse kasutaja programmide kood nende raamatukogudega. Kasutajate programmide kirjutamiseks kasutatakse programmeerimiskeeli C++ vĂ”i Python.
Ns-3 levitatakse lĂ€htekoodina, mis tĂ€hendab, et sihtsĂŒsteem peab omama tarkvaraarenduse keskkonda, et esmalt raamatukogusid koostada ja seejĂ€rel kasutajaprogrammi koostada. Ăldiselt vĂ”ib ns-3 levitada valmis raamatukogudena konkreetse sĂŒsteemi jaoks, ning tulevikus vĂ”ib neid levitada sellisel viisil. Kuid praegu tegelevad paljud kasutajad oma töö tegemisega ns-3 enda redigeerimise kaudu, seega on kasulik omada lĂ€htekoodi raamatukogude koostamiseks. Kui keegi soovib vĂ”tta enda peale valmis raamatukogude ja pakettide loomise tööde tegemise, palun vĂ”tke ĂŒhendust meililisti. ns-developers.
JĂ€rgmisena vaatame kolme viisi ns-3 allalaadimiseks ja koostamiseks. Esimene on allalaadimine ja ametliku versiooni koostamine pĂ”hisaidilt. Teine on arendusversioonide koopia valimine ja koostamine ns-3 baaskeskkonnast. Kolmas on lisakogumise tööriistade kasutamine, et laadida alla rohkem laiendusi ns-3 jaoks. LĂ€bime igaĂŒhe, kuna tööriistad erinevad veidi.
Kogenud Linuxi kasutajad vĂ”ivad kĂŒsida, miks nsâ3 ei esitatakse pakendidena nagu enamik teisi teegid, mis kasutavad paketihalduri? Hoolimata sellest, et olemas on binaarpakendid erinevate Linuxi distributsioonide jaoks (nt Debian), lĂ”ppkokkuvĂ”ttes kohandavad enamik kasutajaid teeke ja peavad nsâ3 ise ĂŒmber kompileerima, mistĂ”ttu lĂ€htekoodi kĂ€ttesaadavus on mugav. SeetĂ”ttu keskendume me lĂ€htekoodist installimisele.
Enamik nsâ3 rakendusi ei vaja Ă”igusi, soovitatakse kasutada privileegita kasutajakontot. root Kogu nsâ3 teekide komplekt sĂ”ltub mĂ”nest kolmanda osapoole teegist, kuid enamasti on nsâ3 vĂ”imalik kompileerida ja kasutada mitmete levinud (tihti vaikimisi installitud) komponentidega: C++ kompilaator, Python, lĂ€htekoodi toimetaja (nt.
3.2 Eeltingimused
emacs vim-is., ) ja kui kasutatakse arendusrepo, siis versioonihaldussĂŒsteem Git. Enamik algajaid kasutajaid ei pea muretsema, kui nende seadistus teatab, et teatud tĂ€iendavad funktsioonid nsâ3 on puudu, kuid neile, kes soovivad tĂ€ielikku installimist, pakub projekt wiki, mis sisaldab lehekĂŒlgi, mis pakuvad palju kasulikke nĂ”uandeid ja nĂ€punĂ€iteid. Ăks selline leht on «Installimine» leht, kus on installimisjuhised erinevatele sĂŒsteemidele, mis on saadaval aadressil: vĂ”i EclipseSelle wiki lehe jaotises âEeltingimusedâ selgitatakse, milliseid pakette on vaja nsâ3 tavaliste valikute toetamiseks ning antakse kĂ€sud nende installimiseks levinud Linuxi vĂ”i macOS versioonides. .
Te saate kasutada vĂ”imalust uurida nsâ3 wiki lehte vĂ”i pĂ”hiveebilehte:
, kuna seal on palju teavet. Alates nsâ3 viimasest versioonist (nsâ3.29) on nsâ3 kĂ€ivitamiseks vajalikud jĂ€rgmised tööriistad: Tööriist Pakett/versioon
C++ kompilaator
- clang++ vÔi g++ (g++ versioon 4.9 vÔi suurem)
python2 versioon >= 2.7.10, vÔi python3 versioon >=3.4 - Python
mis tahes viimane versioon (nsâ3 ligipÀÀsuks GitLab.com) - Git
mis tahes viimane versioon (nsâ3 vabastuse lahtipakkimiseks) - tar
bunzip2 - mis tahes vĂ€rske versioon (nsâ3 vabastuse lahtipakkimiseks)
Kuna kontrollida vaikimisi installitud Python versiooni, sisestage
python -V python -V. Versiooni g++ kontrollimiseks sisestage g++ -v. Kui mĂ”ned tööriistad puuduvad vĂ”i on liiga vanad, vaadake nsâ3 installatsiooni juhendit wikipahel.
Oletame, et lugeja töötab Linuxis, MacOS-is vĂ”i Linuxi keskkonna emulaatoris ning tal on vĂ€hemalt ĂŒlaltoodud tööriistad.
3.2.1 ns-3 vÀljaande allalaadimine lÀhtekoodi arhiivina
See on uus kasutaja kĂ€itumine, kes soovib alla laadida ja katsetada viimaseid nsâ3 versioonide ja paketiga seotud versioone. nsâ3 vĂ€ljalasked avaldatakse kokku pakitud allikaarhivide kujul, mida mĂ”nikord nimetatakse tarball. tarball â see on spetsiaalne programmispakettide formaat, kus mitu faili on kokku koondatud. Arhiiv on tavaliselt kokku pakitud. nsâ3 laadimine tarball on lihtne, peate lihtsalt valima versiooni, alla laadima ja selle lahti pakkima.
Oletame, et soovite kommenteerida nÀidatud nimiga kohaliku kausta workspace. Te saate versiooni töökoopia, sisestades Linuxi konsooli jÀrgmise (loomulikult asendades asjakohased versiooninumbrid)
$ 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 Pange tÀhele, et eespool kasutatud utiliit wget, on kÀsurea tööriist objektide Internetist allalaadimiseks. Kui te seda ei ole paigaldanud, vÔite kasutada oma brauserit.
JÀrgides neid samme, liigute ns-allinone-3.29 katalooge, kus peaksite nÀgema mitmeid faile ja katalooge
$ 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.pyNĂŒĂŒd olete valmis tsentraalse nsâ3 ja vĂ”ite liikuda nsâ3 kogumise jaotisse.
3.3 ns-3 allalaadimine Gitiga
nsâ3 kood on saadaval Git repos GitLab.com aadressil . RĂŒhm nsnam koondab erinevaid reposid, mida avatud lĂ€htekoodiga projekt kasutab.
Lihtsaim viis Git-reposid kasutada on teha fork vĂ”i kloonida keskkonda nsâ3-allinone. See on skriptide kogum, mis haldab kĂ”ige sagedamini kasutatavate nsâ3 subsĂŒsteemide allalaadimist ja kogumist. Kui olete Git-is uus, vĂ”ivad "fork" ja "kloonimine" olla teile tundmatud; kui see on nii, soovitame teil lihtsalt kloonida (luua oma koopia) ladust, mis asub GitLab.com-is, jĂ€rgides jĂ€rgmist:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone Selles etapis nĂ€ete oma katalooge nsâ3-allinone veidi erineb eespool kirjeldatud vabastamise arhiivi direktorist. See peaks vĂ€lja nĂ€gema umbes nii:
$ ls
build.py constants.py download.py README util.pyPange tĂ€hele skripti olemasolu download.py, mis tĂ€iendavalt vĂ€ljub nsâ3 ja sellega seotud allikakoodis. Siin on teil valida: laadige alla kĂ”ige viimane arendusversioon nsâ3:
$ python download.pyvĂ”i eelistage nsâ3 versiooni, kasutades lippu -n versiooni numbri mÀÀramiseks:
$ python download.py -n ns-3.29PĂ€rast seda sammu laaditakse kausta nsâ3-allinone tĂ€iendavad hoidlad nsâ3, bake, pybindgen ja netanim.
MĂ€rkus
Puhta Ubuntu16.04 masina peal pidin ma kÀsu muutma jÀrgmiseks: $ sudo python3 download.py -n ns-3.29 (edasi ja edasi tÔlkija mÀrkmed).
3.3.1 ns-3 allalaadimine Bake'i abiga
Kaks eelnevalt mainitud meetodit (allika arhiv vĂ”i hoidla nsâ3-allinone Git'i kaudu) on kasulikud nsâ3 kĂ”ige lihtsama paigaldamise omamiseks koos mitme lisaga (pybindgen Python'i sidemete genereerimiseks ja netanim vĂ”rgu animatsiooniks). Kolmas hoidla, mis on vaikimisi saadaval nsâ3-allinone, nimega bake.
Bake â see on tööriist koordineeritud tarkvara ehitamiseks mitmest hoidlast, mis on vĂ€lja töötatud nsâ3 projekti jaoks. Bake vĂ”ib kasutada nsâ3 arendusteenuste saamiseks ning lisada ja komplitseerida nsâ3 baasversiooni jaotust, nĂ€iteks keskkonnana Otse Koodiga TĂ€itmine, CradleNetwork Simulatsiooni Cradle, uus Python'i sidemete loomise vĂ”imalus ja mitmesugused ârakendusedâ nsâ3.
MĂ€rkus
CradleNetwork Simulatsiooni Cradle on raamistik, mis vÔimaldab reaalseid TCP/IP vÔrgu stekke kasutada vÔrgu simulatsiooni all.
Kui arvate, et teie nsâ3 paigaldus peaks praeguse versiooniga olema laiendatud vĂ”i tĂ€iendav, saate jĂ€rgida seda paigaldusteed.
Viimastel nsâ3 versioonidel Bake on tar-vabastusse lisatud. Vabastusse on lisatud konfigureerimisfail, mis vĂ”imaldab alla laadida tarkvara versioone, mis on vabastamise loomise hetkeks ajakohased. TeisisĂ”nu, nĂ€iteks versioon Bake, mis on seotud vabastusega nsâ3.29, vĂ”ib kasutada selle nsâ3 vabastuse vĂ”i varasema jaoks vajalikest komponentidest, kuid ei saa kasutada komponentide hankimiseks hilisemate vabastuste jaoks (kui pakendi kirjeldifaili bakeconf.xml ei ole uuendatud).
Samuti vÔite saada kÔige vÀrskema koopia bake, sisestades jÀrgmise kÀsu oma Linuxi konsooli (olemasoleva Git'i puhul):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitKui kÀivitatakse git kÀsk, peaksite nÀgema midagi sellist:
Kloonimine 'bake'...
remote: Objektide loendamine: 2086, valmis.
remote: Objektide arv: 100% (2086/2086), valmis.
remote: Objektide tihendamine: 100% (649/649), valmis.
remote: Kokku 2086 (delta 1404), kasutatud 2078 (delta 1399)
VastuvÔtmine: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, valmis.
Delta lahendamine: 100% (1404/1404), valmis.PÀrast kÀsu lÔpetamist clone peate nÀgema kausta nimega bake, mille sisu peaks vÀlja nÀgema umbes nii:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOPange tÀhele, et olete alla laadinud mitu Python skripti, Python mooduli nimega bake ja XML konfiguratsioonifaili. JÀrgmiseks sammuks on nende skriptide kasutamine ns-3 distributsiooni allalaadimiseks ja ehitamiseks, millest olete huvitatud. Saadaval on mitu seadistuse sihti:
ns-3.29: moodul, mis vastab vÀljaandele; see laadib alla komponente, mis sarnanevad vÀljaandele tarballis;
ns-3-dev: sarnane moodul, kuid kasutades koodi arendushuast;
ns-allinone-3.29: moodul, mis sisaldab mitmeid lisafunktsioone, nÀiteks Click suunamine ja Network Simulation Cradle, Openflow ns-3 jaoks.
nsâ3-allinone: sarnane vĂ€ljaande versioonile mooduli allinone, kuid arenduskoodile.
MĂ€rkus
Click â modulaarne tarkvaraarhitektuur ruuteri loomise jaoks.
Openflow â andmeprotsesside juhtimise protokoll, mis vĂ”imaldab andmete edastamist ruuterite ja lĂŒlitite kaudu, rakendades programmiga konfigureeritud vĂ”rgu tehnoloogiat.
Praegust arenduse snapshot'i (vÀljaandmata) ns-3 kohta saab leida aadressilt:.
Arendajad pĂŒĂŒavad neid hoidlaid ĂŒhesugusel töökorras hoida, kuid need asuvad arenduse valdkonnas ja sisaldavad vĂ€ljaandmata koodi, seega, kui te ei plaani uusi funktsioone kasutada, valige ametlik vĂ€ljaanne.
Viimase koodi versiooni leiate, vaadates hoidlate nimekirja vĂ”i kĂŒlastades veebilehte 'ns-3 Releases': ja klikkides viimase versiooni lingile. Selles nĂ€ites jĂ€tkame ns-3.29-ga.
NĂŒĂŒd, et saada vajalikud ns-3 komponendid, rakendame tööriista Bake. RÀÀgime natuke selle tööprotsessist. Bake.
Bake töötab allalaadides pakettide lĂ€htekoodid kausta source ja installides bibliotekid ehituskausta. Bake saab kĂ€ivitada, viidates binaarfailile, kuid kui soovite kĂ€ivitada Bake mitte ei ole kausta, kuhu see ĂŒles laaditi, soovitav on lisada tee bake teie teele (keskkonnamuutuja PATH), nĂ€iteks jĂ€rgmiselt (nĂ€ide Linux bash'i shell'i jaoks). Minge kausta âbakeâ ja seadke jĂ€rgmised keskkonnamuutujad:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libSee lisab programmi bake.py selle shelli teele, vĂ”imaldades teistel programmidele leida kĂ€ivitatavad failid ja raamatukogud, millel on loodud bake. MĂ”ningatel juhtudel, kui bake, eelnevalt kirjeldatud PATH ja PYTHONPATH seadistust ei nĂ”uta, kuid nsâ3-allinone tĂ€ieliku kogumise (lisapakettide korral) jaoks on see tavaliselt vajalik.
Minge töökausta ja sisestage terminali jÀrgmine:
$ ./bake.py configure -e ns-3.29JÀrgmisena palume Bake kontrollida, kas meil on piisavalt tööriistu erinevate komponentide allalaadimiseks. Sisestage:
$ ./bake.py checkTe peaksite nÀgema midagi sellist:
> Python - OK
> GNU C++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Tools searched in path: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...Eriti allalaadimistööriistad nagu Mercurial, CVS, Git ja Bazaar on sellel etapil hĂ€davajalikud, kuna need permetavad meil koodi hankimist. Sel etapil installige puuduvad tööriistad teie sĂŒsteemile sobival viisil (kui oskate) vĂ”i pöörduge abi saamiseks oma sĂŒsteemi administraatori poole.
JĂ€rgmisena proovige alla laadida tarkvara:
$ ./bake.py downloadtulemus peaks olema midagi sellist:
>> Otsitakse sĂŒsteemi sĂ”ltuvust setuptools - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust libgoocanvas2 - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust gi-cairo - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust pygobject - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust pygraphviz - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust python-dev - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust qt - OK
>> Otsitakse sĂŒsteemi sĂ”ltuvust g++ - OK
>> Laadimine pybindgen-0.19.0.post4+ng823d8b2 (sihtkaust: pybindgen) - OK
>> Laadimine netanim-3.108 - OK
>> Laadimine ns-3.29 - OKSee tĂ€hendab, et kolm allikat on alla laaditud. NĂŒĂŒd minge kausta source ja sisestage ls; peaksite nĂ€gema:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenNĂŒĂŒd olete valmis ns-3 distributsiooni koostamiseks.
3.4 ns-3 koostamine
Nii nagu ns-3 allalaadimisel, on ns-3 koostamiseks mitu viisi. Peamine, mida me tahame rĂ”hutada, on, et ns-3 on koostatud kasutades koostamisriistu, mida on kirjeldatud allpool. Enamik kasutajaid töötavad Waf, ĐŸĐżĐžŃĐ°ĐœĐœĐŸĐłĐŸ ĐœĐžĐ¶Đ”. ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлДĐč бŃĐŽŃŃ ŃĐ°Đ±ĐŸŃаŃŃ Ń Waf, aga on mitmeid mugavaid skripte, mis aitavad teil alustada vĂ”i korraldada keerukamaid kogumikke. SeetĂ”ttu, palun enne lugemist, Waf, vaadake build.py ja kogumisega bake.
3.4.1 Koostamine build.py abil
TĂ€helepanu! See kogumisĂŒke on saadaval ainult allalaaditud lĂ€htearhivi versioonist, nagu on ĂŒlalpool kirjeldatud; mitte git-i vĂ”i bake kaudu alla laaditud.
Töötades vĂ€lja andmefailiga tarball, in nsâ3âallinone on olemas mugav skript, mis vĂ”ib lihtsustada komponentide koostamist. Selle nimi on build.py. See programm seadistab projekti teie jaoks kĂ”ige kasulikumal viisil. Siiski, pange tĂ€hele, et keerulisemad seadistused ja töötamine nsâ3 abil hĂ”lmavad tavaliselt nsâ3 enda koostamissĂŒsteemi, Waf, millest rÀÀgitakse hiljem selles juhendis.
Kui olete laadinud alla tarball, siis peaks teie kataloogis ~/workspace olema kataloog, mille nimi on midagi sellist nagu ns-allinone-3.29. Sisestage jÀrgmine kÀsk:
$ ./build.py --enable-examples --enable-tests
PĂ€ringu tegemisel, mis sisaldab teavet protokollide kohta, nĂ€eme jĂ€rgmist: build.py oleme rakendanud kĂ€skude argumendid, et koguda juhendis kasutatavaid nĂ€iteid ja teste, mis nsâ3 puhul ei koguta vaikimisi. Vaikimisi koostab programm ka kĂ”ik saadaval olevad moodulid. SeejĂ€rel, kui soovite, saate koguda nsâ3 ilma nĂ€idiste ja testideta vĂ”i vĂ€listada moodulid, mida teie tööks ei vajata.
NĂ€ete palju kompilatsiooni vĂ€ljundite sĂ”numeid, mida skript kuvab erinevate allalaaditud osade koostamise ajal. Esmalt proovib skript koguda animaatorit netanim, seejĂ€rel sidumismoodulit pybindgen ja lĂ”puks nsâ3. Protsessi lĂ”ppedes peaksite nĂ€gema jĂ€rgmist:
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s)
Moodulid on koostatud:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Moodulid, mis ei ole koostatud (vt selgituse saamiseks ns-3 juhendist):
brite click openflow
Leaving directory ./ns-3.29Viimases kolmes real sisendist nÀeme teadet moodulite kohta, mis ei olnud koostatud:
Moodulid, mis ei ole koostatud (vt selgituse saamiseks ns-3 juhendist):
brite clickSee lihtsalt tÀhendab, et mÔned ns-3 moodulid, mis sÔltuvad vÀlistest teekidest, vÔivad olla kokkupanemata vÔi et nende koostamine antud konfiguratsioonis ei ole vajalik. See ei tÀhenda, et simulaator ei ole kokku pandud vÔi et kokku pandud moodulid töötavad valesti.
3.4.2 Koostamine Bake'i abil
Kui ĂŒlaltoodud teabe saamiseks projekti reposid saite bake'i kasutades, vĂ”ite jĂ€tkata selle kasutamist ka ns-3 koostamiseks. Tippige:
$ ./bake.py buildja peaksite nÀgema midagi sellist:
>> Koostatakse pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Koostatakse netanim-3.108 - OK
>> Koostatakse ns-3.29 - OKVihje.: saate samuti korraga tÀita mÔlemat sammu, laadides ja koostades, kutsudes esile "bake.py deploy".
Kuni kĂ”igi komponentide koostamiseni vĂ”ivad esineda tĂ”rked, kuid koostamine jĂ€tkub, kui komponent ei ole kohustuslik. NĂ€iteks oli hiljuti probleem ĂŒlekantavuses see, et castxml vĂ”ib kokkupanna vahendiga bake mitte kĂ”ikidel platvormidel. Sel juhul kuvatakse teade, mis ĂŒtleb:
>> Koostatakse castxml - Probleem
> Probleem: Valikuline sÔltuvus, moodul "castxml" ebaÔnnestus
See vÔib vÀhendada lÔpliku koostise funktsionaalsust.
Kuid bake jÀtkab, kuna "castxml" ei ole hÀdavajalik sÔltuvus.
Rohkem teavet saamiseks kutsuge bake vĂ€lja -v vĂ”i -vvv, et saada tĂ€ielikku ĂŒksikasjalikku reĆŸiimi.analĂŒĂŒs castxml on vajalik ainult juhul, kui soovite luua uuendatud Python'i sidumisi. Enamikul kasutajatest pole selleks vajadust (kuni nad ei hakka ns-3 muutma), seega selliseid hoiatuseid vĂ”ib praegu ohutult ignoreerida.
Kui tÔrge ilmneb, siis jÀrgmine kÀsk annab teile vihjeid puuduolevate sÔltuvuste kohta:
$ ./bake.py showLoetletakse erinevad pakettide sÔltuvused, mida proovite kokku panna.
3.4.3 Koostamine Wafi abil
Kuni sellele hetkele, et alustada ns-3 kokkupanekut, oleme kasutanud kas skripti build.py, vÔi tööriista bake. Need tööriistad on kasulikud ns-3 koostamiseks ja teekide toetamiseks. Tegelikult kÀivitavad nad koostamisvahendi Waf ns-3 kataloogist. Waf mis paigaldatakse koos ns-3 allika koodiga. Enamik kasutajaid, kes seadistavad ja koostavad ns-3, liiguvad kiiresti otse Waf. JÀtkamiseks palun minge ns-3 katalooge, mille olete algselt loonud.
Praegu ei ole see rangelt vajalik, kuid on kasulik teha vÀike kÔrvalepÔige ja vaadata, kuidas projekti konfiguratsiooni muudatusi sisse viia. TÔenÀoliselt kÔige kasulikum muutus, mida saate konfiguratsioonis teha, on optimeeritud koodi versiooni loomine. Vaikimisi on teie projekt seadistatud koostama silumisversiooni. Vaatame projekti optimeeritud kogumise loomiseks. Et selgitada Wafile, mida ta peab tegema optimeeritud kogumiste jaoks, mis sisaldavad nÀiteid ja teste, peate tÀitma jÀrgmised kÀsud:
$ .\/waf clean
$ .\/waf configure --build-profile=optimized --enable-examples --enable-testsSee kĂ€ivitab Waf vĂ€ljas kohaliku kausta (teie mugavuse huvides). Esimene kĂ€sk puhastab eelmise kogumise, see ei ole tavaliselt rangelt vajalik, kuid see on hea praktika (vt ka allpool koostamisprofiile); see eemaldab varasemad loodud teegid ja objekti failid, mis asuvad kaustas build\/. Kui projekt on ĂŒmber seadistatud ja ehitussĂŒsteem kontrollib erinevaid sĂ”ltuvusi, peaksite nĂ€gema jĂ€rgmist tĂŒĂŒpi vĂ€ljundit:
Seadme tipp: /home/ns3user/workspace/bake/source/ns-3-dev
Seadme vÀljund: /home/ns3user/workspace/bake/source/ns-3-dev/build
Kontrollin 'gcc' (C kompilaator): /usr/bin/gcc
Kontrollin cc versiooni: 7.3.0
Kontrollin 'g++' (C++ kompilaator): /usr/bin/g++
Kontrollin kompileerimislipikut -march=native tugi: ok
Kontrollin kompileerimislipikut -Wl,--soname=foo tugi: ok
Kontrollin kompileerimislipikut -std=c++11 tugi: ok
Kontrollin boosti kaasandeid: pÀiseid ei leitud, palun,!esitage --boost-includes argument (vt abi)
Kontrollin boosti kaasandeid: pÀiseid ei leitud, palun,!esitage --boost-includes argument (vt abi)
Kontrollin programmi 'python': /usr/bin/python
Kontrollin python versiooni >= 2.3: 2.7.15 python-config: /usr/bin/python-config
KĂŒsin python-configilt pyembed '--cflags --libs --ldflags' lipikut: jah
Testin pyembed konfiguratsiooni: jah
KĂŒsin python-configilt pyext '--cflags --libs --ldflags' lipikut: jah
Testin pyext konfiguratsiooni: jah
Kontrollin kompileerimislipikut -fvisibility=hidden tugi: ok
Kontrollin kompileerimislipikut -Wno-array-bounds tugi: ok
Kontrollin pybindgen asukohta: ../pybindgen,!(arvatud)
Kontrollin python moodulit 'pybindgen': 0.19.0.,!post4+g823d8b2
Kontrollin pybindgen versiooni: 0.19.0.,!post4+g823d8b2
Kontrollin koodilÔiku: jah
Kontrollin tĂŒĂŒpide uint64_t ja unsigned long vĂ”rdset: ei
Kontrollin koodilÔiku: ei
Kontrollin tĂŒĂŒpide uint64_t ja unsigned long long vĂ”rdset: jah
Kontrollin apidefse, mida saab kasutada Python sidumiste jaoks: gcc-LP64
Kontrollin sisemist GCC cxxabi: tÀielik
Kontrollin python moodulit 'pygccxml': ei leitud
Kontrollin kliki asukohta: ei leitud
Kontrollin programmi 'pkg-config': /usr/bin/pkg-,!config
Kontrollin 'gtk+-3.0': ei leitud
Kontrollin 'libxml-2.0': jah
Kontrollin uint128_t: ei leitud
Kontrollin __uint128_t: jah
Kontrollin kÔrge tÀpsusega rakendust: 128-bitine tÀisarv,!(vaikimisi)
Kontrollin pealkirja stdint.h: jah
Kontrollin pealkirja inttypes.h: jah
Kontrollin pealkirja sys/inttypes.h: ei leitud
Kontrollin pealkirja sys/types.h: jah
Kontrollin pealkirja sys/stat.h: jah
Kontrollin pealkirja dirent.h: jah
Kontrollin pealkirja stdlib.h: jah
Kontrollin pealkirja signal.h: jah
Kontrollin pealkirja pthread.h: jah
Kontrollin pealkirja stdint.h: jah
Kontrollin pealkirja inttypes.h: jah
Kontrollin pealkirja sys/inttypes.h: ei leitud
Kontrollin raamatukogu rt: jah
Kontrollin pealkirja sys/ioctl.h: jah
Kontrollin pealkirja net/if.h: jah
Kontrollin pealkirja net/ethernet.h: jah
Kontrollin pealkirja linux/if_tun.h: jah
Kontrollin pealkirja netpacket/packet.h: jah
Kontrollin NSC asukohta: ei leitud
Kontrollin 'sqlite3': ei leitud
Kontrollin pealkirja linux/if_tun.h: jah
Kontrollin python moodulit 'gi': 3.26.1
Kontrollin python moodulit 'gi.repository.GObject': ok
Kontrollin python moodulit 'cairo': ok
Kontrollin python moodulit 'pygraphviz': 1.4rc1
Kontrollin python moodulit 'gi.repository.Gtk': ok
Kontrollin python moodulit 'gi.repository.Gdk': ok
Kontrollin python moodulit 'gi.repository.Pango': ok
Kontrollin python moodulit 'gi.repository.GooCanvas': ok
Kontrollin programmi 'sudo': /usr/bin/sudo
Kontrollin programmi 'valgrind': ei leitud
Kontrollin 'gsl': ei leitud python-config: ei leitud
Kontrollin kompileerimislipikut -fstrict-aliasing tugi: ok
Kontrollin kompileerimislipikut -fstrict-aliasing tugi: ok
Kontrollin kompileerimislipikut -Wstrict-aliasing tugi: ok
Kontrollin kompileerimislipikut -Wstrict-aliasing tugi: ok
Kontrollin programmi 'doxygen': /usr/bin/doxygen
---- KokkuvÔte valikulistest ns-3 funktsioonidest:
Ehitusprofiil: optimeeritud
Ehituskaust:
BRITE integreerimine: ei ole lubatud (BRITE ei ole lubatud (vt valikut --with-,!brite))
DESi metrikate sĂŒndmuste kogumine: ei ole lubatud (vaikimisi keelatud)
Emulatsioon FdNetDevice: lubatud
NĂ€idised: lubatud
Faili descriptor NetDevice: lubatud
GNU teaduslik raamatukogu (GSL): ei ole lubatud (GSL ei leitud)
Gcrypt raamatukogu: ei ole lubatud
(libgcrypt ei leitud: saate kasutada ,!libgcrypt-config, et leida selle asukoht.) GtkConfigStore: ei ole lubatud (raamatukogu 'gtk+-3.0 >= 3.0' ei leitud)
MPI tugi: ei ole lubatud (valik --enable-mpi ei ole valitud)
ns-3 Click integreerimine: ei ole lubatud (nsclick ei ole lubatud (vt valikut --with-,!nsclick))
ns-3 OpenFlow integreerimine: ei ole lubatud (nÔutavad boost raamatukogud ei leitud)
VÔrgu simuleerimise kest: ei ole lubatud (NSC ei leitud (vt valikut --with-nsc))
PlanetLab FdNetDevice: ei ole lubatud (PlanetLab operatsioonisĂŒsteemi ei leitud ,!(vt valikut --force-planetlab)) PyViz visualiseerija: lubatud
Python API skaneerimise tugi: ei ole lubatud (puudu 'pygccxml' Python moodul)
Python sidumised: lubatud
Reaalaegne simulaator: lubatud
SQlite statistikaandmete vÀljund: ei ole lubatud (raamatukogu 'sqlite3' ei leitud)
Tap sild: lubatud
Tap FdNetDevice: lubatud
Testid: lubatud
KĂ€thread primitiivid: lubatud
Kasutage sudo, et seadistada suid bitti: ei ole lubatud (valik --enable-sudo ei ole valitud)
XmlIo: lubatud
'configure' lĂ”petatud edukalt (6.387s)Pange tĂ€hele ĂŒlaltoodud loendi viimast osa. MĂ”ned nsâ3 valikud ei ole vaikimisi sisse lĂŒlitatud vĂ”i vajavad sĂŒsteemi tugiteenuseid Ă”igeks töötamiseks. NĂ€iteks XmlTo lubamiseks peab sĂŒsteemis olema olemas teek libxml-2.0. Kui seda teeki ei leitud ja vastav nsâ3 funktsioon ei oleks sisse lĂŒlitatud, kuvatakse sĂ”num. Pange tĂ€hele, et on vĂ”imalik kasutada kĂ€sku sudo teatud programmide suid âkĂ€itamise ajal grupi ID seadistamineâ seadmise lubamiseks. See ei ole vaikimisi sisse lĂŒlitatud ning seetĂ”ttu kuvatakse see funktsioon kui âmitte sisse lĂŒlitatudâ (ânot enabledâ). LĂ”puks, et saada nimekiri sisse lĂŒlitatud valikutest, kasutage Waf parameetriga --check-config.
NĂŒĂŒd naaseme ja lĂŒlitame tagasi silumisversioonile, mis sisaldab nĂ€idisprojekte ja teste.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-testsKogumissĂŒsteem on nĂŒĂŒd seadistatud ning saate nsâ3 silumise versioone kokku panna, lihtsalt sisestades:
$ ./wafVĂ”ib-olla panid ĂŒlaltoodud sammud teid koguma osa nsâ3 sĂŒsteemist kaks korda, kuid nĂŒĂŒd teate, kuidas konfigureerida ja koostada optimeeritud koodi.
Aktsepteeritud projekti konfiguratsiooni aktiivse profiili kontrollimiseks on olemas kÀsk:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debugĂlaltoodud stseen build.py toetab samuti argumente --enable-examples ja --enable-tests, kuid muid vĂ”imalusi Waf ei toetata otseselt. NĂ€iteks ei toimi see:
$ ./build.py --disable-pythonreaktsioon oleks selline:
build.py: error: no such option: --disable-pythonSiiski vĂ”ib eriline operaator -âŻ- kasutada tĂ€iendavate parameetrite edastamiseks lĂ€bi waf, seega töötab jĂ€rgmine kĂ€sk selle asemel:
$ ./build.py -- --disable-pythonkuna see genereerib pÔhikÀskuse ./waf configure --disable-python. Siin on veel mÔned sissejuhatused teabe kogumise kohta Waf.
Kogumise vigade töötlemine
ns-3 versioonid on testitud kĂ”ige uuemate C++ kompilaatoritega, mis olid saadaval vĂ€ljaandmise ajal levinud Linuxi ja MacOS jaotustes. Kuid aja jooksul vabastatakse uusi jaotusi koos uute kompilaatoritega, ja need uuemad kompilaatorid on tavaliselt hoolikamud hoiatuste osas. ns-3 konfigureerib oma koostamise nii, et kĂ”ik hoiatused kĂ€ituvad nagu vead, seega mĂ”nikord, kui kasutate vanemat versiooni uuemas sĂŒsteemis, vĂ”ib kompilaatori hoiatus takistada koostamist.
NÀiteks oli varem vÀljaanne ns-3.28 Fedora 28 jaoks, mis sisaldas uut peamist versiooni gcc (gcc-8). ns-3.28 vÔi varasemate versioonide koostamine Fedora 28 all, kui Gtk2+ on installitud, vÔib pÔhjustada jÀrgmise vea:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of â__gtk_reserved1â [-Werror=parentheses] void (*__gtk_reserved1);Versioonidest alates ns-3.28.1 on Waf saadaval valik nende probleemide lahendamiseks. See keelab g++ ja clang++ jaoks lipu â-Werrorâ seadistamise. See valik on â--disable-werrorâ, see tuleb rakendada konfigureerimise ajal:
$ ./waf configure --disable-werror --enable-examples --enable-testsKonfigureerida vÔi koostada
MĂ”ned kĂ€sud Waf on mĂ”ttekad ainult konfigureerimise faasis, samas kui mĂ”ned toimivad ainult koostamise faasis. NĂ€iteks, kui soovite kasutada ns-3 emulatsioonifunktsioone, saate lubada bitil suid kasutades sudo, nagu ĂŒlalpool kirjeldatud. See tĂŒhistab konfigureerimise etapi kĂ€sud, ja seega saate konfigureerimist muuta jĂ€rgmist kĂ€sku kasutades, mis hĂ”lmab ka nĂ€iteid ja teste.
$ ./waf configure --enable-sudo --enable-examples --enable-testsKui teete nii, Waf kÀivitab sudo, et muuta emulatsioonikoodi soklite loomise programme kÀituma privileegidega root. Failis Waf saadaval on mitmeid muid valikuid konfigureerimise ja koostamisetappide jaoks. Valikute tutvumiseks tippige:
$ ./waf --helpJÀrgmises jaotises kasutame mÔningaid testimisega seotud valikuid.
Koostamisprofiilid
Oleme juba nÀinud, kuidas saab seadistada Waf koostamisteks debug ja optimeeritud:
$ ./waf --build-profile=debugSamuti on olemas vahepealne koostamisprofiil, release. Valik -d on sĂŒnonĂŒĂŒm --build-profile. Koostamisprofiil haldab logimise, vĂ€idete (assertions) ja kompilaatori optimeerimisvĂ”tmete kasutamist:

Nagu nÀha, on logimine ja vÀidetavused saadaval ainult silumiskogudes. Soovitatav praktika on arendada oma skripti silumismoodulis ja seejÀrel teha korduvjookseid (statistika vÔi parameetrite muutmiseks) optimeeritud kogumiprofiilis.
Kui teil on kood, mida tuleb kĂ€itada ainult teatud kogumiprofiilides, kasutage makroĂŒhenduse makrot:
NS_BUILD_DEBUG (std::cout << "Osa vÀljundi reast..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Valmis: " << timer << std::endl;)Vaikimisi, Waf paneb kogumise artefaktid kogumise kataloogi. Saate mÀÀrata teise vĂ€ljundkatalooge, kasutades vĂ”imalust -âŻ-out, nĂ€iteks:
$ ./waf configure --out=my-build-dirKombineerides seda kogumiprofiilidega, saate kergesti vahetada erinevate kompileerimise parameetrite vahel:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...Mis vÔimaldab teil töötada mitme kogumisega, ilma et peaksite iga kord viimast kogumist kirjutama. Kui vahetate teisele profilile, Waf kompileeritakse ainult see, ilma tÀieliku taaskompileerimiseta.
Kui vahetate kogumiprofiile, on oluline erinevatel kordadel anda sama konfiguratsiooni parameetrid. Vead saavad vÀltida, kui mÀÀrate mitu keskkonnamuutujat:
$ 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 buildKompilaatorid ja lipud
Ălaltoodud nĂ€idetes Waf ns-3 kogumisel kasutatakse GCC C++ kompilaatorit ( g++). Siiski on vĂ”imalik muuta kasutatavat Waf C++ kompilaatorit, mÀÀrates keskkonnamuutujat CXX. NĂ€iteks, et kasutada C++ kompilaatorit Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build Sama moodi saab seadistada Waf jaotatud kompileerimise kasutamiseks distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf buildKaugemaid andmeid distcc ja jaotatud kompileerimise kohta leiate projekti dokumendi rubriigist. Nii kohandage ns-3 konfiguratsiooni lisades kompilaatori lipud, kasutage keskkonnamuutujat CXXFLAGS_EXTRA.
Paigaldamine
Waf vĂ”ib kasutada sĂŒsteemis raamatute installimiseks erinevatesse kohtadesse. Vaikimisi asuvad koostatud raamatukogud ja tĂ€idiseid failid kaustas build, ja kuna Waf teab nende raamatukogude ja tĂ€itmisfailide asukohta, ei ole vaja raamatukogusid kuhugi mujal installida.
Kui kasutajad eelistavad installida vĂ€ljaspool koostamise kausta, saavad nad kĂ€ivitada kĂ€su .\/waf install. Vaikimisi installimise eelistus on /usr/local, seega .\/waf install paigaldab programmid kausta /usr/local/bin, raamatukogud kausta /usr/local/lib ja pĂ€iste failid kausta /usr/local/include. Superkasutaja Ă”igused on tavaliselt vajalikud vaikimisi eelistusega installimise korral, seega tĂŒĂŒpiline kĂ€sk on sudo .\/waf install. KĂ€ivitamisel eelistab Waf kĂ”igepealt kasutada koostamise kaustas olevaid ĂŒldisi raamatukogusid, seejĂ€rel otsib see raamatukogusid lokaalsetes keskkondades seadistatud raamatukogude teel. Seega, kui installitakse raamatukogusid sĂŒsteemi, on hea praktika kontrollida, et kasutatakse Ă”igeid raamatukogusid. Kasutajad saavad valida installimise teise eelistuse, edastades konfigureerimise ajal valiku --prefix, nĂ€iteks:
.\/waf configure --prefix=\/opt\/localKui hiljem, pÀrast koostamist, sisestab kasutaja installimise kÀsu ./waf, kasutatakse eelistust /opt/local.
Meeskond .\/waf clean tuleb kasutada enne projekti ĂŒmberkonfigureerimist, kui installimine toimub Waf teise eelistusega.
Seega ei pea nsâ3 kasutamiseks kutse sisse kutsuma .\/waf install. Enamik kasutajaid ei vaja seda kĂ€sku, kuna Waf vĂ”tab praegused raamatukogud koostamise kaustast, kuid mĂ”ned kasutajad vĂ”ivad seda leida kasulikuna, kui nende tegevus hĂ”lmab töö tegemist programmidega vĂ€ljaspool nsâ3 kausta.
Waf on ainus
nsâ3 allika puu ĂŒlemisel tasemel on ainult ĂŒks Waf-skripti. Tööd alustades veedate palju aega kaustas scratch\/ vĂ”i sĂŒgavamal, kaustassrc\/... ja sellega kaasneb vajadus kĂ€ivitada Waf. Saate lihtsalt meeles pidada, kus te viibite, ja kĂ€ivitada Waf jĂ€rgmiselt:
$ ..\/..\/..\/waf ..., kuid see on vĂ€sitav ja vigadele kalduv, seega on paremaid lahendusi. Ăks levinumaid viise on kasutada tekstiredaktorit, nagu ) ja kui kasutatakse arendusrepo, siis versioonihaldussĂŒsteem Git. Enamik algajaid kasutajaid ei pea muretsema, kui nende seadistus teatab, et teatud tĂ€iendavad funktsioonid nsâ3 on puudu, kuid neile, kes soovivad tĂ€ielikku installimist, pakub projekt wiki, mis sisaldab lehekĂŒlgi, mis pakuvad palju kasulikke nĂ”uandeid ja nĂ€punĂ€iteid. Ăks selline leht on «Installimine» leht, kus on installimisjuhised erinevatele sĂŒsteemidele, mis on saadaval aadressil: vĂ”i vim-is., kus avatakse kaks terminali seanssi, ĂŒks nsâ3 koostamiseks ja teine allika koodi redigeerimiseks. Kui teil on ainult tarball, siis vĂ”ib abiks olla keskkonnamuutuja:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && .\/waf $* ; }
$ cd scratch
$ waff buildMooduli kataloogis vĂ”ib tunduda ahvatlev lisada triviaalne waf skript nĂ€ite pĂ”hjal exec ..\/..\/waf. Palun Ă€rge tehke seda. See segadusse ajab algajaid ja vĂ”ib halvasti teostamisel viia raskesti tuvastatavate koostamisvigadeni. Ălaltoodud lahendused on tee, mida tuleks kasutada.
3.5 ns-3 testimine
Saate kÀivitada ns-3 jaotise moodulitestid, kÀivitades skripti .\/test.py:
$ .\/test.pyNeed testid kÀivitatakse paralleelselt Waf. LÔpuks peaksite nÀgema teadet, et
92 92stest Ă”nnestus (92 Ă”nnestus, 0 ebaĂ”nnestus, 0 kokkuvarisemist, 0 valgrind viga)See on oluline teadet, et tuvastada rikkeid, kokkuvarisemisi vĂ”i valgrind vigu, mis viitab koodi probleemidele vĂ”i tööriistade ja koodi ĂŒhilduvusprobleemidele.
Reeglina nÀete ka lÔppvÀljundit Waf ja testijalt, kes kÀivitab iga testi, mis nÀeb vÀlja umbes nii:
Waf: Sisenemine katalooge `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
Waf: Lahkumine katalooge `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
'build' lÔpetatud edukalt (1.799s)
Ehitatud moodulid:
aodv rakendused sild
click konfiguratsiooni-pood tuum
csma csma-kujundus dsdv
emu energia voogude-jÀlgimine
internet lte mesh
mobiliteet mpi netanim
vÔrgud nix-vektori-suunamine ns3tcp
ns3wifi olsr openflow
punkt-punkt punkt-punkt-kujundus levik
spekter statistika tap-sild
template test tööriistad
topoloogia-lugemine uan virtuaal-vÔrguseade
visualiseerija wifi wimax
PASS: TestSuite ns3-wifi-hÀired
PASS: TestSuite histogram
...
PASS: TestSuite objekt
PASS: TestSuite juhuslike-arvude-generaatorid
92 92stest Ônnestus (92 Ônnestus, 0 ebaÔnnestus, 0 kokkuvarisemist, 0 valgrind viga)
See kĂ€sk kĂ€ivitatakse tavaliselt kasutajate poolt ns-3 jaotise koostamise kiireks kontrollimiseks. (Pange tĂ€hele, et "PASS: ..." ridade jĂ€rjekord vĂ”ib erineda, see on okei. Oluline on, et lĂ”pparve rea lĂ”pus on kĂ”ik kontrollid lĂ€bitud; ĂŒkski test ei ebaĂ”nnestunud ega kokku varisenud.) Ja Waf, ja test.py jagavad töökoormust saadaval olevatele protsessori tuumadele.
3.6 Skripti kÀivitamine
Reeglina kĂ€ivitame skripte kontrolli all Waf. See tagab, et kogukogu tee on Ă”igesti seadistatud ja et raamatukogud on kĂ€itamise ajal kergesti kĂ€ttesaadavad. Programmi kĂ€ivitamiseks kasutage lihtsalt Waf parameetriga -âŻ-run. KĂ€ivitame ns-3 jaoks ĂŒhesuguse programmi ekvivalendi, tere maailmsisenemine, sisestades jĂ€rgmist:
$ .\/waf --run hello-simulatorWaf kontrollib esmalt, et programm on Ôigesti kokku pandud, ja vajadusel teostab kokkupaneku. SeejÀrel Waf jaotab programmi, mis tagab jÀrgmise vÀljundi.
Hello SimulatorPalju Ă”nne! NĂŒĂŒd olete nsâ3 kasutaja!
Mida teha, kui ma ei nÀe tulemust?
Kui nĂ€ete sĂ”numeid Waf, mis nĂ€itavad, et kokkupanek oli edukalt lĂ”petatud, kuid ei nĂ€e vĂ€ljundit «Hello Simulator», on tĂ”enĂ€oline, et olete [Kokkupanek Wafiga] vahetanud oma kokkupaneku reĆŸiimi optimeeritud, kuid jĂ€tnud vahetamata tagasi reĆŸiimi debug. KĂ”ik selles juhendis kasutatavad konsooli vĂ€ljundid kasutavad spetsiaalset nsâ3 komponenti, mis teostab logimisfunktsiooni ja on mĂ”eldud kasutajateadetega konsooli printimiseks. Selle komponendi vĂ€ljund on automaatselt keelatud optimeeritud koodi kompileerimisel â see on "optimeeritud". Kui te ei nĂ€e vĂ€ljundit "Hello Simulator", sisestage jĂ€rgmine kĂ€sk:
$ . /waf configure --build-profile=debug --enable-examples --enable-testset seadistada Waf nsâ3 programmide silumisversioonide kokkupanek, mis hĂ”lmab nĂ€ite ja testide. Peale selle peate uuesti kompileerima vĂ€rskelt silumisversiooni koodi, sisestades
$ ./wafNĂŒĂŒd, kui kĂ€itate programmi hello-simulator, peaksite nĂ€gema oodatud tulemust.
3.6.1 KĂ€skluste argumendid
KĂ€skargumentide edastamiseks nsâ3 programmi kasutage jĂ€rgmist mallivormingut:
$ . /waf --run --command-template="%s "Asendage oma programmi nimega ja argumentidega. Argument -âŻ-command-template jaoks Waf on pĂ”himĂ”tteliselt retsept tegeliku kĂ€suviiva loomiseks Waf programmi kĂ€itamiseks. Waf kontrollib, et kokkupanek on lĂ”pule viidud, mÀÀrab ĂŒldiste raamatukogude teed ja seejĂ€rel kasutab esitatud kĂ€suviida malliga, asendades programmi nime kohatĂ€itega %s, kĂ€ivitab tĂ€idetava faili. Kui selline sĂŒntaks tundub keeruline, on olemas lihtsam variant, mis sisaldab nsâ3 programmi ja selle argumente ĂŒhesugustes ĂŒksikutes jutumĂ€rkides:
$ . /waf --run ' --arg1=value1 --arg2=value2 ...'Teine, eriti kasulik nĂ€ide on testide kogumite valikuline kĂ€ivitamine. Oletame, et olemas on testikomplekt (suite) mytest (tegelikult seda ei ole). Ălaltoodud nĂ€ites kasutasime skripti . /test.py, et paralleelselt kĂ€ivitada terve hulk teste, mis korduvad testimisprogrammi kutsumisega test-runner. Kutsumine test-runner otse otse testimise tĂ€itmiseks:
$ .\/waf --run test-runner --command-template="%s --suite=mytest --verbose"Argumente antakse programmile test-runner. Kuna mytest ei eksisteeri, genereeritakse veateade. Saate test-runneri saadaval olevate parameetrite jaoks sisestada:
$ .\/waf --run test-runner --command-template="%s --help"3.6.2 Silumine
Et kĂ€ivitada ns-3 programme mĂ”ne teise utiliidi, nĂ€iteks siluri (nĂ€iteks gdb) vĂ”i mĂ€luehituspoliitika tööriist (nt valgrind), kasutage sarnast vormi -âŻ-command-template = "âŠ". NĂ€iteks et kĂ€ivitada siluris gdb oma programmi hello-simulator ns-3 argumentidega:
$ .\/waf --run=hello-simulator --command-template="gdb %s --args "Pange tĂ€hele, et ns-3 programmi nimi tuleb argumendiga -âŻ-run, ja juhtimise utiliit (siin gdb) on esimene token argumentides -âŻ-command-template. Valik -âŻ-args teatab gdb, mis tĂ€hendab, et ĂŒlejÀÀnud kĂ€suviib on "madalam" programm. (MĂ”ned versioonid gdb ei toeta valikut -âŻ-args. Sellisel juhul eemalda argumendid programmist -âŻ-command-template , ja kasuta kĂ€skude komplekti gdb args.) Saame ĂŒhendada selle retsepti ja eelneva siluri all testimise kĂ€ivitamiseks:
$ .\/waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Töökaust
Waf peaks kĂ€ivitama oma asukohast ns-3 puu tipus. See kaust muutub töökaustaks, kuhu salvestatakse vĂ€ljundfailid. Aga mida teha, kui soovite neid faile hoida vĂ€ljaspool ns-3 lĂ€htekoode puu? Kasutage argumenti -âŻ-cwd:
$ .\/waf --cwd=...VÔib-olla on mugavam saada vÀljundfailid oma töökaustas. Sel juhul vÔib selline kaudne tegevus aidata:
$ function waff {
CWD="$PWD"
cd $NS3DIR >\/dev\/null
.\/waf --cwd="$CWD" $*
cd - >\/dev\/null
}Selline eelmine versioon kĂ€sust hoiab praeguse töökausta, liigub kausta Waf, ja seejĂ€rel instructs Waf tagasi pöörduma salvestatud töökausta enne programmi kĂ€ivitamist. Mainime kĂ€sku -âŻ-cwd tĂ€ielikkuse huvides, kuna enamik kasutajaid kĂ€ivitab Wafi lihtsalt ĂŒlemise taseme kataloogist ja generatiivsed vĂ€ljundfailid seal.
Allikas: habr.com
