ns-3 tīkla simulatora apmācība. 3. nodaļa

ns-3 tīkla simulatora apmācība. 3. nodaļa
1,2. nodaļa

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

Å Ä« 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: https://www.nsnam.org, jo tur ir daudz informācijas. Sākot ar jaunāko ns-3 versiju (ns-3.29), lai palaistu ns-3, ir nepiecieÅ”ami Ŕādi rÄ«ki:

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ē https://gitlab.com/nsnam/. Grupa nsnam apvieno dažādas repozitorijus, ko izmanto atvērtā koda projekts.

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:

  1. ns-3.29: izlaidumam atbilstoÅ”ais modulis; tas lejupielādēs komponentus, kas ir lÄ«dzÄ«gi izlaiÅ”anai tarballā;

  2. ns-3-dev: līdzīgs modulis, bet izmantojot kodu no izstrādes koka;

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

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

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:https://www.nsnam.org/releases/ un noklikŔķinot uz jaunākās versijas saites. Å ajā piemērā mēs turpināsim ar ns-3.29.

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:

ns-3 tīkla simulatora apmācība. 3. nodaļa

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.

Turpinājums: 4. nodaļa

Avots: www.habr.com

Pievieno komentāru