ns-3 pūnaewele simulator kumu aʻo. Mokuna 3

ns-3 pūnaewele simulator kumu aʻo. Mokuna 3
mokuna 1,2

3 Hoʻomaka
3.1 Hōʻikeʻike
3.2 Nā mea e pono ai
3.2.1 Hoʻoiho ʻana i ka hoʻokuʻu ns-3 ma ke ʻano he waihona kumu
3.3 Hoʻoiho i ka ns-3 me ka hoʻohana ʻana iā Git
3.3.1 Hoʻouka ns-3 me ka Bake
3.4 Hui ns-3
3.4.1 Kūkulu me build.py
3.4.2 Kūkulu me ka Bake
3.4.3 Kūkulu me Waf
3.5 Hoao ns-3
3.6 Holo i ka palapala
3.6.1 Nā hoʻopaʻapaʻa laina kauoha
3.6.2 Debugging
3.6.3 Papa kuhikuhi hana

MOKUNA 3

Hoʻomaka

Ua manaʻo ʻia kēia mokuna e hoʻomākaukau i ka mea heluhelu e hoʻomaka me kahi kamepiula ʻaʻole paha i hoʻokomo i ka ns-3. Hoʻopili ia i nā paepae i kākoʻo ʻia, nā koi mua, pehea e loaʻa ai ka ns-3, pehea e kūkulu ai i ka ns-3, a pehea e hoʻāʻo ai i kāu kūkulu a holo i nā polokalamu maʻalahi.

3.1 Hōʻikeʻike

Kūkulu ʻia ka simulator ns-3 ma ke ʻano he ʻōnaehana o nā hale waihona puke lako polokalamu. I ka wā e hui ai, hoʻopili ʻia ke code o nā polokalamu mea hoʻohana me kēia mau hale waihona puke. Hoʻohana ʻia nā ʻōlelo papahana C++ a i ʻole Python e kākau i nā papahana maʻamau.

Hoʻokaʻawale ʻia ʻo Ns-3 ma ke ʻano he kumu kumu, ʻo ia hoʻi, pono e loaʻa i ka ʻōnaehana pahuhopu kahi ʻenehana hoʻomohala polokalamu i mea e kūkulu mua ai i nā hale waihona puke a laila kūkulu i ka papahana mea hoʻohana. Ma ke kumu, hiki ke mahele ʻia ka ns-3 ma ke ʻano he hale waihona puke i hoʻomākaukau ʻia no kahi ʻōnaehana kikoʻī, a i ka wā e hiki mai ana e puʻunaue ʻia ma kēia ala. Akā i kēia mau lā, hana maoli nā mea hoʻohana i kā lākou hana ma ka hoʻoponopono ʻana iā ns-3 ponoʻī, no laila pono e loaʻa ke kumu kumu e kūkulu ai i nā hale waihona puke. Inā makemake kekahi e hana i nā hale waihona puke a me nā pūʻolo no nā ʻōnaehana hana, e ʻoluʻolu e kelepona i ka papa inoa leka uila. ns-mea hoʻomohala.

A laila, e nānā mākou i ʻekolu ala e hoʻoiho a kūkulu i ka ns-3. ʻO ka mea mua e hoʻoiho a kūkulu i ka hoʻokuʻu kūhelu mai ka pūnaewele nui. ʻO ka lua ka koho a me ka hui ʻana o nā kope o nā mana hoʻomohala o ka hoʻonohonoho kumu ns-3. ʻO ke kolu ka hoʻohana ʻana i nā mea hana kūkulu hou e hoʻouka i nā hoʻonui hou aku no ns-3. E hele mākou i kēlā me kēia no ka mea ʻokoʻa iki nā mea hana.

E noʻonoʻo paha nā mea hoʻohana Linux ʻike no ke aha ʻaʻole i hāʻawi ʻia ka ns-3 ma ke ʻano he pūʻolo e like me ka hapa nui o nā hale waihona puke e hoʻohana ana i kahi luna pūʻulu? ʻOiai aia nā pūʻolo binary no nā māhele Linux like ʻole (e laʻa me Debian), hoʻopau ka hapa nui o nā mea hoʻohana i ka hoʻoponopono ʻana i nā hale waihona puke a pono e kūkulu hou i ka ns-3 iā lākou iho, no laila ua maʻalahi ka loaʻa ʻana o ke code kumu. No kēia kumu, e kālele mākou i ka hoʻokomo ʻana mai ke kumu.

No ka nui o nā pono ns-3 pono aa ʻAʻole pono, ʻōlelo ʻia e hoʻohana i kahi moʻokāki mea hoʻohana pono ʻole.

3.2 Nā mea e pono ai

ʻO ka pūʻulu holoʻokoʻa o nā hale waihona puke ns-3 he nui nā hilinaʻi i nā hale waihona puke ʻekolu, akā no ka hapa nui hiki ke kūkulu ʻia a hoʻohana ʻia ʻo ns-3 me ke kākoʻo no kekahi mau mea maʻamau (hoʻokomo pinepine ʻia e ka paʻamau): kahi C++ compiler, ʻO Python, kahi mea hoʻoponopono kumu kumu (no ka laʻana, vim, emacs ai ole ia, Pu) a, inā hoʻohana ʻia nā waihona hoʻomohala, nā ʻōnaehana mana mana ʻo Git. ʻAʻole pono e hopohopo ka hapa nui o nā mea hoʻohana mua inā hōʻike kā lākou hoʻonohonoho ʻana i kekahi mau hiʻohiʻona holomua ns-3 i nalowale, akā no ka poʻe makemake i kahi hoʻonohonoho piha, hāʻawi ka papahana i kahi wiki e komo pū ana me nā ʻaoʻao me nā ʻōlelo aʻoaʻo a me nā hoʻopunipuni. ʻO kekahi o ia ʻaoʻao ʻo ka ʻaoʻao Installation, me nā kuhikuhi hoʻonohonoho no nā ʻōnaehana like ʻole, loaʻa ma: https://www.nsnam.org/wiki/Installation.

ʻO ka ʻāpana Prerequisites o kēia wiki e wehewehe i nā pūʻolo e koi ʻia e kākoʻo i nā koho ns-3 maʻamau a hāʻawi pū i nā kauoha i hoʻohana ʻia e hoʻokomo iā lākou ma nā ʻono maʻamau o Linux a i ʻole macOS.

Hiki iā ʻoe ke hoʻohana i kēia manawa kūpono e makaʻala i ka ʻaoʻao wiki ns-3 a i ʻole ka pūnaewele nui: https://www.nsnam.org, no ka mea, nui ka ʻike ma laila. E hoʻomaka ana me ka mana hou loa o ns-3 (ns-3.29), pono nā mea hana e holo ai i ka ns-3:

Pūʻolo hāmeʻa

  • C++ compiler
    clang++ a i ʻole g++ (g++ version 4.9 a ʻoi aku paha)
  • Python
    python2 version>= 2.7.10, a i ʻole python3 version>=3.4
  • ʻO Git
    nā mana hou loa (e komo i ka ns-3 ma GitLab.com)

  • nā mana hou loa (no ka wehe ʻana i ka hoʻokuʻu ns‑3)
  • bunzip2
    nā mana hou loa (no ka wehe ʻana i ka hoʻokuʻu ns‑3)

E nānā i ka mana paʻamau o Python, type python -V. No ka nānā ʻana i ka mana g++, ʻano g++ -v. Inā nalowale kekahi mea hana a ʻelemakule paha, e ʻoluʻolu e nānā i ke alakaʻi hoʻonohonoho ma ka ʻaoʻao wiki ns-3.

Mai kēia manawa, manaʻo mākou e holo ana ka mea heluhelu i Linux, MacOS, a i ʻole Linux emulator, a loaʻa iā ia nā mea hana ma luna.

3.2.1 Hoʻoiho ʻana i ka hoʻokuʻu ns-3 ma ke ʻano he waihona kumu

ʻO kēia ka papa hana no ka mea hoʻohana hou e makemake ana e hoʻoiho a hoʻokolohua me ka hoʻokuʻu hou ʻana a me nā mana pūʻolo o ns-3. Hoʻopuka ʻia nā hoʻokuʻu ns-3 ma ke ʻano he waihona waihona punawai, i kapa ʻia i kekahi manawa kinipōpō hīnaʻi. kinipōpō hīnaʻi He waihona waihona lako polokalamu kūikawā kahi i hui pū ʻia ai kekahi mau faila. Hoʻopili pinepine ʻia ka waihona. ns-3 kaʻina hana ma o kinipōpō hīnaʻi He mea maʻalahi, pono ʻoe e koho i kahi hoʻokuʻu, hoʻoiho a wehe iā ia.

E noʻonoʻo ʻoe, ma ke ʻano he mea hoʻohana, makemake ʻoe e kūkulu i ka ns-3 i kahi papa kuhikuhi kūloko i kapa ʻia ʻāpana hana. Hiki iā ʻoe ke loaʻa i kahi kope hana o ka hoʻokuʻu ʻana ma ke komo ʻana i kēia i loko o ka console Linux (e hoʻololi i nā helu mana kūpono, ʻoiaʻiʻo)

$ 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 

E nānā i ka pono i hoʻohana ʻia ma luna wget, he mea hana laina kauoha no ka hoʻoiho ʻana i nā mea mai ka Pūnaewele. Inā ʻaʻole ʻoe i hoʻokomo iā ia, hiki iā ʻoe ke hoʻohana i kāu polokalamu kele no kēia.

Ma hope o kēia mau ʻanuʻu e lawe iā ʻoe i ka papa kuhikuhi ns-allinone-3.29, ma laila ʻoe e ʻike ai i nā faila a me nā papa kuhikuhi.

$ 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 mākaukau ʻoe i kēia manawa e kūkulu i ka mahele kumu ns-3 a hiki ke neʻe i ka ʻāpana ma ke kūkulu ʻana i ka ns-3.

3.3 Hoʻoiho i ka ns-3 me ka hoʻohana ʻana iā Git

Loaʻa ka code ns-3 i nā waihona Git ma GitLab.com ma https://gitlab.com/nsnam/. Pūʻulu nsnam e hui pū i nā waihona like ʻole i hoʻohana ʻia e kahi papahana open source.

ʻO ke ala maʻalahi loa e hoʻomaka ai i ka hoʻohana ʻana i nā waihona Git ʻo ka ʻoki a i ʻole clone i ke kaiapuni ns-3-allinone. He pūʻulu palapala kēia e mālama ana i ka hoʻouka ʻana a me ka hui ʻana o nā subsystem ns-3 i hoʻohana pinepine ʻia. Inā he mea hou ʻoe iā Git, ʻaʻole maopopo iā ʻoe nā huaʻōlelo "fork" a me "clone"; inā pēlā, manaʻo mākou e hoʻopili wale ʻoe (hana i kāu kope ponoʻī) i ka waihona i loaʻa ma GitLab.com e like me kēia:

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

I kēia pae, e nānā i kāu papa kuhikuhi ns-3-allinone ʻokoʻa iki mai ka papa kuhikuhi waihona hoʻokuʻu i wehewehe ʻia ma luna. Pono e like me kēia:

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

E ʻoluʻolu e hoʻomaopopo aia he palapala download.py, ka mea e unuhi hou i ka ns-3 a me ke code kumu. Eia kāu koho: a i ʻole e hoʻoiho i ka snapshot hoʻomohala ns-3 hou loa:

$ python download.py

a makemake paha i ka hoʻokuʻu ns-3 me ka hoʻohana ʻana i ka hae -n e hōʻike i ka helu hoʻokuʻu:

$ python download.py -n ns-3.29

Ma hope o kēia ʻanuʻu i ka papa kuhikuhi ns-3-allinone e hoʻoiho ʻia nā waihona hou ns-3, kuke, pybindgen и netanim.

i hoʻopuka
Ma kahi mīkini me ka Ubuntu16.04 maʻemaʻe, pono wau e hoʻololi i ke kauoha i kēia: $ sudo python3 download.py -n ns-3.29 (ma keia hope aku ka unuhi olelo).

3.3.1 Hoʻouka ns-3 me ka Bake

ʻO nā ʻano hana ʻelua ma luna (kahi waihona waihona a i ʻole waihona ns-3-allinone ma o Git) no ka loaʻa ʻana o ka hoʻonohonoho ns-3 maʻalahi me nā mea hoʻohui he nui (pybindgen e hana i nā paio Python a netanim no ka animation pūnaewele). Ua kapa ʻia ke kolu o ka waihona i hāʻawi ʻia e ka paʻamau ma ns-3-allinone kuke.

kalua he mea paahana no ke kukulu hui ana o na lako polokalamu mai na waihona he nui, i kukuluia no ka papahana ns-3. kalua hiki ke hoʻohana ʻia no ka loaʻa ʻana o nā mana hoʻomohala o ns-3, a me ka hoʻoiho a kūkulu ʻana i nā hoʻonui o ka mana kumu o ka puʻunaue ns-3, e like me ke kaiapuni. Hoʻokō Code Direct, CradleNetwork Simulation Cradle, ka hiki ke hana i nā paʻa Python hou a me nā "apps" like ʻole ns-3.

i hoʻopuka
ʻO CradleNetwork Simulation Cradle kahi hoʻolālā e hiki ai iā ʻoe ke hoʻohana i nā waihona pūnaewele TCP/IP maoli i loko o kahi simulator pūnaewele.

Inā manaʻo ʻoe e loaʻa i kāu hoʻonohonoho ns-3 nā hiʻohiʻona kiʻekiʻe a i ʻole nā ​​​​hiʻohiʻona ʻē aʻe, hiki iā ʻoe ke hahai i kēia ala hoʻonohonoho.

I nā hoʻokuʻu hou ns-3 kalua ua hoʻohui ʻia i ka hoʻokuʻu ʻana i ke kā. Aia ka hoʻokuʻu ʻana i kahi faila hoʻonohonoho e hiki ai iā ʻoe ke hoʻoiho i nā mana polokalamu o kēia manawa i ka manawa o ka hoʻokuʻu ʻana. ʻO ia, no ka laʻana, ka mana kalua, i mahele ʻia me ka hoʻokuʻu ns-3.29, hiki ke hoʻohana ʻia e kiʻi i nā ʻāpana no kēlā hoʻokuʻu ʻana o ns-3 a i ʻole ma mua, akā ʻaʻole hiki ke hoʻohana ʻia e kiʻi i nā ʻāpana no nā hoʻokuʻu hope (inā ʻo ka faila wehewehe ʻana bakeconf.xml ʻaʻole i hōʻano hou ʻia).

Hiki iā ʻoe ke kiʻi i ke kope hou loa kukema ke komo ʻana i kēia kauoha i kāu console Linux (manaʻo ʻoe ua hoʻokomo ʻo Git):

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

Ke holo ʻoe i ke kauoha git, pono ʻoe e ʻike i kahi mea e like me kēia:

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.

Ma hope o ka pau ʻana o ke kauoha clone pono iā ʻoe kahi papa kuhikuhi kuke, ʻo nā mea i loko e like me kēia:

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

E hoʻomaopopo ua hoʻouka ʻoe i kekahi mau palapala Python, kahi module Python i kapa ʻia kuke a me kahi faila hoʻonohonoho XML. ʻO ka hana aʻe e hoʻohana i kēia mau palapala e hoʻoiho a kūkulu i ka mahele ns-3 o kāu koho. Loaʻa kekahi mau pahuhopu hoʻoponopono:

  1. ns-3.29: module e pili ana i ka hookuu ana; e hoʻoiho i nā mea like me ka hoʻokuʻu ʻana i ka tarball;

  2. ns-3-dev: he modula like, akā e hoʻohana ana i ke code mai ka lāʻau hoʻomohala;

  3. ns-allinone-3.29: He module e komo pū ana me nā hiʻohiʻona ʻē aʻe e like me Click routing a me Network Simulation Cradle, Openflow no ns-3.

  4. ns-3-allinone: like me ka mana hoʻokuʻu o ka module allinone, akā no ka code hoʻomohala.

i hoʻopuka
Bus — hoʻolālā polokalamu modular no ka hana ʻana i nā mea ala.

ʻO Openflow kahi protocol no ka mālama ʻana i ke kaʻina hana o ka ʻikepili i hoʻouna ʻia ma luna o kahi pūnaewele ʻikepili e nā mea ala a me nā hoʻololi, e hoʻokō ana i ka ʻenehana pūnaewele i wehewehe ʻia e ka polokalamu.

Hiki ke loaʻa ka snapshot hoʻomohala o kēia manawa (non-release) ns-3 ma:https://gitlab.com/nsnam/ns-3-dev.git.

Ke ho'āʻo nei nā mea hoʻomohala e mālama i kēia mau waihona i kahi papa hana maʻamau, akā aia lākou i ka wahi hoʻomohala a loaʻa i nā code unreleased, no laila inā ʻaʻole ʻoe e hoʻolālā e hoʻohana i nā hiʻohiʻona hou, a laila koho i ka hoʻokuʻu mana.

Hiki iā ʻoe ke loaʻa ka mana hou o ke code ma ka nānā ʻana i ka papa inoa o nā waihona, a i ʻole ma ka hele ʻana i ka ʻaoʻao pūnaewele ns-3 Releases:https://www.nsnam.org/releases/ a e kaomi ana i ka loulou mana hou loa. Ma kēia hiʻohiʻona e hoʻomau mākou me ns-3.29.

I kēia manawa, e kiʻi i nā mea ns-3 e pono ai mākou, e hoʻohana mākou i ka mea hana kalua. E ʻōlelo kākou i kekahi mau ʻōlelo hoʻolauna e pili ana i ka hana kalua.

Hana ʻia ka Bake ma ka hoʻouka ʻana i nā kumu puna i loko o kahi papa kuhikuhi kahi a hoʻokomo i nā hale waihona puke i loko o ka papa kuhikuhi kūkulu. kalua hiki ke holo ma ke kuhikuhi ʻana i ka binary, akā inā makemake ʻoe e holo kalua ʻaʻole mai ka papa kuhikuhi i hoʻoiho ʻia, pono e hoʻohui i ke ala i kuke i kou ala (PATH environment variable), no ka laʻana penei (laʻana no ka Linux bash shell). E hele i ka papa kuhikuhi "Bake" a laila hoʻonohonoho i nā ʻano hoʻololi kaiapuni:

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

E waiho kēia i ka papahana bake.py i ke ala shell a e ʻae i nā polokalamu ʻē aʻe e ʻimi i nā mea hoʻokō a me nā hale waihona puke āna i hana ai kuke. I kekahi mau hihia hoʻohana kuke, ʻaʻole koi ʻia ka hoʻonohonoho PATH a me PYTHONPATH i hōʻike ʻia ma luna, akā pono ke kūkulu piha ʻana o ns-3-allinone (me nā pūʻolo hou aku).

E hele i kāu papa kuhikuhi hana a hoʻokomo i kēia i loko o ka console:

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

A laila e nīnau mākou kalua e nānā inā lawa kā mākou mea hana e hoʻouka ai i nā ʻāpana like ʻole. Kāhea:

$ ./bake.py check

Pono ʻoe e ʻike i kahi mea e like me kēia:

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

ʻO ka mea kūikawā, pono ka hoʻouka ʻana i nā mea hana e like me Mercurial, CVS, Git a me Bazaar i kēia kaʻina no ka mea e ʻae iā mākou e kiʻi i ke code. I kēia manawa, e hoʻokomo i nā mea hana i nalowale ma ke ʻano maʻamau no kāu ʻōnaehana (inā ʻike ʻoe pehea) a i ʻole e kelepona i kāu luna hoʻonohonoho no ke kōkua.

A laila, e hoʻāʻo e hoʻoiho i ka polokalamu:

$ ./bake.py download

ʻO ka hopena e like me:

>> 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 ia ka manaʻo ua hoʻoiho ʻia ʻekolu kumu. I kēia manawa e hele i ka papa kuhikuhi kumu a ʻano ls; Pono ʻoe e ʻike:

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

I kēia manawa ua mākaukau ʻoe e kūkulu i ka mahele ns-3.

3.4 Hui ns-3

E like me ka hoʻoiho ʻana i ka ns-3, nui nā ala e kūkulu ai i ka ns-3. ʻO ka mea nui a mākou e makemake ai e koʻikoʻi, ua kūkulu ʻia ʻo ns-3 me ka hoʻohana ʻana i kahi mea hana i kapa ʻia Wafi wehewehe ʻia ma lalo nei. E hana pū ka hapa nui o nā mea hoʻohana Waf, akā aia kekahi mau palapala maʻalahi e kōkua iā ʻoe e hoʻomaka a hoʻonohonoho i nā kūkulu paʻakikī. No laila e ʻoluʻolu, ma mua o kou heluhelu ʻana Waf, e nana mai build.py a hui pu me kuke.

3.4.1 Kūkulu me build.py

E hoʻomaikaʻi mai! Loaʻa kēia ʻanuʻu kūkulu mai ka mana waihona waihona i loaʻa e like me ka mea i wehewehe ʻia ma luna; ʻaʻole i hoʻoiho ʻia ma o git a i ʻole bake.

Ke hana me kahi waihona hoʻokuʻu kinipōpō hīnaʻi, i loko ns-3-allinone Aia kekahi palapala maʻalahi e hiki ke maʻalahi i ka hui ʻana i nā ʻāpana. Ua kapa ʻia ʻo build.py. E hoʻonohonoho kēia polokalamu i ka papahana no ʻoe ma ke ʻano kūpono loa. Eia naʻe, e hoʻomanaʻo i ka hoʻonohonoho ʻana a me ka hana ʻana me ns-3 maʻamau e pili ana i ka hoʻohana ʻana i ka ʻōnaehana kūkulu ponoʻī o ns-3, ʻo Waf, e hōʻike ʻia ma hope o kēia kumu aʻo.

Inā ʻoe i hoʻoiho me ka hoʻohana ʻana kinipōpō hīnaʻi, a laila ma kāu papa kuhikuhi ~/wahi hana he papa kuhikuhi me ka inoa mea like ns-allinone-3.29. E hookomo i keia:

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

Ke kāhea ʻia build.py Ua hoʻohana mākou i nā manaʻo hoʻopaʻapaʻa laina kauoha e kūkulu i nā hiʻohiʻona a me nā hoʻāʻo i hoʻohana ʻia i kēia kumu aʻo, ʻaʻole i kūkulu ʻia e ka paʻamau ma ns-3. Ma ka maʻamau, kūkulu ka papahana i nā modula āpau i loaʻa. A laila, inā makemake ʻoe, hiki iā ʻoe ke kūkulu i ka ns-3 me ka ʻole o nā hiʻohiʻona a me nā hoʻāʻo, a i ʻole e haʻalele i nā modula ʻaʻole pono no kāu hana.

E ʻike ʻoe i ka nui o nā memo hoʻopuka hōʻuluʻulu i hōʻike ʻia e ka palapala i ke kūkulu ʻana i nā ʻāpana like ʻole āu i hoʻouka ai. E ho'āʻo mua ka ʻatikala e kūkulu i ka animator netanim, a laila ka mīkini hana hoʻopaʻa pybindgen a hope loa ns-3. Ke pau ke kaʻina hana, pono ʻoe e ʻike i kēia:

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

Ma nā laina hope ʻekolu o ka papa inoa ʻike mākou i kahi leka e pili ana i nā modules i kūkulu ʻole ʻia:

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

ʻO ke ʻano o kēia, ʻaʻole i kūkulu ʻia kekahi mau modula ns-3 e hilinaʻi ana i nā hale waihona puke o waho, a ʻaʻole pono lākou e kūkulu ʻia no kēia hoʻonohonoho. ʻAʻole kēia manaʻo ʻaʻole i hui ʻia ka simulator a i ʻole e hana pololei nā modules i hui ʻia.

3.4.2 Kūkulu me ka Bake

Inā ʻoe i hoʻohana i ka bake ma luna e kiʻi i ka code kumu mai nā waihona waihona, hiki iā ʻoe ke hoʻomau i ka hoʻohana ʻana e kūkulu i ka ns-3. Kāhea:

$ ./bake.py build

a pono ʻoe e ʻike i kekahi mea e like me:

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

wikiwiki: Hiki iā ʻoe ke hana i ka hoʻoiho ʻana a kūkulu i nā ʻanuʻu i ka manawa hoʻokahi ma ke kāhea ʻana iā "bake.py deploy".

ʻAʻole hiki ke hōʻuluʻulu ʻia nā ʻāpana āpau, akā e hoʻomau ka hui inā ʻaʻole koi ʻia kahi ʻāpana. No ka laʻana, ʻo ia kahi pilikia portability hou castxml hiki ke hōʻuluʻulu ʻia e ka mea hana kuke ʻaʻole ma nā paepae a pau. I kēia hihia, e ʻike ʻia kahi memo e like me kēia:

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

Eia naʻe, castxml pono wale nō inā makemake ʻoe e hana i nā paʻa Python hou. No ka hapa nui o nā mea hoʻohana, ʻaʻohe pono o kēia (ma ka liʻiliʻi a hiki i ka hoʻololi ʻana i ka ns-3), no laila hiki ke mālama pono ʻia kēlā mau ʻōlelo aʻo i kēia manawa.

Inā hāʻule, e hāʻawi kēia kauoha iā ʻoe i kahi hint e pili ana i nā hilinaʻi nalo:

$ ./bake.py show

E helu ʻia nā hilinaʻi like ʻole o nā pūʻolo āu e hoʻāʻo nei e kūkulu.

3.4.3 Kūkulu me Waf

A hiki i kēia manawa, e hoʻomaka i ke kūkulu ʻana i ka ns-3, ua hoʻohana mākou i ka palapala build.py, a mea paahana kuke. Pono kēia mau mea hana no ke kūkulu ʻana i ka ns-3 a me ka mālama ʻana i nā hale waihona puke. ʻOiaʻiʻo, e kūkulu lākou e holo i ka mea hana kūkulu Waf mai ka papa kuhikuhi ns-3. Waf hoʻokomo ʻia me ka code kumu ns-3. ʻO ka hapa nui o nā mea hoʻohana e neʻe koke i ka hoʻohana pololei ʻana no ka hoʻonohonoho ʻana a hōʻuluʻulu i ka ns‑3 Waf. No laila, e hoʻomau, e ʻoluʻolu e hele i ka papa kuhikuhi ns-3 āu i hana mua ai.

ʻAʻole koi ʻia kēia i kēia manawa, akā pono e hoʻihoʻi iki a ʻike pehea e hoʻololi ai i ka hoʻonohonoho papahana. Malia paha ʻo ka hoʻololi hoʻonohonoho pono loa āu e hana ai, ʻo ia ka hana ʻana i kahi mana o ke code. Ma ka paʻamau, ua hoʻonohonoho ʻoe i kāu papahana e kūkulu i kahi mana debug. E nānā kākou i kahi papahana e hana ai i kūkulu ʻia. No ka wehewehe ʻana iā Waf e hana ʻo ia i nā kūkulu optimized me nā hiʻohiʻona a me nā hoʻāʻo, pono ʻoe e holo i kēia mau kauoha:

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

E hoʻomaka ana kēia Waf ma waho o ka papa kuhikuhi kūloko (no kou ʻoluʻolu). Hoʻomaʻemaʻe ke kauoha mua mai ke kūkulu mua ʻana, ʻaʻole pono kēia, akā he hana maikaʻi ia (e ʻike pū i nā profiles kūkulu ma lalo); e hoʻopau kēia i nā hale waihona puke a me nā faila mea i loaʻa i ka papa kuhikuhi kūkulu/. Ke hoʻonohonoho hou ʻia ka pāhana a nānā ka ʻōnaehana kūkulu i nā hilinaʻi like ʻole, pono ʻoe e ʻike i ka hopena e like me kēia:

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)

E ʻoluʻolu e nānā i ka hapa hope o ka papa inoa ma luna. ʻAʻole hiki ke hoʻohana ʻia kekahi mau koho ns-3 ma ka paʻamau a i ʻole e koi i ke kākoʻo ʻōnaehana e hana pono. No ka laʻana, no ka hiki iā XmlTo, pono ke waiho ʻia ka waihona ma ka ʻōnaehana libxml-2.0. Inā ʻaʻole i loaʻa kēia waihona a ʻaʻole i hoʻohana ʻia ka hana ns-3 pili, e hōʻike ʻia kahi memo. E hoʻomaopopo hoʻi e hiki ke hoʻohana i ke kauoha sudo e hoʻonohonoho i ka bit suid "hoʻonohonoho i ka ID hui i ka manawa holo" no kekahi mau papahana. ʻAʻole hiki ke hoʻohana ʻia e ka paʻamau a no laila ʻike ʻia kēia hiʻohiʻona ma ke ʻano he "ʻaʻole hiki". ʻO ka hope, e kiʻi i kahi papa inoa o nā koho i hiki ke hoʻohana ʻia Waf me ka palena --check-config.

I kēia manawa, e hoʻi kākou a hoʻololi i ka hale debug i loaʻa nā laʻana a me nā hoʻāʻo.

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

Hoʻonohonoho ʻia ka ʻōnaehana kūkulu a hiki iā ʻoe ke kūkulu i nā mana debug o nā polokalamu ns-3 ma ke kaomi wale ʻana:

$ ./waf

Ua koi paha nā ʻanuʻu ma luna iā ʻoe e kūkulu ʻelua ʻāpana o ka ʻōnaehana ns-3, akā i kēia manawa ua ʻike ʻoe pehea e hoʻololi ai i ka hoʻonohonoho a kūkulu i ka code optimized.

No ka nānā ʻana i kahi ʻaoʻao e hana nei no kahi hoʻonohonoho papahana i hāʻawi ʻia, aia kahi kauoha:

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

ʻO ke kūlana i luna build.py kākoʻo hoʻi i nā hoʻopaʻapaʻa --enable-examples и --enable-tests, akā nā koho ʻē aʻe Waf ʻaʻole kākoʻo pololei. No ka laʻana, ʻaʻole e hana kēia:

$ ./build.py --disable-python

e like me keia:

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

Eia naʻe, hiki ke hoʻohana ʻia ka mea hoʻohana kūikawā e hoʻolilo i nā ʻāpana ʻē aʻe ma o alohano laila ma kahi o ka mea i luna aʻe e hana kēia kauoha:

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

no ka mea, hana ia i ke kauoha nui ./waf hoʻonohonoho --disable-python. Eia kekahi mau ʻōlelo hoʻolauna hou e pili ana Waf.

Ka mālama ʻana i nā hewa kūkulu

Hoʻāʻo ʻia nā hoʻokuʻu ns-3 ma nā mea hoʻopili C++ hou loa i loaʻa i ka manawa o ka hoʻokuʻu ʻana ma nā māhele Linux maʻamau a me MacOS. Eia nō naʻe, i ka wā lōʻihi, ua hoʻokuʻu ʻia nā puʻupuʻu hou me nā mea hōʻuluʻulu hou, a ʻoi aku ka manaʻo o kēia mau mea hoʻohui hou e pili ana i nā ʻōlelo aʻo. Hoʻonohonoho ʻo ns-3 i kāna kūkulu ʻana e mālama i nā ʻōlelo aʻo āpau e like me nā hewa, no laila inā e holo ana ʻoe i kahi mana kahiko ma kahi ʻōnaehana hou, hiki i kahi ʻōlelo hōʻuluʻulu ke hoʻōki i ke kūkulu ʻana.

No ka laʻana, aia ma mua kahi hoʻokuʻu o ns‑3.28 no Fedora 28, i loaʻa kahi mana nui hou. gc (gcc-8). Ke kūkulu nei i ka hoʻokuʻu ʻana i ka ns-3.28 a i ʻole nā ​​​​ʻano mua ma lalo o Fedora 28, me Gtk2 + i hoʻokomo ʻia, e hiki mai ana kēia hewa:

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

I nā hoʻokuʻu e hoʻomaka ana mai ns‑3.28.1, in Waf loaʻa kahi koho e hoʻoponopono i kēia mau pilikia. Hoʻopau ia i ka hoʻonohonoho ʻana i ka hae "-Werror" ma g++ a me clang++. ʻO kēia ke koho "--disable-werror" a pono e hoʻohana ʻia i ka wā hoʻonohonoho:

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

Hoʻonohonoho a hui pū

Kekahi mau kauoha Waf Loaʻa ka manaʻo ma ka pae hoʻonohonoho, a kūpono kekahi i ka pae kūkulu. No ka laʻana, inā makemake ʻoe e hoʻohana i nā hiʻohiʻona ns-3 emulation, hiki iā ʻoe ke hoʻololi i ka hoʻonohonoho bit ka hema hoʻohana ʻana sudo, e like me ka mea i hoikeia maluna. E hoʻopau kēia i nā kauoha ʻanuʻu hoʻonohonoho, a no laila hiki iā ʻoe ke hoʻololi i ka hoʻonohonoho ʻana me ka hoʻohana ʻana i kēia kauoha, e komo pū ana me nā hiʻohiʻona a me nā hoʻāʻo.

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

Inā ʻoe e hana i kēia Waf e hoʻolana sudoe hoʻololi i nā polokalamu hana hoʻoheheʻe code emulation e holo me nā ʻae aa. ka Waf Nui nā koho ʻē aʻe i loaʻa no ka hoʻonohonoho ʻana a me ke kūkulu ʻana i nā ʻanuʻu. No ka ʻimi ʻana i kāu mau koho, e komo:

$ ./waf --help

Ma ka ʻāpana aʻe e hoʻohana mākou i kekahi mau koho pili pili.

Nā Hōʻike Hui

Ua ʻike mua mākou pehea ʻoe e hoʻonohonoho ai Waf no na anaina debug и hoʻomākaukau leʻa:

$ ./waf --build-profile=debug

Aia kekahi moʻolelo hui waena, hookuu. Koho -d ua like me --build-profile. Mālama ka ʻaoʻao kūkulu i ka hoʻohana ʻana i ka hoʻohana ʻana i ka logging, assertions, a me nā hoʻololi hoʻonohonoho hoʻonohonoho:

ns-3 pūnaewele simulator kumu aʻo. Mokuna 3

E like me kāu e ʻike ai, ʻike wale ʻia ka hoʻopaʻa inoa ʻana a me nā ʻōlelo hoʻohiki i nā kūkulu debug. ʻO ka hana i ʻōlelo ʻia, ʻo ia ka hoʻomohala ʻana i kāu palapala ma ke ʻano debug, a laila e hana i nā holo hou (no nā helu helu a i ʻole nā ​​hoʻololi hoʻololi) ma kahi ʻaoʻao kūkulu i hoʻopaʻa ʻia.

Inā loaʻa iā ʻoe ke code e holo wale ana i kekahi mau profile kūkulu, e hoʻohana i ka 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;)

Paʻamau, Waf kūkulu nā wahi i nā mea waiwai ma ka papa kuhikuhi kūkulu. Hiki iā ʻoe ke kuhikuhi i kahi papa kuhikuhi puka ʻokoʻa me ka hoʻohana ʻana i ke koho - -outno ka laʻana:

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

Ma ka hoʻohui ʻana i kēia me nā profiles kūkulu, hiki iā ʻoe ke hoʻololi maʻalahi i waena o nā koho compilation like ʻole:

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

Hiki iā ʻoe ke hana me nā hui lehulehu me ka ʻole e kākau hou i ka hui hou i kēlā me kēia manawa. Ke hoʻololi ʻoe i kahi ʻaoʻao ʻē aʻe, Waf e hōʻuluʻulu wale ia, me ka hoʻohui ʻole ʻana i nā mea a pau.

Ke hoʻololi ʻoe i ke kūkulu ʻana i nā profiles ma kēia ʻano, pono ʻoe e makaʻala e hāʻawi i nā koho hoʻonohonoho like i kēlā me kēia manawa. ʻO ka wehewehe ʻana i nā ʻano hoʻololi kaiapuni e kōkua iā ʻoe e pale i nā hewa:

$ 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

Nā mea hōʻuluʻulu a me nā hae

Ma na laana maluna Waf e kūkulu i ka ns-3 e hoʻohana i ka C++ compiler mai GCC ( g ++). Eia naʻe, hiki iā ʻoe ke hoʻololi i ka mea āu e hoʻohana ai Waf C++ compiler, ma ka wehewehe ʻana i ka hoʻololi kaiapuni CXX. No ka laʻana, e hoʻohana i ka C ++ compiler Clang, clang++,

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

Ma ke ala like hiki iā ʻoe ke hoʻonohonoho Waf e hoʻohana i ka hoʻopili puʻupuʻu me ka hoʻohana ʻana distcc:

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

Hiki ke loaʻa ka ʻike hou aʻe e pili ana i ka distcc a me ka hui pū ʻana ma ka ʻaoʻao papahana ma ka ʻāpana palapala. No ka hoʻohui ʻana i nā hae hōʻuluʻulu i ka wā e hoʻonohonoho ai i ka ns-3, e hoʻohana i ka hoʻololi kaiapuni CXXFLAGS_EXTRA.

Kāu Mau Koho Paʻamau

Waf hiki ke hoʻohana ʻia e hoʻokomo i nā hale waihona puke ma nā wahi like ʻole ma ka ʻōnaehana. Ma ka maʻamau, aia nā hale waihona puke a me nā mea hoʻokō i ka papa kuhikuhi hana, a ʻoiai ʻike ʻo Waf i kahi o kēia mau hale waihona puke a me nā mea hoʻokō, ʻaʻohe pono e hoʻokomo i nā hale waihona puke ma nā wahi ʻē aʻe.

Inā makemake nā mea hoʻohana e hoʻokomo ma waho o ka papa kuhikuhi kūkulu, hiki iā lākou ke holo i ke kauoha ./waf e hoʻouka. ʻO ka prefix paʻamau no ka hoʻokomo ʻana / usr / kūlokoʻo ia ke kumu ./waf e hoʻouka e hoʻokomo i nā polokalamu i loko / usr / ka 'āpana / bin, hale waihona puke ma / usr / local / lib a me nā faila poʻomanaʻo ma /usr/local/include. Pono e hoʻonohonoho pono ʻia nā kuleana Superuser me kahi prefix paʻamau, no laila ke kauoha maʻamau sudo ./waf hoʻokomo. Ke hoʻokuʻu ʻia, e koho mua ʻo Waf e hoʻohana i nā hale waihona puke i ka papa kuhikuhi kūkulu, a laila e ʻimi i nā hale waihona puke ma ke ala i nā hale waihona puke i hoʻonohonoho ʻia ma ke kaiapuni kūloko. No laila, i ka hoʻokomo ʻana i nā hale waihona puke ma kahi ʻōnaehana, he hana maikaʻi ia e nānā i ka hoʻohana ʻia ʻana o nā hale waihona puke kūpono. Hiki i nā mea hoʻohana ke koho e hoʻokomo me kahi prefix ʻē aʻe ma ka hāʻawi ʻana i ke koho i ka wā hoʻonohonoho --prefixno ka laʻana:

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

Inā ma hope, ma hope o ke kūkulu ʻana, komo ka mea hoʻohana i ke kauoha hoʻonohonoho ./waf, e hoʻohana ʻia ka prefix /opt/local.

hui ./waf clean pono e hoʻohana ʻia ma mua o ka hoʻonohonoho hou ʻana i ka papahana inā e hoʻohana ka hoʻonohonoho Waf malalo o kekahi prefix okoa.

No laila, no ka hoʻohana ʻana i ka ns-3 ʻaʻohe pono e kāhea ./waf install. ʻAʻole pono ka hapa nui o nā mea hoʻohana i kēia kauoha no ka mea Waf e kiʻi i nā hale waihona puke o kēia manawa mai ka papa kuhikuhi kūkulu, akā ʻike paha kekahi mau mea hoʻohana i kēia pono inā pili kā lākou mau hana i ka hana ʻana me nā papahana ma waho o ka papa kuhikuhi ns-3.

Waf hoʻokahi

Ma ka pae kiʻekiʻe o ka kumu kumu kumu ns-3, hoʻokahi wale nō palapala Waf. Ke hoʻomaka ʻoe e hana, e hoʻolilo ʻoe i ka manawa nui ma ka papa kuhikuhi scratch/ a hohonu pahasrc/... a ma ka manawa like e pono e holo Waf. Hiki iā ʻoe ke hoʻomanaʻo i hea ʻoe a holo Waf penei:

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

akā, e lilo ana kēia i mea paʻakikī a me ka hewa, no laila aia nā ʻoi aku ka maikaʻi. ʻO kekahi ala maʻamau ka hoʻohana ʻana i kahi hoʻoponopono kikokikona e like me emacs ai ole ia, vim, kahi i wehe ʻia ai ʻelua mau kau palena, hoʻohana ʻia kekahi e kūkulu i ka ns-3, a hoʻohana ʻia ka lua e hoʻoponopono i ke code kumu. Inā loaʻa iā ʻoe kinipōpō hīnaʻi, a laila hiki i kahi ʻano hoʻololi kaiapuni ke kōkua:

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

$ cd scratch 
$ waff build

Ma ka papa kuhikuhi module he mea hoʻowalewale e hoʻohui i kahi palapala waf liʻiliʻi e like me exec ../../waf. E ʻoluʻolu, mai hana ʻoe pēlā. Pilikia kēia no nā poʻe hou a, inā hana maikaʻi ʻole, alakaʻi i nā hewa kūkulu paʻakikī. ʻO nā haʻina i hōʻike ʻia ma luna nei ke ala e hoʻohana ai.

3.5 Hoao ns-3

Hiki iā ʻoe ke holo i nā hoʻāʻo ʻāpana ns-3 ma ka holo ʻana i ka palapala ./test.py:

$ ./test.py

Holo like kēia mau hoʻokolohua me Waf. I ka hopena, pono ʻoe e ʻike i kahi memo e ʻōlelo ana:

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

He leka koʻikoʻi kēia no ka ʻike ʻana i nā pōʻino valgrind, nā ulia a i ʻole nā ​​​​hewa, e hōʻike ana i nā pilikia me ke code a i ʻole ka like ʻole ma waena o nā mea hana a me nā code.

E ʻike ʻoe i ka hopena hope loa mai Waf a me kahi mea hoʻāʻo e holo ana i kēlā me kēia hoʻāʻo, e like me kēia:

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)

Hoʻohana pinepine ʻia kēia kauoha e nā mea hoʻohana e hōʻoia koke i ka kūkulu ʻia ʻana o ka māhele ns-3 pololei. (E hoʻomaopopo he ʻokoʻa paha ka hoʻonohonoho ʻana o nā laina "PASS: ...", he mea maʻamau kēia. A Wafa test.py e hoʻohālikelike i ka hana ma waena o nā core processor i loaʻa o ka mīkini.

3.6 Holo i ka palapala

Holo mākou i nā palapala ma lalo o ka mana Waf. ʻAe kēia i ka ʻōnaehana kūkulu e hōʻoia i ka hoʻonohonoho pono ʻana o nā ala waihona waihona a loaʻa nā hale waihona puke i ka wā holo. No ka holo ʻana i ka polokalamu, e hoʻohana wale Waf me ka palena - -run. E holo kāua i ka like ns-3 o ka papahana ubiquitous hola aoma ke kākau ʻana i kēia:

$ ./waf --run hello-simulator

E nānā mua ʻo Waf ua kūkulu pololei ʻia ka papahana a kūkulu ʻia inā pono. A laila Waf e hoʻokō i kahi papahana e hoʻopuka i ka hopena aʻe.

Hello Simulator

Hoʻomaikaʻi! He mea hoʻohana ns-3 ʻoe i kēia manawa!

He aha kaʻu e hana ai inā ʻaʻole au i ʻike i nā hopena?

Inā ʻike ʻoe i nā memo Wafe hōʻike ana ua hoʻopau maikaʻi ke kūkulu ʻana, akā ʻaʻole ʻoe e ʻike i ka hopena "Aloha Simulator", a laila aia paha ma ka ʻāpana [Build-with-Waf] ua hoʻololi ʻoe i kāu ʻano hana i hoʻomākaukau leʻa, akā ua hala ka hoʻololi ʻana i ke ʻano debug. Hoʻohana ʻia nā huahana console āpau i hoʻohana ʻia i kēia kumu aʻo i kahi ʻāpana ns-3 kūikawā e hana i ka logging a hoʻohana ʻia e paʻi i nā leka maʻamau i ka console. Hoʻopau ʻia ka hoʻopuka ʻana mai kēia ʻāpana i ka wā e hōʻuluʻulu ʻia ai nā code optimized - ua "optimized". Inā ʻaʻole ʻoe e ʻike i ka hopena "Hello Simulator", e hoʻokomo i kēia:

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

e hoʻonohonoho Waf e kūkulu i nā mana debug o nā polokalamu ns-3, i loaʻa nā hiʻohiʻona a me nā hoʻāʻo. A laila pono ʻoe e kūkulu hou i ka mana debug o kēia manawa ma ke kākau ʻana

$ ./waf

I kēia manawa inā holo ʻoe i ka polokalamu aloha-simulator, pono ʻoe e ʻike i ka hopena i manaʻo ʻia.

3.6.1 Nā hoʻopaʻapaʻa laina kauoha

No ka hāʻawi ʻana i nā manaʻo hoʻopaʻapaʻa laina kauoha i ka polokalamu ns-3, e hoʻohana i kēia ʻano:

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

E hoʻololi i me ka inoa o kāu polokalamu a me nā hoʻopaʻapaʻa. Hoʻopaʻapaʻa - -command-template no ka mea, Waf he mea ʻai no ke kūkulu ʻana i ka laina kauoha maoli Waf hoʻohana ʻia e hoʻokō i ka papahana. Nānā ʻo Waf i ka pau ʻana o ke kūkulu ʻana, hoʻonohonoho i nā ala waihona waihona, a laila hoʻohana i ka template laina kauoha i hāʻawi ʻia a hoʻololi i ka inoa o ka papahana no ka %s placeholder e kāhea i ka mea hoʻokō. Inā ʻike ʻoe i ka paʻakikī o kēia syntax, aia kahi mana maʻalahi e pili ana i ka polokalamu ns-3 a me kāna mau hoʻopaʻapaʻa i hoʻopaʻa ʻia i nā huaʻōlelo hoʻokahi:

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

ʻO kekahi hiʻohiʻona maikaʻi ʻē aʻe ʻo ka holo ʻana i nā suite test ma ke koho. E noʻonoʻo kākou aia kahi papa hoʻāʻo i kapa ʻia ʻo mytest (ʻoiaʻiʻo ʻaʻole). Ma luna aʻe, ua hoʻohana mākou i ka ./test.py script e holo i nā hoʻokolohua like ʻole, e kāhea pinepine ana i ka papahana hoʻāʻo. mea holo hoao. Kāhea mea holo hoao pololei e holo i hoʻokahi hoʻokolohua:

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

E hāʻawi ʻia nā hoʻopaʻapaʻa i ka papahana mea holo hoao. No ka loaʻa ʻole o ka mytest, e hana ʻia kahi memo hewa. No ka paʻi ʻana i nā koho hoʻāʻo i loaʻa, e komo:

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

3.6.2 Debugging

No ka holo ʻana i nā polokalamu ns-3 ma lalo o nā pono ʻē aʻe, e like me kahi debugger (e laʻa, gdb) a i ʻole kekahi mea hana hoʻāʻo hoʻomanaʻo (no ka laʻana, valgrind), hoʻohana i kahi ʻano like - -command-template = "…". No ka laʻana, e holo i ka debugger gdb kāu polokalamu hello-simulator ns-3 me nā hoʻopaʻapaʻa:

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

E hoʻomaopopo e hele mai ka inoa papahana ns-3 me ka hoʻopaʻapaʻa - -run, a me ka pono hoʻokele (eia gdb) ka hōʻailona mua ma ka hoʻopaʻapaʻa - -command-template. Koho - -args hōʻike gdbaia ke koena o ka laina kauoha i ka papahana "lalo". (Kekahi mau mana gdb ʻaʻole maopopo i ke koho - -args. I kēia hihia, e wehe i nā kumu hoʻopaʻapaʻa papahana mai - -command-template a hoʻohana i ka hoʻonohonoho kauoha gdb ke kumu.) Hiki iā mākou ke hoʻohui i kēia meaʻai a me ka mea mua e holo i ka hoʻāʻo ma lalo o ka debugger:

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

3.6.3 Papa kuhikuhi hana

Pono e hoʻokuʻu ʻia ʻo Waf mai kona wahi ma luna o ka lāʻau ns-3. Lilo kēia waihona i papa kuhikuhi hana kahi e kākau ʻia ai nā faila. Akā pehea inā makemake ʻoe e mālama i kēia mau faila ma waho o ka kumu kumu kumu ns-3? E hoʻohana i ka hoʻopaʻapaʻa - -cwd:

$ ./waf --cwd=...

Hiki iā ʻoe ke ʻoi aku ka maʻalahi o ka loaʻa ʻana o nā faila ma kāu papa kuhikuhi hana. I kēia hihia, hiki ke kōkua i kēia mau hana kūwaho:

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

Mālama kēia hoʻonani o ka mana mua o ke kauoha i ka papa kuhikuhi hana o kēia manawa, hele i ka papa kuhikuhi Wafa laila kuhikuhi Waf e hoʻololi i ka papa kuhikuhi hana i ka papa kuhikuhi hana i mālama ʻia ma mua o ka hoʻomaka ʻana i ka papahana. 'Ōlelo mākou i ka hui - -cwd No ka hoʻopiha piha ʻana, holo wale ka hapa nui o nā mea hoʻohana iā Waf mai ka papa kuhikuhi kiʻekiʻe a hoʻopuka i nā faila puka ma laila.

Hoʻomau ʻia: Mokuna 4

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka