Tutorial tas-simulatur tan-netwerk ns-3. Kapitolu 3

Tutorial tas-simulatur tan-netwerk ns-3. Kapitolu 3
kapitlu 1,2

3 Kif tibda
3.1 Ħarsa ġenerali
3.2 Prerekwiżiti
3.2.1 Tniżżil tar-rilaxx ns-3 bħala arkivju sors
3.3 Tniżżil ta 'ns-3 bl-użu ta' Git
3.3.1 Tagħbija ns-3 bl-użu Bake
3.4 Assemblea ns-3
3.4.1 Bini b'build.py
3.4.2 Bini bil Bake
3.4.3 Ibni bil-Waf
3.5 Ittestjar ns-3
3.6 Tmexxi l-iskript
3.6.1 Argumenti tal-linja tal-kmand
3.6.2 Debugging
3.6.3 Direttorju tax-xogħol

Kapitolu 3

Kif tibda

Dan il-kapitlu huwa maħsub biex jipprepara lill-qarrej biex jibda b'kompjuter li jista' jkun qatt ma installat ns-3. Ikopri pjattaformi appoġġjati, prerekwiżiti, kif tikseb ns-3, kif tibni ns-3, u kif tittestja l-bini u t-tħaddim ta 'programmi sempliċi tiegħek.

3.1 Ħarsa ġenerali

Is-simulatur ns-3 huwa mibni bħala sistema ta 'libreriji tas-softwer kollaborattivi. Waqt l-assemblaġġ, il-kodiċi tal-programmi tal-utent huwa marbut ma 'dawn il-libreriji. Il-lingwi ta 'programmar C++ jew Python jintużaw biex jiktbu programmi personalizzati.

Ns-3 huwa mqassam bħala kodiċi tas-sors, li jfisser li s-sistema fil-mira għandu jkollha ambjent ta 'żvilupp ta' softwer sabiex l-ewwel tibni l-libreriji u mbagħad tibni l-programm tal-utent. Fil-prinċipju, ns-3 jistgħu jitqassmu bħala libreriji lesti għal sistema speċifika, u fil-futur jistgħu jitqassmu b'dan il-mod. Imma llum il-ġurnata ħafna utenti fil-fatt jagħmlu xogħolhom billi jeditjaw ns-3 innifsu, għalhekk huwa utli li jkollok il-kodiċi tas-sors biex tibni l-libreriji. Jekk xi ħadd jixtieq jieħu ħsieb ix-xogħol li joħloq libreriji u pakketti lesti għal sistemi operattivi, jekk jogħġbok ikkuntattja l-lista tal-posta ns-iżviluppaturi.

Sussegwentement, aħna ser inħarsu lejn tliet modi biex tniżżel u nibnu ns-3. L-ewwel huwa li tniżżel u tibni r-rilaxx uffiċjali mis-sit prinċipali. It-tieni hija l-għażla u l-assemblaġġ ta 'kopji ta' verżjonijiet ta 'żvilupp tal-installazzjoni bażika ns-3. It-tielet huwa li tuża għodod ta 'bini addizzjonali biex tagħbija aktar estensjonijiet għal ns-3. Aħna ser ngħaddu minn kull wieħed peress li l-għodod huma kemmxejn differenti.

Utenti b'esperjenza tal-Linux jistgħu jistaqsu għaliex ns-3 mhux ipprovdut bħala pakkett bħall-biċċa l-kbira tal-libreriji oħra li jużaw maniġer tal-pakketti? Għalkemm hemm pakketti binarji għal diversi distribuzzjonijiet tal-Linux (eż. Debian), il-biċċa l-kbira tal-utenti jispiċċaw jeditjaw il-libreriji u jkollhom jerġgħu jibnu ns-3 huma stess, u għalhekk li l-kodiċi tas-sors disponibbli huwa utli. Għal din ir-raġuni, aħna se niffukaw fuq l-installazzjoni mis-sors.

Għal ħafna applikazzjonijiet ns-3 drittijiet għeruq mhumiex meħtieġa, huwa rakkomandat li tuża kont tal-utent mhux privileġġjat.

3.2 Prerekwiżiti

Is-sett kollu ta’ libreriji ns-3 disponibbli għandu numru ta’ dipendenzi fuq libreriji ta’ partijiet terzi, iżda fil-biċċa l-kbira ns-3 jista’ jinbena u jintuża b’appoġġ għal diversi komponenti komuni (spiss installati b’mod awtomatiku): kompilatur C++, Python, editur tal-kodiċi tas-sors (per eżempju, VIM, Emacs jew Eclipse) u, jekk jintużaw repożitorji ta' żvilupp, sistemi ta' kontroll tal-verżjoni Git. Ħafna mill-utenti għall-ewwel darba mhux se jkollhom għalfejn joqogħdu jinkwetaw jekk il-konfigurazzjoni tagħhom tirrapporta xi karatteristiċi avvanzati ns-3 nieqsa, iżda għal dawk li jridu installazzjoni sħiħa, il-proġett jipprovdi wiki li jinkludi paġni b'ħafna pariri u tricks utli. Waħda minn dawn il-paġna hija l-paġna Installazzjoni, bi struzzjonijiet ta’ installazzjoni għal diversi sistemi, disponibbli fuq: https://www.nsnam.org/wiki/Installation.

It-taqsima tal-Prerekwiżiti ta 'din il-wiki tispjega liema pakketti huma meħtieġa biex jappoġġjaw għażliet komuni ns-3 u tipprovdi wkoll il-kmandi użati biex jiġu installati fuq togħmiet komuni ta' Linux jew macOS.

Tista' tieħu vantaġġ minn din l-opportunità biex tesplora l-paġna wiki ns-3 jew il-websajt prinċipali: https://www.nsnam.org, għax hemm ħafna informazzjoni hemmhekk. Nibdew bl-aħħar verżjoni ta 'ns-3 (ns-3.29), l-għodod li ġejjin huma meħtieġa biex tħaddem ns-3:

Pakkett/Verżjoni tal-Għodda

  • kompilatur C++
    clang++ jew g++ (g++ verżjoni 4.9 jew ogħla)
  • Python
    Verżjoni python2 >= 2.7.10, jew verżjoni python3 >=3.4
  • go
    kwalunkwe verżjoni riċenti (biex taċċessa ns-3 fuq GitLab.com)
  • qatran
    kwalunkwe verżjoni riċenti (għall-iżballaġġ ta' rilaxx ns‑3)
  • bunzip2
    kwalunkwe verżjoni riċenti (għall-iżball tar-rilaxx ns‑3)

Biex tiċċekkja l-verżjoni default ta 'Python, ittajpja python -V. Biex tiċċekkja l-verżjoni g++, ittajpja g++ -v. Jekk xi għodda hija nieqsa jew qodma wisq, jekk jogħġbok irreferi għall-gwida tal-installazzjoni fuq il-paġna wiki ns-3.

Minn dan il-punt 'il quddiem, nassumu li l-qarrej qed iħaddem Linux, MacOS, jew emulatur Linux, u għandu mill-inqas l-għodod ta' hawn fuq.

3.2.1 Tniżżil tar-rilaxx ns-3 bħala arkivju sors

Dan huwa l-kors ta 'azzjoni għal utent ġdid li jrid tniżżel u jesperimenta bl-aħħar rilaxx u verżjonijiet tal-pakkett ta' ns-3. Ir-rilaxxi ns-3 huma ppubblikati bħala arkivji sors kompressat, xi kultant imsejħa tarball. tarball huwa format ta' arkivju tas-softwer speċjali li fih diversi fajls huma kkombinati flimkien. L-arkivju huwa normalment ikkompressat. ns-3 boot proċess permezz tarball huwa sempliċi, għandek bżonn biss li tagħżel rilaxx, tniżżel u spakkjaha.

Ejja nassumu li inti, bħala utent, trid tibni ns-3 f'direttorju lokali msejjaħ spazju tax-xogħol. Tista 'tikseb kopja ta' ħidma tar-rilaxx billi ddaħħal dan li ġej fil-console Linux (li tissostitwixxi n-numri tal-verżjoni xierqa, ovvjament)

$ 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 

Oqgħod attent għall-utilità użata hawn fuq Wget, li hija għodda tal-linja tal-kmand għat-tniżżil ta' oġġetti mill-Internet. Jekk ma installajtx, tista' tuża l-browser tiegħek għal dan.

Wara dawn il-passi se tieħdok għad-direttorju ns-allinone-3.29, hemm għandek tara diversi fajls u direttorji

$ 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

Issa inti lest biex tibni d-distribuzzjoni bażi ns-3 u tista 'tgħaddi għat-taqsima dwar il-bini ns-3.

3.3 Tniżżil ta 'ns-3 bl-użu ta' Git

Il-kodiċi ns-3 huwa disponibbli fir-repożitorji Git fuq GitLab.com fuq https://gitlab.com/nsnam/. Grupp nsnam jiġbor flimkien id-diversi repożitorji użati minn proġett open source.

L-eħfef mod biex tibda tuża r-repożitorji Git huwa li tagħmel jew tikklona l-ambjent ns-3-allinone. Dan huwa sett ta 'skripts li jimmaniġġjaw it-tagħbija u l-assemblaġġ tas-sottosistemi ns-3 l-aktar użati b'mod komuni. Jekk int ġdid Git, it-termini "furketta" u "klonu" jistgħu ma jkunux familjari għalik; jekk iva, nirrakkomandaw li sempliċement tikklona (tagħmel il-kopja tiegħek) ir-repożitorju li jinsab fuq GitLab.com bħal dan:

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

F'dan l-istadju, il-veduta tad-direttorju tiegħek ns-3-allinone kemmxejn differenti mid-direttorju tal-arkivju tar-rilaxx deskritt hawn fuq. Għandu jidher xi ħaġa bħal din:

$ ls
build.py constants.py download.py README util.py

Jekk jogħġbok innota li hemm skript download.py, li se estratti wkoll ns-3 u l-kodiċi tas-sors li jakkumpanjahom. Hawnhekk għandek għażla: jew tniżżel l-aħħar snapshot tal-iżvilupp ns-3:

$ python download.py

jew jippreferu r-rilaxx ns-3 bl-użu tal-bandiera -n biex tindika n-numru tar-rilaxx:

$ python download.py -n ns-3.29

Wara dan il-pass għad-direttorju ns-3-allinone se jitniżżlu repożitorji addizzjonali ns-3, bake, pybindgen и netanim.

Innota
Fuq magna b'Ubuntu16.04 nadif, kelli bżonn nibdel il-kmand għal dan: $ sudo python3 download.py -n ns-3.29 (minn hawn 'il quddiem in-noti tat-traduttur).

3.3.1 Tagħbija ns-3 bl-użu Bake

Iż-żewġ metodi ta’ hawn fuq (arkivju tas-sors jew repożitorju ns-3-allinone permezz ta' Git) huma utli biex tinkiseb l-eħfef installazzjoni ns-3 b'diversi addons (pybindgen biex tiġġenera rbit Python u netanim għall-animazzjoni tan-netwerk). It-tielet repożitorju pprovdut awtomatikament f'ns-3-allinone jissejjaħ bake.

Aħmi hija għodda għall-bini koordinat ta 'softwer minn repożitorji multipli, żviluppati għall-proġett ns-3. Aħmi jistgħu jintużaw biex jinkisbu verżjonijiet ta 'żvilupp ta' ns-3, kif ukoll biex tniżżel u tibni estensjonijiet tal-verżjoni bażi tad-distribuzzjoni ns-3, bħall-ambjent Eżekuzzjoni Diretta tal-Kodiċi, CradleNetwork Simulazzjoni Benniena, il-ħila li toħloq rbit Python ġodda u diversi "apps" ns-3.

Innota
CradleNetwork Simulation Cradle huwa qafas li jippermettilek tuża munzelli reali tan-netwerk TCP/IP ġewwa simulatur tan-netwerk.

Jekk tistenna li l-installazzjoni ns-3 tiegħek ikollha karatteristiċi avvanzati jew addizzjonali, tista 'ssegwi din il-mogħdija ta' installazzjoni.

Fl-aħħar ħarġiet ns-3 Aħmi ġie miżjud mar-rilaxx tal-qatran. Ir-rilaxx jinkludi fajl ta 'konfigurazzjoni li jippermettilek tniżżel il-verżjonijiet tas-softwer attwali fil-ħin tar-rilaxx. Jiġifieri, pereżempju, verżjoni Aħmi, li huwa mqassam bir-rilaxx ns-3.29, jista 'jintuża biex jiġu rkuprati komponenti għal dik ir-rilaxx ta' ns-3 jew aktar kmieni, iżda ma jistgħux jintużaw biex jiġu rkuprati komponenti għal rilaxxi aktar tard (jekk il-fajl tad-deskrizzjoni tal-pakkett bakeconf.xml mhux aġġornat).

Tista' wkoll tikseb l-aħħar kopja bakebilli ddaħħal il-kmand li ġej fil-console Linux tiegħek (jekk wieħed jassumi li għandek Git installat):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

Meta tmexxi l-kmand git, għandek tara xi ħaġa bħal din li ġejja:

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.

Wara li jitlesta l-kmand klonu għandu jkollok direttorju msemmi bake, li l-kontenut tiegħu għandu jidher xi ħaġa bħal din:

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

Innota li għabbejt diversi skripts Python, modulu Python imsemmi bake u fajl ta' konfigurazzjoni XML. Il-pass li jmiss huwa li tuża dawn l-iskripts biex tniżżel u tibni d-distribuzzjoni ns-3 tal-għażla tiegħek. Diversi miri ta 'adattament huma disponibbli:

  1. ns-3.29: modulu li jikkorrispondi għar-rilaxx; se tniżżel komponenti simili għar-rilaxx fil-tarball;

  2. ns-3-dev: modulu simili, iżda li juża kodiċi mis-siġra tal-iżvilupp;

  3. ns-allinone-3.29: Modulu li jinkludi karatteristiċi addizzjonali oħra bħal Ikklikkja r-rotot u Netwerk Simulation Cradle, Openflow għal ns-3.

  4. ns-3-allinone: simili għall-verżjoni tar-rilaxx tal-modulu kollox f'daqqa, iżda għall-kodiċi ta 'żvilupp.

Innota
Ikklikkja — arkitettura modulari tas-softwer għall-ħolqien ta' routers.

Openflow huwa protokoll għall-ġestjoni tal-proċess tal-ipproċessar tad-dejta trażmessa fuq netwerk tad-dejta minn routers u swiċċijiet, li timplimenta teknoloġija tan-netwerk definita minn softwer.

L-istampa attwali tal-iżvilupp (mhux rilaxx) ns-3 tista' tinstab fuq:https://gitlab.com/nsnam/ns-3-dev.git.

L-iżviluppaturi jippruvaw iżommu dawn ir-repożitorji f'ordni ta 'ħidma konsistenti, iżda huma fiż-żona ta' żvilupp u fihom kodiċi mhux rilaxxat, għalhekk jekk ma tippjanax li tuża karatteristiċi ġodda, imbagħad agħżel ir-rilaxx uffiċjali.

Tista' ssib l-aħħar verżjoni tal-kodiċi billi tibbrawżja l-lista ta' repożitorji, jew billi tmur fil-paġna web ta' ns-3 Releases:https://www.nsnam.org/releases/ u tikklikkja fuq il-link tal-aħħar verżjoni. F'dan l-eżempju se nkomplu b'ns-3.29.

Issa, biex niksbu l-komponenti ns-3 li għandna bżonn, aħna ser nużaw l-għodda Aħmi. Ejja ngħidu ftit kliem introduttorju dwar ix-xogħol Aħmi.

Bake jaħdem billi jgħabbi sorsi tal-pakketti f'direttorju sors u l-installazzjoni tal-libreriji fid-direttorju tal-bini. Aħmi jistgħu jitmexxew billi jirreferu għall-binarju, imma jekk trid tmexxi Aħmi mhux mid-direttorju li fih tniżżlet, huwa rakkomandabbli li żżid il-mogħdija bake lejn il-mogħdija tiegħek (varjabbli tal-ambjent PATH), pereżempju kif ġej (eżempju għal Linux bash shell). Mur fid-direttorju "bake" u mbagħad issettja l-varjabbli ambjentali li ġejjin:

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

Dan se jpoġġi l-programm bake.py lejn il-mogħdija tal-qoxra u se tippermetti li programmi oħra jsibu l-eżekutibbli u l-libreriji li ħoloq bake. F'xi każijiet ta 'użu bake, l-issettjar PATH u PYTHONPATH deskritt hawn fuq mhux meħtieġ, iżda bini sħiħ ta 'ns-3-allinone (b'pakketti addizzjonali) ġeneralment jeħtieġha.

Mur fid-direttorju tax-xogħol tiegħek u daħħal dan li ġej fil-console:

$ ./bake.py configure -e ns-3.29

Sussegwentement nistaqsu Aħmi iċċekkja jekk għandna biżżejjed għodda biex jgħabbi l-komponenti varji. Ċempel:

$ ./bake.py check

Għandek tara xi ħaġa bħal din li ġejja:

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

B'mod partikolari, ittella' għodod bħal Mercurial, CVS, Git u Bazaar huma essenzjali f'dan il-pass peress li jippermettulna niksbu l-kodiċi. F'dan il-punt, installa l-għodod neqsin bil-mod tas-soltu għas-sistema tiegħek (jekk taf kif) jew ikkuntattja lill-amministratur tas-sistema tiegħek għall-għajnuna.

Sussegwentement, ipprova tniżżel is-softwer:

$ ./bake.py download

ir-riżultat għandu jkun xi ħaġa bħal:

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

Dan ikun ifisser li tliet sorsi ġew imniżżla. Issa mur fid-direttorju tas-sors u ittajpja ls; Għandek tara:

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

Issa inti lest biex tibni d-distribuzzjoni ns-3.

3.4 Assemblea ns-3

Bħal tniżżil ns-3, hemm diversi modi biex tibni ns-3. Il-ħaġa prinċipali li rridu nenfasizzaw hija li ns-3 huwa mibni bl-użu ta 'għodda tal-bini msejħa Wafdeskritt hawn taħt. Ħafna utenti se jaħdmu magħhom Waf, iżda hemm ftit skripts utli biex jgħinuk tibda jew torganizza bini aktar kumpless. Allura jekk jogħġbok, qabel ma taqra dwar Waf, agħti ħarsa lejn build.py u assemblaġġ ma bake.

3.4.1 Bini b'build.py

Attenzjoni! Dan il-pass tal-bini huwa disponibbli biss mill-verżjoni tal-arkivju tas-sors miksuba kif deskritt hawn fuq; u mhux jitniżżel permezz ta' git jew bake.

Meta taħdem ma 'arkivju ta' rilaxx tarballpulzieri ns-3-allinone Hemm skript handy li jista 'jagħmel l-assemblaġġ tal-komponenti aktar faċli. Tissejjaħ build.py. Dan il-programm se jwaqqaf il-proġett għalik bl-aktar mod utli. Madankollu, innota li setup u xogħol aktar avvanzati b'ns-3 normalment jinvolvi l-użu tas-sistema tal-bini ns-3 stess, Waf, li se tiġi introdotta aktar tard f'dan it-tutorja.

Jekk niżżilt bl-użu tarball, imbagħad fid-direttorju tiegħek ~/spazju tax-xogħol direttorju b'isem xi ħaġa simili ns-allinone-3.29. Daħħal dan li ġej:

$ ./build.py --enable-examples --enable-tests

Meta tissejjaħ build.py Aħna użajna argumenti tal-linja tal-kmand biex nibnu l-eżempji u t-testijiet użati f'dan it-tutorja, li mhumiex mibnija awtomatikament f'ns-3. B'mod awtomatiku, il-programm jibni wkoll il-moduli kollha disponibbli. Imbagħad, jekk tixtieq, tista 'tibni ns-3 mingħajr eżempji u testijiet, jew teskludi moduli li mhumiex meħtieġa għax-xogħol tiegħek.

Int ser tara ħafna messaġġi tal-produzzjoni tal-kompilatur murija mill-iskrittura hekk kif tibni l-partijiet varji li għamilt. L-ewwel l-iskrittura se tipprova tibni l-animatur netanim, imbagħad il-ġeneratur vinkolanti pybindgen u finalment ns-3. Meta l-proċess ikun lest, għandek tara dan li ġej:

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

Fl-aħħar tliet linji tal-lista naraw messaġġ dwar moduli li ma nbnewx:

Modules not built (see ns-3 tutorial for explanation):
brite                     click

Dan sempliċement ifisser li xi moduli ns-3 li jiddependu fuq libreriji esterni jistgħu ma nbnewx, jew li mhumiex meħtieġa li jinbnew għal din il-konfigurazzjoni. Dan ma jfissirx li s-simulatur mhux immuntat jew li l-moduli immuntati mhux se jaħdmu b'mod korrett.

3.4.2 Bini bil Bake

Jekk użajt bake hawn fuq biex tikseb kodiċi sors mir-repożitorji tal-proġett, tista 'tkompli tużah biex tibni ns-3. Ċempel:

$ ./bake.py build

u għandek tara xi ħaġa bħal:

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

Tooltip: Tista' wkoll tagħmel kemm it-tniżżil kif ukoll il-passi f'daqqa billi ċċempel "bake.py deploy".

L-assemblaġġ tal-komponenti kollha jista 'jfalli, iżda l-assemblaġġ se jkompli jekk komponent ma jkunx meħtieġ. Per eżempju, kwistjoni reċenti ta 'portabbiltà kienet dik castxml jistgħu jiġu mmuntati bl-għodda bake mhux fuq il-pjattaformi kollha. F'dan il-każ, se jidher messaġġ bħal dan:

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

Imma castxml meħtieġ biss jekk trid toħloq rbit Python aġġornat. Għall-biċċa l-kbira tal-utenti m'hemm l-ebda ħtieġa għal dan (għall-inqas sakemm jibdlu ns-3), għalhekk twissijiet bħal dawn jistgħu jiġu injorati b'mod sikur għalissa.

Jekk ifalli, il-kmand li ġej jagħtik ħjiel dwar id-dipendenzi neqsin:

$ ./bake.py show

Id-dipendenzi varji tal-pakketti li qed tipprova tibni se jiġu elenkati.

3.4.3 Ibni bil-Waf

Sa dan il-punt, biex nibdew nibnu ns-3, użajna jew l-iskript build.py, jew għodda bake. Dawn l-għodod huma utli għall-bini ns-3 u ż-żamma tal-libreriji. Fil-fatt, biex jibnu jmexxu l-għodda tal-bini Waf mid-direttorju ns-3. Waf installat bil-kodiċi tas-sors ns-3. Ħafna mill-utenti malajr jgħaddu biex jużaw l-ns-3 direttament biex jikkonfiguraw u jiġbru Waf. Allura, biex tkompli, jekk jogħġbok mur fid-direttorju ns-3 li oriġinarjament ħloqt.

Dan mhux strettament meħtieġ f'dan il-ħin, iżda se jkun utli li terġa 'lura ftit u tara kif tagħmel bidliet fil-konfigurazzjoni tal-proġett. Probabbilment l-aktar bidla utli fil-konfigurazzjoni li tista 'tagħmel hija li toħloq verżjoni ottimizzata tal-kodiċi. B'mod awtomatiku, ikkonfigurajt il-proġett tiegħek biex tibni verżjoni tad-debug. Ejja nagħtu ħarsa lejn proġett biex toħloq bini ottimizzat. Biex tispjega lil Waf li għandha tagħmel bini ottimizzat li jinkludi eżempji u testijiet, ser ikollok bżonn tmexxi l-kmandi li ġejjin:

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

Din se tniedi Waf barra mid-direttorju lokali (għall-konvenjenza tiegħek). L-ewwel kmand jitnaddaf mill-bini ta 'qabel, dan ġeneralment mhuwiex strettament meħtieġ, iżda hija prattika tajba (ara wkoll il-profili tal-bini hawn taħt); dan se jħassar libreriji maħluqa qabel u fajls oġġetti li jinsabu fid-direttorju tibni/. Meta l-proġett jiġi kkonfigurat mill-ġdid u s-sistema tal-bini tiċċekkja d-diversi dipendenzi, għandek tara output simili għal dan li ġej:

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)

Jekk jogħġbok innota l-aħħar parti tal-lista hawn fuq. Xi għażliet ns-3 mhumiex attivati ​​awtomatikament jew jeħtieġu appoġġ tas-sistema biex jiffunzjonaw kif suppost. Pereżempju, biex tippermetti XmlTo, il-librerija trid tkun preżenti fis-sistema libxml-2.0. Jekk din il-librerija ma nstabitx u l-funzjoni ns-3 korrispondenti ma kinitx attivata, jintwera messaġġ. Innota wkoll li huwa possibbli li tuża l-kmand sudo biex tissettja l-bit suid "issettja l-ID tal-grupp fil-ħin tar-runtime" għal ċerti programmi. Mhijiex attivata b'mod awtomatiku u għalhekk din il-karatteristika tidher bħala "mhux attivata". Fl-aħħarnett, biex tikseb lista ta 'għażliet attivati, uża Waf bil-parametru --check-config.

Issa ejja mmorru lura u naqilbu lura għall-bini tad-debug li fih eżempji u testijiet.

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

Is-sistema tal-bini issa hija stabbilita u tista 'tibni verżjonijiet ta' debug tal-programmi ns-3 billi sempliċement ittajpja:

$ ./waf

Il-passi ta 'hawn fuq setgħu ġiegħluk tibni parti mis-sistema ns-3 darbtejn, iżda issa taf kif tibdel il-konfigurazzjoni u tibni kodiċi ottimizzat.

Biex tiċċekkja liema profil huwa attiv għal konfigurazzjoni ta' proġett partikolari, hemm kmand:

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

Ix-xenarju ta 'hawn fuq build.py jappoġġja wkoll l-argumenti --enable-examples и --enable-tests, iżda għażliet oħra Waf ma jappoġġjax direttament. Per eżempju, dan mhux se jaħdem:

$ ./build.py --disable-python

ir-reazzjoni tkun bħal din:

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

Madankollu, l-operatur speċjali - - jista 'jintuża biex jgħaddi parametri addizzjonali permezz wafgħalhekk minflok ta' hawn fuq se jaħdem il-kmand li ġej:

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

għaliex jiġġenera l-kmand prinċipali ./waf kkonfigurat --disable-python. Hawn huma xi suġġerimenti introduttorji aktar dwar Waf.

Immaniġġjar tal-iżbalji tal-bini

Ir-rilaxxi ns-3 huma ttestjati fuq l-aħħar kompilaturi C++ disponibbli fiż-żmien tar-rilaxx fuq distribuzzjonijiet komuni Linux u MacOS. Madankollu, maż-żmien, jiġu rilaxxati distribuzzjonijiet ġodda b'kompilaturi ġodda, u dawn il-kompilaturi ġodda għandhom it-tendenza li jkunu aktar pedantiċi dwar it-twissijiet. ns-3 jikkonfigura l-bini tiegħu biex jittratta t-twissijiet kollha bħala żbalji, għalhekk xi drabi jekk qed tħaddem verżjoni qadima fuq sistema aktar ġdida, twissija tal-kompilatur tista' twaqqaf il-bini.

Pereżempju, qabel kien hemm rilaxx ta' ns-3.28 għal Fedora 28, li kien jinkludi verżjoni ewlenija ġdida gcc (gcc-8). Il-bini tar-rilaxx ns-3.28 jew verżjonijiet preċedenti taħt Fedora 28, b'Gtk2+ installat, se jseħħ l-iżball li ġej:

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

Fir-rilaxxi li jibdew minn ns-3.28.1, in Waf għażla hija disponibbli biex issolvi dawn il-problemi. Jiddiżattiva l-issettjar tal-bandiera "-Werror" f'g++ u clang++. Din hija l-għażla "--disable-werror" u trid tiġi applikata waqt il-konfigurazzjoni:

$ ./waf configure --disable-werror --enable-examples --enable-tests

Ikkonfigura jew tiġbor

Xi kmandi Waf għandhom tifsira biss fil-fażi tal-konfigurazzjoni, u xi wħud huma validi biss fil-fażi tal-bini. Pereżempju, jekk trid tuża l-karatteristiċi tal-emulazzjoni ns-3, tista 'tippermetti l-issettjar tal-bit suid bl-użu sudo, kif deskritt hawn fuq. Dan jegħleb il-kmandi tal-pass tal-konfigurazzjoni, u għalhekk tista 'tbiddel il-konfigurazzjoni billi tuża l-kmand li ġej, li jinkludi wkoll eżempji u testijiet.

$ ./waf configure --enable-sudo --enable-examples --enable-tests

Jekk tagħmel dan Waf se tniedi sudobiex tibdel il-programmi tal-ħolqien tas-socket tal-kodiċi tal-emulazzjoni biex jaħdmu bil-permessi għeruq. Fil Waf Hemm ħafna għażliet oħra disponibbli għall-konfigurazzjoni u l-passi tal-bini. Biex tesplora l-għażliet tiegħek, daħħal:

$ ./waf --help

Fit-taqsima li jmiss se nużaw xi għażliet relatati mal-ittestjar.

Profili tal-Assemblea

Diġà rajna kif tista' tikkonfigura Waf għall-assemblaġġi debug и ottimizzati:

$ ./waf --build-profile=debug

Hemm ukoll profil ta 'assemblaġġ intermedju, rilaxx. Għażla -d huwa sinonimu ma ' --build-profile. Il-profil tal-bini jikkontrolla l-użu tal-illoggjar, l-asserzjonijiet, u l-iswiċċijiet tal-ottimizzazzjoni tal-kompilatur:

Tutorial tas-simulatur tan-netwerk ns-3. Kapitolu 3

Kif tistgħu taraw, il-qtugħ u l-asserzjonijiet huma disponibbli biss fil-bini tad-debug. Il-prattika rakkomandata hija li tiżviluppa l-iskript tiegħek fil-modalità debug, imbagħad twettaq ġirjiet ripetuti (għal statistika jew bidliet fil-parametri) fi profil ta 'bini ottimizzat.

Jekk għandek kodiċi li għandu jaħdem biss f'ċerti profili tal-bini, uża l-Makro tal-Wrapper tal-Kodiċi:

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;)

Default, Waf postijiet jibnu artifacts fid-direttorju tal-bini. Tista 'tispeċifika direttorju ta' output differenti billi tuża l-għażla - -outper eżempju:

$ ./waf configure --out=my-build-dir

Billi tgħaqqad dan mal-profili tal-bini, tista 'faċilment taqleb bejn għażliet ta' kumpilazzjoni differenti:

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

Li jippermettilek taħdem ma 'assemblaġġi multipli mingħajr ma jkollok tikteb mill-ġdid l-aħħar assemblaġġ kull darba. Meta taqleb għal profil ieħor, Waf se tiġbor biss, mingħajr ma tikkompila kollox kompletament.

Meta taqleb il-profili tal-bini b'dan il-mod, trid toqgħod attent li tagħti l-istess għażliet ta 'konfigurazzjoni kull darba. Id-definizzjoni ta' diversi varjabbli ambjentali tgħinek tevita l-iżbalji:

$ 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

Kompilaturi u bnadar

Fl-eżempji ta 'hawn fuq Waf biex tibni ns-3 juża l-kompilatur C++ minn GCC ( g ++). Madankollu, tista 'tbiddel dik li tuża Waf Kompilatur C++, billi tiddefinixxi l-varjabbli ambjentali CXX. Pereżempju, biex tuża l-kompilatur C++ Clang, clang++,

$ CXX="clang++" ./waf configure 
$ ./waf build 

Bl-istess mod tista 'tikkonfigura Waf li tuża kompilazzjoni mqassma bl-użu distcc:

$ CXX="distcc g++" ./waf configure 
$ ./waf build

Aktar informazzjoni dwar id-distcc u l-kumpilazzjoni mqassma tista’ tinstab fuq il-paġna tal-proġett fit-taqsima Dokumentazzjoni. Biex iżżid il-bnadar tal-kompilatur meta tikkonfigura ns-3, uża l-varjabbli ambjentali CXXFLAGS_EXTRA.

Installazzjoni

Waf jistgħu jintużaw biex jinstallaw libreriji f'postijiet differenti fuq is-sistema. B'mod awtomatiku, il-libreriji kkompilati u l-eżekutibbli jinsabu fid-direttorju jibnu, u peress li Waf jaf il-post ta 'dawn il-libreriji u l-eżekutibbli, m'hemmx bżonn li tinstalla l-libreriji imkien ieħor.

Jekk l-utenti jippreferu jinstallaw barra mid-direttorju tal-bini, jistgħu jmexxu l-kmand ./waf install. Il-prefiss default għall-installazzjoni huwa / usr / lokaligħalhekk ./waf install se tinstalla programmi fi / usr / lokali / bin, libreriji fil / Usr / lokali / LIB u fajls header in /usr/local/include. Id-drittijiet tas-superuser normalment jeħtieġ li jiġu stabbiliti bi prefiss default, għalhekk kmand tipiku jkun sudo ./waf install. Meta jitnieda, Waf l-ewwel se jagħżel li juża l-libreriji kondiviżi fid-direttorju tal-bini, imbagħad ifittex libreriji tul it-triq lejn il-libreriji kkonfigurati fl-ambjent lokali. Allura meta tinstalla libreriji fuq sistema, hija prattika tajba li tiċċekkja li qed jintużaw il-libreriji t-tajba. L-utenti jistgħu jagħżlu li jinstallaw bi prefiss differenti billi jgħaddu l-għażla waqt il-konfigurazzjoni --prefixper eżempju:

./waf configure --prefix=/opt/local

Jekk aktar tard, wara l-bini, l-utent jidħol fil-kmand tal-installazzjoni ./waf, se jintuża l-prefiss / opt / lokali.

Team ./waf clean għandu jintuża qabel ma terġa 'tikkonfigura l-proġett jekk l-installazzjoni se tuża Waf taħt prefiss differenti.

Għalhekk, biex tuża ns-3 m'hemmx għalfejn issejjaħ ./waf install. Ħafna utenti mhux se jkollhom bżonn dan il-kmand minħabba Waf se jtellgħu l-libreriji attwali mid-direttorju tal-bini, iżda xi utenti jistgħu jsibu dan utli jekk l-attivitajiet tagħhom jinvolvu ħidma ma 'programmi barra mid-direttorju ns-3.

Waf single

Fl-ogħla livell tas-siġra tas-sors ns-3, hemm skript Waf wieħed biss. Ladarba tibda taħdem, int se tqatta 'ħafna ħin fid-direttorju scratch/ jew aktar fil-fondsrc/... u fl-istess ħin għandhom jiġru Waf. Tista 'biss tiftakar fejn int u tmexxi Waf kif ġej:

$ ../../../waf ...

iżda dan se jkun tedious u suxxettibbli għall-iżbalji, għalhekk hemm soluzzjonijiet aħjar. Mod wieħed komuni huwa li tuża editur tat-test bħal Emacs jew VIM, li fihom jinfetħu żewġ sessjonijiet terminali, waħda tintuża biex tibni ns-3, u t-tieni tintuża biex teditja l-kodiċi tas-sors. Jekk għandek biss tarball, allura varjabbli ambjentali tista' tgħin:

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

Fid-direttorju tal-modulu jista 'jkun jitħajjar li żżid script waf trivjali bħal exec ../../waf. Jekk jogħġbok, tagħmel dan. Dan huwa konfuż għal newbies u, meta jsir ħażin, iwassal għal żbalji tal-bini diffiċli biex jinstabu. Is-soluzzjonijiet murija hawn fuq huma t-triq li għandha tintuża.

3.5 Ittestjar ns-3

Tista' tmexxi t-testijiet tal-unità tad-distribuzzjoni ns-3 billi tħaddem l-iskrittura ./test.py:

$ ./test.py

Dawn it-testijiet isiru b'mod parallel ma' Waf. Eventwalment għandek tara messaġġ li jgħid:

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

Dan huwa messaġġ importanti għall-identifikazzjoni ta 'ħabtiet, ħabtiet jew żbalji ta' valgrind, li jindika problemi bil-kodiċi jew inkompatibilità bejn l-għodda u l-kodiċi.

Se tara wkoll l-output finali minn Waf u tester li jmexxi kull test, li se jidher xi ħaġa bħal din:

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)

Dan il-kmand normalment jitmexxa mill-utenti biex jivverifikaw malajr li d-distribuzzjoni ns-3 hija mibnija b'mod korrett. (Innota li l-ordni tal-linji "PASS: ..." tista 'tkun differenti, dan huwa normali. Dak li huwa importanti huwa li l-linja sommarja fl-aħħar tar-rapport turi li t-testijiet kollha għaddew; l-ebda testijiet ma fallew jew ġġarraf.) U WafU test.py se jipparallelizza x-xogħol tul il-qlub tal-proċessuri disponibbli tal-magna.

3.6 Tmexxi l-iskript

Normalment inħaddmu skripts taħt kontroll Waf. Dan jippermetti li s-sistema tal-bini tiżgura li l-mogħdijiet tal-libreriji kondiviżi huma stabbiliti b'mod korrett u li l-libreriji jkunu disponibbli waqt ir-runtime. Biex tmexxi l-programm, sempliċement uża Waf bil-parametru - -run. Ejja nħaddmu l-ns-3 ekwivalenti tal-programm kullimkien bonjour dinjabilli ttajpja dan li ġej:

$ ./waf --run hello-simulator

Waf l-ewwel jiċċekkja li l-programm huwa mibni b'mod korrett u jibni jekk meħtieġ. Imbagħad Waf se jesegwixxi programm li jipproduċi l-output li ġej.

Hello Simulator

Prosit! Issa int utent ns-3!

X'għandi nagħmel jekk ma narax ir-riżultati?

Jekk tara messaġġi Wafli jindika li l-bini tlestiet b'suċċess, iżda ma tarax l-output "Hello Simulatur", allura hemm il-possibbiltà li fit-taqsima [Build-with-Waf] inti qalbet il-modalità tal-bini tiegħek għal ottimizzati, iżda qbiżt taqleb lura għall-mod debug. L-output kollu tal-console użat f'dan it-tutorja juża komponent speċjali ns-3 li jwettaq illoggjar u jintuża biex jistampa messaġġi personalizzati fuq il-console. L-output minn dan il-komponent huwa awtomatikament diżattivat meta jiġi kkompilat kodiċi ottimizzat - huwa "ottimizzat". Jekk ma tarax l-output "Hello Simulator", daħħal dan li ġej:

$ ./waf configure --build-profile=debug --enable-examples --enable-tests

biex tikkonfigura Waf biex tibni verżjonijiet ta' debug ta' programmi ns-3, li jinkludu eżempji u testijiet. Imbagħad għandek tibni mill-ġdid il-verżjoni attwali tad-debug tal-kodiċi billi ttajpja

$ ./waf

Issa jekk inti tmexxi l-programm hello-simulatur, għandek tara r-riżultat mistenni.

3.6.1 Argumenti tal-linja tal-kmand

Biex tgħaddi argumenti tal-linja tal-kmand lill-programm ns-3, uża l-mudell li ġej:

$ ./waf --run <ns3-program> --command-template="%s <args>"

Ibdel għall-isem tal-programm tiegħek u għall-argumenti. Argument - -command-template għall- Waf hija essenzjalment riċetta għall-bini tal-linja ta 'kmand attwali Waf użati biex tesegwixxi l-programm. Waf jiċċekkja li l-bini huwa komplut, jistabbilixxi l-mogħdijiet tal-librerija kondiviża, imbagħad juża l-mudell tal-linja tal-kmand ipprovdut u jissostitwixxi l-isem tal-programm għall-placeholder %s biex isejjaħ l-eżekutibbli. Jekk issib din is-sintassi kkumplikata, hemm verżjoni aktar sempliċi li tinvolvi l-programm ns-3 u l-argumenti tiegħu magħluqa fi kwotazzjonijiet singoli:

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

Eżempju ieħor partikolarment utli huwa t-tmexxija ta' test suites b'mod selettiv. Ejja nassumu li hemm test suite imsejħa mytest (fil-fatt m'hemmx). Hawn fuq użajna l-iskrittura ./test.py biex inmexxu numru ta' testijiet b'mod parallel, li ripetutament issejjaħ il-programm tat-test runner tat-test. Ċempel runner tat-test direttament biex tmexxi test wieħed:

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

L-argumenti se jiġu mgħoddija lill-programm runner tat-test. Peress li mytest ma jeżistix, se jiġi ġġenerat messaġġ ta 'żball. Biex tipprintja l-għażliet disponibbli tat-test-runner, daħħal:

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 Debugging

Biex tħaddem programmi ns-3 taħt utilità oħra, bħal debugger (per eżempju, gdb) jew għodda tat-test tal-memorja (per eżempju, valgrind), uża formola simili - -command-template = "…". Per eżempju, biex taħdem fid-debugger gdb il-programm tiegħek hello-simulator ns-3 b'argumenti:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

Innota li l-isem tal-programm ns-3 jiġi mal-argument - -run, u l-utilità tal-ġestjoni (hawn gdb) hija l-ewwel simbolu fl-argument - -command-template. Għażla - -args tinforma gdbli l-bqija tal-linja tal-kmand jappartjeni għall-programm "aktar baxx". (Xi verżjonijiet gdb ma tifhimx l-għażla - -args. F'dan il-każ, neħħi l-argumenti tal-programm minn - -command-template u uża s-sett tal-kmand gdb args.) Nistgħu ngħaqqdu din ir-riċetta u dik preċedenti biex imexxu t-test taħt id-debugger:

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 Direttorju tax-xogħol

Waf għandu jitnieda mill-post tiegħu fil-quċċata tas-siġra ns-3. Dan il-folder isir id-direttorju tax-xogħol fejn se jinkitbu l-fajls tal-output. Imma x'jiġri jekk trid iżżomm dawn il-fajls barra s-siġra tas-sors ns-3? Uża l-argument - -cwd:

$ ./waf --cwd=...

Tista 'ssibha aktar konvenjenti li tikseb il-fajls tal-output fid-direttorju tax-xogħol tiegħek. F'dan il-każ, l-azzjoni indiretta li ġejja tista' tgħin:

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

Din id-dekorazzjoni tal-verżjoni preċedenti tal-kmand tippreserva d-direttorju tax-xogħol kurrenti, tmur fid-direttorju Wafu mbagħad jagħti struzzjonijiet Waf biex tibdel id-direttorju tax-xogħol lura għad-direttorju tax-xogħol kurrenti salvat qabel ma jibda l-programm. Insemmu t-tim - -cwd Għall-kompletezza, ħafna utenti sempliċement imexxu Waf mid-direttorju tal-ogħla livell u jiġġeneraw fajls tal-output hemmhekk.

Tkompli: Kapitolu 4

Sors: www.habr.com

Żid kumment