3 Darba sÄkÅ”ana
3.1 PÄrskats
3.2. PriekŔnosacījumi
3.2.1. ns-3 laidiena lejupielÄde kÄ avota arhÄ«vs
3.3. ns-3 lejupielÄde, izmantojot Git
3.3.1. ns-3 ielÄde, izmantojot funkciju Bake
3.4. MontÄža ns-3
3.4.1. Äka ar build.py
3.4.2 Äka ar cepÅ”anu
3.4.3. Build with Waf
3.5 TestÄÅ”ana ns-3
3.6. Skripta palaiŔana
3.6.1. Komandrindas argumenti
3.6.2. AtkļūdoŔana
3.6.3. Darba direktorijs
3 nodaļa
Darba sÄkÅ”ana
Å Ä« nodaļa ir paredzÄta, lai sagatavotu lasÄ«tÄju darbam ar datoru, kurÄ, iespÄjams, nekad nav instalÄts ns-3. TajÄ ir aprakstÄ«tas atbalstÄ«tÄs platformas, priekÅ”nosacÄ«jumi, kÄ iegÅ«t ns-3, kÄ izveidot ns-3 un kÄ pÄrbaudÄ«t savu bÅ«vÄjumu un palaist vienkÄrÅ”as programmas.
3.1 PÄrskats
ns-3 simulators ir izveidots kÄ sadarbÄ«bas programmatÅ«ras bibliotÄku sistÄma. MontÄžas laikÄ lietotÄja programmu kods ir saistÄ«ts ar Ŕīm bibliotÄkÄm. C++ vai Python programmÄÅ”anas valodas tiek izmantotas, lai rakstÄ«tu pielÄgotas programmas.
Ns-3 tiek izplatÄ«ts kÄ pirmkods, kas nozÄ«mÄ, ka mÄrÄ·a sistÄmai ir jÄbÅ«t programmatÅ«ras izstrÄdes videi, lai vispirms izveidotu bibliotÄkas un pÄc tam izveidotu lietotÄja programmu. PrincipÄ ns-3 varÄtu izplatÄ«t kÄ gatavas bibliotÄkas konkrÄtai sistÄmai, un nÄkotnÄ tÄs var tikt izplatÄ«tas arÄ« Å”ÄdÄ veidÄ. TaÄu mÅ«sdienÄs daudzi lietotÄji faktiski veic savu darbu, rediÄ£Äjot paÅ”u ns-3, tÄpÄc bibliotÄku izveidei ir noderÄ«gi izmantot avota kodu. Ja kÄds vÄlas uzÅemties darbu pie gatavu bibliotÄku un pakotÅu izveides operÄtÄjsistÄmÄm, lÅ«dzu sazinieties ar adresÄtu sarakstu ns-izstrÄdÄtÄji.
TÄlÄk mÄs apskatÄ«sim trÄ«s veidus, kÄ lejupielÄdÄt un izveidot ns-3. Pirmais ir lejupielÄdÄt un izveidot oficiÄlo laidienu no galvenÄs vietnes. Otrais ir pamata ns-3 instalÄcijas izstrÄdes versiju kopiju atlase un montÄža. TreÅ”ais ir izmantot papildu veidoÅ”anas rÄ«kus, lai ielÄdÄtu vairÄk paplaÅ”inÄjumu ns-3. MÄs apskatÄ«sim katru, jo rÄ«ki nedaudz atŔķiras.
PieredzÄjuÅ”i Linux lietotÄji var brÄ«nÄ«ties, kÄpÄc ns-3 netiek nodroÅ”inÄts kÄ pakotne tÄpat kÄ vairums citu bibliotÄku, kas izmanto pakotÅu pÄrvaldnieku? Lai gan ir binÄrÄs pakotnes dažÄdiem Linux izplatÄ«jumiem (piemÄram, Debian), lielÄkÄ daļa lietotÄju galu galÄ rediÄ£Ä bibliotÄkas un viÅiem paÅ”iem ir jÄpÄrveido ns-3, tÄpÄc avota koda pieejamÄ«ba ir Ärta. Å Ä« iemesla dÄļ mÄs koncentrÄsimies uz instalÄÅ”anu no avota.
LielÄkajai daļai lietojumprogrammu ns-3 tiesÄ«bas sakne nav nepiecieÅ”amas, ieteicams izmantot nepievilcÄ«gu lietotÄja kontu.
3.2. PriekŔnosacījumi
Visam pieejamo ns-3 bibliotÄku komplektam ir vairÄkas atkarÄ«bas no treÅ”o puÅ”u bibliotÄkÄm, taÄu lielÄkoties ns-3 var izveidot un izmantot ar atbalstu vairÄkiem izplatÄ«tiem (bieži vien instalÄtiem pÄc noklusÄjuma) komponentiem: C++ kompilators, Python, pirmkoda redaktors (piemÄram, spars, emacs vai Aptumsums) un, ja tiek izmantotas izstrÄdes krÄtuves, Git versiju kontroles sistÄmas. LielÄkajai daļai pirmreizÄjo lietotÄju nebÅ«s jÄuztraucas, ja viÅu konfigurÄcija ziÅo, ka trÅ«kst dažu ns-3 uzlaboto funkciju, taÄu tiem, kas vÄlas pilnu instalÄciju, projekts nodroÅ”ina wiki, kurÄ ir iekļautas lapas ar daudziem noderÄ«giem padomiem un trikiem. Viena no Å”ÄdÄm lapÄm ir instalÄÅ”anas lapa ar instalÄÅ”anas instrukcijÄm dažÄdÄm sistÄmÄm, kas pieejama vietnÄ:
Å Ä« wiki sadaÄ¼Ä PriekÅ”nosacÄ«jumi ir paskaidrots, kuras pakotnes ir nepiecieÅ”amas, lai atbalstÄ«tu parastÄs ns-3 opcijas, kÄ arÄ« ir sniegtas komandas, kas tiek izmantotas to instalÄÅ”anai parastajÄs Linux vai macOS versijÄs.
Varat izmantot Å”o iespÄju, lai izpÄtÄ«tu ns-3 wiki lapu vai galveno vietni:
RÄ«ka pakotne/versija
- C++ kompilators
clang++ vai g++ (g++ versija 4.9 vai jaunÄka) - Pitons
python2 versija >= 2.7.10 vai python3 versija >=3.4 - Git
jebkura jaunÄkÄ versija (lai piekļūtu ns-3 vietnÄ GitLab.com) - darva
jebkura jaunÄkÄ versija (nsā3 laidiena izpakoÅ”anai) - bunzip2
jebkura jaunÄkÄ versija (nsā3 laidiena izpakoÅ”anai)
Lai pÄrbaudÄ«tu Python noklusÄjuma versiju, ierakstiet python -V
. Lai pÄrbaudÄ«tu g++ versiju, ierakstiet g++ -v
. Ja trÅ«kst kÄdu rÄ«ku vai tas ir pÄrÄk vecs, lÅ«dzu, skatiet instalÄÅ”anas rokasgrÄmatu ns-3 wiki lapÄ.
TurpmÄk mÄs pieÅemam, ka lasÄ«tÄjÄ darbojas Linux, MacOS vai Linux emulators un tam ir vismaz iepriekÅ” minÄtie rÄ«ki.
3.2.1. ns-3 laidiena lejupielÄde kÄ avota arhÄ«vs
TÄ ir rÄ«cÄ«ba jaunam lietotÄjam, kurÅ” vÄlas lejupielÄdÄt un eksperimentÄt ar jaunÄkajÄm ns-3 laidienu un pakotÅu versijÄm. ns-3 laidieni tiek publicÄti kÄ saspiesta avota arhÄ«vi, kurus dažreiz sauc patÄrÄt. patÄrÄt ir Ä«paÅ”s programmatÅ«ras arhÄ«va formÄts, kurÄ tiek apvienoti vairÄki faili. ArhÄ«vs parasti tiek saspiests. ns-3 sÄknÄÅ”anas process, izmantojot patÄrÄt ir vienkÄrÅ”a, jums vienkÄrÅ”i jÄizvÄlas laidiens, jÄlejupielÄdÄ un jÄizpako tas.
PieÅemsim, ka jÅ«s kÄ lietotÄjs vÄlaties izveidot ns-3 vietÄjÄ direktorijÄ ar nosaukumu darbvieta. Laida darba kopiju var iegÅ«t, Linux konsolÄ ievadot tÄlÄk norÄdÄ«to (protams, aizstÄjot atbilstoÅ”os versiju numurus)
$ 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
PievÄrsiet uzmanÄ«bu iepriekÅ” izmantotajai utilÄ«tai wget, kas ir komandrindas rÄ«ks objektu lejupielÄdei no interneta. Ja neesat to instalÄjis, varat izmantot pÄrlÅ«kprogrammu.
Veicot Ŕīs darbÄ«bas, jÅ«s tiksit novirzÄ«ts uz direktoriju ns-allinone-3.29, kurÄ jums vajadzÄtu redzÄt vairÄkus failus un direktorijus
$ 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
Tagad esat gatavs izveidot ns-3 bÄzes izplatÄ«Å”anu un varat pÄriet uz sadaļu par ns-3 izveidi.
3.3. ns-3 lejupielÄde, izmantojot Git
Ns-3 kods ir pieejams Git krÄtuvÄs vietnÄ GitLab.com vietnÄ
VienkÄrÅ”Äkais veids, kÄ sÄkt lietot Git repozitorijus, ir izveidot vai klonÄt vidi ns-3-alinonu. Å is ir skriptu kopums, kas pÄrvalda visbiežÄk izmantoto ns-3 apakÅ”sistÄmu ielÄdi un montÄžu. Ja esat iesÄcÄjs Git, termini "dakÅ”a" un "klons" jums var bÅ«t sveÅ”i; ja tÄ, mÄs iesakÄm vienkÄrÅ”i klonÄt (izveidot savu kopiju) repozitoriju, kas atrodas vietnÄ GitLab.com, Å”Ädi:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone
Å ajÄ posmÄ jÅ«su direktorija skats ns-3-alinonu nedaudz atŔķiras no iepriekÅ” aprakstÄ«tÄ laidiena arhÄ«va direktorija. Tam vajadzÄtu izskatÄ«ties apmÄram Å”Ädi:
$ ls
build.py constants.py download.py README util.py
LÅ«dzu, Åemiet vÄrÄ, ka ir skripts download.py, kas papildus izvilks ns-3 un pievienoto avota kodu. Å eit jums ir izvÄle: vai nu lejupielÄdÄt jaunÄko ns-3 izstrÄdes momentuzÅÄmumu:
$ python download.py
vai dodiet priekŔroku ns-3 izlaiŔanai, izmantojot karogu -n
lai norÄdÄ«tu izlaiduma numuru:
$ python download.py -n ns-3.29
PÄc Ŕīs darbÄ«bas uz direktoriju ns-3-alinonu tiks lejupielÄdÄti papildu krÄtuves ns-3, cept, pybindgen Šø netanim.
Piezīme
IekÄrtÄ ar tÄ«ru Ubuntu16.04 man bija jÄmaina komanda uz Å”o: $ sudo python3 download.py -n ns-3.29
(turpmÄk tulka piezÄ«mes).
3.3.1. ns-3 ielÄde, izmantojot funkciju Bake
IepriekÅ” minÄtÄs divas metodes (avota arhÄ«vs vai repozitorijs ns-3-alinonu izmantojot Git) ir noderÄ«gi, lai iegÅ«tu vienkÄrÅ”Äko ns-3 instalÄciju ar vairÄkiem papildinÄjumiem (pybindgen lai Ä£enerÄtu Python saistÄ«jumus un netanim tÄ«kla animÄcijai). Tiek izsaukta treÅ”Ä repozitorija, kas pÄc noklusÄjuma tiek nodroÅ”inÄta ns-3-allinone cept.
Cep ir rÄ«ks koordinÄtai programmatÅ«ras veidoÅ”anai no vairÄkiem repozitorijiem, kas izstrÄdÄts ns-3 projektam. Cep var izmantot, lai iegÅ«tu ns-3 izstrÄdes versijas, kÄ arÄ« lejupielÄdÄtu un izveidotu ns-3 izplatÄ«Å”anas bÄzes versijas paplaÅ”inÄjumus, piemÄram, vidi TieÅ”a koda izpilde, CradleNetwork simulÄcijas Ŕūpulis, iespÄja izveidot jaunus Python saiÅ”us un dažÄdas ns-3 āaplikÄcijasā.
Piezīme
CradleNetwork Simulation Cradle ir sistÄma, kas ļauj tÄ«kla simulatorÄ izmantot reÄlus TCP/IP tÄ«kla stekus.
Ja paredzat, ka jÅ«su ns-3 instalÄcijai bÅ«s uzlabotas vai papildu funkcijas, varat sekot Å”im instalÄÅ”anas ceļam.
JaunÄkajos ns-3 laidienos Cep tika pievienots darvas izlaiÅ”anai. LaidienÄ ir iekļauts konfigurÄcijas fails, kas ļauj lejupielÄdÄt paÅ”reizÄjÄs programmatÅ«ras versijas izlaiduma laikÄ. TÄ ir, piemÄram, versija Cep, kas tiek izplatÄ«ts ar laidienu ns-3.29, var izmantot, lai izgÅ«tu komponentus Å”im ns-3 vai vecÄkam laidienam, taÄu to nevar izmantot, lai izgÅ«tu komponentus vÄlÄkiem laidieniem (ja pakotnes apraksta fails bakeconf.xml nav atjauninÄts).
Varat arÄ« iegÅ«t jaunÄko kopiju ceptievadot Å”Ädu komandu savÄ Linux konsolÄ (pieÅemot, ka ir instalÄts Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.git
Palaižot komandu git, jums vajadzÄtu redzÄt kaut ko lÄ«dzÄ«gu Å”im:
Cloning into 'bake'...
remote: Enumerating objects: 2086, done.
remote: Counting objects: 100% (2086/2086), done.
remote: Compressing objects: 100% (649/649), done.
remote: Total 2086 (delta 1404), reused 2078 (delta 1399)
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done.
Resolving deltas: 100% (1404/1404), done.
PÄc komandas pabeigÅ”anas klons jums vajadzÄtu bÅ«t direktorijai ar nosaukumu cept, kuras saturam vajadzÄtu izskatÄ«ties apmÄram Å”Ädi:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO
Å emiet vÄrÄ, ka esat ielÄdÄjis vairÄkus Python skriptus, ar nosaukumu Python modulis cept un XML konfigurÄcijas failu. NÄkamais solis ir izmantot Å”os skriptus, lai lejupielÄdÄtu un izveidotu jÅ«su izvÄlÄto ns-3 izplatÄ«Å”anu. Ir pieejami vairÄki pielÄgoÅ”anas mÄrÄ·i:
-
ns-3.29: izlaidumam atbilstoÅ”ais modulis; tas lejupielÄdÄs komponentus, kas ir lÄ«dzÄ«gi izlaiÅ”anai tarballÄ;
-
ns-3-dev: lÄ«dzÄ«gs modulis, bet izmantojot kodu no izstrÄdes koka;
-
ns-allinons-3.29: modulis, kurÄ ir iekļauti citi papildu lÄ«dzekļi, piemÄram, klikŔķu marÅ”rutÄÅ”ana un tÄ«kla simulÄcijas turÄtÄja, Openflow for ns-3.
-
ns-3-alinonu: lÄ«dzÄ«gs moduļa izlaiÅ”anas versijai viss vienÄ, bet izstrÄdes kodam.
Piezīme
NoklikŔķiniet ā modulÄra programmatÅ«ras arhitektÅ«ra marÅ”rutÄtÄju izveidei.
Openflow ir protokols, lai pÄrvaldÄ«tu marÅ”rutÄtÄju un slÄdžu datu tÄ«klÄ pÄrsÅ«tÄ«to datu apstrÄdes procesu, ievieÅ”ot programmatÅ«ras definÄtu tÄ«kla tehnoloÄ£iju.
PaÅ”reizÄjo izstrÄdes momentuzÅÄmumu (neizlaista) ns-3 var atrast vietnÄ:
IzstrÄdÄtÄji cenÅ”as uzturÄt Ŕīs krÄtuves konsekventÄ darba kÄrtÄ«bÄ, taÄu tÄs atrodas izstrÄdes zonÄ un satur neizlaistu kodu, tÄdÄļ, ja neplÄnojat izmantot jaunas funkcijas, atlasiet oficiÄlo versiju.
JaunÄko koda versiju varat atrast, pÄrlÅ«kojot repozitoriju sarakstu vai atverot tÄ«mekļa lapu ns-3 Releases:
Tagad, lai iegÅ«tu nepiecieÅ”amos ns-3 komponentus, mÄs izmantosim rÄ«ku Cep. Teiksim dažus ievadvÄrdus par darbu Cep.
Bake darbojas, ielÄdÄjot pakotnes avotus direktorijÄ avots un bibliotÄku instalÄÅ”ana bÅ«vÄÅ”anas direktorijÄ. Cep var palaist, atsaucoties uz binÄro, bet, ja vÄlaties palaist Cep nevis no direktorija, kurÄ tas tika lejupielÄdÄts, ieteicams pievienot ceļu uz cept uz jÅ«su ceļu (PATH vides mainÄ«gais), piemÄram, Å”Ädi (Linux bash apvalka piemÄrs). Dodieties uz direktoriju "cept" un pÄc tam iestatiet Å”Ädus vides mainÄ«gos:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
Tas ievietos programmu cep.py uz Äaulas ceļu un ļaus citÄm programmÄm atrast tÄs izveidotos izpildÄmos failus un bibliotÄkas cept. Dažos lietoÅ”anas gadÄ«jumos cept, iepriekÅ” aprakstÄ«tais PATH un PYTHONPATH iestatÄ«jums nav nepiecieÅ”ams, taÄu parasti tas ir nepiecieÅ”ams pilnÄ«gai ns-3-allinone bÅ«vÄÅ”anai (ar papildu pakotnÄm).
Dodieties uz savu darba direktoriju un konsolÄ ievadiet:
$ ./bake.py configure -e ns-3.29
TÄlÄk mÄs jautÄsim Cep pÄrbaudiet, vai mums ir pietiekami daudz rÄ«ku dažÄdu komponentu ielÄdei. ZvanÄ«t:
$ ./bake.py check
Jums vajadzÄtu redzÄt kaut ko lÄ«dzÄ«gu Å”im:
> Python - OK
> GNU C++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...
Å ajÄ darbÄ«bÄ Ä«paÅ”i svarÄ«gi ir augÅ”upielÄdes rÄ«ki, piemÄram, Mercurial, CVS, Git un Bazaar, jo tie ļauj mums iegÅ«t kodu. Å ajÄ brÄ«dÄ« instalÄjiet trÅ«kstoÅ”os rÄ«kus savÄ sistÄmÄ parastajÄ veidÄ (ja zinÄt, kÄ) vai sazinieties ar sistÄmas administratoru, lai saÅemtu palÄ«dzÄ«bu.
PÄc tam mÄÄ£iniet lejupielÄdÄt programmatÅ«ru:
$ ./bake.py download
rezultÄtam vajadzÄtu bÅ«t apmÄram Å”Ädam:
>> Searching for system dependency setuptools - OK
>> Searching for system dependency libgoocanvas2 - OK
>> Searching for system dependency gi-cairo - OK
>> Searching for system dependency pygobject - OK
>> Searching for system dependency pygraphviz - OK
>> Searching for system dependency python-dev - OK
>> Searching for system dependency qt - OK
>> Searching for system dependency g++ - OK
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK
>> Downloading netanim-3.108 - OK
>> Downloading ns-3.29 - OK
Tas nozÄ«mÄs, ka ir lejupielÄdÄti trÄ«s avoti. Tagad dodieties uz avota direktoriju un ierakstiet ls; Jums vajadzÄtu redzÄt:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
Tagad esat gatavs izveidot ns-3 izplatīŔanu.
3.4. MontÄža ns-3
TÄpat kÄ ar ns-3 lejupielÄdi, ir vairÄki veidi, kÄ izveidot ns-3. Galvenais, ko vÄlamies uzsvÄrt, ir tas, ka ns-3 ir izveidots, izmantojot bÅ«vÄÅ”anas rÄ«ku, ko sauc WafaprakstÄ«ts tÄlÄk. LielÄkÄ daļa lietotÄju strÄdÄs ar Waf, taÄu ir daži Ärti skripti, kas palÄ«dzÄs sÄkt darbu vai organizÄt sarežģītÄkas bÅ«ves. TÄpÄc, lÅ«dzu, pirms lasÄt par Waf, Paskaties uz build.py un montÄža ar cept.
3.4.1. Äka ar build.py
UzmanÄ«bu! Å is bÅ«vÄÅ”anas solis ir pieejams tikai no avota arhÄ«va versijas, kas iegÅ«ta, kÄ aprakstÄ«ts iepriekÅ”; un netiek lejupielÄdÄts, izmantojot git vai bake.
StrÄdÄjot ar izlaiduma arhÄ«vu patÄrÄtUz ns-3-alinonu Ir Ärts skripts, kas var atvieglot komponentu montÄžu. To sauc par build.py. Å Ä« programma iestatÄ«s projektu jums visnoderÄ«gÄkajÄ veidÄ. TomÄr Åemiet vÄrÄ, ka uzlabotÄka iestatÄ«Å”ana un darbs ar ns-3 parasti ietver paÅ”as ns-3 veidoÅ”anas sistÄmas Waf izmantoÅ”anu, kas tiks iepazÄ«stinÄta vÄlÄk Å”ajÄ apmÄcÄ«bÄ.
Ja lejupielÄdÄjÄt, izmantojot patÄrÄt, pÄc tam savÄ direktorijÄ ~/darbvieta direktoriju ar nosaukumu kaut kas lÄ«dzÄ«gs ns-allinons-3.29. Ievadiet sekojoÅ”o:
$ ./build.py --enable-examples --enable-tests
Kad sauc build.py MÄs izmantojÄm komandrindas argumentus, lai izveidotu Å”ajÄ apmÄcÄ«bÄ izmantotos piemÄrus un testus, kas pÄc noklusÄjuma nav izveidoti ns-3. PÄc noklusÄjuma programma veido arÄ« visus pieejamos moduļus. PÄc tam, ja vÄlaties, varat izveidot ns-3 bez piemÄriem un testiem vai izslÄgt moduļus, kas nav nepiecieÅ”ami jÅ«su darbam.
JÅ«s redzÄsit daudz kompilatora izvades ziÅojumu, ko parÄda skripts, veidojot dažÄdas jÅ«su ielÄdÄtÄs daļas. Vispirms skripts mÄÄ£inÄs izveidot animatoru netanim, tad saistÄ«Å”anas Ä£enerators pybindgen un visbeidzot ns-3. Kad process ir pabeigts, jums vajadzÄtu redzÄt tÄlÄk norÄdÄ«to.
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s)
Modules built:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
Leaving directory ./ns-3.29
PÄdÄjÄs trÄ«s saraksta rindÄs mÄs redzam ziÅojumu par moduļiem, kas nav izveidoti:
Modules not built (see ns-3 tutorial for explanation):
brite click
Tas vienkÄrÅ”i nozÄ«mÄ, ka daži ns-3 moduļi, kas ir atkarÄ«gi no ÄrÄjÄm bibliotÄkÄm, var nebÅ«t izveidoti vai arÄ« tie nav jÄveido Å”ai konfigurÄcijai. Tas nenozÄ«mÄ, ka simulators nav salikts vai ka samontÄtie moduļi nedarbosies pareizi.
3.4.2 Äka ar cepÅ”anu
Ja iepriekÅ” izmantojÄt bake, lai iegÅ«tu avota kodu no projekta krÄtuvÄm, varat turpinÄt to izmantot, lai izveidotu ns-3. ZvanÄ«t:
$ ./bake.py build
un jums vajadzÄtu redzÄt kaut ko lÄ«dzÄ«gu:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
MÄjiens: Varat arÄ« veikt gan lejupielÄdes, gan veidoÅ”anas darbÄ«bas vienlaikus, izsaucot "bake.py deploy".
Visu komponentu montÄža var neizdoties, taÄu montÄža tiks turpinÄta, ja kÄda sastÄvdaļa nav nepiecieÅ”ama. PiemÄram, nesenÄ pÄrnesamÄ«bas problÄma bija tÄ castxml var salikt ar instrumentu cept ne visÄs platformÄs. Å ajÄ gadÄ«jumÄ tiks parÄdÄ«ts Å”Äds ziÅojums:
>> Building castxml - Problem
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.
Bet castxml nepiecieÅ”ams tikai tad, ja vÄlaties izveidot atjauninÄtus Python saistÄ«jumus. LielÄkajai daļai lietotÄju tas nav nepiecieÅ”ams (vismaz lÄ«dz brÄ«dim, kad viÅi nomaina ns-3), tÄpÄc Å”Ädus brÄ«dinÄjumus pagaidÄm var droÅ”i ignorÄt.
Ja tas neizdodas, Ŕī komanda sniegs mÄjienu par trÅ«kstoÅ”Äm atkarÄ«bÄm:
$ ./bake.py show
Tiks uzskaitÄ«tas dažÄdas to pakotÅu atkarÄ«bas, kuras mÄÄ£inÄt izveidot.
3.4.3. Build with Waf
LÄ«dz Å”im, lai sÄktu veidot ns-3, mÄs izmantojÄm vai nu skriptu build.py, vai rÄ«ks cept. Å ie rÄ«ki ir noderÄ«gi ns-3 veidoÅ”anai un bibliotÄku uzturÄÅ”anai. Faktiski, lai izveidotu, viÅi izmanto veidoÅ”anas rÄ«ku Waf no ns-3 direktorija. Waf instalÄta ar ns-3 pirmkodu. LielÄkÄ daļa lietotÄju Ätri pÄriet uz tieÅ”o lietoÅ”anu, lai konfigurÄtu un montÄtu nsā3 Waf. TÄtad, lai turpinÄtu, lÅ«dzu, dodieties uz ns-3 direktoriju, kuru sÄkotnÄji izveidojÄt.
Å obrÄ«d tas nav stingri nepiecieÅ”ams, taÄu bÅ«s noderÄ«gi nedaudz atkÄpties un redzÄt, kÄ veikt izmaiÅas projekta konfigurÄcijÄ. IespÄjams, visnoderÄ«gÄkÄ konfigurÄcijas maiÅa, ko varat veikt, ir izveidot optimizÄtu koda versiju. PÄc noklusÄjuma esat konfigurÄjis savu projektu, lai izveidotu atkļūdoÅ”anas versiju. ApskatÄ«sim projektu, lai izveidotu optimizÄtu bÅ«vÄjumu. Lai paskaidrotu Waf, ka tai ir jÄizveido optimizÄtas bÅ«ves, kas ietver piemÄrus un testus, jums bÅ«s jÄpalaiž Å”Ädas komandas:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
Tas tiks palaists Waf Ärpus vietÄjÄ direktorija (jÅ«su ÄrtÄ«bÄm). PirmÄ komanda attÄ«ra no iepriekÅ”ÄjÄs versijas, parasti tas nav obligÄti nepiecieÅ”ams, taÄu tÄ ir laba prakse (arÄ« skatÄ«t bÅ«vÄjuma profilus zemÄk); tas izdzÄsÄ«s iepriekÅ” izveidotÄs bibliotÄkas un objektu failus, kas atrodas direktorijÄ bÅ«vÄt/. Kad projekts ir pÄrkonfigurÄts un bÅ«vÄÅ”anas sistÄma pÄrbauda dažÄdas atkarÄ«bas, jums vajadzÄtu redzÄt izvadi, kas ir lÄ«dzÄ«ga Å”Ädai:
Setting top to : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler) : /usr/bin/gcc
Checking for cc version : 7.3.0
Checking for 'g++' (C++ compiler) : /usr/bin/g++
Checking for compilation flag -march=native support : ok
Checking for compilation flag -Wl,--soname=foo support : ok
Checking for compilation flag -std=c++11 support : ok
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags : yes
Testing pyext configuration : yes
Checking for compilation flag -fvisibility=hidden support : ok
Checking for compilation flag -Wno-array-bounds support : ok
Checking for pybindgen location : ../pybindgen ,!(guessed)
Checking for python module 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Checking for pybindgen version : 0.19.0. ,!post4+g823d8b2
Checking for code snippet : yes
Checking for types uint64_t and unsigned long equivalence : no
Checking for code snippet : no
Checking for types uint64_t and unsigned long long equivalence : yes
Checking for the apidefs that can be used for Python bindings : gcc-LP64
Checking for internal GCC cxxabi : complete
Checking for python module 'pygccxml' : not found
Checking for click location : not found
Checking for program 'pkg-config' : /usr/bin/pkg- ,!config
Checking for 'gtk+-3.0' : not found
Checking for 'libxml-2.0' : yes
checking for uint128_t : not found
checking for __uint128_t : yes
Checking high precision implementation : 128-bit integer ,!(default)
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for header sys/types.h : yes
Checking for header sys/stat.h : yes
Checking for header dirent.h : yes
Checking for header stdlib.h : yes
Checking for header signal.h : yes
Checking for header pthread.h : yes
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for library rt : yes
Checking for header sys/ioctl.h : yes
Checking for header net/if.h : yes
Checking for header net/ethernet.h : yes
Checking for header linux/if_tun.h : yes
Checking for header netpacket/packet.h : yes
Checking for NSC location : not found
Checking for 'sqlite3' : not found
Checking for header linux/if_tun.h : yes
Checking for python module 'gi' : 3.26.1
Checking for python module 'gi.repository.GObject' : ok
Checking for python module 'cairo' : ok
Checking for python module 'pygraphviz' : 1.4rc1
Checking for python module 'gi.repository.Gtk' : ok
Checking for python module 'gi.repository.Gdk' : ok
Checking for python module 'gi.repository.Pango' : ok
Checking for python module 'gi.repository.GooCanvas' : ok
Checking for program 'sudo' : /usr/bin/sudo
Checking for program 'valgrind' : not found
Checking for 'gsl' : not found python-config : not found
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for program 'doxygen' : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory :
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite))
DES Metrics event collection : not enabled (defaults to disabled)
Emulation FdNetDevice : enabled
Examples : enabled
File descriptor NetDevice : enabled
GNU Scientific Library (GSL) : not enabled (GSL not found)
Gcrypt library : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore : not enabled (library 'gtk+-3.0 >= 3.0' not fou nd)
MPI Support : not enabled (option --enable-mpi not selected)
ns-3 Click Integration : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration : not enabled (Required boost libraries not found)
Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled
Real Time Simulator : enabled
SQlite stats data output : not enabled (library 'sqlite3' not found)
Tap Bridge : enabled
Tap FdNetDevice : enabled
Tests : enabled
Threading Primitives : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
XmlIo : enabled
'configure' finished successfully (6.387s)
LÅ«dzu, Åemiet vÄrÄ iepriekÅ” minÄtÄ saraksta pÄdÄjo daļu. Dažas ns-3 opcijas nav iespÄjotas pÄc noklusÄjuma, vai tÄm ir nepiecieÅ”ams sistÄmas atbalsts, lai tÄ darbotos pareizi. PiemÄram, lai iespÄjotu XmlTo, bibliotÄkai ir jÄatrodas sistÄmÄ libxml-2.0. Ja Ŕī bibliotÄka netika atrasta un attiecÄ«gÄ ns-3 funkcija nav iespÄjota, tiks parÄdÄ«ts ziÅojums. Å
emiet vÄrÄ arÄ« to, ka ir iespÄjams izmantot komandu sudo lai noteiktÄm programmÄm iestatÄ«tu suid bitu āset group ID at runtimeā. Tas nav iespÄjots pÄc noklusÄjuma, un tÄpÄc Ŕī funkcija tiek rÄdÄ«ta kÄ ānav iespÄjotaā. Visbeidzot, lai iegÅ«tu iespÄjoto opciju sarakstu, izmantojiet Waf ar parametru --check-config
.
Tagad atgriezÄ«simies un pÄriesim atpakaļ uz atkļūdoÅ”anas bÅ«vÄjumu, kurÄ ir piemÄri un testi.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
BÅ«vÄÅ”anas sistÄma tagad ir iestatÄ«ta, un jÅ«s varat izveidot ns-3 programmu atkļūdoÅ”anas versijas, vienkÄrÅ”i ierakstot:
$ ./waf
IepriekÅ” minÄtÄs darbÄ«bas, iespÄjams, lika jums izveidot daļu no ns-3 sistÄmas divreiz, taÄu tagad jÅ«s zinÄt, kÄ mainÄ«t konfigurÄciju un izveidot optimizÄtu kodu.
Lai pÄrbaudÄ«tu, kurÅ” profils ir aktÄ«vs konkrÄtajai projekta konfigurÄcijai, ir komanda:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
IepriekÅ” minÄtais scenÄrijs build.py atbalsta arÄ« argumentus --enable-examples
Šø --enable-tests
, bet citas iespÄjas Waf tas tieÅ”i neatbalsta. PiemÄram, tas nedarbosies:
$ ./build.py --disable-python
reakcija bÅ«s Å”Äda:
build.py: error: no such option: --disable-python
TomÄr Ä«paÅ”o operatoru - - var izmantot, lai nodotu papildu parametrus caur WAFtÄpÄc iepriekÅ” minÄtÄs komandas vietÄ darbosies Å”Äda komanda:
$ ./build.py -- --disable-python
jo tas Ä£enerÄ galveno komandu ./waf configure --disable-python. Å eit ir vÄl daži ievada padomi par Waf.
VeidoÅ”anas kļūdu apstrÄde
ns-3 laidieni tiek pÄrbaudÄ«ti ar jaunÄkajiem C++ kompilatoriem, kas bija pieejami izlaiÅ”anas brÄ«dÄ« parastajos Linux un MacOS izplatÄ«jumos. TomÄr laika gaitÄ tiek izlaisti jauni izplatÄ«jumi ar jauniem kompilatoriem, un Å”ie jaunÄkie kompilatori mÄdz bÅ«t pedantiski attiecÄ«bÄ uz brÄ«dinÄjumiem. ns-3 konfigurÄ savu bÅ«vÄjumu, lai visus brÄ«dinÄjumus uzskatÄ«tu par kļūdÄm, tÄpÄc dažreiz, ja jaunÄkÄ sistÄmÄ izmantojat vecÄku versiju, kompilatora brÄ«dinÄjums var apturÄt bÅ«vÄjumu.
PiemÄram, iepriekÅ” bija ns-3.28 laidiens Fedora 28, kurÄ bija iekļauta jauna galvenÄ versija GCC (gcc-8). Veidojot laidienu ns-3.28 vai vecÄkas versijas saskaÅÄ ar Fedora 28, ar instalÄtu Gtk2+, tiks parÄdÄ«ta Å”Äda kļūda:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ā__gtk_reserved1ā [-Werror=parentheses] void (*__gtk_reserved1);
Laidienos, sÄkot no ns-3.28.1, in Waf ir pieejama iespÄja atrisinÄt Ŕīs problÄmas. Tas atspÄjo karodziÅa "-Kļūda" iestatÄ«Å”anu g++ un clang++. Å Ä« ir opcija "--disable-werror", un tÄ ir jÄizmanto konfigurÄcijas laikÄ:
$ ./waf configure --disable-werror --enable-examples --enable-tests
KonfigurÄt vai salikt
Dažas komandas Waf ir nozÄ«me tikai konfigurÄcijas fÄzÄ, un daži ir derÄ«gi tikai veidoÅ”anas fÄzÄ. PiemÄram, ja vÄlaties izmantot ns-3 emulÄcijas lÄ«dzekļus, varat iespÄjot bitu iestatÄ«jumu sUID izmantojot sudo, kÄ aprakstÄ«ts iepriekÅ”. Tas ignorÄs konfigurÄcijas soļu komandas, un tÄdÄjÄdi jÅ«s varat mainÄ«t konfigurÄciju, izmantojot Å”o komandu, kurÄ ir arÄ« piemÄri un testi.
$ ./waf configure --enable-sudo --enable-examples --enable-tests
Ja jÅ«s to darÄt Waf palaidÄ«s sudolai mainÄ«tu emulÄcijas koda ligzdas izveides programmas, lai tÄs darbotos ar atļaujÄm sakne. Uz Waf Ir pieejamas daudzas citas konfigurÄcijas un veidoÅ”anas soļu iespÄjas. Lai izpÄtÄ«tu savas iespÄjas, ievadiet:
$ ./waf --help
NÄkamajÄ sadaÄ¼Ä mÄs izmantosim dažas ar testÄÅ”anu saistÄ«tas opcijas.
MontÄžas profili
MÄs jau esam redzÄjuÅ”i, kÄ jÅ«s varat konfigurÄt Waf komplektiem atkļūdoÅ”anas Šø optimizÄta:
$ ./waf --build-profile=debug
Ir arī montĞas starpprofils, atlaidiet. Opcija -d
ir sinonīms ar --build-profile
. BÅ«vÄÅ”anas profils kontrolÄ reÄ£istrÄÅ”anas, apgalvojumu un kompilatora optimizÄcijas slÄdžu izmantoÅ”anu:
KÄ redzat, reÄ£istrÄÅ”ana un apgalvojumi ir pieejami tikai atkļūdoÅ”anas bÅ«vÄjumos. IeteicamÄ prakse ir izstrÄdÄt skriptu atkļūdoÅ”anas režīmÄ, pÄc tam veikt atkÄrtotas darbÄ«bas (statistikas vai parametru izmaiÅÄm) optimizÄtÄ bÅ«vprofilÄ.
Ja jums ir kods, kuram vajadzÄtu darboties tikai noteiktos bÅ«vprofilos, izmantojiet koda iesaiÅojuma makro:
NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)
NoklusÄjums, Waf vietas build artefaktus bÅ«vÄÅ”anas direktorijÄ. Izmantojot opciju, varat norÄdÄ«t citu izvades direktoriju -āÆ-out
, piemÄram:
$ ./waf configure --out=my-build-dir
Apvienojot to ar veidoÅ”anas profiliem, varat viegli pÄrslÄgties starp dažÄdÄm kompilÄcijas opcijÄm:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
Tas ļauj strÄdÄt ar vairÄkiem komplektiem, katru reizi nepÄrrakstot jaunÄko komplektÄciju. PÄrslÄdzoties uz citu profilu, Waf kompilÄs tikai to, pilnÄ«bÄ nepÄrkompilÄjot visu.
PÄrslÄdzot bÅ«vprofilus Å”ÄdÄ veidÄ, jums jÄbÅ«t uzmanÄ«giem, lai katru reizi norÄdÄ«tu vienas un tÄs paÅ”as konfigurÄcijas opcijas. VairÄku vides mainÄ«go definÄÅ”ana palÄ«dzÄs izvairÄ«ties no kļūdÄm:
$ 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
SastÄdÄ«tÄji un karogi
IepriekÅ” minÄtajos piemÄros Waf lai izveidotu ns-3, tiek izmantots C++ kompilators no GCC ( g ++). TomÄr jÅ«s varat mainÄ«t izmantoto Waf C++ kompilators, definÄjot CXX vides mainÄ«go. PiemÄram, lai izmantotu C++ kompilatoru Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build
TÄdÄ paÅ”Ä veidÄ jÅ«s varat konfigurÄt Waf lai izmantotu izplatÄ«to kompilÄciju, izmantojot distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
PlaÅ”Äku informÄciju par distcc un izplatÄ«to kompilÄciju var atrast projekta lapas sadaÄ¼Ä DokumentÄcija. Lai pievienotu kompilatora karogus, konfigurÄjot ns-3, izmantojiet vides mainÄ«go CXXFLAGS_EXTRA.
UzstÄdÄ«Å”ana
Waf var izmantot, lai instalÄtu bibliotÄkas dažÄdÄs sistÄmas vietÄs. PÄc noklusÄjuma apkopotÄs bibliotÄkas un izpildÄmie faili atrodas direktorijÄ bÅ«vÄt, un tÄ kÄ Waf zina Å”o bibliotÄku un izpildÄmo failu atraÅ”anÄs vietu, bibliotÄkas nekur citur nav jÄinstalÄ.
Ja lietotÄji dod priekÅ”roku instalÄÅ”anai Ärpus veidoÅ”anas direktorija, viÅi var palaist komandu ./waf instalÄt. InstalÄcijas noklusÄjuma prefikss ir / usr / localTÄ ./waf instalÄt instalÄs programmas / usr / local / bin, bibliotÄkas iekÅ”Ä / Usr / local / lib un galvenes failus /usr/local/include. SuperlietotÄja tiesÄ«bas parasti ir jÄiestata ar noklusÄjuma prefiksu, tÄpÄc tipiska komanda bÅ«tu sudo ./waf instalÄt. Palaižot, Waf vispirms izvÄlÄsies izmantot koplietojamÄs bibliotÄkas bÅ«vÄÅ”anas direktorijÄ un pÄc tam meklÄs bibliotÄkas ceÄ¼Ä uz vietÄjÄ vidÄ konfigurÄtajÄm bibliotÄkÄm. TÄpÄc, instalÄjot bibliotÄkas sistÄmÄ, laba prakse ir pÄrbaudÄ«t, vai tiek izmantotas pareizÄs bibliotÄkas. LietotÄji var izvÄlÄties instalÄt ar citu prefiksu, nododot Å”o opciju konfigurÄcijas laikÄ --prefix
, piemÄram:
./waf configure --prefix=/opt/local
Ja vÄlÄk, pÄc bÅ«vÄÅ”anas, lietotÄjs ievada instalÄÅ”anas komandu ./waf
, tiks izmantots prefikss /opt/local.
Komanda ./waf clean
ir jÄizmanto pirms projekta pÄrkonfigurÄÅ”anas, ja instalÄcija tiks izmantota Waf zem cita prefiksa.
TÄdÄjÄdi, lai izmantotu ns-3, nav jÄzvana ./waf install
. LielÄkajai daļai lietotÄju Ŕī komanda nebÅ«s vajadzÄ«ga, jo Waf paÅems paÅ”reizÄjÄs bibliotÄkas no bÅ«vÄÅ”anas direktorija, taÄu dažiem lietotÄjiem tas var Ŕķist noderÄ«gi, ja viÅu darbÄ«bas ir saistÄ«tas ar programmÄm Ärpus ns-3 direktorija.
Waf singls
Ns-3 avota koka augÅ”ÄjÄ lÄ«menÄ« ir tikai viens Waf skripts. Kad sÄksiet strÄdÄt, direktorijÄ pavadÄ«siet daudz laika scratch/
vai dziļÄksrc/...
un tajÄ paÅ”Ä laikÄ jÄskrien Waf. JÅ«s varat vienkÄrÅ”i atcerÄties, kur atrodaties, un skriet Waf Å”Ädi:
$ ../../../waf ...
bet tas bÅ«s nogurdinoÅ”i un ar kļūdu iespÄjamÄ«bu, tÄpÄc ir labÄki risinÄjumi. Viens izplatÄ«ts veids ir izmantot teksta redaktoru, piemÄram, emacs vai spars, kurÄ tiek atvÄrtas divas terminÄļa sesijas, viena tiek izmantota ns-3 veidoÅ”anai, bet otra tiek izmantota avota koda rediÄ£ÄÅ”anai. Ja jums ir tikai patÄrÄt, tad vides mainÄ«gais var palÄ«dzÄt:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
Moduļa direktorijÄ varÄtu bÅ«t vilinoÅ”i pievienot triviÄlu waf skriptu, piemÄram, exec ../../waf
. LÅ«dzu, nedariet to. Tas mulsina iesÄcÄjus un, ja tas tiek darÄ«ts slikti, noved pie grÅ«ti pamanÄmÄm bÅ«ves kļūdÄm. IepriekÅ” parÄdÄ«tie risinÄjumi ir ceļŔ, kas bÅ«tu jÄizmanto.
3.5 TestÄÅ”ana ns-3
Varat palaist ns-3 izplatīŔanas vienību testus, palaižot skriptu ./test.py:
$ ./test.py
Å ie testi tiek veikti paralÄli Waf. Galu galÄ jums vajadzÄtu redzÄt ziÅojumu, kurÄ teikts:
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
Å is ir svarÄ«gs ziÅojums, lai identificÄtu valgrind avÄrijas, avÄrijas vai kļūdas, norÄdot uz problÄmÄm ar kodu vai nesaderÄ«bu starp rÄ«kiem un kodu.
JÅ«s redzÄsiet arÄ« galÄ«go izvadi no Waf un testeris, kas veic katru testu, kas izskatÄ«sies apmÄram Å”Ädi:
Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (1.799s)
Modules built:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
Å o komandu parasti izpilda lietotÄji, lai Ätri pÄrbaudÄ«tu, vai ns-3 izplatÄ«Å”ana ir izveidota pareizi. (Å emiet vÄrÄ, ka rindu "PASS: ..." secÄ«ba var atŔķirties, tas ir normÄli. SvarÄ«gi ir tas, ka kopsavilkuma rindiÅa pÄrskata beigÄs parÄda, ka visi testi ir izturÄti; neviens tests neizdevÄs vai avarÄja.) Un WafUn test.py paralÄli strÄdÄs visos iekÄrtas pieejamajos procesora kodolos.
3.6. Skripta palaiŔana
MÄs parasti palaižam skriptus kontrolÄti Waf. Tas ļauj bÅ«vÄÅ”anas sistÄmai nodroÅ”inÄt, ka koplietojamo bibliotÄku ceļi ir iestatÄ«ti pareizi un ka bibliotÄkas ir pieejamas izpildlaikÄ. Lai palaistu programmu, vienkÄrÅ”i izmantojiet Waf ar parametru -āÆ-run
. PalaidÄ«sim visuresoÅ”Äs programmas ns-3 ekvivalentu Hello pasaulÄierakstot Å”o:
$ ./waf --run hello-simulator
Waf vispirms pÄrbaudÄ«s, vai programma ir izveidota pareizi, un vajadzÄ«bas gadÄ«jumÄ izveidos. Tad Waf izpildÄ«s programmu, kas rada Å”Ädu izvadi.
Hello Simulator
Apsveicam! JÅ«s tagad esat ns-3 lietotÄjs!
Kas man jÄdara, ja neredzu rezultÄtus?
Ja redzat ziÅojumus WafnorÄdot, ka bÅ«vÄÅ”ana ir veiksmÄ«gi pabeigta, bet jÅ«s neredzat izvadi "Sveiks simulators", tad pastÄv iespÄja, ka sadaÄ¼Ä [Build-with-Waf] jÅ«s pÄrslÄdzÄt veidoÅ”anas režīmu uz optimizÄta, bet neizdevÄs pÄrslÄgties atpakaļ uz režīmu atkļūdoÅ”anas. VisÄ Å”ajÄ apmÄcÄ«bÄ izmantotajÄ konsoles izvadÄ tiek izmantots Ä«paÅ”s ns-3 komponents, kas veic reÄ£istrÄÅ”anu un tiek izmantots pielÄgotu ziÅojumu drukÄÅ”anai konsolÄ. Å Ä« komponenta izvade tiek automÄtiski atspÄjota, kad tiek apkopots optimizÄtais kods - tas ir "optimizÄts". Ja neredzat izvadi "Hello Simulator", ievadiet Å”o:
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
lai pielÄgotu Waf lai izveidotu ns-3 programmu atkļūdoÅ”anas versijas, kas ietver piemÄrus un testus. PÄc tam jums ir jÄpÄrveido paÅ”reizÄjÄ koda atkļūdoÅ”anas versija, ierakstot
$ ./waf
Tagad, ja palaižat programmu sveiks-simulators, jums vajadzÄtu redzÄt gaidÄ«to rezultÄtu.
3.6.1. Komandrindas argumenti
Lai nosÅ«tÄ«tu komandrindas argumentus programmai ns-3, izmantojiet Å”Ädu paraugu:
$ ./waf --run <ns3-program> --command-template="%s <args>"
Aizvietot uz jÅ«su programmas nosaukumu un argumentiem. Arguments -āÆ-command-template
par Waf bÅ«tÄ«bÄ ir recepte faktiskÄs komandrindas izveidei Waf izmanto programmas izpildei. Waf pÄrbauda, āāvai bÅ«vÄÅ”ana ir pabeigta, iestata koplietotÄs bibliotÄkas ceļus, pÄc tam izmanto nodroÅ”inÄto komandrindas veidni un aizstÄj programmas nosaukumu %s vietturim, lai izsauktu izpildÄmo failu. Ja Ŕī sintakse jums Ŕķiet sarežģīta, ir vienkÄrÅ”Äka versija, kas ietver programmu ns-3 un tÄs argumentus, kas ievietoti atseviŔķÄs pÄdiÅÄs:
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
VÄl viens Ä«paÅ”i noderÄ«gs piemÄrs ir selektÄ«va testa komplektu palaiÅ”ana. PieÅemsim, ka ir testa komplekts, ko sauc par mytest (patiesÄ«bÄ tÄ nav). IepriekÅ” mÄs izmantojÄm skriptu ./test.py, lai paralÄli palaistu vairÄkus testus, kas atkÄrtoti izsauc testa programmu testa skrÄjÄjs. Zvaniet testa skrÄjÄjs tieÅ”i, lai palaistu vienu testu:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
Argumenti tiks nodoti programmai testa skrÄjÄjs. TÄ kÄ mytest neeksistÄ, tiks Ä£enerÄts kļūdas ziÅojums. Lai izdrukÄtu pieejamÄs testa izpildÄ«tÄja opcijas, ievadiet:
$ ./waf --run test-runner --command-template="%s --help"
3.6.2. AtkļūdoŔana
Lai palaistu ns-3 programmas ar citu utilÄ«tu, piemÄram, atkļūdotÄju (piemÄram, gdb) vai atmiÅas pÄrbaudes rÄ«ku (piemÄram, valgrind), izmantojiet lÄ«dzÄ«gu veidlapu -āÆ-command-template = "ā¦"
. PiemÄram, lai palaistu atkļūdotÄju gdb jÅ«su hello-simulator ns-3 programma ar argumentiem:
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
Å
emiet vÄrÄ, ka ns-3 programmas nosaukums nÄk ar argumentu -āÆ-run
, un pÄrvaldÄ«bas utilÄ«ta (Å”eit gdb) ir argumenta pirmais apzÄ«mÄjums -āÆ-command-template
. Opcija -āÆ-args
ziÅojumi gdbka pÄrÄjÄ komandrindas daļa pieder "apakÅ”Äjai" programmai. (Dažas versijas gdb nesaprotu variantu -āÆ-args
. Å ÄdÄ gadÄ«jumÄ noÅemiet programmas argumentus no -āÆ-command-template
un izmantojiet komandu kopu gdb args.) MÄs varam apvienot Å”o recepti un iepriekÅ”Äjo, lai palaistu testu zem atkļūdotÄja:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
3.6.3. Darba direktorijs
Waf ir jÄpalaiž no tÄs atraÅ”anÄs vietas ns-3 koka augÅ”pusÄ. Å Ä« mape kļūst par darba direktoriju, kurÄ tiks ierakstÄ«ti izvades faili. Bet ko darÄ«t, ja vÄlaties saglabÄt Å”os failus Ärpus ns-3 avota koka? Izmantojiet argumentu -āÆ-cwd
:
$ ./waf --cwd=...
Jums var Ŕķist ÄrtÄk iegÅ«t izvades failus savÄ darba direktorijÄ. Å ajÄ gadÄ«jumÄ var palÄ«dzÄt tÄlÄk norÄdÄ«tÄ netieÅ”Ä darbÄ«ba:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}
Å Ä« komandas iepriekÅ”ÄjÄs versijas apdare saglabÄ paÅ”reizÄjo darba direktoriju, pÄriet uz direktoriju Wafun tad pamÄca Waf lai mainÄ«tu darba direktoriju atpakaļ uz paÅ”reizÄjo darba direktoriju, kas saglabÄts pirms programmas palaiÅ”anas. MÄs pieminam komandu -āÆ-cwd
Lai nodroÅ”inÄtu pilnÄ«gumu, lielÄkÄ daļa lietotÄju vienkÄrÅ”i palaiž Waf no augstÄkÄ lÄ«meÅa direktorija un Ä£enerÄ tur izvadfailus.
Avots: www.habr.com