ns-3 vĂ”rgusimulatori Ă”petus. PeatĂŒkk 3

ns-3 vĂ”rgusimulatori Ă”petus. PeatĂŒkk 3
peatĂŒkid 1,2

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

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: https://www.nsnam.orgTöö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.py

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

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

vĂ”i eelistage ns‑3 versiooni, kasutades lippu -n versiooni numbri mÀÀramiseks:

$ python download.py -n ns-3.29

PĂ€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.git

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

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

  1. ns-3.29: moodul, mis vastab vÀljaandele; see laadib alla komponente, mis sarnanevad vÀljaandele tarballis;

  2. ns-3-dev: sarnane moodul, kuid kasutades koodi arendushuast;

  3. ns-allinone-3.29: moodul, mis sisaldab mitmeid lisafunktsioone, nÀiteks Click suunamine ja Network Simulation Cradle, Openflow ns-3 jaoks.

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

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

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

JÀrgmisena palume Bake kontrollida, kas meil on piisavalt tööriistu erinevate komponentide allalaadimiseks. Sisestage:

$ ./bake.py check

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

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

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

NĂŒĂŒ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.29

Viimases kolmes real sisendist nÀeme teadet moodulite kohta, mis ei olnud koostatud:

Moodulid, mis ei ole koostatud (vt selgituse saamiseks ns-3 juhendist):
brite                     click

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

ja peaksite nÀgema midagi sellist:

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

Vihje.: 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 show

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

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

KogumissĂŒsteem on nĂŒĂŒd seadistatud ning saate ns‑3 silumise versioone kokku panna, lihtsalt sisestades:

$ ./waf

VĂ”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-python

reaktsioon oleks selline:

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

Siiski vĂ”ib eriline operaator - - kasutada tĂ€iendavate parameetrite edastamiseks lĂ€bi waf, seega töötab jĂ€rgmine kĂ€sk selle asemel:

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

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

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

Kui 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 --help

JÀrgmises jaotises kasutame mÔningaid testimisega seotud valikuid.

Koostamisprofiilid

Oleme juba nÀinud, kuidas saab seadistada Waf koostamisteks debug ja optimeeritud:

$ ./waf --build-profile=debug

Samuti on olemas vahepealne koostamisprofiil, release. Valik -d on sĂŒnonĂŒĂŒm --build-profile. Koostamisprofiil haldab logimise, vĂ€idete (assertions) ja kompilaatori optimeerimisvĂ”tmete kasutamist:

ns-3 vĂ”rgusimulatori Ă”petus. PeatĂŒkk 3

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

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

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

Kaugemaid 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\/local

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

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

Need 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-simulator

Waf kontrollib esmalt, et programm on Ôigesti kokku pandud, ja vajadusel teostab kokkupaneku. SeejÀrel Waf jaotab programmi, mis tagab jÀrgmise vÀljundi.

Hello Simulator

Palju Ă”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-tests

et seadistada Waf ns‑3 programmide silumisversioonide kokkupanek, mis hĂ”lmab nĂ€ite ja testide. Peale selle peate uuesti kompileerima vĂ€rskelt silumisversiooni koodi, sisestades

$ ./waf

NĂŒĂŒ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.

JĂ€tkub: peatĂŒkk 4

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster