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:
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:
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
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:
-
ns-3.29: imodyuli ehambelana nokukhululwa; iya kukhuphela amacandelo afana nokukhululwa kwi-tarball;
-
ns-3-dev: imodyuli efanayo, kodwa usebenzisa ikhowudi esuka kumthi wophuhliso;
-
ns-allinone-3.29: Imodyuli equka ezinye iimpawu ezongezelelweyo ezifana Cofa umzila kunye neNethiwekhi yokulinganisa iCradle, i-Openflow ye-ns-3.
-
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:
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:
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:
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.
umthombo: www.habr.com