ns-3 tambajotra simulator fampianarana. Toko 3

ns-3 tambajotra simulator fampianarana. Toko 3
toko 1,2

3 Manomboka
3.1 Famintinana
3.2 Fepetra takiana
3.2.1 Misintona ny famoahana ns-3 ho tahiry loharano
3.3 Misintona ns-3 mampiasa Git
3.3.1 Loading ns-3 mampiasa Bake
3.4 Fivoriambe ns-3
3.4.1 Manorina miaraka amin'ny build.py
3.4.2 Manorina amin'ny Bake
3.4.3 Manangana amin'ny Waf
3.5 Fitsapana ns-3
3.6 Fampandehanana ny script
3.6.1 Fandresen-dahatra andalana baiko
3.6.2 Debugging
3.6.3 Lahatahiry miasa

Toko 3

Hanomboka

Ity toko ity dia natao hanomanana ny mpamaky hanomboka amin'ny solosaina izay mety mbola tsy nametraka ns-3. Izy io dia mirakitra ny sehatra tohanana, ny fepetra takiana, ny fomba hahazoana ns-3, ny fomba fananganana ns-3, ary ny fomba hitsapana ny fananganana sy fampandehanana programa tsotra.

3.1 Famintinana

Ny simulator ns-3 dia natsangana ho toy ny rafitry ny tranomboky rindrambaiko miara-miasa. Mandritra ny fivoriambe dia ampifandraisina amin'ireo trano famakiam-boky ireo ny kaodin'ny programa mpampiasa. Ny fiteny fandaharana C ++ na Python dia ampiasaina hanoratana programa manokana.

Ny Ns-3 dia zaraina amin'ny maha-kaody loharano, izay midika fa ny rafitra kendrena dia tsy maintsy manana tontolo iainan'ny rindrankajy mba hanorenana voalohany ny tranomboky ary avy eo hananganana ny programa mpampiasa. Amin'ny ankapobeny, ny ns-3 dia azo zaraina ho tranomboky efa vita ho an'ny rafitra manokana, ary amin'ny ho avy dia azo zaraina amin'izany fomba izany. Saingy amin'izao fotoana izao dia maro ireo mpampiasa no tena manao ny asany amin'ny alàlan'ny fanitsiana ny ns-3 mihitsy, noho izany dia ilaina ny manana ny kaody loharano hanamboarana ny tranomboky. Raha misy te handray anjara amin'ny asa famoronana tranomboky efa vita sy fonosana ho an'ny rafitra miasa, dia mifandraisa amin'ny lisitry ny mailaka. ns-developers.

Manaraka, hijery fomba telo hisintonana sy hananganana ns-3 isika. Ny voalohany dia ny misintona sy manangana ny famoahana ofisialy avy amin'ny tranokala lehibe. Ny faharoa dia ny fifantenana sy ny fanangonana ny dika mitovy amin'ny fampivoarana ny fametrahana fototra ns-3. Ny fahatelo dia ny fampiasana fitaovana fananganana fanampiny hampidirana fanitarana bebe kokoa ho an'ny ns-3. Handeha isika tsirairay satria samy hafa kely ny fitaovana.

Ireo mpampiasa Linux efa za-draharaha dia mety hanontany tena hoe nahoana ny ns-3 no tsy omena ho fonosana toy ny ankamaroan'ny tranomboky mampiasa mpitantana fonosana? Na dia misy fonosana binary aza ho an'ny fizarana Linux isan-karazany (oh Debian), ny ankamaroan'ny mpampiasa dia mamarana ny fanovana ny tranomboky ary tsy maintsy manangana indray ny ns-3 ny tenany, noho izany dia azo ampiasaina ny kaody loharano misy. Noho izany antony izany dia hifantoka amin'ny fametrahana avy amin'ny loharano isika.

Ho an'ny ankamaroan'ny fampiharana zo ns-3 faka tsy ilaina, dia asaina mampiasa kaonty mpampiasa tsy misy tombontsoa.

3.2 Fepetra takiana

Ny fitambaran'ny tranomboky ns-3 misy dia manana fiankinana maromaro amin'ny tranomboky an'ny antoko fahatelo, fa amin'ny ankapobeny ns-3 dia azo amboarina sy ampiasaina miaraka amin'ny fanohanana ireo singa mahazatra (matetika apetraka amin'ny alàlan'ny default): a C++ compiler, Python, tonian-dahatsoratra loharano (ohatra, vim, emacs na fanakona-masoandro) ary, raha ampiasaina ny repository fampandrosoana, ny rafitra fanaraha-maso ny version Git. Ny ankamaroan'ny mpampiasa sambany dia tsy mila manahy raha mitatitra ny endri-javatra mandroso ns-3 sasany tsy hita, fa ho an'ireo izay te-hametraka tanteraka, ny tetikasa dia manome wiki izay ahitana pejy misy toro-hevitra sy fika mahasoa maro. Pejy iray toy izany ny pejy Fametrahana, miaraka amin'ny torolàlana fametrahana ho an'ny rafitra isan-karazany, hita ao amin'ny: https://www.nsnam.org/wiki/Installation.

Ny fizarana Prerequisites amin'ity wiki ity dia manazava izay fonosana ilaina hanohanana ny safidy ns-3 mahazatra ary manome ihany koa ny baiko ampiasaina hametrahana azy ireo amin'ny tsiro mahazatra amin'ny Linux na macOS.

Azonao atao ny manararaotra ity fahafahana ity hijerena ny pejy wiki ns-3 na ny tranokala lehibe: https://www.nsnam.org, satria misy fanazavana be dia be ao. Manomboka amin'ny dikan-teny farany an'ny ns-3 (ns-3.29), ireto fitaovana manaraka ireto dia ilaina mba hampandehanana ny ns-3:

Fitaovana / Version

  • C++ compiler
    clang++ na g++ (g++ version 4.9 na ambony)
  • Python
    python2 version>= 2.7.10, na python3 version>=3.4
  • git
    izay dikan-teny farany (mba hidirana amin'ny ns-3 amin'ny GitLab.com)
  • tara
    izay dikan-teny farany (ho famotsorana ny famoahana ns‑3)
  • bunzip2
    izay dikan-teny farany (ho famongorana ny famoahana ns‑3)

Raha te hanamarina ny dikan-teny default an'ny Python, type python -V. Raha te hanamarina ny dikan-teny g++ dia soraty g++ -v. Raha misy fitaovana tsy ampy na antitra loatra dia jereo ny torolalana fametrahana ao amin'ny pejy wiki ns-3.

Manomboka izao dia heverinay fa mampiasa Linux, MacOS, na Linux emulator ny mpamaky, ary manana farafaharatsiny ireo fitaovana etsy ambony.

3.2.1 Misintona ny famoahana ns-3 ho tahiry loharano

Ity no hetsika ho an'ny mpampiasa vaovao izay te-hisintona sy hanandrana ny famoahana farany sy ny fonosana dikan-n'ny ns-3. Ny famoahana ns-3 dia navoaka ho tahiry loharano voaporitra, antsoina indraindray tarball. tarball dia endrika arsivan'ny rindrambaiko manokana ahitana rakitra maromaro atambatra. Ny arisiva dia matetika voatsindry. ns-3 boot process via tarball dia tsotra, mila mifidy famoahana iray ianao, misintona ary mamoha azy.

Aoka hatao hoe ianao, amin'ny maha-mpampiasa anao, dia te-hanorina ns-3 amin'ny lahatahiry eo an-toerana antsoina sehatr'asa. Azonao atao ny mahazo dika mitovy amin'ny famoahana amin'ny alàlan'ny fampidirana ireto manaraka ireto ao amin'ny console Linux (manoloana ny nomeraon'ny dikan-teny mety, mazava ho azy)

$ 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 

Tandremo ny fitaovana ampiasaina etsy ambony wget, izay fitaovana andalana misintona zavatra avy amin'ny Internet. Raha mbola tsy nametraka azy ianao dia afaka mampiasa ny navigateur anao amin'izany.

Ny fanarahana ireo dingana ireo dia hitondra anao any amin'ny lahatahiry ns-allinone-3.29, any dia tokony hahita rakitra sy lahatahiry maromaro ianao

$ 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

Efa vonona ny hanangana ny fizarana fototra ns-3 ianao ary afaka mandroso mankany amin'ny fizarana momba ny fananganana ns-3.

3.3 Misintona ns-3 mampiasa Git

Ny kaody ns-3 dia hita ao amin'ny tahiry Git ao amin'ny GitLab.com amin'ny https://gitlab.com/nsnam/. vondrona nsnam mampivondrona ireo tahiry samihafa ampiasain'ny tetikasa open source.

Ny fomba tsotra indrindra hanombohana mampiasa ny fitahirizana Git dia ny manangana na manao clone ny tontolo iainana ns-3-allinone. Ity dia andian-tsoratra izay mitantana ny entana sy ny fanangonana ireo subsystems ns-3 fampiasa matetika indrindra. Raha vaovao amin'ny Git ianao, ny teny hoe "fork" sy "clone" dia mety tsy mahazatra anao; Raha izany no izy, dia manoro hevitra anao izahay mba hanao clone (manaova kopia manokana) ny tahiry hita ao amin'ny GitLab.com toy izao:

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

Amin'ity dingana ity, ny fijery ny lahatahiry ns-3-allinone hafa kely amin'ny lahatahiry arisiva famoahana voalaza etsy ambony. Tokony ho toy izao izany:

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

Mariho fa misy script download.py, izay hanesorana koa ny ns-3 sy ny kaody loharano miaraka aminy. Eto ianao dia manana safidy: na alao ny sary farany momba ny fivoaran'ny ns-3:

$ python download.py

na aleo ny famoahana ns-3 mampiasa ny saina -n hanondro ny laharana famoahana:

$ python download.py -n ns-3.29

Aorian'ity dingana ity mankany amin'ny lahatahiry ns-3-allinone ireo tahiry fanampiny dia alaina ns-3, koa manendasa, pybindgen и netanim.

fanamarihana
Amin'ny milina iray misy Ubuntu16.04 madio, mila nanova ny baiko ho an'ity aho: $ sudo python3 download.py -n ns-3.29 (naotin'ny mpandika teny avy eo).

3.3.1 Loading ns-3 mampiasa Bake

Ireo fomba roa etsy ambony (arisiva loharano na tahiry ns-3-allinone amin'ny alàlan'ny Git) dia ilaina amin'ny fahazoana ny fametrahana ns-3 tsotra indrindra miaraka amin'ny addons (pybindgen mba hamoronana fatorana Python ary netanim ho an'ny animation tambajotra). Ny tahiry fahatelo nomen'ny default amin'ny ns-3-allinone dia antsoina koa manendasa.

koa manendasa dia fitaovana ho an'ny fananganana rindrankajy mirindra avy amin'ny tahiry maro, novolavolaina ho an'ny tetikasa ns-3. koa manendasa dia azo ampiasaina mba hahazoana ny dikan-teny fampandrosoana an'ny ns-3, ary koa ny misintona sy manangana fanitarana ny dikan-teny fototra amin'ny fizarana ns-3, toy ny tontolo iainana. Fampiharana Code Direct, CradleNetwork Simulation Cradle, ny fahafahana mamorona fatorana Python vaovao sy "apps" ns-3 isan-karazany.

fanamarihana
CradleNetwork Simulation Cradle dia rafitra ahafahanao mampiasa ny tambazotra TCP/IP tena izy ao anaty simulator tambajotra.

Raha manantena ianao fa manana endri-javatra mandroso na fanampiny ny fametrahana ny ns-3 anao dia azonao atao ny manaraka ity lalana fametrahana ity.

Ao amin'ny famoahana ns-3 farany koa manendasa dia nampiana tamin'ny famoahana tara. Ny famoahana dia misy rakitra fanamafisana izay ahafahanao misintona ireo kinova rindrambaiko amin'izao fotoana izao amin'ny fotoana famoahana. Izany, ohatra, ny dikan-teny koa manendasa, izay zaraina miaraka amin'ny famoahana ns-3.29, dia azo ampiasaina haka singa ho an'ny famoahana ny ns-3 na taloha, fa tsy azo ampiasaina haka singa ho an'ny famoahana aoriana (raha ny rakitra famaritana fonosana bakeconf.xml tsy nohavaozina).

Azonao atao koa ny mahazo ny kopia farany koa manendasaamin'ny alàlan'ny fampidirana ity baiko manaraka ity ao amin'ny console Linux anao (mihevitra fa nametraka Git ianao):

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

Rehefa mihazakazaka ny baiko git ianao dia tokony hahita zavatra toy izao manaraka izao:

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.

Rehefa vita ny baiko Clone tokony hanana lahatahiry nomena anarana ianao koa manendasa, izay tokony ho toy izao ny ao anatiny:

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

Mariho fa nampiditra script Python maromaro ianao, module Python antsoina hoe koa manendasa ary rakitra fanamafisana XML. Ny dingana manaraka dia ny fampiasana ireo script ireo mba hisintona sy hananganana ny fizarana ns-3 amin'ny safidinao. Misy lasibatra fanamboarana maromaro:

  1. ns-3.29: Module mifanaraka amin'ny famoahana; dia hisintona singa mitovy amin'ny famoahana ao amin'ny tarball;

  2. ns-3-dev: Module mitovy, fa mampiasa code avy amin'ny hazo fampandrosoana;

  3. ns-allinone-3.29: Module misy endri-javatra fanampiny hafa toy ny Click routing sy Network Simulation Cradle, Openflow ho an'ny ns-3.

  4. ns-3-allinone: mitovitovy amin'ny famoahana ny maody allinone, fa ho an'ny kaody fampandrosoana.

fanamarihana
Tsindrio - rafitra rindrambaiko modular ho an'ny famoronana router.

Openflow dia protocole amin'ny fitantanana ny fizotran'ny fanodinana angon-drakitra ampitaina amin'ny tambajotra data amin'ny alàlan'ny router sy switch, fampiharana ny teknolojian'ny tambajotra voafaritry ny rindrambaiko.

Ny snapshot fampandrosoana ankehitriny (tsy famoahana) ns-3 dia azo jerena ao amin'ny:https://gitlab.com/nsnam/ns-3-dev.git.

Miezaka ny mitazona ireo tahiry ireo amin'ny filaharana miasa tsy tapaka ireo mpamorona, saingy ao amin'ny faritra fampandrosoana izy ireo ary misy kaody tsy navoaka, ka raha tsy mikasa ny hampiasa endri-javatra vaovao ianao, dia fidio ny famoahana ofisialy.

Azonao atao ny mahita ny dikan-teny farany amin'ny kaody amin'ny alàlan'ny fijerena ny lisitry ny tahiry, na amin'ny fandehanana amin'ny pejy web ns-3 Releases:https://www.nsnam.org/releases/ ary tsindrio ny rohy kinova farany. Amin'ity ohatra ity dia hanohy ny ns-3.29 isika.

Ankehitriny, mba hahazoana ireo singa ns-3 ilaintsika dia hampiasa ilay fitaovana isika koa manendasa. Andeha isika hilaza teny fampidirana vitsivitsy momba ny asa koa manendasa.

Ny Bake dia miasa amin'ny fametahana loharano fonosana ao anaty lahatahiry loharano ary mametraka ny tranomboky ao amin'ny lahatahiry fananganana. koa manendasa azo atao amin'ny alàlan'ny fanondroana ny binary, fa raha te-hihazakazaka ianao koa manendasa fa tsy avy amin'ny lahatahiry nakana azy, dia tsara ny manampy ny lalana mankany koa manendasa mankany amin'ny lalanao (PATH environment variable), ohatra toy izao manaraka izao (ohatra amin'ny Linux bash shell). Mandehana any amin'ny lahatahiry "bake" ary apetraho ireto fari-piainan'ny tontolo iainana manaraka ireto:

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

Izany dia hametraka ny fandaharana bake.py mankany amin'ny lalan'ny shell ary hamela programa hafa hahita ireo executable sy tranomboky noforoniny koa manendasa. Amin'ny toe-javatra sasany fampiasana koa manendasa, tsy ilaina ny fametrahana PATH sy PYTHONPATH voalaza etsy ambony, fa ny fananganana feno ns-3-allinone (miaraka amin'ny fonosana fanampiny) dia matetika mitaky izany.

Mandehana any amin'ny lahatahiry miasa ary ampidiro ao amin'ny console ireto manaraka ireto:

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

Manaraka izany dia hanontany isika koa manendasa jereo raha manana fitaovana ampy hampidirana ireo singa isan-karazany isika. antsoy:

$ ./bake.py check

Tokony hahita zavatra toy izao manaraka izao ianao:

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

Indrindra indrindra, ilaina amin'ity dingana ity ny fitaovana fampiakarana toy ny Mercurial, CVS, Git ary Bazaar satria ahafahantsika mahazo ny kaody. Amin'izao fotoana izao, apetraho amin'ny fomba mahazatra ny fitaovana tsy hita ao amin'ny rafitrao (raha fantatrao ny fomba) na mifandraisa amin'ny mpitantana ny rafitrao mba hahazoana fanampiana.

Manaraka, andramo misintona ny rindrambaiko:

$ ./bake.py download

ny vokatra dia tokony ho toy izao:

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

Midika izany fa loharano telo no nalaina. Mankanesa any amin'ny lahatahiry loharano ary soraty ls; Tokony ho hitanao:

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

Ankehitriny ianao dia vonona ny hanangana ny fizarana ns-3.

3.4 Fivoriambe ns-3

Toy ny amin'ny fampidinana ny ns-3, misy fomba maro hanamboarana ns-3. Ny zava-dehibe tiantsika hamafisina dia ny hoe ns-3 dia natsangana tamin'ny fampiasana fitaovana fananganana antsoina hoe Wafvoalaza etsy ambany. Hiara-miasa amin'ny ankamaroan'ny mpampiasa Waf, saingy misy sora-tanana vitsivitsy hanampy anao hanomboka na handamina fananganana sarotra kokoa. Koa azafady, alohan'ny hamakianao momba Waf, jereo ny build.py sy ny fivoriambe miaraka amin'ny koa manendasa.

3.4.1 Manorina miaraka amin'ny build.py

Miangavy azafady! Ity dingana fananganana ity dia tsy misy afa-tsy amin'ny dikan-drakitra loharano azo araka ny voalaza etsy ambony; ary tsy alaina amin'ny git na bake.

Rehefa miasa miaraka amin'ny arisiva famoahana tarballin ns-3-allinone Misy script mora ampiasaina izay afaka manamora ny fanangonana ireo singa. Antsoina hoe build.py izany. Ity programa ity dia hametraka ny tetikasa ho anao amin'ny fomba mahasoa indrindra. Na izany aza, mariho fa ny fananganana sy ny fiaraha-miasa amin'ny ns-3 dia matetika mampiasa ny rafitra fananganana an'ny ns-3 manokana, Waf, izay hampidirina any aoriana ato amin'ity lesona ity.

Raha télécharger mampiasa tarball, avy eo ao amin'ny lahatahiry ~/workspace lahatahiry misy anarana toy ny ns-allinone-3.29. Ampidiro ireto manaraka ireto:

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

Rehefa antsoina build.py Nampiasa tohan-kevitra andalana baiko izahay mba hananganana ireo ohatra sy fitsapana ampiasaina amin'ity lesona ity, izay tsy namboarina tamin'ny alàlan'ny ns-3. Amin'ny alàlan'ny default, ny programa dia manorina ny modules rehetra misy. Avy eo, raha tianao, azonao atao ny manangana ns-3 tsy misy ohatra sy fitsapana, na manilika ireo modules izay tsy ilaina amin'ny asanao.

Hahita hafatra vokarin'ny compiler be dia be nasehon'ny script ianao rehefa manangana ireo ampahany samihafa nofenoinao. Voalohany ny script dia hanandrana hanangana ny animator netanim, avy eo ny mpamokatra mamatotra pybindgen ary farany ns-3. Rehefa vita ny dingana dia tokony ho hitanao ireto manaraka ireto:

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

Ao amin'ny andalana telo farany amin'ny lisitra dia mahita hafatra momba ny modules izay tsy namboarina isika:

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

Midika fotsiny izany fa ny modules ns-3 sasany izay miankina amin'ny tranomboky ivelany dia mety tsy naorina, na tsy voatery natsangana ho an'ity fanamafisana ity. Tsy midika akory izany fa tsy mivory ny simulator na tsy mandeha tsara ny modules natambatra.

3.4.2 Manorina amin'ny Bake

Raha nampiasa bake etsy ambony ianao mba hahazoana kaody loharano avy amin'ny trano fitehirizana tetikasa, dia azonao atao ny manohy mampiasa azy io hananganana ns-3. antsoy:

$ ./bake.py build

ary tokony hahita zavatra toy izao ianao:

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

manampy: Azonao atao ihany koa ny misintona sy manangana dingana miaraka amin'ny fiantsoana ny "bake.py deploy".

Mety tsy hahomby ny fanangonana ny singa rehetra, fa hitohy ny fanangonana raha tsy ilaina ny singa iray. Ohatra, ny olan'ny portability vao haingana dia izay castxml azo atambatra amin'ny fitaovana koa manendasa tsy amin'ny sehatra rehetra. Amin'ity tranga ity dia hisy hafatra toy izao hiseho:

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

na izany aza castxml ilaina raha te hamorona fatorana Python nohavaozina ianao. Ho an'ny ankamaroan'ny mpampiasa dia tsy ilaina izany (farafaharatsiny mandra-panovany ny ns-3), noho izany dia azo atao tsinontsinoavina ny fampitandremana toy izany amin'izao fotoana izao.

Raha tsy mahomby izany, ity baiko manaraka ity dia hanome anao soso-kevitra momba ny fiankinan-doha tsy hita:

$ ./bake.py show

Ho voatanisa ny fiankinan-doha isan-karazany amin'ireo fonosana ezahinao amboarina.

3.4.3 Manangana amin'ny Waf

Hatramin'io fotoana io, hanombohana ny fananganana ns-3, dia nampiasa ny script izahay build.py, na fitaovana koa manendasa. Ireo fitaovana ireo dia ilaina amin'ny fananganana ns-3 sy fikojakojana tranomboky. Raha ny marina, ny fananganana dia mitantana ny fitaovana fananganana Waf avy amin'ny lahatahiry ns-3. Waf napetraka miaraka amin'ny code source ns-3. Ny ankamaroan'ny mpampiasa dia mandeha haingana amin'ny fampiasana mivantana mba hanamboarana sy hanangona ny ns-3 Waf. Noho izany, raha te hanohy dia mandehana any amin'ny lahatahiry ns-3 izay noforoninao tany am-boalohany.

Tsy tena takiana izany amin'izao fotoana izao, fa ilaina ny mihemotra kely sy mijery ny fomba hanovana ny fanovana ny tetikasa. Angamba ny fanovana fanovana tena ilaina indrindra azonao atao dia ny mamorona dikan-kaody optimized. Amin'ny alàlan'ny default, efa namboarinao ny tetikasanao mba hananganana dikan-debug. Andeha hojerentsika ny tetik'asa iray hamoronana fananganana optimized. Mba hanazavana amin'i Waf fa tokony hanao fananganana optimized izay misy ohatra sy fitsapana ianao dia mila manatanteraka ireto baiko manaraka ireto:

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

Hivoaka izany Waf ivelan'ny lahatahiry eo an-toerana (ho fanamorana anao). Ny baiko voalohany dia manadio avy amin'ny fananganana teo aloha, matetika dia tsy ilaina izany, fa fanao tsara izany (jereo ihany koa ny mombamomba ny fananganana etsy ambany); izany dia hamafa ireo tranomboky sy antontan-taratasy noforonina teo aloha izay hita ao amin'ny lahatahiry manangana /. Rehefa amboarina ny tetikasa ary manamarina ny fiankinan-doha isan-karazany ny rafitra fananganana dia tokony hahita vokatra mitovy amin'ireto manaraka ireto ianao:

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)

Mariho azafady ny ampahany farany amin'ny lisitra etsy ambony. Ny safidy ns-3 sasany dia tsy alefa amin'ny alàlan'ny default na mila fanohanana rafitra mba hiasa tsara. Ohatra, mba hahafahan'ny XmlTo, ny tranomboky dia tsy maintsy misy ao amin'ny rafitra libxml-2.0. Raha tsy hita ity tranomboky ity ary tsy navela ny fiasa ns-3 mifanaraka amin'izany, dia hisy hafatra haseho. Mariho ihany koa fa azo atao ny mampiasa ny baiko sudo hametraka ny suid bit "mametraka ID vondrona amin'ny fotoana fandehanana" ho an'ny programa sasany. Tsy alefa amin'ny alàlan'ny default izany ary noho izany dia miseho ho "tsy afaka" ity endri-javatra ity. Farany, mba hahazoana lisitry ny safidy azo ampiasaina, ampiasao Waf miaraka amin'ny parameter --check-config.

Andeha isika hiverina ary hiverina amin'ny fananganana debug misy ohatra sy fitsapana.

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

Natsangana izao ny rafitra fananganana ary afaka manangana dikan-teny debug amin'ny programa ns-3 ianao amin'ny fanoratana tsotra izao:

$ ./waf

Ny dingana etsy ambony dia mety nanery anao hanorina ampahany amin'ny rafitra ns-3 indroa, saingy fantatrao izao ny fomba hanovana ny fanitsiana sy ny fananganana code optimized.

Mba hanamarinana ny mombamomba izay mavitrika ho an'ny tetikasa nomena, dia misy baiko:

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

Ny scenario etsy ambony build.py manohana hevitra ihany koa --enable-examples и --enable-tests, fa safidy hafa Waf tsy manohana mivantana. Ohatra, tsy mety izany:

$ ./build.py --disable-python

ho toy izao ny réaction:

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

Na izany aza, ny opérateur manokana - - dia azo ampiasaina handefasana masontsivana fanampiny amin'ny wafnoho izany dia ho solon'ny etsy ambony ity baiko manaraka ity:

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

satria miteraka ny baiko fototra ./waf configure --disable-python. Ireto misy torohevitra fampidirana bebe kokoa momba ny Waf.

Fikarakarana lesoka fananganana

Ny famoahana ns-3 dia nosedraina amin'ny compiler C++ farany azo alaina amin'ny fotoana famoahana amin'ny fizarana Linux sy MacOS mahazatra. Na izany aza, rehefa mandeha ny fotoana, dia misy fizarana vaovao navoaka miaraka amin'ireo mpanangona vaovao, ary ireo mpanangom-baovao vaovao ireo dia mirona amin'ny fampitandremana kokoa. Ny ns-3 dia manamboatra ny fananganana azy mba hitondra ny fampitandremana rehetra ho fahadisoana, ka indraindray raha mampiasa dikan-teny tranainy amin'ny rafitra vaovao ianao, dia mety hampiato ny fananganana ny fampitandremana mpanangona.

Ohatra, nisy ny famoahana ns‑3.28 teo aloha ho an'ny Fedora 28, izay nahitana dikan-teny lehibe vaovao. gcc (gcc-8). Ny fananganana ny famoahana ns-3.28 na ny dikan-teny teo aloha teo ambanin'ny Fedora 28, miaraka amin'ny Gtk2 + napetraka, dia hitranga ity hadisoana manaraka ity:

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

Ao amin'ny famoahana manomboka amin'ny ns-3.28.1, in Waf misy safidy hamahana ireo olana ireo. Izy io dia manakana ny fametrahana ny saina "-Werror" amin'ny g++ sy clang++. Ity no safidy "--disable-werror" ary tsy maintsy ampiharina mandritra ny fanamafisana:

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

Ampifandraiso na amboary

Didy sasany Waf tsy misy dikany afa-tsy ao amin'ny dingana fanamafisana, ary ny sasany dia manan-kery amin'ny dingana fananganana. Ohatra, raha te-hampiasa ny endri-javatra emulation ns-3 ianao dia azonao atao ny mamela ny fametrahana bit ATSIMO mampiasa sudo, araka ny voalaza etsy ambony. Izany dia hanaisotra ny baikon'ny dingana fanamafisana, ary noho izany dia azonao atao ny manova ny fanamafisana amin'ny fampiasana ity baiko manaraka ity, izay ahitana ohatra sy fitsapana ihany koa.

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

Raha manao izany ianao Waf hanomboka sudohanova ny programa famoronana faladia kaody emulation mba handeha amin'ny alalana faka. The Waf Misy safidy maro hafa azo alaina amin'ny fanamboarana sy fananganana dingana. Raha te hijery ny safidinao dia midira:

$ ./waf --help

Amin'ny fizarana manaraka dia hampiasa safidy mifandraika amin'ny fitsapana isika.

Ny mombamomba ny fivoriambe

Efa hitantsika ny fomba ahafahanao manamboatra Waf ho an’ny fivoriambe debug и optimisé:

$ ./waf --build-profile=debug

Misy ihany koa ny profil assembly intermediate, famotsorana. SAFIDY -d dia mitovy amin'ny --build-profile. Ny mombamomba ny fananganana dia manara-maso ny fampiasana logging, assertion, ary switch optimization compiler:

ns-3 tambajotra simulator fampianarana. Toko 3

Araka ny hitanao dia tsy misy afa-tsy amin'ny fananganana debug ihany ny fanoratana sy ny fanambaràna. Ny fomba fanao aroso dia ny mamolavola ny scripto amin'ny fomba debug, avy eo manaova hazakazaka miverimberina (ho an'ny antontan'isa na fiovan'ny mari-pamantarana) amin'ny mombamomba fananganana nohatsaraina.

Raha manana kaody izay tsy maintsy mandeha amin'ny mombamomba fananganana sasany ianao dia ampiasao ny Macro Wrapper Code:

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

toerana misy anao, Waf toerana manangana artifacts ao amin'ny lahatahiry fananganana. Azonao atao ny mamaritra lahatahiry famoahana hafa amin'ny fampiasana ny safidy - -out, ohatra:

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

Amin'ny fampifangaroana izany amin'ny fananganana profil, azonao atao ny mifamadika mora foana amin'ny safidy fanangonana samihafa:

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

Izay mamela anao hiasa miaraka amin'ny fivoriambe maro tsy mila manoratra indray ny fivoriambe farany isaky ny mandeha. Rehefa mifindra amin'ny mombamomba hafa ianao, Waf hanambatra azy ihany, tsy hamerina tanteraka ny zava-drehetra.

Rehefa manova ny mombamomba ny fananganana amin'ny fomba toy izany ianao, dia mila mitandrina ianao mba hanomezana safidy mitovy amin'izany isaky ny mandeha. Ny famaritana ny fari-piainan'ny tontolo iainana maro dia hanampy anao hisoroka ny fahadisoana:

$ 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

Mpanamboatra sy saina

Ao amin'ireo ohatra etsy ambony Waf Ny fananganana ns-3 dia mampiasa ny C++ compiler avy amin'ny GCC ( g ++). Na izany aza, azonao atao ny manova ny iray ampiasainao Waf C++ compiler, amin'ny famaritana ny fari-piainana CXX. Ohatra, mampiasa ny C ++ compiler Clang, clang ++,

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

Toy izany koa no ahafahanao manamboatra Waf mampiasa compilation mizara mampiasa distcc:

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

Ny fampahalalana bebe kokoa momba ny distcc sy ny fanangonana voazara dia azo jerena ao amin'ny pejin'ny tetikasa ao amin'ny fizarana Documentation. Raha te hampiditra saina mpanangona rehefa manamboatra ns-3 dia ampiasao ny fari-piainan'ny tontolo iainana CXXFLAGS_EXTRA.

fametrahana

Waf azo ampiasaina hametrahana tranomboky amin'ny toerana samihafa amin'ny rafitra. Amin'ny alàlan'ny default dia hita ao amin'ny lahatahiry ireo tranomboky sy executable natambatra manao, ary satria fantatr'i Waf ny toerana misy an'ireo tranomboky sy executable ireo, dia tsy ilaina ny mametraka ny tranomboky any amin'ny toerana hafa.

Raha tian'ny mpampiasa ny mametraka ivelan'ny lahatahiry fananganana dia afaka manatanteraka ny baiko izy ireo ./waf apetraka. Ny prefix default ho an'ny fametrahana dia / usr / eo an-toeranaIzany no antony ./waf apetraka dia hametraka programa ao / Usr / local / Bin, tranomboky ao / Usr / local / lib ary ny rakitra header ao /usr/local/include. Ny zon'ny superuser matetika dia mila apetraka amin'ny prefix default, noho izany dia misy baiko mahazatra sudo ./waf install. Rehefa natomboka i Waf dia hisafidy aloha ny hampiasa ireo tranomboky ifampizarana ao amin'ny lahatahiry fananganana, avy eo mitady tranomboky eo amin'ny lalana mankany amin'ireo tranomboky namboarina ao amin'ny tontolo eo an-toerana. Noho izany, rehefa mametraka tranomboky amin'ny rafitra iray, dia fomba fanao tsara ny manamarina fa ny tranomboky mety no ampiasaina. Ny mpampiasa dia afaka misafidy ny hametraka miaraka amin'ny prefix hafa amin'ny alalan'ny fandefasana ny safidy mandritra ny fanamafisana --prefix, ohatra:

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

Raha taty aoriana, aorian'ny fananganana, ny mpampiasa dia miditra amin'ny baiko fametrahana ./waf, ny prefix no hampiasaina /opt/local.

ekipa ./waf clean dia tsy maintsy ampiasaina alohan'ny hamerenana ny tetikasa raha hampiasa ny fametrahana Waf eo ambanin'ny prefix hafa.

Noho izany, ny fampiasana ns-3 dia tsy ilaina ny miantso ./waf install. Tsy mila an'io baiko io ny ankamaroan'ny mpampiasa satria Waf dia haka ny tranomboky amin'izao fotoana izao avy amin'ny lahatahiry fananganana, fa ny mpampiasa sasany dia mety hahita izany mahasoa raha toa ka tafiditra ao anatin'ny fiaraha-miasa amin'ny programa ivelan'ny lahatahiry ns-3 ny hetsika ataony.

Waf tokana

Ao amin'ny ambaratonga ambony amin'ny hazo loharano ns-3, tsy misy afa-tsy soratra Waf iray. Raha vao manomboka miasa ianao dia handany fotoana be ao amin'ny lahatahiry scratch/ na lalina kokoasrc/... ary miaraka amin'izay koa tsy maintsy mihazakazaka Waf. Azonao atao ny mahatsiaro ny toerana misy anao ary mihazakazaka Waf toy izao manaraka izao:

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

fa ho mandreraka sy mora diso izany, ka misy vahaolana tsara kokoa. Ny fomba iray mahazatra dia ny fampiasana tonian-dahatsoratra toy ny emacs na vim, izay misy fivoriana terminal roa misokatra, ny iray dia ampiasaina hanamboarana ns-3, ary ny faharoa dia ampiasaina hanitsiana ny kaody loharano. Raha manana ianao tarball, dia afaka manampy ny variable environment:

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

$ cd scratch 
$ waff build

Ao amin'ny lahatahiry module dia mety halaim-panahy ny manampy script waf tsy misy dikany toy ny exec ../../waf. Aza manao an'izany, azafady. Mampisavoritaka ho an'ireo vao manomboka izany ary, rehefa tsy vita tsara, dia miteraka fahadisoana amin'ny fananganana sarotra. Ny vahaolana aseho etsy ambony dia ny lalana tokony hampiasaina.

3.5 Fitsapana ns-3

Azonao atao ny mampandeha ny andrana an'ny fizarana ns-3 amin'ny alàlan'ny fampandehanana ny script ./test.py:

$ ./test.py

Ireo fitsapana ireo dia atao mifanaraka amin'ny Waf. Farany dia tokony hahita hafatra ianao manao hoe:

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

Ity dia hafatra manan-danja hamantarana ny fianjerana, fianjerana na hadisoana valgrind, manondro olana amin'ny code na tsy mifanaraka amin'ny fitaovana sy ny code.

Ho hitanao ihany koa ny vokatra farany avy amin'ny Waf ary tester iray manao fitsapana tsirairay, izay ho toy izao:

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)

Ity baiko ity dia matetika ataon'ny mpampiasa mba hanamarina haingana fa ny fizarana ns-3 dia naorina tsara. (Mariho fa mety tsy mitovy ny filaharan'ny tsipika "PASS: ...", ara-dalàna izany. Ny zava-dehibe dia ny tsipika famintinana amin'ny faran'ny tatitra dia mampiseho fa nandalo ny fitsapana rehetra; tsy nisy fitsapana tsy nahomby na nianjera.) SY Wafary test.py dia hampitoviana ny asa manerana ireo cores processeur misy amin'ny milina.

3.6 Fampandehanana ny script

Mazàna izahay dia mibaiko ny script Waf. Izany dia ahafahan'ny rafitra fananganana miantoka fa ny lalan'ny tranomboky nozaraina dia napetraka tsara ary ny tranomboky dia misy amin'ny fotoana fandehanana. Mba hampandehanana ny programa, ampiasao fotsiny Waf miaraka amin'ny parameter - -run. Andeha hojerentsika ny ns-3 mitovy amin'ny programa hatraiza hatraiza Hello Worldamin'ny fanoratana ireto manaraka ireto:

$ ./waf --run hello-simulator

Hamarinin'i Waf aloha fa naorina tsara ny programa ary manorina raha ilaina. dia Waf dia hanatanteraka programa izay mamokatra ity vokatra manaraka ity.

Hello Simulator

Arahabaina! Mpampiasa ns-3 ianao izao!

Inona no tokony hataoko raha tsy mahita valiny aho?

Raha mahita hafatra ianao Wafmilaza fa vita soa aman-tsara ny fananganana, saingy tsy hitanao ny vokatra "Salama Simulator", dia misy ny mety hoe ao amin'ny fizarana [Build-with-Waf] dia nanova ny fomba fanangananao ho optimisé, fa tsy afaka miverina amin'ny fomba debug. Ny vokatra fampiononana rehetra ampiasaina amin'ity lesona ity dia mampiasa singa ns-3 manokana izay manao logging ary ampiasaina hanontana hafatra manokana amin'ny console. Ny vokatra avy amin'ity singa ity dia tsy mandeha ho azy rehefa voaangona ny kaody optimized - dia "optimized". Raha tsy hitanao ny vokatra "Hello Simulator" dia ampidiro ireto manaraka ireto:

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

hanamboatra Waf mba hananganana dikan-teny debug amin'ny programa ns-3, izay ahitana ohatra sy fitsapana. Avy eo ianao dia tokony hanangana ny dikan-debug amin'izao fotoana izao amin'ny kaody amin'ny fanoratana

$ ./waf

Ankehitriny raha mihazakazaka ny programa ianao salut-simulator, tokony ho hitanao ny vokatra andrasana.

3.6.1 Fandresen-dahatra andalana baiko

Mba handefasana hevitra andalana baiko amin'ny programa ns-3 dia ampiasao ity lamina manaraka ity:

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

Soloy amin'ny anaran'ny programanao sy ny tohan-kevitra. fandresen-dahatra - -command-template ho an'ny Waf dia tena fomba fanamboarana ny tena andalana baiko Waf ampiasaina hanatanterahana ny programa. Waf manamarina fa vita ny fananganana, mametraka ny lalan'ny tranomboky ifampizarana, avy eo dia ampiasao ny môdelin'ny baiko nomena ary manolo ny anaran'ny programa ho an'ny %s placeholder hiantso ny executable. Raha hitanao fa sarotra ity syntax ity, dia misy dikan-teny tsotra kokoa izay misy ny programa ns-3 sy ny tohan-kevitra voarakitra ao anaty teny tokana:

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

Ohatra iray hafa tena ilaina dia ny fampandehanana ireo suite fitsapana mifantina. Andao atao hoe misy test suite antsoina hoe mytest (raha ny marina dia tsy misy izany). Etsy ambony dia nampiasa ny script ./test.py izahay mba hampandehanana fitsapana maromaro mifanitsy, izay miantso imbetsaka ny programa fitsapana mpihazakazaka fitsapana. ANTSO mpihazakazaka fitsapana mivantana hanao fitsapana iray:

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

Ny adihevitra dia halefa amin'ny programa mpihazakazaka fitsapana. Satria tsy misy ny mytest dia hisy hafatra diso havoaka. Raha hanonta ireo safidy mpihazakazaka fitsapana misy dia midira:

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

3.6.2 Debugging

Mba hampandehanana programa ns-3 eo ambanin'ny fitaovana hafa, toy ny debugger (ohatra, gdb) na fitaovana fitiliana fahatsiarovana (ohatra, valgrind), mampiasa endrika mitovy - -command-template = "…". Ohatra, mihazakazaka amin'ny debugger gdb ny programa hello-simulator ns-3 misy hevitra:

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

Mariho fa ny anaran'ny programa ns-3 dia miaraka amin'ny adihevitra - -run, ary ny fitaovana fitantanana (eto gdb) no famantarana voalohany amin'ny adihevitra - -command-template. SAFIDY - -args tatitra gdbfa ny sisa amin'ny andalana baiko dia an'ny programa "ambany". (Dikan-teny sasany gdb tsy azo ny safidy - -args. Amin'ity tranga ity, esory ny tohan-kevitry ny programa amin'ny - -command-template ary ampiasao ny baiko napetraka gdb arg.) Afaka manambatra an'ity recipe ity sy ilay teo aloha isika mba hampandehanana ny fitsapana eo ambanin'ny debugger:

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

3.6.3 Lahatahiry miasa

Tokony halefa amin'ny toerana misy azy eo an-tampon'ny hazo ns-3 ny Waf. Ity lahatahiry ity dia lasa lahatahiry miasa izay hanoratana ny rakitra vokatra. Ahoana anefa raha te hitazona ireo rakitra ireo ivelan'ny hazo loharano ns-3 ianao? Mampiasà argument - -cwd:

$ ./waf --cwd=...

Mety ho hitanao fa mety kokoa ny maka ireo rakitra mivoaka ao amin'ny lahatahiry miasa. Amin'ity tranga ity dia afaka manampy ireto hetsika ankolaka manaraka ireto:

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

Ity haingo amin'ny dikan-teny teo aloha ity dia mitahiry ny lahatahiry miasa ankehitriny, mankany amin'ny lahatahiry Wafary avy eo dia mampianatra Waf hanova ny lahatahiry miasa hiverina amin'ny lahatahiry miasa ankehitriny voatahiry alohan'ny hanombohana ny programa. Manonona ny ekipa izahay - -cwd Ho an'ny fahafenoana, ny ankamaroan'ny mpampiasa dia mihazakazaka Waf avy amin'ny lahatahiry ambony indrindra ary mamorona rakitra vokatra ao.

Tohiny: Toko faha-4

Source: www.habr.com

Add a comment