ns-3 fesoʻotaʻiga simulator aʻoaʻoga. Mataupu 3

ns-3 fesoʻotaʻiga simulator aʻoaʻoga. Mataupu 3
mataupu 1,2

3 Amata
3.1 Va'aiga lautele
3.2 Mea e mana'omia muamua
3.2.1 La'uina o le ns-3 fa'amatu'u e fai ma fa'amaumauga autu
3.3 Si'itia ns-3 fa'aaoga Git
3.3.1 La'uina ns-3 fa'aaoga Tao
3.4 Fonotaga ns-3
3.4.1 Fausia ile build.py
3.4.2 Fausia ma Tao
3.4.3 Fausia ma Waf
3.5 Su'ega ns-3
3.6 Fa'atino le fa'asologa
3.6.1 Fa'aupuga o laina fa'atonu
3.6.2 Debugging
3.6.3 Fa'atonuga galuega

Mataupu 3

Amataina

O lenei mataupu ua faamoemoe e saunia le tagata faitau e amata i se komepiuta atonu e leʻi faʻapipiʻiina le ns-3. E aofia ai faʻavae lagolago, mea e manaʻomia muamua, auala e maua ai le ns-3, faʻafefea ona fausia le ns-3, ma le auala e suʻe ai lau fau ma faʻagasolo polokalame faigofie.

3.1 Va'aiga lautele

O le ns-3 simulator ua fausia e avea o se faiga o faletusi polokalama galulue faatasi. I le taimi o le fa'apotopotoga, e feso'ota'i le fa'ailoga o polokalame fa'aoga ma nei faletusi. O le C ++ poʻo le Python polokalame gagana e faʻaaogaina e tusi ai polokalame masani.

O le Ns-3 o loʻo tufatufa atu e avea ma faʻamatalaga puna, o lona uiga e tatau ona i ai i le polokalama faʻapipiʻi se siosiomaga atinaʻe polokalame ina ia mafai ai ona fausia muamua faletusi ona fausia ai lea o le polokalama faʻaoga. I le mataupu faavae, ns-3 e mafai ona tufatufaina atu e avea ma faletusi ua saunia mo se faiga faʻapitoa, ma i le lumanaʻi e mafai ona tufatufaina atu i lenei auala. Ae o aso nei e tele tagata fa'aoga latou te faia a latou galuega e ala i le fa'asa'oina o le ns-3 lava ia, o lea e aoga ai le i ai o le fa'ailoga puna e fausia ai faletusi. Afai ei ai se tasi e manaʻo e faia le galuega o le fausiaina o faletusi ma afifi mo faiga faʻaogaina, faʻamolemole faʻafesoʻotaʻi le lisi o meli. ns-tagata atiae.

O le isi, o le a tatou vaʻavaʻai i auala e tolu e sii mai ai ma fausia le ns-3. Muamua o le download ma fausia le faʻasalalauga aloaia mai le nofoaga autu. O le lona lua o le filifilia ma le faʻapipiʻiina o kopi o faʻataʻitaʻiga o le faʻapipiʻiina ns-3 faavae. O le lona tolu o le faʻaaogaina o meafaigaluega faufale e faʻapipiʻi atili ai faʻaopoopoga mo ns-3. O le a tatou fa'atalanoaina ta'itasi talu ai o meafaigaluega e fai si eseese.

O tagata faʻapitoa Linux e ono mafaufau pe aisea e le tuʻuina atu ai le ns-3 o se afifi pei o le tele o isi faletusi e faʻaogaina se pule o pusa? E ui lava o loʻo i ai pusa binary mo faʻasalalauga eseese Linux (faʻataʻitaʻiga Debian), o le tele o tagata faʻaoga e faʻamaeʻa le faʻasaʻoina o faletusi ma toe fausia ns-3 i latou lava, o lea o le maua o le code source e faigofie. Mo lenei mafuaʻaga, o le a matou taulai atu i le faʻapipiʻiina mai le puna.

Mo le tele o talosaga ns-3 aia tatau aʻa e le manaʻomia, e fautuaina e faʻaaoga se faʻamatalaga tagata faʻapitoa.

3.2 Mea e mana'omia muamua

O le seti atoa o avanoa ns-3 faletusi o loʻo i ai le tele o faʻalagolago i faletusi lona tolu, ae mo le tele o le ns-3 e mafai ona fausia ma faʻaoga faʻatasi ma le lagolago mo le tele o vaega masani (e masani ona faʻapipiʻiina e ala i le faaletonu): o le C++ compiler, Python, o se fa'atonu fa'ailoga puna (mo se fa'ata'ita'iga, vim, emacs poʻo gaseʻeleʻele) ma, afai e faʻaaogaina fale teu oloa, Git version control systems. O le tele o tagata fa'aoga muamua e le mana'omia ona popole pe a latou fa'asalalauina nisi o ns-3 tulaga maualuga o lo'o misi, ae mo i latou e mana'o i se fa'apipi'i atoatoa, o le poloketi e maua ai se wiki e aofia ai itulau ma le tele o fautuaga aoga ma togafiti. O se tasi o ia itulau o le itulau Fa'apipi'i, fa'atasi ai ma fa'atonuga fa'apipi'i mo faiga eseese, e maua ile: https://www.nsnam.org/wiki/Installation.

O le vaega o mea e manaʻomia muamua o lenei wiki o loʻo faʻamatalaina po o fea afifi e manaʻomia e lagolago ai filifiliga masani ns-3 ma tuʻuina atu foʻi poloaiga e faʻaogaina e faʻapipiʻi ai i luga o mea masani o Linux poʻo macOS.

E mafai ona e faʻaogaina lenei avanoa e suʻesuʻe ai le ns-3 wiki itulau poʻo le upega tafaʻilagi autu: https://www.nsnam.org, ona o loʻo i ai le tele o faʻamatalaga iina. Amata i le lomiga lata mai o ns-3 (ns-3.29), o meafaigaluega nei e manaʻomia e faʻatautaia ai le ns-3:

Mea faigaluega Paket/Viga

  • C++ tu'ufa'atasi
    clang++ poʻo le g++ (g++ version 4.9 pe maualuga)
  • Python
    python2 version>= 2.7.10, poʻo le python3 version>=3.4
  • Git
    soʻo se faʻamatalaga lata mai (ia maua le ns-3 ile GitLab.com)
  • ta
    so'o se fa'amatalaga fou (mo le tatalaina o le ns‑3 fa'amatu'u)
  • bunzip2
    so'o se lomiga fou (mo le tatalaina o le ns-3 fa'asalalauga)

Ina ia siaki le faʻaogaina o le Python, faʻaoga python -V. Ina ia siaki le g++ version, type g++ -v. Afai o iai ni mea faigaluega o loʻo misi pe tuai tele, faʻamolemole faʻafesoʻotaʻi le taʻiala faʻapipiʻi ile itulau ns-3 wiki.

Mai le taimi nei, matou te manatu o le tagata faitau o loʻo faʻatautaia Linux, MacOS, poʻo se Linux emulator, ma o loʻo i ai le itiiti ifo o meafaigaluega i luga.

3.2.1 La'uina o le ns-3 fa'amatu'u e fai ma fa'amaumauga autu

O le ala lea o le gaioiga mo se tagata fou e manaʻo e sii mai ma faʻataʻitaʻi i faʻasalalauga lata mai ma faʻapipiʻi lomiga o le ns-3. O fa'asalalauga ns-3 o lo'o fa'asalalauina e pei o fa'amaumauga fa'aputu, o nisi taimi e ta'ua pesipolo. pesipolo ose fa'apipi'i fa'apipi'i fa'apolokalame fa'apitoa lea e tu'ufa'atasia ai le tele o faila. O le archive e masani ona faʻapipiʻi. ns-3 faiga fa'avae e ala i pesipolo e faigofie, e tatau lava ona e filifilia se faʻamalolo, download ma tatala.

Sei o tatou manatu o oe, i le avea ai ma se tagata faʻaoga, e te manaʻo e fausia le ns-3 i totonu o se lisi faʻapitonuʻu e taʻua avanoa faigaluega. E mafai ona e mauaina se kopi galue o le faʻasalalauga e ala i le tuʻuina atu o mea nei i totonu o le Linux faʻamafanafanaga (sui i numera talafeagai, ioe)

$ 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 

Faʻalogo i le faʻaogaina o loʻo faʻaaogaina i luga faʻailoga, o se meafaigaluega laina faʻatonu mo le laʻuina o mea mai le Initaneti. Afai e te leʻi faʻapipiʻiina, e mafai ona e faʻaogaina lau suʻega mo lenei.

O le mulimuli i laasaga nei o le a ave oe i le ns-allinone-3.29 directory, o iina e tatau ona e vaʻai i le tele o faila ma directories

$ 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

Ua e sauni nei e fausia le ns-3 fa'avae fa'asoa ma e mafai ona e alu i le vaega ile fale ns-3.

3.3 Si'itia ns-3 fa'aaoga Git

Ole ns-3 code o loʻo maua ile Git repositories ile GitLab.com ile https://gitlab.com/nsnam/. Vaega nsnam tu'u fa'atasia faleteuoloa 'ese'ese o lo'o fa'aogaina e se galuega fa'apogai tatala.

O le auala pito sili ona faigofie e amata faʻaaoga ai fale teu oloa Git o le tui pe faʻapipiʻi le siosiomaga ns-3-allinone. O se seti lea o tusitusiga e pulea le utaina ma le faʻapipiʻiina o ns-3 subsystems e masani ona faʻaaogaina. Afai e te fou i Git, atonu e te le masani ai ia faaupuga "vai" ma le "clone"; afai o lea, matou te fautuaina e te faʻapipiʻi (faia sau lava kopi) le fale teu oloa o loʻo i luga ole GitLab.com pei o lenei:

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

I lenei laʻasaga, o le vaʻaiga o lau lisi ns-3-allinone 'ese'ese la'ititi mai le fa'amaumauga fa'amaumauga fa'amaumauga o lo'o fa'amatalaina i luga. E tatau ona foliga e pei o lenei:

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

Faamolemole ia matau o loo i ai se tusitusiga download.py, lea o le a fa'aopoopoina mai ai le ns-3 ma lona fa'ailoga puna fa'atasi. O lea e iai sau filifiliga: pe la'u mai le ata lata mai o le atina'e ns-3:

$ python download.py

pe sili atu i le ns-3 faʻamalolo e faʻaaoga ai le fuʻa -n e fa'ailoa le numera fa'asa'oloto:

$ python download.py -n ns-3.29

A maeʻa lenei laʻasaga i le lisi ns-3-allinone o le a la'uina mai isi fale teu oloa ns-3, tao tao, pybindgen и netanim.

mataʻi
I luga o se masini mama Ubuntu16.04, na ou manaʻomia le suia o le poloaiga i lenei: $ sudo python3 download.py -n ns-3.29 (o lo'o mulimuli ane fa'amatalaga a le faaliliu).

3.3.1 La'uina ns-3 fa'aaoga Tao

O metotia e lua o loʻo i luga (punaoa faʻamaumauga poʻo fale teu oloa ns-3-allinone e ala i Git) e aoga mo le mauaina o le ns-3 faʻapipiʻi faigofie ma le tele o faʻaopoopoga (pybindgen e fa'atupu fa'atasiga Python ma netanim mo fesoʻotaʻiga animation). O le faleteuoloa lona tolu na tuʻuina atu e ala i le faaletonu i le ns-3-allinone e taʻua tao tao.

Fafaga ose meafaigaluega mo le faamaopoopoina o le fausiaina o polokalama mai le tele o fale teu oloa, fausia mo le ns-3 poloketi. Fafaga e mafai ona faʻaaogaina e maua ai faʻataʻitaʻiga o le ns-3, faʻapea foʻi ma le siiina mai ma fausia faʻaopoopoga o le faʻavae o le faʻasalalauga ns-3, e pei o le siosiomaga Fa'atonu Fa'atonu Fa'atonu, CradleNetwork Simulation Cradle, le mafai ona fatuina ni fusiga fou Python ma eseese ns-3 "apps".

mataʻi
CradleNetwork Simulation Cradle o se fa'avae e mafai ai ona e fa'aogaina fa'aputuga feso'ota'iga TCP/IP moni i totonu o se simulator feso'ota'iga.

Afai e te faʻamoemoe o lau faʻapipiʻi ns-3 e iai ni faʻaopoopoga poʻo ni faʻaopoopoga, e mafai ona e mulimuli i lenei auala faʻapipiʻi.

I fa'amatalaga lata mai ns-3 Fafaga na fa'aopoopoina i le fa'amama ta. O le fa'amatu'u e aofia ai se faila fa'atulagaina e mafai ai ona e siiina mai fa'amaumauga o lo'o iai nei i le taimi o le tatalaina. O lona uiga, mo se faʻataʻitaʻiga, version Fafaga, lea e tufatufa atu ma le faʻamalolo ns-3.29, e mafai ona faʻaaogaina e toe aumai vaega mo lena faʻamalolo o le ns-3 poʻo muamua, ae le mafai ona faʻaaogaina e toe aumai ai vaega mo faʻasalalauga mulimuli (pe a fai o le faila faʻamatalaga afifi bakeconf.xml e le'i fa'afouina).

E mafai foi ona e maua le kopi fou tao taoe ala i le ulufale atu i le poloaiga lenei i lau faʻamafanafanaga Linux (faapea ua e faʻapipiʻi Git):

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

A e taʻavale le git command, e tatau ona e vaʻai i se mea e pei o lenei:

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.

A uma le poloaiga ufiufi e tatau ona i ai sau lisi e igoa tao tao, o mea o lo'o i totonu e tatau ona pei o lenei:

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

Manatua ua e utaina le tele o tusitusiga Python, o le Python module ua faaigoa tao tao ma se faila fetuutuunaiga XML. O le isi laasaga o le faʻaaogaina o nei tusitusiga e sii mai ma fausia le tufatufaga ns-3 o lau filifiliga. O lo'o avanoa ni nai fa'atatau fa'apitoa:

  1. ns-3.29: module e fetaui ma le tatalaina; o le a ia sii maia vaega e pei o le tatalaina i totonu o le tarball;

  2. ns-3-dev: o se module tutusa, ae faʻaaoga code mai le laau atinaʻe;

  3. ns-allinone-3.29: O se module e aofia ai isi vaega faʻaopoopo e pei o le Kiliki faʻasologa ma Network Simulation Cradle, Openflow mo ns-3.

  4. ns-3-allinone: tutusa ma le faʻasalalauga faʻasalalauga o le module allinone, ae mo code atinae.

mataʻi
kiliki — fa'ata'ita'iga fa'akomepiuta fa'apitoa mo le fa'atupuina o alalaupapa.

O le Openflow o se faʻasalalauga mo le puleaina o le faʻagasologa o faʻamatalaga faʻasalalau e tuʻuina atu i luga o se fesoʻotaʻiga faʻamaumauga e ala i alalaupapa ma suiga, faʻaaogaina tekonolosi fesoʻotaʻiga faʻapipiʻi.

O le ata o le atinaʻe o loʻo iai nei (e le faʻasaʻoina) ns-3 e mafai ona maua i:https://gitlab.com/nsnam/ns-3-dev.git.

O loʻo taumafai le au atinaʻe e tausia nei fale teu i se faʻatonuga galue, ae o loʻo i totonu o le vaega o atinaʻe ma o loʻo i ai le code e leʻi faʻasalalau, o lea afai e te le fuafua e faʻaoga foliga fou, ona filifili lea o le faʻasalalauga aloaia.

E mafai ona e mauaina le lomiga lata mai o le code e ala i le suʻeina o le lisi o fale teu oloa, poʻo le alu i le ns-3 Releases web page:https://www.nsnam.org/releases/ ma kiliki i luga o le sootaga aupito lata mai. I lenei faʻataʻitaʻiga o le a tatou faʻaauau i le ns-3.29.

Ia, ina ia maua vaega ns-3 matou te manaʻomia, matou te faʻaogaina le meafaigaluega Fafaga. Sei o tatou fai atu ni nai upu tomua e uiga i le galuega Fafaga.

E galue le tao e ala i le utaina o puna o pusa i totonu o se lisi puna ma fa'apipi'i faletusi i totonu o le fa'ailoga faufale. Fafaga e mafai ona tamomoe e ala i le faasino i le binary, ae afai e te manao e tamoe Fafaga e le mai le lisi lea na sii mai ai, e fautuaina e faaopoopo le ala i tao tao i lou ala (PATH environment variable), mo se faʻataʻitaʻiga e pei ona taua i lalo (faʻataʻitaʻiga mo Linux bash shell). Alu i le lisi " taoina " ona seti lea o suiga o le siosiomaga nei:

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

O le a tu'u ai le polokalame bake.py i le atigi ala ma o le a faʻatagaina isi polokalame e suʻe ai mea e mafai ona faʻatinoina ma faletusi na ia faia tao tao. I nisi tulaga faʻaaogaina tao tao, o le PATH ma le PYTHONPATH seti o loʻo faʻamatalaina i luga e le manaʻomia, ae o le fausiaina atoa o le ns-3-allinone (faʻatasi ai ma isi afifi) e masani ona manaʻomia.

Alu i lau lisi galue ma faʻapipiʻi mea nei i le faʻamafanafanaga:

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

Ona sosoo ai lea ma le fesili Fafaga siaki pe lava a tatou meafaigaluega e utaina ai vaega eseese. vili:

$ ./bake.py check

E tatau ona e vaʻai i se mea e pei o lenei:

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

Aemaise lava, faʻapipiʻi meafaigaluega e pei o Mercurial, CVS, Git ma Bazaar e taua i lenei laasaga aua latou te faʻatagaina i matou e maua le code. I le taimi nei, faʻapipiʻi meafaigaluega o loʻo misi i le auala masani mo lau polokalama (pe a e iloa pe faʻafefea) pe faʻafesoʻotaʻi lau pule faʻatonu mo se fesoasoani.

Le isi, taumafai e la'u mai le polokalame:

$ ./bake.py download

o le taunuuga e tatau ona pei o:

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

O lona uiga e tolu puna'oa ua la'uina mai. Alu nei i le source directory ma type ls; E tatau ona e vaʻai:

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

O lea ua e sauni e fausia le tufatufaina ns-3.

3.4 Fonotaga ns-3

E pei o le downloadina o le ns-3, e tele auala e fausia ai le ns-3. O le mea autu matou te fia faʻamamafaina o le ns-3 o loʻo fausia e faʻaaoga ai se meafaigaluega faufale e taʻua Waffa'amatala i lalo. O le tele o tagata fa'aoga o le a galulue fa'atasi Waf, ae o loʻo i ai ni nai faʻamatalaga faʻapitoa e fesoasoani ia te oe e amata ai pe faʻapipiʻi mea faʻapitoa. Fa'amolemole, ae e te le'i faitau e uiga i ai Waf, va'ai i build.py ma faatasitasi ma tao tao.

3.4.1 Fausia ile build.py

Faʻamolemole faʻamolemole! O lenei laasaga faufale e na'o avanoa mai le fa'amaumauga fa'amaumauga na maua e pei ona fa'amatalaina i luga; ma e leʻi sii mai e ala i le git poʻo le tao.

Pe a galue ma se faʻamaumauga faʻamaumauga pesipolo, i ns-3-allinone O loʻo i ai se faʻamatalaga faigofie e mafai ona faʻafaigofieina le faʻapipiʻiina o vaega. E ta'ua o le build.py. O lenei polokalame o le a faʻatulagaina le poloketi mo oe i se auala sili ona aoga. Ae ui i lea, ia maitauina o le faʻatulagaina sili atu ma le galulue faʻatasi ma ns-3 e masani ona aofia ai le faʻaogaina o le ns-3's lava build system, Waf, lea o le a faʻalauiloaina mulimuli ane i lenei aʻoaʻoga.

Afai na e siiina mai e faʻaaoga pesipolo, ona i ai lea i lau lisi ~/workspace se lisi e iai se igoa e pei o ns-allinone-3.29. Ulufale mea nei:

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

Ina ua valaauina build.py Na matou faʻaaogaina finauga laina laina e fausia ai faʻataʻitaʻiga ma suʻega na faʻaaogaina i lenei aʻoaʻoga, lea e le o fausia e ala i le faaletonu i le ns-3. E ala i le faaletonu, o le polokalama e fausia uma lava modules avanoa. Ma, afai e te manaʻo ai, e mafai ona e fausia le ns-3 e aunoa ma ni faʻataʻitaʻiga ma suʻega, pe faʻateʻaina modules e le manaʻomia mo lau galuega.

E te va'aia le tele o fe'au fa'apipi'i o lo'o fa'aalia e le tusitusiga a'o fausia vaega eseese na e utaina. Muamua o le tusitusiga o le a taumafai e fausia le animator netanim, ona sosoo ai lea ma le afi fusifusia pybindgen ma mulimuli ane ns-3. A maeʻa le faʻagasologa, e tatau ona e vaʻai i mea nei:

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

I laina mulimuli e tolu o le lisi matou te vaʻai i se feʻau e uiga i modules e leʻi fausia:

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

O lona uiga o nisi ns-3 modules e faʻalagolago i faletusi i fafo atonu e leʻi fausia, pe e le manaʻomia ona fausia mo lenei faʻatulagaga. E le o lona uiga e le o faʻapipiʻiina le simulator pe o le a le saʻo lelei le faʻaogaina o modules.

3.4.2 Fausia ma Tao

Afai na e faʻaogaina le tao i luga e maua ai le code source mai fale teu oloa, e mafai ona e faʻaaogaina e fausia ai le ns-3. vili:

$ ./bake.py build

ma e tatau ona e vaʻai i se mea e pei o:

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

fa'ailoga: E mafai foi ona e faia uma le download ma fausia laasaga i le taimi e tasi e ala i le valaau "bake.py deploy".

O le fa'apipi'iina o vaega uma e ono le manuia, ae o le a fa'aauau le fa'apotopotoga pe a le mana'omia se vaega. Mo se faʻataʻitaʻiga, o se faʻafitauli feaveaʻi lata mai o lena castxml e mafai ona faʻapipiʻiina e meafaigaluega tao tao e le o luga o tulaga uma. I lenei tulaga, o le a aliali mai se feʻau faʻapenei:

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

Ae ui i lea, castxml na'o le mana'omia pe afai e te mana'o e fa'afou fa'amaumauga Python. Mo le tele o tagata faʻaoga e leai se manaʻoga mo lenei mea (a itiiti ifo seia oʻo ina latou suia le ns-3), o lea e mafai ai ona le amanaiaina ma le saogalemu ia lapataiga mo le taimi nei.

Afai e le manuia, o le poloaiga lenei o le a tuʻuina atu ia te oe se faʻamatalaga e uiga i le misi o faʻalagolago:

$ ./bake.py show

O faʻalagolago eseese o afifi o loʻo e taumafai e fausia o le a lisiina.

3.4.3 Fausia ma Waf

E oʻo mai i le taimi nei, e amata fausia le ns-3, matou te faʻaogaina le tusitusiga build.py, po o meafaigaluega tao tao. O meafaigaluega nei e aoga mo le fausiaina o le ns-3 ma le tausia o faletusi. O le mea moni, o le fausiaina latou te faʻatautaia le meafaigaluega faufale Waf mai le directory ns-3. Waf fa'apipi'i i le ns-3 source code. O le tele o tagata fa'aoga e vave ona fa'aogaina le ns‑3 e fa'atulaga ma fa'aputu Waf. O lea, e faʻaauau, faʻamolemole alu i le ns-3 directory na e faia muamua.

E le'o matua mana'omia lenei mea i le taimi nei, ae o le a aoga le toe fo'i teisi ma va'ai pe fa'afefea ona fai suiga i le fa'atulagaina o galuega. Masalo o le suiga sili ona aoga e mafai ona e faia o le fatuina lea o se faʻaoga sili ona lelei o le code. Ona o le faaletonu, ua e fa'atulagaina lau poloketi e fausia ai se fa'asologa o le debug. Se'i o tatou va'ai i se poloketi e fausia ai se fau fa'alelei. Ina ia faʻamatala atu ia Waf e tatau ona faia ni faʻaleleia lelei e aofia ai faʻataʻitaʻiga ma suʻega, e tatau ona e faʻatinoina tulafono nei:

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

O le a tatalaina lenei mea Waf i fafo atu o le lisi faʻapitonuʻu (mo lou faʻaogaina). O le faʻatonuga muamua e faʻamamāina mai le fale muamua, e masani lava e le matua manaʻomia, ae o se faʻataʻitaʻiga lelei (vaai foi i le fausiaina o faʻamatalaga i lalo); o le a tapeina faletusi na faia muamua ma faila faila o loʻo i totonu o le lisi fausia/. Pe a toe faʻaleleia le poloketi ma siaki e le faiga faʻavae ia faʻalagolago eseese, e tatau ona e vaʻai i mea e tutusa ma mea nei:

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)

Faamolemole matau le vaega mulimuli o le lisi i luga. O nisi ns-3 filifiliga e le mafai ona fa'aletonu pe mana'omia le lagolago a le system e fa'atino lelei. Mo se faʻataʻitaʻiga, ina ia mafai ai le XmlTo, e tatau ona iai le faletusi i luga o le polokalama libxml-2.0. Afai e le'i maua lenei faletusi ma e le'i fa'aogaina le galuega ns-3, o le a fa'aalia se fe'au. Ia maitauina foi e mafai ona faʻaaoga le poloaiga sudo e seti ai le suid bit "set group ID i le taimi taʻavale" mo nisi polokalame. E le mafai e ala i le faaletonu ma o lea e foliga mai ai lenei vaega o le "le mafai". Ma le mea mulimuli, ina ia maua se lisi o avanoa e mafai ai, faʻaaoga Waf fa'atasi --check-config.

Ia tatou toe fo'i i tua ma toe fesuia'i ile fale debug o lo'o iai fa'ata'ita'iga ma su'ega.

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

Ua fa'atūina nei le faiga faufale ma e mafai ona e fausia fa'ailoga fa'aletonu o polokalame ns-3 i le na'o le taina:

$ ./waf

O laasaga o loʻo i luga atonu na faʻamalosia oe e fausia se vaega o le ns-3 faiga faʻalua, ae o lea ua e iloa le auala e sui ai le faʻatulagaga ma fausia le code optimized.

Ina ia siaki po o fea faʻamatalaga o loʻo galue mo se faʻatulagaina o galuega faatino, o loʻo i ai se faʻatonuga:

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

Le fa'aaliga i luga build.py lagolagoina foi finauga --enable-examples и --enable-tests, ae o isi filifiliga Waf e le lagolagoina sa'o. Mo se faʻataʻitaʻiga, e le aoga lenei mea:

$ ./build.py --disable-python

o le tali o le a pei o lenei:

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

Ae ui i lea, o le fa'apitoa fa'apitoa - - e mafai ona fa'aoga e pasi fa'aopoopo fa'amaufa'ailoga e ala i talofao lea nai lo le mea o loʻo i luga o le a aoga le poloaiga lenei:

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

auā e fa'atupuina ai le fa'atonuga autu ./waf configure --disable-python. O nisi nei o fautuaga fa'atomuaga e uiga i Waf.

Taulimaina o mea sese

ns-3 fa'asalalauga o lo'o fa'ata'ita'iina i fa'amaumauga fou C++ o lo'o maua i le taimi e fa'asa'olotoina ai fa'asoa masani a Linux ma MacOS. Ae ui i lea, i le aluga o taimi, o faʻasalalauga fou e faʻasalalau ma faʻapipiʻi fou, ma o nei tagata faʻapipiʻi fou e foliga mai e sili atu le faʻatauvaʻa e uiga i lapataiga. ns-3 faʻapipiʻi lona fale e faʻaogaina ai lapataiga uma o ni mea sese, o nisi taimi afai o loʻo e faʻaogaina se kopi tuai i luga o se faiga fou, o se lapataiga faʻapipiʻi e mafai ona taofia le fausiaina.

Mo se faʻataʻitaʻiga, sa i ai muamua le tatalaina o le ns-3.28 mo Fedora 28, lea na aofia ai se faʻamatalaga tele fou. gcc (gcc-8). Fausia le faʻamalolo ns-3.28 poʻo faʻasologa muamua i lalo o Fedora 28, faʻatasi ai ma Gtk2 + faʻapipiʻi, o le a tupu le mea sese:

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

I fa'asalalauga amata mai le ns-3.28.1, i Waf o lo'o avanoa se filifiliga e foia ai nei fa'afitauli. E fa'agata le setiina o le fu'a "-Werror" i le g++ ma le clang++. Ole filifiliga lea "--disable-werror" ma e tatau ona faʻaoga i le taimi o faʻatulagaga:

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

Fa'atulaga pe fa'apipi'i

O nisi o poloaiga Waf e na'o le vaega fa'atulagaina e iai lona uiga, ma o nisi e na'o le fa'aoga i le vaega fau. Mo se faʻataʻitaʻiga, afai e te manaʻo e faʻaoga foliga faʻataʻitaʻiga ns-3, e mafai ona e faʻaogaina le seti bit suid faʻaaogaina sudo, e pei ona faamatalaina i luga. O lenei mea o le a faʻamalo ai le faʻatonuga o le laasaga o le faʻatonuga, ma o lea e mafai ai ona e suia le faʻaogaina e faʻaaoga ai le faʻatonuga o loʻo i lalo, lea e aofia ai faʻataʻitaʻiga ma suʻega.

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

Afai e te faia lenei mea Waf o le a amataina sudoe sui polokalame fa'atupu fa'ailoga fa'ata'ita'iga e fa'atino ma fa'atagaga aʻa. le Waf E tele isi filifiliga e avanoa mo le faʻatulagaina ma le fausiaina o laasaga. Ina ia su'esu'e au filifiliga, ulufale:

$ ./waf --help

I le isi vaega o le a matou faʻaogaina nisi o suʻega e fesoʻotaʻi ma filifiliga.

Tala'aga o le Fonotaga

Ua uma ona matou vaʻai pe faʻafefea ona e faʻapipiʻi Waf mo fonotaga tosolo и maualuga:

$ ./waf --build-profile=debug

O loʻo iai foʻi se faʻasalalauga faʻasalalauga vavalalata, tatala. Filifiliga -d e tutusa ma --build-profile. O le faʻailoga faufale e faʻatonutonu ai le faʻaogaina o faʻamaumauga, faʻamatalaga, ma suʻega faʻapipiʻi sili atu:

ns-3 fesoʻotaʻiga simulator aʻoaʻoga. Mataupu 3

E pei ona e va'aia, e na'o le fa'aogaina o fa'amaumauga ma fa'amatalaga e maua i le fa'ailoga faufau. O le fa'ata'ita'iga fautuaina o le fa'atupuina lea o lau fa'amatalaga i le faiga fa'a-debug, ona fa'atino lea o ta'aloga fa'aauau (mo fa'amaumauga po'o suiga o fa'asologa) i se fa'ailoga fau lelei.

Afai ei ai sau faʻailoga e tatau ona naʻo ni faʻamatalaga faufale, faʻaaoga le Code Wrapper Macro:

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

Fa'atonu, Waf nofoaga e fausia ai meafaitino i totonu o le lisi o le fausiaina. E mafai ona e fa'ama'oti se isi fa'atonuga o galuega fa'aaoga le filifiliga - -out, mo se faataitaiga:

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

E ala i le tuʻufaʻatasia o lenei mea ma le fausiaina o faʻamatalaga, e faigofie ona e fesuiaʻi i le va o filifiliga tuʻufaʻatasiga eseese:

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

Lea e mafai ai ona e galue i le tele o faʻapotopotoga e aunoa ma le toe tusia o le faʻapotopotoga fou i taimi uma. A e sui i se isi talaaga, Waf o le a tuufaatasia na o ia, e aunoa ma le toe tuufaatasia atoatoa mea uma.

A e fesuia'i fa'ailoga faufale i lenei faiga, e tatau ona e fa'aeteete e tu'uina atu tutusa filifiliga fa'atulagaina i taimi ta'itasi. O le faʻamalamalamaina o le tele o fesuiaiga o le siosiomaga o le a fesoasoani ia te oe e aloese mai mea sese:

$ 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

Tu'ufa'atasi ma fu'a

I faʻataʻitaʻiga o loʻo i luga Waf e fausia le ns-3 faʻaaoga le C++ compiler mai GCC ( g ++). Ae ui i lea, e mafai ona e suia le mea e te faʻaaogaina Waf C++ compiler, e ala i le faʻamalamalamaina o le fesuiaiga o le siosiomaga CXX. Mo se faʻataʻitaʻiga, faʻaaoga le C ++ compiler Clang, clang ++,

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

I le auala lava e tasi e mafai ona e configure Waf e fa'aoga tu'ufa'atasi fa'asoa fa'aaoga distcc:

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

E mafai ona maua nisi fa'amatalaga e uiga i le distcc ma le tu'ufa'atasiga tu'ufa'atasia i le itulau o le poloketi i le vaega o Fa'amaumauga. Ina ia fa'aopoopo fu'a tu'ufa'atasi pe a fa'atulaga le ns-3, fa'aaoga le suiga ole si'osi'omaga CXXFLAGS_EXTRA.

faatulagaga

Waf e mafai ona faʻaogaina e faʻapipiʻi faletusi i nofoaga eseese i luga o le polokalama. Ona o le faaletonu, o faletusi ua tuufaatasia ma executable o loo i totonu o le lisi fau, ma talu ai e iloa e Waf le nofoaga o nei faletusi ma faʻaoga, e leai se manaʻoga e faʻapipiʻi faletusi i se isi mea.

Afai e manaʻo tagata faʻapipiʻi e faʻapipiʻi i fafo atu o le lisi o fale, e mafai ona latou faʻatautaia le poloaiga ./waf fa'apipi'i. O le prefix le fa'apipi'i o le / usr / i le lotoifaleo le mafuaaga lea ./waf fa'apipi'i o le a faʻapipiʻi polokalame i totonu / usr / local / bin, faletusi i totonu / usr / local / lib ma ulutala faila i totonu /usr/local/include. E masani ona mana'omia le fa'atulagaina o aia tatau a le Superuser i se fa'ailoga fa'aletonu, o lona uiga o se fa'atonuga masani sudo ./waf faʻapipiʻi. A faʻalauiloa, Waf o le a muamua filifili e faʻaoga faletusi fefaʻasoaaʻi i totonu o le faletusi fau, ona suʻe lea mo faletusi i luga o le ala i faletusi ua faʻatulagaina i totonu o le siosiomaga. O lea la pe a faʻapipiʻi faletusi i luga o se faiga, o se faiga lelei le siakiina o loʻo faʻaogaina faletusi saʻo. E mafai e tagata faʻaoga ona filifili e faʻapipiʻi i se isi prefix e ala i le pasia o le filifiliga i le taimi o le faʻatulagaina --prefix, mo se faataitaiga:

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

Afai mulimuli ane, pe a uma le fausiaina, e ulufale le tagata faʻaoga i le faʻatonuga faʻapipiʻi ./waf, o le a faʻaaogaina le prefix /opt/local.

au ./waf clean e tatau ona faʻaaogaina aʻo leʻi toe faʻatulagaina le poloketi pe a faʻaogaina le faʻapipiʻi Waf i lalo o se prefix ese.

O lea la, e faʻaaoga le ns-3 e leai se manaʻoga e valaʻau ./waf install. O le tele o tagata fa'aoga e le mana'omia lenei fa'atonuga ona Waf o le a pikiina faletusi o loʻo iai nei mai le faʻatonuga o le fausiaina, ae o nisi tagata faʻaoga e ono aoga lenei mea pe a fai o latou gaioiga e aofia ai le galulue ma polokalame i fafo atu o le ns-3 directory.

Waf nofofua

I le pito i luga ole la'au puna ns-3, e na'o le tasi le tusitusiga Waf. O le taimi lava e te amata galue ai, o le ae faʻaaluina le tele o le taimi i le lisi scratch/ pe loloto i totonusrc/... ma i le taimi lava e tasi e tatau ona tamoe Waf. E mafai lava ona e manatua le mea oei ai ma tamoe Waf e pei ona taʻua i lalo:

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

ae o lenei mea o le a faʻafefe ma faʻalavelave faʻafuaseʻi, o lea e iai ni fofo sili atu. O se tasi o auala masani o le faʻaaogaina o se faʻamatalaga tusitusi e pei o emacs poʻo vim, lea e tatalaina ai le lua faʻasalalauga, tasi e faʻaaogaina e fausia ai le ns-3, ma le lona lua e faʻaaoga e faʻasaʻo ai le puna code. Afai e te maua pesipolo, ona mafai lea ona fesoasoani le fesuiaiga o le siosiomaga:

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

$ cd scratch 
$ waff build

I totonu o le module directory e ono faaosoosoina le fa'aopoopoina o se tusitusiga fa'atauva'a fa'apei exec ../../waf. Faamolemole, aua le faia lena mea. E fenumiai lenei mea mo tagata fou ma, a le lelei ona fai, e oʻo atu ai i mea e faigata ona iloa fau mea sese. O fofo o loʻo faʻaalia i luga o le ala e tatau ona faʻaaogaina.

3.5 Su'ega ns-3

E mafai ona e fa'agasolo su'ega iunite a le ns-3 e ala i le fa'atinoina o le fa'amaumauga ./test.py:

$ ./test.py

O nei su'ega o lo'o fa'atautaia tutusa ma Waf. Mulimuli ane e tatau ona e vaʻai i se feʻau e fai mai:

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

O se feʻau taua lea mo le faʻailoaina o faʻalavelave valgrind, faʻalavelave poʻo mea sese, faʻaalia faafitauli i le code poʻo le le fetaui i le va o meafaigaluega ma code.

E te va'ai fo'i i le fa'ai'uga fa'ai'uga mai Waf ma se tagata su'esu'e e fa'atino su'ega ta'itasi, e pei o lenei:

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 lenei faʻatonuga e masani ona faʻatautaia e tagata faʻaoga e faʻamaonia vave o le tufatufaina o ns-3 ua fausia saʻo. (Manatua o le faasologa o le "PASS: ..." laina atonu e ese, o le mea masani lea. O le mea taua o le otootoga laina i le faaiuga o le lipoti o loʻo faʻaalia ai na pasi uma suʻega; leai ni suʻega na toilalo pe paʻu.) Ma Wafma test.py o le a fa'atusaina galuega i luga o le fa'agaoioiga o lo'o avanoa o le masini.

3.6 Fa'atino le fa'asologa

E masani ona matou faʻatautaia tusitusiga i lalo o le pule Waf. E fa'ataga ai le faiga fau e fa'amautinoa o lo'o fa'atulaga sa'o ala o faletusi fefa'asoaa'i ma o lo'o avanoa faletusi i le taimi e ta'avale ai. Ina ia faʻatautaia le polokalama, faʻaaoga Waf fa'atasi - -run. Sei o tatou ta'e le ns-3 e tutusa ma le polokalame i soo se mea alofa fiafia i le lalolagie ala i le taina o mea nei:

$ ./waf --run hello-simulator

E siaki muamua e Waf pe sa'o le fausiaina o le polokalame ma fausia pe a mana'omia. Ona Waf o le a fa'atinoina se polokalame e maua mai ai galuega fa'atino nei.

Hello Simulator

Fa'afetai! O oe o se tagata fa'aoga ns-3!

O le a se mea e tatau ona ou faia pe a ou le vaaia ni taunuuga?

Afai e te vaʻai i feʻau Waffa'ailoa mai ua mae'a manuia le faufale, ae e te le'i va'ai i le mea na tupu "Talofa Simulator", ona iai lea o le avanoa i le vaega [Fausia-ma-Waf] na e sui ai lau faiga fau i le maualuga, ae misia le toe sui i le faiga tosolo. O fa'amafanafanaga uma o lo'o fa'aogaina i lenei a'oa'oga e fa'aogaina ai se vaega fa'apitoa ns-3 e fa'atino ai le fa'amauina ma fa'aaogaina e lolomi ai fe'au masani i le fa'amafanafanaga. O mea e maua mai i lenei vaega e otometi lava ona le atoatoa pe a tuʻufaʻatasia le code optimized - e "optimized". Afai e te le vaʻai i le gaioiga "Hello Simulator", ulufale i mea nei:

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

e fetuutuunai Waf e fausia ai le debug versions o polokalame ns-3, lea e aofia ai faʻataʻitaʻiga ma suʻega. E tatau la ona e toe fausia le fa'asologa o le debug o lo'o i ai nei o le code e ala i le taina

$ ./waf

O lenei pe afai e te faʻatautaia le polokalama talofa-simulator, e tatau ona e vaʻai i le taunuuga faʻamoemoeina.

3.6.1 Fa'aupuga o laina fa'atonu

Ina ia pasi finauga laina laina i le polokalama ns-3, faʻaaoga le mamanu lenei:

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

Sui i le igoa o lau polokalame ma i finauga. finauga - -command-template mo Waf o se fua mo le fausiaina o le laina faʻatonuga moni Waf fa'aaoga e fa'atino ai le polokalame. E siaki e Waf ua mae'a le fau, fa'atulaga ala o faletusi fa'asoa, ona fa'aoga lea o le fa'ata'ita'iga o le laina fa'atonu ma sui le igoa o le polokalame mo le %s o lo'o tu'uina atu e vala'au ai le executable. Afai e te mauaina lenei faʻasologa faigata, o loʻo i ai se faʻamatalaga faigofie e aofia ai le ns-3 polokalame ma ana finauga o loʻo faʻapipiʻiina i upusii tasi:

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

O le isi fa'ata'ita'iga fa'apitoa o le fa'atinoina o su'ega su'ega fa'apitoa. Faapea o loʻo i ai se suʻega suʻega e taʻua o le mytest (o le mea moni e leai). I luga aʻe na matou faʻaogaina le ./test.py script e faʻataʻitaʻi ai le tele o suʻega tutusa, lea e taʻua pea le polokalame suʻega tamo'e su'e. Valaau tamo'e su'e tuusa'o e fai se su'ega se tasi:

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

O finauga o le a pasi atu i le polokalame tamo'e su'e. Talu ai e le o iai le mytest, o le a faia se feʻau sese. Ina ia lolomi le avanoa mo su'ega, fa'atumu:

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

3.6.2 Debugging

Le fa'atinoina o polokalame ns-3 i lalo o se isi fa'aoga, e pei o se fa'aoga (mo se fa'ata'ita'iga, gdb) po'o se meafaigaluega e su'e ai manatua (mo se fa'ata'ita'iga, valgrind), fa'aaoga se fomu fa'apena - -command-template = "…". Mo se faʻataʻitaʻiga, e tamoe i le debugger gdb lau polokalame hello-simulator ns-3 ma finauga:

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

Manatua o le igoa ole polokalame ns-3 e sau ma le finauga - -run, ma le faʻaaogaina o le pulega (inei gdb) o le faailoga muamua lea i le finauga - -command-template. Filifiliga - -args logoina gdbo le isi vaega o le laina o le poloaiga e patino i le polokalame "maualalo". (O nisi lomiga gdb le malamalama i le filifiliga - -args. I lenei tulaga, aveese le polokalame finauga mai - -command-template ma faaaoga le seti o poloaiga gdb finau.) E mafai ona matou tuʻufaʻatasia lenei fua ma le muamua e faʻataʻitaʻi ai le suʻega i lalo o le debugger:

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

3.6.3 Fa'atonuga galuega

Waf e tatau ona faʻalauiloa mai lona tulaga i le pito i luga o le ns-3 laau. O le faila lea e avea ma lisi galue lea o le a tusia ai faila o galuega. Ae fa'apefea pe a e mana'o e teu nei faila i fafo atu o le ns-3 source tree? Fa'aaoga finauga - -cwd:

$ ./waf --cwd=...

Atonu e te iloa e sili atu ona faigofie le mauaina o faila o galuega i lau lisi galue. I lenei tulaga, e mafai ona fesoasoani le gaioiga le saʻo:

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

O lenei teuteuga o le lomiga muamua o le poloaiga e faʻasaoina le lisi galue o loʻo i ai nei, alu i le lisi Wafona faatonu lea Waf e sui le tusi faigaluega i tua i le tusi faigaluega o lo'o i ai nei na teuina a'o le'i amataina le polokalame. Matou te taʻua le 'au - -cwd Mo le atoatoa, o le tele o tagata faʻaoga naʻo le taʻavale Waf mai le lisi pito i luga ma faʻatupu faila faila iina.

Faʻaauau: Mataupu 4

puna: www.habr.com

Faaopoopo i ai se faamatalaga