ns-3 inethiwekhi yokulinganisa isifundo. Isahluko sesi-3

ns-3 inethiwekhi yokulinganisa isifundo. Isahluko sesi-3
isahluko 1,2

3 Ukuqalisa
3.1 Isishwankathelo
3.2 Izinto ezifunekayo kuqala
3.2.1 Ukhuphela ukhupho lwe-ns-3 njengovimba womthombo
3.3 Kuthotywa umthwalo we-ns-3 usebenzisa i-Git
3.3.1 Ilayisha i-ns-3 usebenzisa i-Bake
3.4 INdibano ns-3
3.4.1 Ukwakha nge-build.py
3.4.2 Ukwakha ngeBake
3.4.3 Yakha ngeWaf
3.5 Uvavanyo ns-3
3.6 Ukuqhuba iscript
3.6.1 Iingxoxo zemigca yomyalelo
3.6.2 Ukulungisa ingxaki
3.6.3 Uluhlu olusebenzayo

Isahluko 3

Ndiyaqalisa

Esi sahluko sijonge ukulungiselela umfundi ukuba aqale ngekhompyutha ekusenokwenzeka ukuba ayizange ifake i-ns-3. Iquka amaqonga axhaswayo, izinto ezifunekayo, indlela yokufumana i-ns-3, indlela yokwakha i-ns-3, kunye nendlela yokuvavanya ukwakha kwakho kunye nokuqhuba iinkqubo ezilula.

3.1 Isishwankathelo

Isifanisi se-ns-3 sakhiwe njengenkqubo yeelayibrari zesoftware ezisebenzisanayo. Ngexesha lendibano, ikhowudi yeenkqubo zabasebenzisi idityaniswe nala mathala eencwadi. Iilwimi zeC ++ okanye zePython zisetyenziselwa ukubhala iinkqubo zesiko.

I-Ns-3 ihanjiswa njengekhowudi yomthombo, okuthetha ukuba inkqubo ekujoliswe kuyo kufuneka ibe nemeko yophuhliso lwesoftware ukuze kwakhiwe kuqala amathala eencwadi kwaye emva koko kwakhiwe inkqubo yomsebenzisi. Ngokomgaqo, i-ns-3 inokusasazwa njengamathala eencwadi esele enziwe ngenkqubo ethile, kwaye kwixesha elizayo anokuhanjiswa ngale ndlela. Kodwa kule mihla abasebenzisi abaninzi benza umsebenzi wabo ngokuhlela i-ns-3 ngokwayo, kuluncedo ukuba nekhowudi yemvelaphi yokwakha amathala eencwadi. Ukuba nabani na ongathanda ukuthatha umsebenzi wokudala iilayibrari esele zenziwe kunye neepakethe zeendlela zokusebenza, nceda uqhagamshelane noluhlu lokuposa. ns-abaphuhlisi.

Okulandelayo, siza kujonga iindlela ezintathu zokukhuphela kunye nokwakha i-ns-3. Eyokuqala kukukhuphela kunye nokwakha ukukhululwa ngokusemthethweni kwindawo ephambili. Okwesibini kukukhethwa kunye nokuhlanganiswa kweekopi zeenguqulelo zophuhliso lwesiseko se-ns-3 ukufakela. Okwesithathu kukusebenzisa izixhobo ezongezelelweyo zokwakha ukulayisha izandiso ezininzi ze-ns-3. Siza kudlula nganye kuba izixhobo zahluke kancinane.

Abasebenzisi beLinux abanamava banokuzibuza ukuba kutheni i-ns-3 ingabonelelwanga njengepakethe njengamanye amathala eencwadi asebenzisa umphathi wepakethe? Nangona kukho iipakethe zokubini zonikezelo lweLinux olwahlukeneyo (umzekelo, iDebian), uninzi lwabasebenzisi baphela behlela amathala eencwadi kwaye kufuneke baphinde bakhe i-ns-3 ngokwabo, ke ukuba nekhowudi yemvelaphi ekhoyo kuluncedo. Ngenxa yesi sizathu, siya kugxila ekufakeni ukusuka kumthombo.

Kwizicelo ezininzi ns-3 amalungelo Ingcambu ayidingeki, kuyacetyiswa ukuba usebenzise iakhawunti yomsebenzisi engafanelekanga.

3.2 Izinto ezifunekayo kuqala

Iseti yonke yeelayibrari ezifumanekayo ze-ns-3 zinenani lokuxhomekeka kumathala eencwadi eqela lesithathu, kodwa ubukhulu becala i-ns-3 inokwakhiwa kwaye isetyenziswe ngenkxaso kumacandelo amaninzi aqhelekileyo (ahlala efakwe ngokungagqibekanga): umqokeleli we-C++, I-Python, umhleli wekhowudi yomthombo (umzekelo, vΓ­m, emacs okanye eclipse) kwaye, ukuba amaziko ophuhliso asetyenziswa, iinkqubo zolawulo loguqulelo lweGit. Uninzi lwabasebenzisi bexesha lokuqala abayi kufuna ukuba nexhala ukuba uqwalaselo lwabo lunika ingxelo ye-ns-3 yeempawu eziphambili ezingekhoyo, kodwa kwabo bafuna ufakelo olupheleleyo, iprojekthi ibonelela nge-wiki ebandakanya amaphepha aneengcebiso ezininzi kunye namaqhinga. Elinye iphepha elinjalo liphepha loFakelo, elinemiyalelo yokuhlohla yeendlela ezahlukeneyo, ekhoyo: https://www.nsnam.org/wiki/Installation.

Icandelo le-Prerequisites lale wiki lichaza ukuba zeziphi iipakethe ezifunekayo ukuxhasa iinketho eziqhelekileyo ze-ns-3 kwaye ibonelela ngemiyalelo esetyenziselwa ukuzifaka kwiincasa eziqhelekileyo zeLinux okanye zeMacOS.

Unokusebenzisa eli thuba lokuphonononga iphepha le-ns-3 wiki okanye iwebhusayithi ephambili: https://www.nsnam.org, kuba kukho ulwazi oluninzi apho. Ukuqala ngoguqulelo lwamva nje lwe-ns-3 (ns-3.29), ezi zixhobo zilandelayo ziyafuneka ukuqhuba u-ns-3:

Ipakethe yesixhobo/uguqulelo

  • C++ umqokeleli
    clang++ okanye g++ (g++ version 4.9 okanye ngaphezulu)
  • Python
    python2 version >= 2.7.10, okanye python3 version >=3.4
  • Git
    naluphi na uhlobo lwamva nje (ukufikelela ku-ns-3 kwi-GitLab.com)
  • ithala
    naluphi na uhlobo lwamva nje (lokukhulula ukhupho lwe-ns‑3)
  • bunzip2
    naluphi na uhlobo lwamva nje (lokukhulula ukhupho lwe-ns-3)

Ukujonga inguqulelo engagqibekanga yePython, chwetheza python -V. Ukukhangela uguqulelo lwe-g++, chwetheza g++ -v. Ukuba naziphi na izixhobo ezilahlekileyo okanye ezindala kakhulu, nceda ubhekisele kwisikhokelo sofako kwiphepha le-ns-3 wiki.

Ukusukela kweli nqanaba ukuya phambili, sicinga ukuba umfundi usebenzisa iLinux, iMacOS, okanye i-emulator yeLinux, kwaye ubuncinci izixhobo ezingentla.

3.2.1 Ukhuphela ukhupho lwe-ns-3 njengovimba womthombo

Eli linyathelo lesenzo somsebenzisi omtsha ofuna ukukhuphela kunye nokulinga ukukhutshwa kwamva nje kunye neenguqulelo zephakheji ye-ns-3. Ukukhutshwa kwe-ns-3 kupapashwa njengoovimba bemithombo ecinezelweyo, ngamanye amaxesha kuthiwa Itarball. Itarball yifomati ekhethekileyo yogcino lwesoftware apho iifayile ezininzi zidityaniswe kunye. Uvimba uqhele ukucinezelwa. ns-3 inkqubo yokuqalisa nge Itarball ilula, kufuneka ukhethe ukhupho, ukhuphele kwaye uyikhuphe.

Masicinge ukuba wena, njengomsebenzisi, ufuna ukwakha i-ns-3 kulawulo lwasekhaya olubizwa indawo yokusebenza. Ungafumana ikopi esebenzayo yokhupho ngokungenisa oku kulandelayo kwi Linux console (ukutshintsha amanani afanelekileyo oguqulelo, kunjalo)

$ 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 

Nika ingqalelo kuncedo olusetyenziswe ngasentla wget, esisisixhobo somgca womyalelo wokukhuphela izinto kwi-Intanethi. Ukuba awukayifaki, ungasebenzisa isikhangeli sakho koku.

Ukulandela la manyathelo kuyakusa kulawulo lwe-ns-allinone-3.29, apho kufuneka ubone iifayile ezininzi kunye nabalawuli.

$ 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

Ngoku ulungele ukwakha isiseko se-ns-3 yokusabalalisa kwaye ungaqhubela phambili kwicandelo lokwakha i-ns-3.

3.3 Kuthotywa umthwalo we-ns-3 usebenzisa i-Git

Ikhowudi ye-ns-3 iyafumaneka koovimba beGit kwi-GitLab.com apha https://gitlab.com/nsnam/. Iqela nsnam izisa kunye oovimba abahlukeneyo abasetyenziswa yiprojekthi yomthombo ovulekileyo.

Eyona ndlela ilula yokuqalisa ukusebenzisa oovimba beGit kukufowuna okanye ukulinganisa okusingqongileyo ns-3-allinone. Olu luhlu lwemibhalo elawula ulayisho kunye nendibano yeendlela ezisezantsi ezisetyenziswa ns-3. Ukuba umtsha kwi-Git, amagama athi "ifolokhwe" kunye ne "clone" asenokuba awuqhelananga nawe; ukuba kunjalo, sicebisa ukuba udibanise (uzenzele eyakho ikopi) indawo yokugcina ebekwe kwi-GitLab.com ngolu hlobo:

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

Kweli nqanaba, imboniselo yesikhombisi sakho ns-3-allinone yahluke kancinane kukhupho lovimba ochazwe ngasentla. Ifanele ibukeke ngolu hlobo:

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

Nceda uqaphele ukuba kukho iskripthi Khuphela.py, eya kukhupha i-ns-3 kunye nekhowudi yomthombo ehamba kunye. Apha unokhetho: mhlawumbi ukhuphele umfanekiso okhawulezayo wophuhliso we-ns-3:

$ python download.py

okanye khetha ukhupho lwe-ns-3 usebenzisa iflegi -n ukubonisa inombolo yokukhupha:

$ python download.py -n ns-3.29

Emva kweli nyathelo ukuya kulawulo ns-3-allinone iindawo zokugcina ezongezelelweyo ziya kukhutshelwa ns-3, bhaka, pybindgen ΠΈ netanim.

Qaphela:
Kumatshini ococekileyo Ubuntu16.04, bekufuneka nditshintshe umyalelo kule nto: $ sudo python3 download.py -n ns-3.29 (amanqaku omguquli emva koku).

3.3.1 Ilayisha i-ns-3 usebenzisa i-Bake

Ezi ndlela zimbini zingentla (uvimba womthombo okanye indawo yokugcina ns-3-allinone ngeGit) ziluncedo ekufumaneni eyona ilula ns-3 ufakelo ngeeaddon ezininzi(pybindgen ukuvelisa izibophelelo zePython kunye netanim ukwenzela oopopayi bothungelwano). Indawo yesithathu enikwe ngokungagqibekanga kwi-ns-3-allinone ibizwa ngokuba bhaka.

Bhaka sisixhobo solwakhiwo olulungelelanisiweyo lwesoftware esuka koovimba abaninzi, ephuhliselwe iprojekthi ye-ns-3. Bhaka ingasetyenziselwa ukufumana iinguqulelo zophuhliso lwe-ns-3, kunye nokukhuphela kunye nokwakha izandiso zoguqulelo olusisiseko lonikezelo lwe-ns-3, olufana nokusingqongileyo. Ukuphunyezwa kweKhowudi ngokuthe ngqo, CradleNetwork Simulation Cradle, ukukwazi ukwenza izibophelelo ezintsha zePython kunye neentlobo ezahlukeneyo ze-ns-3 "ii-apps".

Qaphela:
I-CradleNetwork Simulation Cradle yinkqubo-sikhokelo ekuvumela ukuba usebenzise i-TCP/IP yokwenyani izitaki zenethiwekhi ngaphakathi kwe-simulator yenethiwekhi.

Ukuba ulindele ukuba ufakelo lwakho lwe-ns-3 lubeneempawu eziphambili okanye ezongezelelweyo, ungalandela le ndlela yokuhlohla.

Kukhupho lwamva nje lwe-ns-3 Bhaka yongezwa ekukhululweni kwetela. Ukukhutshwa kubandakanya ifayile yoqwalaselo ekuvumela ukuba ukhuphele iinguqulelo zesoftware yangoku ngexesha lokukhutshwa. Oko kukuthi, umzekelo, inguqulelo Bhaka, esasazwa ngokukhutshwa kwe-ns-3.29, ingasetyenziselwa ukubuyisela amacandelo okukhutshwa kwe-ns-3 okanye ngaphambili, kodwa ayinakusetyenziselwa ukubuyisela amacandelo okukhutshwa kamva (ukuba ifayile yenkcazo yephakheji bakeconf.xml ayihlaziywanga).

Unokufumana ikopi yamva nje bhakangokungenisa lo myalelo ulandelayo kwiLinux console yakho (ucinga ukuba uneGit efakiweyo):

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

Xa uqhuba umyalelo we-git, kuya kufuneka ubone into efana nale ilandelayo:

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.

Emva kokuba umyalelo ugqityiwe Clone Kuya kufuneka ube novimba weefayili onegama bhaka, imixholo ekufuneka ijongeke ngolu hlobo:

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

Qaphela ukuba ulayishe izikripthi ezininzi zePython, imodyuli yePython enegama bhaka kunye nefayile yoqwalaselo ye-XML. Inyathelo elilandelayo kukusebenzisa ezi scripts ukukhuphela kunye nokwakha unikezelo lwe-ns-3 olukhethileyo. Iithagethi ezininzi zohlengahlengiso ziyafumaneka:

  1. ns-3.29: imodyuli ehambelana nokukhululwa; iya kukhuphela amacandelo afana nokukhululwa kwi-tarball;

  2. ns-3-dev: imodyuli efanayo, kodwa usebenzisa ikhowudi esuka kumthi wophuhliso;

  3. ns-allinone-3.29: Imodyuli equka ezinye iimpawu ezongezelelweyo ezifana Cofa umzila kunye neNethiwekhi yokulinganisa iCradle, i-Openflow ye-ns-3.

  4. ns-3-allinone: iyafana kuguqulelo lokukhululwa lwemodyuli zonke kwenye, kodwa ikhowudi yophuhliso.

Qaphela:
nqakraza -Imodyuli yoyilo lwesoftware yokudala iirotha.

I-Openflow yiprotocol yokulawula inkqubo yokucubungula idatha ehanjiswe kwinethiwekhi yedatha ngama-routers kunye nokutshintsha, ukuphumeza i-software-defined network technology.

Isifinyezo sangoku sophuhliso (esingakhutshwa) ns-3 sinokufumaneka apha:https://gitlab.com/nsnam/ns-3-dev.git.

Abaphuhlisi bazama ukugcina ezi zigcino ngendlela yokusebenza ehambelanayo, kodwa zikwindawo yophuhliso kwaye ziqulethe ikhowudi engabonakaliyo, ngoko ke ukuba awucwangcisi ukusebenzisa iimpawu ezintsha, khetha ukukhululwa ngokusemthethweni.

Ungafumana inguqulelo yamva nje yekhowudi ngokukhangela kuluhlu lweendawo zokugcina, okanye ngokuya kwi ns-3 Khupha iphepha lewebhu:https://www.nsnam.org/releases/ kwaye ucofa ikhonkco loguqulelo lwamva nje. Kulo mzekelo siza kuqhubeka ngo-ns-3.29.

Ngoku, ukufumana izinto ze-ns-3 esizifunayo, siya kusebenzisa isixhobo Bhaka. Masithethe amagama ambalwa entshayelelo malunga nomsebenzi Bhaka.

Bhaka imisebenzi ngokulayisha imithombo yempahla kulawulo umthombo kunye nokufaka iilayibrari kuluhlu lokwakha. Bhaka ingaqhutywa ngereferensi yokubini, kodwa ukuba ufuna ukuqhuba Bhaka hayi kulawulo apho ikhutshelwe khona, kuyacetyiswa ukongeza umendo ukuya bhaka kumendo wakho (UMANDLA oguquguqukayo wokusingqongileyo), umzekelo ngolu hlobo lulandelayo (umzekelo weqokobhe le-Linux bash). Yiya kuluhlu lwe "bake" kwaye emva koko usete okuguquguqukayo kwemeko-bume elandelayo:

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

Oku kuya kubeka inkqubo bhaka.py kumendo weqokobhe kwaye izakuvumela ezinye iinkqubo ukufumana eziphunyeziweyo kunye namathala eencwadi azenzileyo bhaka. Kwezinye iimeko zokusetyenziswa bhaka, i-PATH kunye ne-PYTHONPATH isethingi echazwe ngasentla ayifuni, kodwa ukwakhiwa okupheleleyo kwe-ns-3-allinone (kunye neepakethe ezongezelelweyo) ngokuqhelekileyo kufuna.

Yiya kulawulo lwakho lokusebenza kwaye ngenisa oku kulandelayo kwi-console:

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

Okulandelayo siza kubuza Bhaka khangela ukuba sinezixhobo ezaneleyo zokulayisha amacandelo ahlukeneyo. Cofa:

$ ./bake.py check

Kuya kufuneka ubone into efana nale ilandelayo:

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

Ngokukodwa, izixhobo zokulayisha ezifana neMercurial, CVS, Git kunye neBazaar zibalulekile kweli nyathelo njengoko zisivumela ukuba sifumane ikhowudi. Kweli nqanaba, faka izixhobo ezilahlekileyo ngendlela yesiqhelo yenkqubo yakho (ukuba uyazi njani) okanye qhagamshelana nomphathi wakho wenkqubo ngoncedo.

Okulandelayo, zama ukukhuphela isoftwe:

$ ./bake.py download

isiphumo kufuneka sibe yinto efana nale:

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

Oku kuya kuthetha ukuba imithombo emithathu ikhutshelwe. Ngoku yiya kuvimba weefayili kwaye uchwetheze ls; Kuya kufuneka ubone:

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

Ngoku ulungele ukwakha unikezelo lwe-ns-3.

3.4 INdibano ns-3

Njengokukhuphela u-ns-3, kukho iindlela ezininzi zokwakha i-ns-3. Eyona nto iphambili esifuna ukuyigxininisa kukuba i-ns-3 yakhiwe kusetyenziswa isixhobo sokwakha esibizwa ngokuba Wafichazwe ngezantsi. Uninzi lwabasebenzisi baya kusebenza kunye Waf, kodwa kukho izikripthi ezimbalwa eziluncedo zokukunceda ukuba uqalise okanye uququzelele ulwakhiwo oluntsonkothileyo. Ngoko nceda, ngaphambi kokuba ufunde malunga Waf, jonga build.py kunye nendibano kunye bhaka.

3.4.1 Ukwakha nge-build.py

Nceda nceda! Eli nyathelo lokwakha lifumaneka kuphela kumthombo wogcino olufunyenweyo njengoko kuchaziwe ngasentla; kwaye ayikhutshelwanga nge-git okanye ukubhaka.

Xa usebenza ngokhupho lovimba Itarballngaphakathi ns-3-allinone Kukho iscript esisebenzayo esinokwenza ukudibanisa amacandelo kube lula. Ibizwa ngokuba yi-build.py. Le nkqubo izakuseta iprojekthi ngeyona ndlela iluncedo. Nangona kunjalo, qaphela ukuba ukuseta okungaphezulu kunye nokusebenza nge-ns-3 ngokuqhelekileyo kubandakanya ukusebenzisa inkqubo yokwakha ye-ns-3, i-Waf, eya kwaziswa kamva kwesi sifundo.

Ukuba ukhuphele usebenzisa Itarball, emva koko kulawulo lwakho ~/indawo yokusebenza uvimba weefayili onegama into enje ns-allinone-3.29. Faka oku kulandelayo:

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

Xa ufowuna build.py Sisebenzise iingxoxo zomgca womyalelo ukwakha imizekelo kunye neemvavanyo ezisetyenziswe kwesi sifundo, ezingakhiwanga ngokungagqibekanga kwi-ns-3. Ngokungagqibekanga, inkqubo ikwakha zonke iimodyuli ezikhoyo. Emva koko, ukuba unqwenela, unokwakha i-ns-3 ngaphandle kwemizekelo kunye neemvavanyo, okanye ungabandakanyi iimodyuli ezingafunekiyo kumsebenzi wakho.

Uya kubona imiyalezo emininzi yemveliso yomqokeleli eboniswe sisikripthi njengoko isakha iindawo ezahlukeneyo ozilayishile. Kuqala iskripthi siya kuzama ukwakha i-animator netanim, emva koko ijenereyitha yokubopha pybindgen kwaye ekugqibeleni ns-3. Xa inkqubo igqityiwe, kufuneka ubone oku kulandelayo:

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

Kwimigca emithathu yokugqibela yoluhlu sibona umyalezo malunga neemodyuli ezingazange zakhiwe:

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

Oku kuthetha ukuba ezinye iimodyuli ze-ns-3 ezixhomekeke kumathala eencwadi angaphandle anokuba azange akhelwe, okanye akufunekanga ukuba zakhelwe kolu lungelelwaniso. Oku akuthethi ukuba i-simulator ayidityaniswanga okanye ukuba iimodyuli ezidibeneyo aziyi kusebenza ngokuchanekileyo.

3.4.2 Ukwakha ngeBake

Ukuba usebenzise ukubhaka ngasentla ukufumana ikhowudi yemvelaphi kwindawo yokugcina iprojekthi, ungaqhubeka nokuyisebenzisa ukwakha i-ns-3. Cofa:

$ ./bake.py build

kwaye kuya kufuneka ubone into efana nale:

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

I-Tooltip: Unokwenza zombini ukukhuphela kunye nokwakha amanyathelo kanye ngokubiza "bake.py deploy".

Ukudibanisa onke amacandelo kunokusilela, kodwa indibano iya kuqhubeka ukuba icandelo alifunwa. Umzekelo, umba wokuphatheka wamva nje wawuyileyo i-castxml inokudityaniswa ngesixhobo bhaka hayi kuwo onke amaqonga. Kule meko, umyalezo ofana nalo uya kuvela:

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

Nangona kunjalo, i-castxml ifuneka kuphela ukuba ufuna ukwenza izibophelelo ezihlaziyiweyo zePython. Kubasebenzisi abaninzi akukho mfuneko yale nto (ubuncinci bade batshintshe i-ns-3), ngoko ke izilumkiso ezinjalo zinokuhoywa ngokukhuselekileyo okwangoku.

Ukuba ayiphumelelanga, lo myalelo ulandelayo uya kukunika ingcebiso malunga nokuxhomekeka okulahlekileyo:

$ ./bake.py show

Ukuxhomekeka okwahlukeneyo kweepakethe ozama ukuzakha ziya kudweliswa.

3.4.3 Yakha ngeWaf

Ukuza kuthi ga kweli nqanaba, ukuqalisa ukwakha i-ns-3, sisebenzise nokuba siscript build.py, okanye isixhobo bhaka. Ezi zixhobo ziluncedo ekwakheni i-ns-3 kunye nokugcina amathala eencwadi. Enyanisweni, ukwakha baqhuba isixhobo sokwakha Waf ukusuka kulawulo ns-3. Waf ifakwe ngekhowudi yemvelaphi ye-ns-3. Uninzi lwabasebenzisi bakhawuleza baqhubele phambili kusetyenziso oluthe ngqo ukulungisa kunye nokudibanisa i-ns-3 Waf. Ngoko ke, ukuqhubeka, nceda uye kuluhlu lwe-ns-3 olwenzile ekuqaleni.

Oku akufuneki ngokungqongqo ngeli xesha, kodwa kuya kuba luncedo ukubuyisela umva kancinci kwaye ubone indlela yokwenza utshintsho kuqwalaselo lweprojekthi. Mhlawumbi olona tshintsho luluncedo loqwalaselo onokuthi ulwenze kukwenza uguqulelo olulungisiweyo lwekhowudi. Ngokungagqibekanga, uqwalasele iprojekthi yakho ukwakha uguqulelo lolungiso lweempazamo. Makhe sijonge iprojekthi ukwenza ulwakhiwo oluphuculweyo. Ukucacisela iWaf ukuba kufuneka yenze ulwakhiwo oluphuculweyo olubandakanya imizekelo kunye novavanyo, kuya kufuneka ukuba wenze le miyalelo ilandelayo:

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

Oku kuya kusungulwa Waf ngaphandle koluhlu lwendawo (ukwenzela lula). Umyalelo wokuqala uhlambulula ukusuka kulwakhiwo lwangaphambili, oku ngokuqhelekileyo akuyimfuneko ngokungqongqo, kodwa kukwenza okulungileyo (kwakhona jonga iiprofayili zokwakha ngezantsi); oku kuzakucima iilayibrari ezenziwe ngaphambili kunye neefayile zento ezibekwe kulawulo ukwakha/. Xa iprojekthi iphinda iqwalaselwe kwaye inkqubo yokwakha ijonga ukuxhomekeka okwahlukeneyo, kufuneka ubone imveliso efana nokulandelayo:

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)

Nceda uqaphele inxalenye yokugqibela yoluhlu olungasentla. Ezinye iinketho ze-ns-3 azenziwanga ngokungagqibekanga okanye zifuna inkxaso yenkqubo ukuze isebenze kakuhle. Umzekelo, ukwenza i-XmlTo isebenze, ithala leencwadi kufuneka libekho kwisistim libxml-2.0. Ukuba eli thala leencwadi alizange lifunyanwe kwaye i-ns-3 ehambelanayo umsebenzi ayenziwanga, umyalezo uya kuboniswa. Kwakhona qaphela ukuba kunokwenzeka ukusebenzisa umyalelo sudo ukuseta isuntswana le-suid "seta iqela le-ID ngexesha lokusebenza" kwiinkqubo ezithile. Ayenziwanga ngokuzenzekelayo kwaye ke eli nqaku livela "njengelingasebenzanga". Ekugqibeleni, ukufumana uluhlu lweenketho ezinikwe amandla, sebenzisa Waf ngeparameter --check-config.

Ngoku makhe sibuyele emva kwaye sitshintshele emva kwi-debug build equlathe imizekelo kunye neemvavanyo.

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

Inkqubo yokwakha imiselwe ngoku kwaye unokwakha iinguqulelo zolungiso lweenkqubo ze-ns-3 ngokuchwetheza ngokulula:

$ ./waf

La manyathelo angentla asenokuba akunyanzele ukuba wakhe inxalenye yenkqubo ye-ns-3 kabini, kodwa ngoku uyayazi indlela yokutshintsha ubumbeko kunye nokwakha ikhowudi ephuculweyo.

Ukujonga ukuba yeyiphi iprofayile esebenzayo kuqwalaselo lweprojekthi enikiweyo, kukho umyalelo:

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

Le meko ingentla build.py ukwaxhasa iingxoxo --enable-examples ΠΈ --enable-tests, kodwa ezinye iinketho Waf ayixhasi ngokuthe ngqo. Umzekelo, oku akuyi kusebenza:

$ ./build.py --disable-python

impendulo iya kuba ngolu hlobo:

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

Nangona kunjalo, umqhubi okhethekileyo - angasetyenziselwa ukudlula iiparamitha ezongezelelweyo nge wafke endaweni yalo myalelo ulandelayo uya kusebenza:

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

kuba ivelisa owona myalelo uphambili ./waf misela --disable-python. Nazi ezinye iingcebiso ezingakumbi zentshayelelo malunga Waf.

Ukuphatha iimpazamo zokwakha

Ukukhutshwa kwe-ns-3 kuvavanywa kubaqulunqi beC ++ bamva nje abakhoyo ngexesha lokukhutshwa kwiLinux eqhelekileyo kunye nokuhanjiswa kweMacOS. Nangona kunjalo, ngokuhamba kwexesha, ukuhanjiswa okutsha kukhutshwa kunye nabaqulunqi abatsha, kwaye aba baqulunqi batsha bakholisa ukuba bahamba phambili malunga nezilumkiso. I-ns-3 iqwalasela ukwakha kwayo ukuphatha zonke izilumkiso njengeempazamo, ngoko ngamanye amaxesha ukuba usebenzisa uguqulelo oludala kwindlela entsha, isilumkiso somqokeleli sinokumisa ukwakha.

Umzekelo, ngaphambili bekukho ukukhutshwa kwe-ns-3.28 ye-Fedora 28, ebandakanya inguqulelo entsha enkulu. gcc (gcc-8). Ukwakha ukukhutshwa kwe-ns-3.28 okanye iinguqulelo zangaphambili phantsi kwe-Fedora 28, kunye ne-Gtk2+ efakiweyo, le mpazamo ilandelayo iya kwenzeka:

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

Kukhupho oluqala ku-ns-3.28.1, kwi Waf ukhetho luyafumaneka ukusombulula ezi ngxaki. Icima ukuseta iflegi ye-"-Werror" kwi-g++ kunye ne-clang++. Olu lukhetho "--disable-werror" kwaye kufuneka lusetyenziswe ngexesha loqwalaselo:

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

Qwalasela okanye udibanise

Eminye imiyalelo Waf zinentsingiselo kuphela kwisigaba soqwalaselo, kwaye ezinye zisebenza kuphela kwisigaba sokwakha. Umzekelo, ukuba ufuna ukusebenzisa i-ns-3 iimpawu zokulinganisa, ungenza i-bit setting suid usebenzisa sudo, njengoko kuchazwe ngasentla. Oku kuya kudlula imiyalelo yenyathelo loqwalaselo, kwaye ngaloo ndlela unokutshintsha uqwalaselo usebenzisa lo myalelo ulandelayo, oquka imizekelo kunye neemvavanyo.

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

Ukuba wenza oku Waf izokwazisa sudoukutshintsha inkqubo yokudala ikhowudi yesokethi yokulinganisa ukusebenza ngeemvume Ingcambu. Ku Waf Kukho ezinye iinketho ezininzi ezikhoyo kuqwalaselo kunye namanyathelo okwakha. Ukujonga iinketho zakho, ngenisa:

$ ./waf --help

Kwicandelo elilandelayo siza kusebenzisa ezinye iinketho ezinxulumene novavanyo.

IiProfayili zeNdibano

Sele sibonile ukuba ungaqwalasela njani Waf kwiindibano ukuguqulwa ΠΈ yenziwe nkulu:

$ ./waf --build-profile=debug

Kukwakho neprofayile yendibano ephakathi, Ukukhululwa. Ukhetho -d isithethantonye ne --build-profile. Iprofayile yokwakha ilawula ukusetyenziswa kokugawulwa kwemithi, iziqinisekiso, kunye nokutshintsha komqokeleli wokuphucula:

ns-3 inethiwekhi yokulinganisa isifundo. Isahluko sesi-3

Njengoko ubona, ukugawulwa kunye neengqinisekiso zifumaneka kuphela kwi-debug builds. Uqheliso olucetyiswayo kukuphuhlisa isikripthi sakho kwimo yedebug, emva koko wenze imitsi ephindaphindiweyo (yezibalo okanye utshintsho lweparameter) kwiprofayile yokwakha elungiselelweyo.

Ukuba unekhowudi ekufuneka iqhube kwiiprofayile ezithile zokwakha, sebenzisa iKhowudi yokuSonga iMacro:

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

Ukungagqibeki, Waf iindawo zakha ii-artifacts kuluhlu lokwakha. Ungakhankanya uluhlu lwemveliso eyahlukileyo usebenzisa ukhetho -β€―-out, umzekelo:

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

Ngokudibanisa oku kunye neeprofayili zokwakha, unokutshintsha ngokulula phakathi kweenketho ezahlukeneyo zokuhlanganisa:

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

Ekuvumela ukuba usebenze ngeendibano ezininzi ngaphandle kokuphinda ubhale indibano yamva nje ngexesha ngalinye. Xa utshintshela kwenye iprofayile, Waf iya kuyiqulunqa kuphela, ngaphandle kokubuyisela ngokupheleleyo yonke into.

Xa utshintshela ukwakha iinkangeleko ngolu hlobo, kufuneka ulumke ukunika iinketho zoqwalaselo ezifanayo ngexesha ngalinye. Ukuchaza izinto ezahlukeneyo zokusingqongileyo kuya kukunceda uphephe iimpazamo:

$ 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

Abaqulunqi kunye neeflegi

Kule mizekelo ingasentla Waf ukwakha i-ns-3 isebenzisa umqokeleli we-C++ osuka kwi-GCC ( g ++). Nangona kunjalo, unokutshintsha enye oyisebenzisayo Waf Umqokeleli we-C ++, ngokuchaza i-CXX yemo eguquguqukayo. Umzekelo, ukusebenzisa iC++ compiler Clang, clang++,

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

Ngendlela efanayo ungaqwalasela Waf ukusebenzisa uqulunqo olusasaziweyo usebenzisa idiskc:

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

Ulwazi oluthe kratya malunga ne-distcc kunye nokuhlanganiswa okusasaziweyo kunokufumaneka kwiphepha leprojekthi kwicandelo loxwebhu. Ukongeza iiflegi zomqokeleli xa uqwalasela i-ns-3, sebenzisa i-CXXFLAGS_EXTRA eguquguqukayo yokusingqongileyo.

isicwangciso

Waf ingasetyenziselwa ukufaka amathala eencwadi kwiindawo ezahlukeneyo kwinkqubo. Ngokungagqibekanga, iilayibrari eziqokelelweyo kunye nezinto eziphunyeziweyo zibekwe kulawulo Ukwakha, kwaye njengoko iWaf iyazi indawo yala mathala kunye nezinto eziphunyezwayo, akukho mfuneko yokufakela amathala kwenye indawo.

Ukuba abasebenzisi bakhetha ukufaka ngaphandle kwencwadi yokwakha, banokuqhuba umyalelo ./waf faka. Isimaphambili esimiyo sokuhlohla sithi / usr / yendawoKungenxa yoko ./waf faka izakufaka iinkqubo kwi / usr / yendawo / ibini, amathala eencwadi / usr / yendawo / lib kunye neefayile zeheader ngaphakathi /usr/local/include. Amalungelo omsebenzisi ophambili adla ngokufuna ukusetwa ngesimaphambili esingagqibekanga, ngoko ke umyalelo oqhelekileyo uyakuba njalo sudo ./waf faka. Xa iqalisiwe, iWaf iya kuqala ikhethe ukusebenzisa amathala eencwadi ekwabelwana ngawo kulawulo lokwakha, emva koko ijonge amathala eencwadi ecaleni kwendlela eya kumathala eencwadi aqwalaselwe kwindawo yendawo. Ngoko xa ufaka amathala eencwadi kwisistim, kuluqheliselo oluhle ukujonga ukuba kusetyenziswa amathala eencwadi afanelekileyo. Abasebenzisi banokukhetha ukufaka ngesimaphambili esahlukileyo ngokugqitha ukhetho ngexesha loqwalaselo --prefix, umzekelo:

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

Ukuba kamva, emva kokwakhiwa, umsebenzisi ufaka umyalelo wofakelo ./waf, isimaphambili siya kusetyenziswa /opt/local.

Iqela ./waf clean kufuneka isetyenziswe phambi kokuqwalasela kwakhona iprojekthi ukuba ufakelo luya kusebenzisa Waf phantsi kwesimaphambili esahlukileyo.

Ngaloo ndlela, ukusebenzisa i-ns-3 akukho mfuneko yokufowuna ./waf install. Uninzi lwabasebenzisi abayi kufuna lo myalelo kuba Waf izakuchola iilayibrari zangoku kulawulo lolwakhiwo, kodwa abanye abasebenzisi banokufumanisa oku kuluncedo ukuba imisebenzi yabo ibandakanya ukusebenza ngeenkqubo ngaphandle koluhlu lwe-ns-3.

Waf single

Kwinqanaba eliphezulu lomthi wemvelaphi ye-ns-3, kukho iscript enye kuphela yeWaf. Nje ukuba uqale ukusebenza, uya kuchitha ixesha elininzi kulawulo scratch/ okanye nzulu kwisrc/... kwaye kwangaxeshanye kufuneka ubaleke Waf. Ungakhumbula nje apho ukhoyo kwaye ubaleke Waf ngolu hlobo:

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

kodwa oku kuya kuba yindinisa kunye neempazamo, ngoko kukho izisombululo ezingcono. Enye indlela eqhelekileyo kukusebenzisa umhleli wombhalo onje emacs okanye vΓ­m, apho iiseshoni ezimbini zetheminali zivulwa, enye isetyenziselwa ukwakha i-ns-3, kwaye eyesibini isetyenziselwa ukuhlela ikhowudi yomthombo. Ukuba unayo kuphela Itarball, emva koko utshintsho lwemekobume lunokunceda:

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

$ cd scratch 
$ waff build

Kuluhlu lwemodyuli lunokuba luhenda ukongeza i-waf script encinci njenge exec ../../waf. Nceda, sukwenza lo nto. Oku kuyabhida abaqalayo kwaye, xa kwenziwe kakubi, kukhokelela kubunzima bokuzibona iimpazamo zokwakha. Izisombululo eziboniswe ngasentla yindlela ekufuneka isetyenziswe.

3.5 Uvavanyo ns-3

Ungaqhuba iyunithi yonikezelo lwe-ns-3 yovavanyo ngokusebenzisa iscript ./test.py:

$ ./test.py

Ezi mvavanyo ziqhutywa ngokuhambelanayo Waf. Ekugqibeleni kuya kufuneka ubone umyalezo othi:

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

Lo ngumyalezo obalulekileyo wokuchonga ukuphazamiseka kwe-valgrind, ukuphazamiseka okanye iimpazamo, ezibonisa iingxaki ngekhowudi okanye ukungahambisani phakathi kwezixhobo kunye nekhowudi.

Uya kubona kwakhona isiphumo sokugqibela ukusuka Waf kunye nomvavanyi oqhuba uvavanyo ngalunye, oluya kujongeka ngolu hlobo:

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)

Lo myalelo uqhele ukwenziwa ngabasebenzisi ukuqinisekisa ngokukhawuleza ukuba unikezelo lwe-ns-3 lwakhiwe ngokuchanekileyo. (Qaphela ukuba ulandelelwano lwe "PASS: ..." imigca inokwahluka, oku kuqhelekile. Okubalulekileyo kukuba umgca wesishwankathelo ekupheleni kwengxelo ubonisa ukuba zonke iimvavanyo eziphumeleleyo; akukho vavanyo aluphumelelanga okanye lutshonile.) Kwaye Wafkwaye uvavanyo.py izakungqamanisa umsebenzi kuzo zonke iicore processors ezikhoyo zomatshini.

3.6 Ukuqhuba iscript

Sidla ngokuqhuba izikripthi phantsi kolawulo Waf. Oku kuvumela inkqubo yokwakha ukuba iqinisekise ukuba iindlela zamathala eencwadi ekwabelwana ngazo zisetwa ngokuchanekileyo nokuba amathala eencwadi ayafumaneka ngexesha lokuqalisa. Ukwenza inkqubo, sebenzisa ngokulula Waf ngeparameter -β€―-run. Masiqhube i-ns-3 elingana nenkqubo yendawo yonke Molo Lizwengokuchwetheza oku kulandelayo:

$ ./waf --run hello-simulator

I-Waf iya kuqala ukujonga ukuba inkqubo yakhiwe ngokuchanekileyo kwaye yakha ukuba kuyimfuneko. Emva koko Waf izakwenza inkqubo evelisa iziphumo ezilandelayo.

Hello Simulator

Sivuyisana nawe! Ngoku ungumsebenzisi we-ns-3!

Ndingenza ntoni ukuba andiziboni iziphumo?

Ukuba ubona imiyalezo Wafebonisa ukuba ukwakhiwa kugqitywe ngempumelelo, kodwa awuboni isiphumo "Molo Simulator", ngoko kukho into enokwenzeka ukuba kwi [Yakha-nge-Waf] icandelo utshintshe indlela yakho yokwakha ukuya. yenziwe nkulu, kodwa uphose ukutshintsha umva kwimowudi ukuguqulwa. Yonke imveliso ye-console esetyenziswe kule tutorial isebenzisa icandelo elikhethekileyo le-ns-3 elenza ukugawulwa kwemithi kwaye lisetyenziselwa ukuprinta imiyalezo yesiko kwikhonsoli. Imveliso ephuma kweli candelo ivaliwe ngokuzenzekelayo xa ikhowudi ephuculweyo iqulunqwa - "iphuculwe". Ukuba awuyiboni imveliso ethi "Molo Simulator", faka oku kulandelayo:

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

ukuqwalasela Waf ukwakha uguqulelo lwe-debug yeenkqubo ze-ns-3, ezibandakanya imizekelo kunye neemvavanyo. Kuya kufuneka uphinde wakhe uguqulelo lwangoku lwe-debug yekhowudi ngokuchwetheza

$ ./waf

Ngoku ukuba uqhuba inkqubo molo-simulator, kufuneka ubone umphumo olindelekileyo.

3.6.1 Iingxoxo zemigca yomyalelo

Ukugqithisa iingxoxo zelayini yomyalelo kwinkqubo ye-ns-3, sebenzisa le pateni ilandelayo:

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

Faka enye indawo kwigama lenkqubo yakho nakwiimpikiswano. Ingxoxo -β€―-command-template kuba Waf ngokwesiseko iresiphi yokwakha owona mgca womyalelo Waf isetyenziselwa ukuphumeza inkqubo. I-Waf ijonga ukuba ulwakhiwo lugqityiwe na, icwangcisa iindlela zethala leencwadi ekwabelwana ngazo, emva koko isebenzise ithempleyithi yomgca womyalelo enikiweyo kwaye ibeka endaweni yegama lenkqubo kwi-%s isibambi-ndawo ukuze sibize into ephunyeziweyo. Ukuba ufumana le syntax intsonkothile, kukho uguqulelo olulula olubandakanya inkqubo ye-ns-3 kunye neengxoxo zayo ezifakwe kwisicatshulwa esinye:

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

Omnye umzekelo oluncedo kakhulu kukuqhuba iisuti zovavanyo ngokukhethayo. Makhe sicinge ukuba kukho indawo yovavanyo ebizwa ngokuba yi-mytest (enyanisweni ayikho). Ngaphezulu sisebenzise i-./test.py script ukwenza inani leemvavanyo ngaxeshanye, elibiza ngokuphindaphindiweyo inkqubo yovavanyo. uvavanyo- imbaleki. Fowuna uvavanyo- imbaleki ngqo ukwenza uvavanyo olunye:

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

Iingxoxo ziya kudluliselwa kwinkqubo uvavanyo- imbaleki. Ekubeni i-mytest ingekho, umyalezo wemposiso uzakwenziwa. Ukuprinta iinketho ezikhoyo zovavanyo, ngenisa:

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

3.6.2 Ukulungisa ingxaki

Ukwenza iinkqubo ze-ns-3 phantsi kwesinye isixhobo, njenge debugger (umzekelo, gdb) okanye isixhobo sovavanyo lwenkumbulo (umzekelo, valgrind), sebenzisa ifomu efanayo -β€―-command-template = "…". Umzekelo, ukubaleka kwi debugger gdb isifanisi sakho molo ns-3 inkqubo enengxoxo:

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

Qaphela ukuba igama leprogram ye-ns-3 liza nengxoxo -β€―-run, kunye nezinto eziluncedo zolawulo (apha gdb) luphawu lokuqala kwimpikiswano -β€―-command-template. Ukhetho -β€―-args yazisa gdbukuba wonke umgca womyalelo ungowenkqubo "ephantsi". (Ezinye iinguqulelo gdb andiluqondi ukhetho -β€―-args. Kule meko, susa iingxoxo zenkqubo ukusuka -β€―-command-template kwaye usebenzise isethi yomyalelo gdb argsSingadibanisa le recipe kunye neyokuqala ukuqhuba uvavanyo phantsi kwe-debugger:

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

3.6.3 Uluhlu olusebenzayo

I-Waf kufuneka iqaliswe kwindawo yayo phezulu komthi we-ns-3. Olu lawulo luba lulawulo olusebenzayo apho iifayile zemveliso ziya kubhalwa khona. Kodwa kuthekani ukuba ufuna ukugcina ezi fayile ngaphandle komthombo we-ns-3 womthi? Sebenzisa ingxoxo -β€―-cwd:

$ ./waf --cwd=...

Ungayifumana iluncedo kakhulu ukufumana iifayile zemveliso kulawulo lwakho lokusebenza. Kule meko, oku kulandelayo kungathanga ngqo kunokunceda:

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

Lo mhombiso woguqulelo lwangaphambili lomyalelo ugcina ulawulo lwangoku olusebenzayo, luya kulawulo Wafkwaye emva koko uyala Waf ukutshintsha ulawulo olusebenzayo umva kulawulo lwangoku olusebenzayo olugcinwe phambi kokuqalisa inkqubo. Sikhankanya iqela -β€―-cwd Ukugqibelela, uninzi lwabasebenzisi babaleka ngokulula i-Waf ukusuka kulawulo olukwinqanaba eliphezulu kwaye benze iifayile zemveliso apho.

Iyaqhubeka: Isahluko sesi-4

umthombo: www.habr.com

Yongeza izimvo