okokufundisa kwesilingisi senethiwekhi ye-ns-3. Isahluko 3

okokufundisa kwesilingisi senethiwekhi ye-ns-3. Isahluko 3
Isahluko 1,2

3 Ukuqalisa
3.1 Uhlolojikelele
3.2 Okudingekayo
3.2.1 Ukulanda ukukhishwa kwe-ns-3 njengendawo yomlando yomthombo
3.3 Ukulanda i-ns-3 usebenzisa i-Git
3.3.1 Ilayisha i-ns-3 isebenzisa i-Bake
3.4 Umhlangano ns-3
3.4.1 Isakhiwo nge-build.py
3.4.2 Ukwakha ngeBhaka
3.4.3 Yakha nge-Waf
3.5 Ukuhlola ns-3
3.6 Ukuqalisa umbhalo
3.6.1 Izimpikiswano zomugqa womyalo
3.6.2 Ukulungisa iphutha
3.6.3 Inkomba yokusebenza

Isahluko 3

Ukuqalisa

Lesi sahluko sihloselwe ukulungiselela umfundi ukuthi aqale ngekhompyutha okungenzeka ukuthi ayizange ifake i-ns-3. Ihlanganisa amapulatifomu asekelwayo, izimfuneko, indlela yokuthola i-ns-3, indlela yokwakha i-ns-3, kanye nendlela yokuhlola ukwakha kwakho nokusebenzisa izinhlelo ezilula.

3.1 Uhlolojikelele

Isifanisi se-ns-3 sakhiwe njengohlelo lwemitapo yolwazi yesofthiwe ehlanganyelwe. Ngesikhathi sokuhlanganiswa, ikhodi yezinhlelo zabasebenzisi ixhunyaniswa nale mitapo yolwazi. Izilimi zokuhlela ze-C++ noma i-Python zisetshenziselwa ukubhala izinhlelo zangokwezifiso.

I-Ns-3 isatshalaliswa njengekhodi yomthombo, okusho ukuthi isistimu eqondiwe kufanele ibe nendawo yokuthuthukisa isofthiwe ukuze kwakhiwe amalabhulali kuqala bese yakhe uhlelo lomsebenzisi. Empeleni, i-ns-3 ingasatshalaliswa njengemitapo yolwazi eseyenziwe ngomumo yohlelo oluthile, futhi ngokuzayo ingase isatshalaliswe ngale ndlela. Kodwa kulezi zinsuku abasebenzisi abaningi empeleni benza umsebenzi wabo ngokuhlela i-ns-3 ngokwayo, ngakho-ke kuyasiza ukuba nekhodi yomthombo ukwakha imitapo yolwazi. Uma kukhona ongathanda ukwenza umsebenzi wokudala imitapo yolwazi eseyenziwe ngomumo kanye namaphakheji ezinhlelo zokusebenza, sicela uxhumane nohlu lwamakheli. ns-abathuthukisi.

Okulandelayo, sizobheka izindlela ezintathu zokulanda nokwakha i-ns-3. Okokuqala ukulanda nokwakha ukukhululwa okusemthethweni kusayithi elikhulu. Okwesibili ukukhethwa nokuhlanganiswa kwamakhophi ezinguqulo zokuthuthukiswa kokufakwa okuyisisekelo kwe-ns-3. Okwesithathu ukusebenzisa amathuluzi okwakha engeziwe ukulayisha izandiso eziningi ze-ns-3. Sizodlula ngakunye njengoba amathuluzi ahluke kancane.

Abasebenzisi be-Linux abanolwazi bangase bazibuze ukuthi kungani i-ns-3 inganikezwanga njengephakheji njengamanye amalabhulali amaningi asebenzisa umphathi wephakheji? Nakuba kukhona amaphakheji kanambambili okusabalalisa kwe-Linux okuhlukahlukene (isb. I-Debian), abasebenzisi abaningi bagcina behlela imitapo yolwazi futhi kudingeke bakhe kabusha i-ns-3 ngokwabo, ngakho ukuba nekhodi yomthombo kuyatholakala. Ngalesi sizathu, sizogxila ekufakeni kusuka emthonjeni.

Ezinhlelweni eziningi ns-3 amalungelo izimpande azidingeki, kunconywa ukusebenzisa i-akhawunti yomsebenzisi engenamalungelo.

3.2 Okudingekayo

Lonke iqoqo lemitapo yolwazi ye-ns-3 etholakalayo inenani lokuncika emitatsheni yezincwadi zezinkampani zangaphandle, kodwa ingxenye enkulu i-ns-3 ingakhiwa futhi isetshenziswe ngokusekelwa kwezingxenye ezimbalwa ezivamile (ezivamise ukufakwa ngokuzenzakalelayo): i-C++ compiler, I-Python, umhleli wekhodi yomthombo (isibonelo, vim, emacs noma eclipse) futhi, uma kusetshenziswa amaqoqo okuthuthukisa, amasistimu okulawula inguqulo ye-Git. Iningi labasebenzisi abaqalayo ngeke badinge ukukhathazeka uma ukucushwa kwabo kubika ukuthi ezinye izici ezithuthukile ze-ns-3 ezingekho, kodwa kulabo abafuna ukufakwa okugcwele, iphrojekthi inikeza i-wiki ehlanganisa amakhasi anamathiphu namasu amaningi awusizo. Elinye lalawo makhasi yikhasi Lokufaka, elinemiyalo yokufaka yamasistimu ahlukahlukene, etholakala ku: https://www.nsnam.org/wiki/Installation.

Isigaba Sezimfuneko zale wiki sichaza ukuthi yimaphi amaphakheji adingekayo ukuze kusekelwe izinketho ezivamile ze-ns-3 futhi sinikeza imiyalo esetshenziselwa ukuzifaka kuma-flavour avamile we-Linux noma we-macOS.

Ungasebenzisa leli thuba ukuhlola ikhasi le-ns-3 wiki noma iwebhusayithi enkulu: https://www.nsnam.org, ngoba kunolwazi oluningi lapho. Ukuqala ngenguqulo yakamuva ye-ns-3 (ns-3.29), amathuluzi alandelayo ayadingeka ukuze kusetshenziswe i-ns-3:

Iphakheji Yamathuluzi/Inguqulo

  • I-C++ compiler
    clang++ noma g++ (g++ version 4.9 noma ngaphezulu)
  • Python
    inguqulo ye-python2 >= 2.7.10, noma inguqulo ye-python3 >=3.4
  • I-Git
    noma iyiphi inguqulo yakamuva (ukufinyelela i-ns-3 ku-GitLab.com)
  • i-tar
    noma iyiphi inguqulo yakamuva (yokukhulula ukukhishwa kwe-ns-3)
  • bunzip2
    noma iyiphi inguqulo yakamuva (yokukhulula ukukhishwa kwe-ns-3)

Ukuze uhlole inguqulo ezenzakalelayo yePython, thayipha python -V. Ukuze uhlole inguqulo ye-g++, thayipha g++ -v. Uma kukhona amathuluzi ashodayo noma amadala kakhulu, sicela ubheke inkomba yokufaka ekhasini le-ns-3 wiki.

Kusukela manje kuye phambili, sicabanga ukuthi umfundi usebenzisa i-Linux, i-MacOS, noma i-emulator ye-Linux, futhi okungenani unamathuluzi angenhla.

3.2.1 Ukulanda ukukhishwa kwe-ns-3 njengendawo yomlando yomthombo

Lesi yinkambo yesenzo somsebenzisi omusha ofuna ukulanda futhi ahlole ukukhishwa kwakamuva nezinguqulo zephakheji ze-ns-3. ns-3 ukukhishwa kushicilelwa njengezingobo zomlando ezicindezelwe, kwesinye isikhathi ezibizwa ngokuthi i-tarball. i-tarball iyifomethi ye-archive yesofthiwe ekhethekile lapho amafayela amaningana ahlanganiswa ndawonye. Ingobo yomlando ivamise ukucindezelwa. ns-3 inqubo yokuqalisa nge i-tarball ilula, udinga nje ukukhetha ukukhululwa, ukulanda futhi ukuqaqa.

Ake sicabange ukuthi wena, njengomsebenzisi, ufuna ukwakha u-ns-3 kuhla lwemibhalo lwasendaweni olubizwa indawo yokusebenzela. Ungathola ikhophi esebenzayo yokukhishwa ngokufaka okulandelayo kukhonsoli ye-Linux (ushintsha izinombolo zenguqulo efanele, 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 

Naka insiza esetshenziswe ngenhla wget, okuyithuluzi lomugqa womyalo wokulanda izinto ku-inthanethi. Uma ungakayifaki, ungasebenzisa isiphequluli sakho kulokhu.

Ukulandela lezi zinyathelo kuzokuyisa kuhla lwemibhalo lwe-ns-allinone-3.29, lapho kufanele ubone amafayela nezinkomba ezimbalwa.

$ 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

Manje usulungele ukwakha ukusabalalisa okuyisisekelo kwe-ns-3 futhi ungadlulela esigabeni sokwakha u-ns-3.

3.3 Ukulanda i-ns-3 usebenzisa i-Git

Ikhodi ye-ns-3 iyatholakala kumakhosombe e-Git ku-GitLab.com ku- https://gitlab.com/nsnam/. Iqembu nsnam ihlanganisa amaqoqo ahlukahlukene asetshenziswa iphrojekthi yomthombo ovulekile.

Indlela elula yokuqala ukusebenzisa izinqolobane ze-Git ukufokha noma ukuhlanganisa imvelo ns-3-allinone. Leli iqoqo lemibhalo ephethe ukulayishwa nokuhlanganisa amasistimu angaphansi asetshenziswa kakhulu e-ns-3. Uma umusha ku-Git, amagama athi "imfoloko" nelithi "clone" angase angawajwayele; uma kunjalo, sincoma ukuthi umane uhlanganise (uzenzele ikhophi yakho) inqolobane etholakala ku-GitLab.com kanje:

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

Kulesi sigaba, ukubuka kwemibhalo yakho ns-3-allinone ihluke kancane kuhla lwemibhalo lwengobo yomlando yokukhishwa echazwe ngenhla. Kufanele ibukeke kanje:

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

Sicela uqaphele ukuthi kukhona iskripthi download.py, ezokhipha u-ns-3 kanye nekhodi yomthombo ehambisanayo. Nakhu ongakhetha kukho: noma landa isifinyezo sakamuva sokuthuthukiswa kwe-ns-3:

$ python download.py

noma ukhetha ukukhishwa kwe-ns-3 usebenzisa ifulegi -n ukukhombisa inombolo yokukhishwa:

$ python download.py -n ns-3.29

Ngemva kwalesi sinyathelo kuya lwemibhalo ns-3-allinone amakhosombe engeziwe azolandwa ns-3, bhaka, i-pybindgen ΠΈ netanim.

Ukubhala
Emshinini ono-Ubuntu16.04 ohlanzekile, bengidinga ukushintsha umyalo kulokhu: $ sudo python3 download.py -n ns-3.29 (amanothi omhumushi emva kwalokhu).

3.3.1 Ilayisha i-ns-3 isebenzisa i-Bake

Izindlela ezimbili ezingenhla (ingobo yomlando yomthombo noma inqolobane ns-3-allinone nge-Git) ziwusizo ekutholeni ukufakwa okulula kwe-ns-3 ngama-addon amaningi(i-pybindgen ukukhiqiza izibopho zePython kanye netanim okokugqwayiza kwenethiwekhi). Indawo yesithathu ehlinzekwa ngokuzenzakalelayo ku-ns-3-allinone ibizwa bhaka.

Bhaka iyithuluzi lokwakha okudidiyelwe kwesoftware kusuka kumakhosombe amaningi, athuthukiswe iphrojekthi ye-ns-3. Bhaka ingasetshenziswa ukuthola izinguqulo zokuthuthukisa ze-ns-3, kanye nokulanda nokwakha izandiso zenguqulo eyisisekelo yokusatshalaliswa kwe-ns-3, njengendawo Ukwenziwa Kwekhodi Eqondile, I-CradleNetwork Simulation Cradle, ikhono lokudala izibopho ezintsha zePython kanye "nezinhlelo zokusebenza" ezihlukahlukene ze-ns-3.

Ukubhala
I-CradleNetwork Simulation Cradle iwuhlaka olukuvumela ukuthi usebenzise izitaki zangempela zenethiwekhi ye-TCP/IP ngaphakathi kwesifanisi senethiwekhi.

Uma ulindele ukuthi ukufakwa kwakho kwe-ns-3 kube nezici ezithuthukile noma ezengeziwe, ungalandela le ndlela yokufaka.

Kokukhishwayo kwakamuva kwe-ns-3 Bhaka yengezwe ekukhishweni kwetiyela. Ukukhishwa kufaka phakathi ifayela lokumisa elikuvumela ukuthi ulande izinguqulo zesofthiwe zamanje ngesikhathi sokukhishwa. Okusho ukuthi, ngokwesibonelo, inguqulo Bhaka, esatshalaliswa nokukhishwa okungu-ns-3.29, ingasetshenziselwa ukubuyisa izingxenye zalokho kukhululwa kwe-ns-3 noma ngaphambili, kodwa ayikwazi ukusetshenziselwa ukubuyisa izingxenye zokukhishwa kamuva (uma ifayela lencazelo yephakheji bakeconf.xml akubuyekeziwe).

Ungathola nekhophi yakamuva bhakangokufaka umyalo olandelayo kukhonsoli yakho ye-Linux (ucabanga ukuthi ufake i-Git):

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

Uma ugijima umyalo we-git, kufanele ubone okuthile okufana nalokhu okulandelayo:

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.

Ngemva kokuqeda umyalo i-clone kufanele ube nohla lwemibhalo oluqanjwe bhaka, okuqukethwe kwakho kufanele kubukeke kanje:

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

Qaphela ukuthi ulayishe imibhalo embalwa yePython, imojuli yePython eqanjwe igama bhaka kanye nefayela lokumisa le-XML. Isinyathelo esilandelayo siwukusebenzisa lezi zikripthi ukuze ulande futhi wakhe ukusatshalaliswa kwe-ns-3 okukhethile. Okuhloswe ngakho okuningana kuyatholakala:

  1. ns-3.29: imojula ehambisana nokukhululwa; izolanda izingxenye ezifanayo nokukhululwa ku-tarball;

  2. ns-3-dev: imojula efanayo, kodwa usebenzisa ikhodi evela esihlahleni sokuthuthukisa;

  3. ns-allinone-3.29: Imojula ehlanganisa ezinye izici ezengeziwe njengokuchofoza umzila kanye ne-Network Simulation Cradle, i-Openflow ye-ns-3.

  4. ns-3-allinone: kufana nenguqulo yokukhishwa yemojuli konke okunye, kodwa ngekhodi yokuthuthukisa.

Ukubhala
Chofoza - I-modular software architecture yokwakha amarutha.

I-Openflow iyiphrothokholi yokuphatha inqubo yokucubungula idatha edluliselwa ngenethiwekhi yedatha ngamarutha namaswishi, kusetshenziswa ubuchwepheshe benethiwekhi obuchazwe yisoftware.

Isifinyezo samanje sokuthuthuka (esingakhishiwe) ns-3 singatholakala kokuthi:https://gitlab.com/nsnam/ns-3-dev.git.

Abathuthukisi bazama ukugcina lawa makhosombe ngendlela yokusebenza engaguquki, kodwa asendaweni yokuthuthukiswa futhi aqukethe ikhodi engakhishiwe, ngakho-ke uma ungahlelile ukusebenzisa izici ezintsha, bese ukhetha ukukhululwa okusemthethweni.

Ungathola inguqulo yakamuva yekhodi ngokuphequlula uhlu lwamakhosombe, noma ngokuya ekhasini lewebhu le-ns-3 Ukukhishwa:https://www.nsnam.org/releases/ bese uchofoza isixhumanisi senguqulo yakamuva. Kulesi sibonelo sizoqhubeka no-ns-3.29.

Manje, ukuze sithole izingxenye ze-ns-3 esizidingayo, sizosebenzisa ithuluzi Bhaka. Ake sisho amagama ambalwa esingeniso ngomsebenzi Bhaka.

Ukubhaka kusebenza ngokulayisha imithombo yephakheji kuhla lwemibhalo umthombo kanye nokufaka imitapo yolwazi kumkhombandlela wokwakha. Bhaka ingaqhutshwa ngokubhekisela kukhombambili, kodwa uma ufuna ukugijima Bhaka hhayi ohlwini lwemibhalo elayishwe kulo, kuyancomeka ukuthi wengeze indlela eya bhaka endleleni yakho (PATH imvelo variable), isibonelo kanje (isibonelo se-Linux bash shell). Iya kuhla lwemibhalo "bhaka" bese usetha okuguquguqukayo kwemvelo okulandelayo:

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

Lokhu kuzobeka uhlelo bhaka.py kumzila wegobolondo futhi izovumela ezinye izinhlelo ukuthi zithole okusebenzisekayo namalabhulali ewadalile bhaka. Kwezinye izimo ukusetshenziswa bhaka, isilungiselelo se-PATH ne-PYTHONPATH esichazwe ngenhla asidingeki, kodwa ukwakhiwa okuphelele kwe-ns-3-allinone (okunamaphakheji engeziwe) kuvame ukukudinga.

Iya kusiqondisi sakho esisebenzayo bese ufaka okulandelayo ku-console:

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

Okulandelayo sizobuza Bhaka hlola ukuthi sinamathuluzi anele okulayisha izingxenye ezahlukahlukene. Dayela:

$ ./bake.py check

Kufanele ubone into efana nalena elandelayo:

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

Ikakhulukazi, amathuluzi okulayisha afana ne-Mercurial, i-CVS, i-Git ne-Bazaar abalulekile kulesi sinyathelo njengoba esivumela ukuthi sithole ikhodi. Kuleli qophelo, faka amathuluzi angekho ngendlela evamile yesistimu yakho (uma wazi kanjani) noma thintana nomlawuli wesistimu yakho ukuze uthole usizo.

Okulandelayo, zama ukulanda isofthiwe:

$ ./bake.py download

umphumela kufanele ube into 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

Lokhu kuzosho ukuthi imithombo emithathu ilandwe. Manje hamba kumkhombandlela womthombo bese uthayipha ls; Kufanele ubone:

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

Manje usulungele ukwakha ukusatshalaliswa kwe-ns-3.

3.4 Umhlangano ns-3

Njengokulanda u-ns-3, kunezindlela ezimbalwa zokwakha i-ns-3. Into esemqoka esifuna ukuyigcizelela ukuthi i-ns-3 yakhiwe kusetshenziswa ithuluzi lokwakha elibizwa I-Wafkuchazwe ngezansi. Abasebenzisi abaningi bazosebenza nabo I-Waf, kodwa kunemibhalo embalwa ewusizo ukukusiza ukuthi uqalise noma uhlele izakhiwo eziyinkimbinkimbi. Ngakho ngicela, ngaphambi kokuthi ufunde mayelana I-Waf, bheka build.py kanye nomhlangano nge bhaka.

3.4.1 Isakhiwo nge-build.py

Ukuqapha Lesi sinyathelo sokwakha sitholakala kuphela enguqulweni yomthombo wengobo yomlando etholwe njengoba kuchazwe ngenhla; futhi ayilandwa nge-git noma bhaka.

Lapho usebenza nengobo yomlando yokukhipha i-tarball, ku ns-3-allinone Kukhona umbhalo owusizo ongenza ukuhlanganisa izingxenye kube lula. Ibizwa nge-build.py. Lolu hlelo luzosethela iphrojekthi ngendlela ewusizo kakhulu. Nokho, qaphela ukuthi ukusetha okuthuthuke kakhulu nokusebenza nge-ns-3 ngokuvamile kuhilela ukusebenzisa isistimu yokwakha ye-ns-3, i-Waf, ezokwethulwa kamuva kulesi sifundo.

Uma ulande usebenzisa i-tarball, bese kuba ohlwini lwakho lwemibhalo ~/indawo yokusebenza uhla lwemibhalo olunegama elithi ns-allinone-3.29. Faka okulandelayo:

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

Uma ufona build.py Sisebenzise izimpikiswano zomugqa womyalo ukuze sakhe izibonelo nezivivinyo ezisetshenziswe kulesi sifundo, ezingakhiwe ngokuzenzakalelayo ku-ns-3. Ngokuzenzakalelayo, uhlelo luphinde lwakha wonke amamojula atholakalayo. Bese, uma uthanda, ungakha i-ns-3 ngaphandle kwezibonelo nokuhlolwa, noma ukhiphe amamojula angadingeki emsebenzini wakho.

Uzobona imilayezo eminingi yokuphuma komhlanganisi eboniswa iskripthi njengoba sakha izingxenye ezihlukahlukene ozilayishile. Okokuqala umbhalo uzozama ukwakha i-animator netanim, bese kuba ijeneretha ebophayo i-pybindgen futhi ekugcineni ns-3. Lapho inqubo isiqediwe, kufanele ubone okulandelayo:

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

Emigqeni emithathu yokugcina yohlu sibona umlayezo mayelana namamojula angazange akhelwe:

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

Lokhu kusho ukuthi amanye amamojula we-ns-3 ancike emitapo yolwazi yangaphandle kungenzeka ukuthi awakhiwe, noma awadingeki ukuthi akhelwe lokhu kucushwa. Lokhu akusho ukuthi isifanisi asihlanganisiwe noma ukuthi amamojula ahlanganisiwe ngeke asebenze ngendlela efanele.

3.4.2 Ukwakha ngeBhaka

Uma usebenzise ukubhaka ngenhla ukuze uthole ikhodi yomthombo kumakhosombe wephrojekthi, ungaqhubeka nokuyisebenzisela ukwakha i-ns-3. Dayela:

$ ./bake.py build

futhi kufanele ubone okuthile okufana nalokhu:

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

I-Tooltip: Ungakwazi futhi ukwenza kokubili ukulanda futhi wakhe izinyathelo ngesikhathi esisodwa ngokubiza "bake.py deploy".

Ukuhlanganisa zonke izingxenye kungase kuhluleke, kodwa ukuhlanganisa kuzoqhubeka uma ingxenye ingadingeki. Isibonelo, inkinga yakamuva yokuphatheka kwaba ukuthi i-castxml ingahlanganiswa ngethuluzi bhaka hhayi kuzo zonke izinkundla. Kulokhu, umlayezo ofana nalo uzovela:

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

Nokho, i-castxml edingekayo kuphela uma ufuna ukudala ukubopha okubuyekeziwe kwePython. Kubasebenzisi abaningi asikho isidingo salokhu (okungenani baze bashintshe u-ns-3), ngakho-ke izexwayiso ezinjalo zingazitshwa ngokuphephile okwamanje.

Uma ihluleka, umyalo olandelayo uzokunikeza iseluleko mayelana nokuncika okushodayo:

$ ./bake.py show

Ukuncika okuhlukahlukene kwamaphakheji ozama ukuwakha kuzofakwa ohlwini.

3.4.3 Yakha nge-Waf

Kuze kube manje, ukuze siqale ukwakha i-ns-3, sisebenzise noma ngabe umbhalo build.py, noma ithuluzi bhaka. Lawa mathuluzi awusizo ekwakheni i-ns-3 nokugcina imitapo yolwazi. Eqinisweni, ukwakha basebenzisa ithuluzi lokwakha I-Waf kusuka kunkomba ns-3. I-Waf efakwe ngekhodi yomthombo ye-ns-3. Abasebenzisi abaningi badlulela ngokushesha ekusebenziseni okuqondile ukuze balungiselele futhi bahlanganise i-ns‑3 I-Waf. Ngakho-ke, ukuze uqhubeke, sicela uye kuhla lwemibhalo lwe-ns-3 oludalwe ekuqaleni.

Lokhu akudingekile ngokuqinile ngalesi sikhathi, kodwa kuzoba usizo ukubuyela emuva kancane futhi ubone ukuthi ungenza kanjani izinguquko ekucushweni kwephrojekthi. Mhlawumbe inguquko yokumisa ewusizo kakhulu ongayenza ukudala inguqulo elungiselelwe yekhodi. Ngokuzenzakalelayo, ulungiselele iphrojekthi yakho ukuze yakhe inguqulo yokususa iphutha. Ake sibheke iphrojekthi yokwakha isakhiwo esithuthukisiwe. Ukuchazela i-Waf ukuthi kufanele yenze ukwakha okuthuthukisiwe okuhlanganisa izibonelo nokuhlolwa, uzodinga ukusebenzisa imiyalo elandelayo:

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

Lokhu kuzokwethula I-Waf ngaphandle kwenkomba yendawo (ukuze kube lula kuwe). Umyalo wokuqala uhlanza kusuka ekwakhiweni kwangaphambilini, lokhu ngokuvamile akudingekile ngokuqinile, kodwa kuwumkhuba omuhle (futhi bheka amaphrofayili wokwakha ngezansi); lokhu kuzosusa amalabhulali adalwe ngaphambilini kanye namafayela ento atholakala kuhla lwemibhalo ukwakha/. Lapho iphrojekthi ihlelwa kabusha futhi isistimu yokwakha ihlola ukuncika okuhlukahlukene, kufanele ubone okukhiphayo okufana 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)

Sicela uqaphele ingxenye yokugcina yohlu olungenhla. Ezinye izinketho ze-ns-3 azivunyelwe ngokuzenzakalelayo noma zidinga usekelo lwesistimu ukuze lusebenze kahle. Isibonelo, ukuze unike amandla i-XmlTo, umtapo wolwazi kufanele ube khona ohlelweni libxml-2.0. Uma le labhulali ingatholakalanga futhi umsebenzi ohambisanayo we-ns-3 ungazange uvunyelwe, umlayezo uzovezwa. Futhi qaphela ukuthi kungenzeka ukusebenzisa umyalo sudo ukusetha i-suid bit "set group ID ngesikhathi sokusebenza" ezinhlelweni ezithile. Ayinikwa amandla ngokuzenzakalela ngakho-ke lesi sici sivela njengokuthi β€œasinikiwe amandla”. Okokugcina, ukuze uthole uhlu lwezinketho ezinikwe amandla, sebenzisa I-Waf ngepharamitha --check-config.

Manje ake sibuyele emuva sibuyele emuva esakhiweni sokususa iphutha esiqukethe izibonelo nokuhlola.

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

Uhlelo lokwakha manje selumisiwe futhi ungakha izinguqulo zokususa iphutha zezinhlelo ze-ns-3 ngokuthayipha nje:

$ ./waf

Izinyathelo ezingenhla kungenzeka zikuphoqe ukuthi wakhe ingxenye yesistimu ye-ns-3 kabili, kodwa manje usuyazi ukuthi ungashintsha kanjani ukucushwa nokwakha ikhodi elungiselelwe.

Ukuhlola ukuthi iyiphi iphrofayili esebenzayo ekucushweni kwephrojekthi ethile, kunomyalo:

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

Isimo esingenhla build.py futhi isekela izimpikiswano --enable-examples ΠΈ --enable-tests, kodwa ezinye izinketho I-Waf ayisekeli ngokuqondile. Isibonelo, lokhu ngeke kusebenze:

$ ./build.py --disable-python

ukusabela kuzoba kanje:

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

Noma kunjalo, opharetha okhethekile - - angasetshenziswa ukudlula imingcele eyengeziwe nge wafngakho esikhundleni salokhu okungenhla umyalo olandelayo uzosebenza:

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

ngoba ikhiqiza umyalo oyinhloko ./waf lungiselela --disable-python. Nawa amanye amathiphu esingeniso mayelana I-Waf.

Ukuphatha amaphutha okwakha

Ukukhishwa kwe-ns-3 kuhlolwa kubahlanganisi bakamuva be-C++ abatholakala ngesikhathi sokukhishwa ekusatshalalisweni okuvamile kwe-Linux ne-MacOS. Kodwa-ke, ngokuhamba kwesikhathi, ukusabalalisa okusha kukhishwa nabahlanganisi abasha, futhi laba bahlanganisi abasha bavame ukugxila kakhulu mayelana nezixwayiso. I-ns-3 ilungiselela ukwakhiwa kwayo ukuze iphathe zonke izixwayiso njengamaphutha, ngakho-ke kwesinye isikhathi uma usebenzisa inguqulo endala kusistimu entsha, isexwayiso se-compiler singamisa ukwakha.

Isibonelo, ngaphambilini kube nokukhishwa kwe-ns-3.28 ye-Fedora 28, ehlanganisa inguqulo entsha enkulu. gcc (gcc-8). Ukwakha ukukhishwa kwe-ns-3.28 noma izinguqulo zangaphambili ngaphansi kwe-Fedora 28, ne-Gtk2+ efakiwe, kuzokwenzeka iphutha elilandelayo:

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

Kokukhishwayo kusukela ku-ns-3.28.1, ngo I-Waf inketho iyatholakala ukuxazulula lezi zinkinga. Ikhubaza ukusetha ifulegi elithi "-Werror" ku-g++ naku-clang++. Lena inketho ethi "--disable-werror" futhi kufanele isetshenziswe ngesikhathi sokumisa:

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

Lungiselela noma hlanganisa

Eminye imiyalo I-Waf zinencazelo kuphela esigabeni sokumisa, futhi ezinye zisebenza kuphela esigabeni sokwakha. Isibonelo, uma ufuna ukusebenzisa izici zokulingisa ze-ns-3, ungavumela ukulungiselelwa kwebhithi eningizimu usebenzisa sudo, njengoba kuchazwe ngenhla. Lokhu kuzokhipha imiyalo yesinyathelo sokumisa, futhi ngaleyo ndlela ungakwazi ukushintsha ukumisa usebenzisa umyalo olandelayo, ohlanganisa nezibonelo nokuhlola.

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

Uma wenza lokhu I-Waf izokwethula sudoukushintsha izinhlelo zokudala isokhethi lekhodi yokulingisa ukuze zisebenze nezimvume izimpande. I I-Waf Kukhona ezinye izinketho eziningi ezitholakalayo zokumisa nezinyathelo zokwakha. Ukuze uhlole izinketho zakho, faka:

$ ./waf --help

Esigabeni esilandelayo sizosebenzisa ezinye izinketho ezihlobene nokuhlola.

Amaphrofayili Womhlangano

Sesibonile kakade ukuthi ungamisa kanjani I-Waf eyemihlangano lungisa ΠΈ elungiselelwe:

$ ./waf --build-profile=debug

Kukhona futhi iphrofayili yomhlangano ophakathi, Ukukhululwa. Inketho -d ifana ne --build-profile. Iphrofayili yokwakha ilawula ukusetshenziswa kokugawulwa kwemithi, ukugomela, kanye nokushintsha kokuhlanganisa komhlanganisi:

okokufundisa kwesilingisi senethiwekhi ye-ns-3. Isahluko 3

Njengoba ubona, ukugawulwa kwemithi nokugomela kutholakala kuphela ekwakhiweni kokususa iphutha. Umkhuba onconywayo uwukuthuthukisa iskripthi sakho kumodi yokususa iphutha, bese wenza imigijimo ephindaphindiwe (yezibalo noma izinguquko zepharamitha) kuphrofayela yokwakha ethuthukisiwe.

Uma unekhodi okufanele isebenze kumaphrofayili athile wokwakha, sebenzisa i-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;)

Ngokuzenzakalelayo I-Waf izindawo zokwakha ama-artifact ohlwini lwemibhalo yokwakha. Ungacacisa uhla lwemibhalo oluhlukile usebenzisa inketho -β€―-outisibonelo:

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

Ngokuhlanganisa lokhu namaphrofayili wokwakha, ungashintsha kalula phakathi kwezinketho ezihlukene zokuhlanganisa:

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

Okukuvumela ukuthi usebenze nemihlangano eminingi ngaphandle kokuthi ubhale kabusha umhlangano wakamuva isikhathi ngasinye. Uma ushintshela kwenye iphrofayela, I-Waf izohlanganisa yona kuphela, ngaphandle kokubuyisela ngokuphelele konke.

Uma ushintsha amaphrofayili wokwakha ngale ndlela, udinga ukuqaphela ukunikeza izinketho ezifanayo zokumisa isikhathi ngasinye. Ukuchaza okuguquguqukayo kwemvelo okuningana kuzokusiza ugweme amaphutha:

$ 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

Abahlanganisi namafulegi

Ezibonelweni ezingenhla I-Waf ukwakha i-ns-3 isebenzisa i-C++ compiler evela ku-GCC ( g ++). Nokho, ungakwazi ukushintsha oyisebenzisayo I-Waf I-C++ compiler, ngokuchaza okuguquguqukayo kwemvelo ye-CXX. Isibonelo, ukusebenzisa i-C++ compiler Clang, clang++,

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

Ngendlela efanayo ungakwazi ukumisa I-Waf ukusebenzisa inhlanganisela esabalalisiwe usebenzisa i-distcc:

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

Ulwazi olwengeziwe mayelana ne-distcc nokuhlanganiswa okusabalalisiwe kungatholakala ekhasini lephrojekthi engxenyeni ethi Amadokhumenti. Ukuze ungeze amafulegi ohlanganisayo lapho ulungiselela i-ns-3, sebenzisa i-CXXFLAGS_EXTRA eguquguqukayo yemvelo.

setting

I-Waf ingasetshenziswa ukufaka imitapo yolwazi ezindaweni ezahlukene ohlelweni. Ngokuzenzakalelayo, imitapo yolwazi ehlanganisiwe nezinto ezisebenzisekayo zitholakala ohlwini lwemibhalo ukwakha, futhi njengoba i-Waf iyazi indawo yale mitapo yolwazi nezinto ezisebenzisekayo, asikho isidingo sokufaka imitapo yolwazi kwenye indawo.

Uma abasebenzisi bekhetha ukufaka ngaphandle kwemibhalo yokwakha, bangasebenzisa umyalo ./waf ukufaka. Isiqalo esimisiwe sokufaka sithi / usr / wendawongalokho ./waf ukufaka izofaka izinhlelo ku / usr / yendawo / ibin, imitapo yolwazi ku / usr / yendawo / lib namafayela kanhlokweni ku /usr/local/include. Amalungelo omsebenzisi ngokuvamile adinga ukusethwa ngesiqalo esizenzakalelayo, ukuze umyalo ojwayelekile ube sudo ./waf ukufaka. Lapho yethulwa, i-Waf izoqale ikhethe ukusebenzisa imitapo yolwazi okwabelwana ngayo kumkhombandlela wokwakha, bese ibheka imitapo yolwazi esendleleni eya emitapweni yolwazi emiswe endaweni yasendaweni. Ngakho lapho ufaka imitapo yolwazi ohlelweni, kuwumkhuba omuhle ukuhlola ukuthi imitapo yolwazi efanele iyasetshenziswa. Abasebenzisi bangakhetha ukufaka ngesiqalo esihlukile ngokudlula inketho phakathi nokucushwa --prefixisibonelo:

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

Uma kamuva, ngemva kokwakha, umsebenzisi engena umyalo wokufaka ./waf, kuzosetshenziswa isiqalo /opt/indawo.

Ithimba ./waf clean kufanele isetshenziswe ngaphambi kokumisa kabusha iphrojekthi uma ukufakwa kuzosetshenziswa I-Waf ngaphansi kwesiqalo esihlukile.

Ngakho-ke, ukusebenzisa i-ns-3 asikho isidingo sokufona ./waf install. Abasebenzisi abaningi ngeke bawudinga lo myalo ngoba I-Waf izothatha imitapo yolwazi yamanje kuhla lwemibhalo lokwakha, kodwa abanye abasebenzisi bangathola lokhu kuwusizo uma imisebenzi yabo ihilela ukusebenza nezinhlelo ezingaphandle kohla lwemibhalo lwe-ns-3.

Waf single

Ezingeni eliphezulu lesihlahla somthombo we-ns-3, kuneskripthi se-Waf esisodwa kuphela. Uma usuqalile ukusebenza, uzochitha isikhathi esiningi kumkhombandlela scratch/ noma ujule phakathisrc/... futhi ngesikhathi esifanayo kufanele ugijime I-Waf. Ungakhumbula nje ukuthi ukuphi futhi ugijime I-Waf kanje:

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

kodwa lokhu kuzoba yisicefe futhi kube namaphutha, ngakho-ke kunezixazululo ezingcono. Enye indlela evamile ukusebenzisa isihleli sombhalo njenge emacs noma vim, lapho kuvulwa amaseshini amabili etheminali, eyodwa isetshenziselwa ukwakha u-ns-3, kanti eyesibili isetshenziselwa ukuhlela ikhodi yomthombo. Uma nje unayo i-tarball, bese ukushintsha kwendawo kungasiza:

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

$ cd scratch 
$ waff build

Kumkhombandlela wemojuli kungase kulinge ukwengeza umbhalo we-waf ongasho lutho njengawo exec ../../waf. Ngicela, ungakwenzi lokho. Lokhu kuyabadida abasanda kuhlanganyela futhi, uma kwenziwa kabi, kuholela kumaphutha okwakha okunzima ukuwabona. Izixazululo eziboniswe ngenhla ziyindlela okufanele isetshenziswe.

3.5 Ukuhlola ns-3

Ungakwazi ukuqalisa ukuhlola kweyunithi yokusabalalisa kwe-ns-3 ngokusebenzisa iskripthi ./test.py:

$ ./test.py

Lezi zivivinyo zenziwa ngokuhambisana ne I-Waf. Ekugcineni kufanele ubone umlayezo othi:

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

Lona umlayezo obalulekile wokukhomba ukuphahlazeka kwe-valgrind, ukuphahlazeka noma amaphutha, okubonisa izinkinga ngekhodi noma ukungahambisani phakathi kwamathuluzi nekhodi.

Uzobona futhi umphumela wokugcina kusuka I-Waf nomhloli osebenzisa ukuhlolwa ngakunye, okuzobukeka kanje:

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 myalo uvame ukusetshenziswa abasebenzisi ukuze baqinisekise ngokushesha ukuthi ukusatshalaliswa kwe-ns-3 kwakhiwe ngendlela efanele. (Qaphela ukuthi ukuhleleka kwemigqa ethi "PASS: ..." kungase kwehluke, lokhu kuyinto evamile. Okubalulekile ukuthi umugqa wokufingqa osekupheleni kombiko ubonisa ukuthi zonke izivivinyo ziphumelele; akukho kuhlola okuhlulekile noma okuphahlazekile.) Futhi I-Waffuthi test.py izofanisa umsebenzi kuwo wonke ama-processor cores atholakalayo omshini.

3.6 Ukuqalisa umbhalo

Ngokuvamile siqhuba imibhalo ngaphansi kokulawula I-Waf. Lokhu kuvumela isistimu yokwakha ukuthi iqinisekise ukuthi izindlela zelabhulali eyabiwe zisethwa ngendlela efanele nokuthi imitapo yolwazi iyatholakala ngesikhathi sokusebenza. Ukuze uqalise uhlelo, mane usebenzise I-Waf ngepharamitha -β€―-run. Masiqalise i-ns-3 elingana nohlelo olutholakala yonke indawo Sawubona Mhlabangokuthayipha okulandelayo:

$ ./waf --run hello-simulator

I-Waf izohlola kuqala ukuthi uhlelo lwakhiwe ngendlela efanele futhi yakhe uma kunesidingo. Khona-ke I-Waf izosebenzisa uhlelo olukhiqiza okuphumayo okulandelayo.

Hello Simulator

Siyakuhalalisela! Manje usungumsebenzisi we-ns-3!

Yini okufanele ngiyenze uma ngingayiboni imiphumela?

Uma ubona imiyalezo I-Wafokubonisa ukuthi ukwakhiwa kuqedwe ngempumelelo, kodwa awuboni okukhiphayo "Sawubona Simulator", bese kuba nokwenzeka ukuthi esigabeni [Yakha-nge-Waf] ushintshele imodi yakho yokwakha ukuze elungiselelwe, kodwa uphuthelwe ukuphindela kumodi lungisa. Konke okukhiphayo kwekhonsoli okusetshenziswe kulesi sifundo kusebenzisa ingxenye ekhethekile ye-ns-3 eyenza ukuloga futhi isetshenziselwa ukuphrinta imilayezo yangokwezifiso kukhonsoli. Okukhiphayo kule ngxenye kuyacishwa ngokuzenzakalela uma ikhodi ethuthukisiwe ihlanganiswa - "iyalungiswa". Uma ungaboni okukhiphayo kokuthi "Sawubona Simulator", faka okulandelayo:

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

ukulungisa I-Waf ukwakha izinguqulo zokususa iphutha zezinhlelo ze-ns-3, ezifaka izibonelo nokuhlolwa. Kufanele wakhe kabusha inguqulo yamanje yokususa iphutha yekhodi ngokuthayipha

$ ./waf

Manje uma uqhuba uhlelo sawubona-simulator, kufanele ubone umphumela olindelekile.

3.6.1 Izimpikiswano zomugqa womyalo

Ukuze udlulisele izimpikiswano zomugqa womyalo ohlelweni lwe-ns-3, sebenzisa iphethini elandelayo:

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

Faka esikhundleni egameni lohlelo lwakho nasezingxabanweni. Ukuphikisana -β€―-command-template ngoba I-Waf empeleni iresiphi yokwakha umugqa womyalo wangempela I-Waf esetshenziselwe ukwenza uhlelo. I-Waf ihlola ukuthi isakhiwo siphelile, isetha izindlela zomtapo wolwazi okwabelwana ngazo, bese isebenzisa ithempulethi yomugqa womyalo enikeziwe bese ifaka esikhundleni segama lohlelo endaweni ye-%s ukuze ibize okusebenzisekayo. Uma uthola le syntax iyinkimbinkimbi, kukhona inguqulo elula ebandakanya uhlelo lwe-ns-3 kanye nezimpikiswano zalo ezifakwe kumacaphuno owodwa:

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

Esinye isibonelo esiwusizo ukusebenzisa ama-test suites ngokukhetha. Ake sicabange ukuthi kukhona indawo yokuhlola ebizwa ngokuthi i-mytest (empeleni ayikho). Ngenhla sisebenzise umbhalo we-./test.py ukwenza izivivinyo eziningi ngokuhambisana, okubiza ngokuphindaphindiwe uhlelo lokuhlola umgijimi wokuhlola. Shaya ucingo umgijimi wokuhlola ngokuqondile ukuze uqalise ukuhlolwa okukodwa:

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

Izimpikiswano zizodluliselwa ohlelweni umgijimi wokuhlola. Njengoba i-mytest ingekho, kuzokwenziwa umlayezo wephutha. Ukuze uphrinte izinketho ezitholakalayo zomgijimi wokuhlola, faka:

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

3.6.2 Ukulungisa iphutha

Ukuze usebenzise izinhlelo ze-ns-3 ngaphansi kwesinye isisetshenziswa, njengesilungisi sephutha (isibonelo, gdb) noma ithuluzi lokuhlola inkumbulo (isibonelo, i-valgrind), sebenzisa ifomu elifanayo -β€―-command-template = "…". Isibonelo, ukuqalisa ku-debugger gdb uhlelo lwakho lwe-s-3 olunezimpikiswano:

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

Qaphela ukuthi igama lohlelo lwe-ns-3 liza nokuphikisana -β€―-run, kanye nensiza yokuphatha (lapha gdb) uwuphawu lokuqala engxabano -β€―-command-template. Inketho -β€―-args uyazisa gdbukuthi wonke umugqa womyalo ungowohlelo "oluphansi". (Ezinye izinguqulo gdb angiyiqondi inketho -β€―-args. Kulokhu, susa izimpikiswano zohlelo ku -β€―-command-template bese usebenzisa isethi yomyalo gdb i-args.) Singakwazi ukuhlanganisa le recipe kanye neyangaphambili ukuze sihlole ngaphansi kwesilungisi sephutha:

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

3.6.3 Inkomba yokusebenza

I-waf kufanele yethulwe endaweni yayo phezulu kwesihlahla se-ns-3. Le folda iba uhla lwemibhalo olusebenzayo lapho kuzobhalwa khona amafayela okukhiphayo. Kodwa kuthiwani uma ufuna ukugcina lawa mafayela ngaphandle kwesihlahla somthombo we-ns-3? Sebenzisa impikiswano -β€―-cwd:

$ ./waf --cwd=...

Ungase ukuthole kuwusizo kakhudlwana ukuthola amafayela okukhiphayo ohlwini lwakho lwemibhalo olusebenzayo. Kulesi simo, isenzo esilandelayo esingaqondile singasiza:

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

Lo mhlobiso wenguqulo yangaphambilini yomyalo ugcina umkhombandlela osebenzayo wamanje, uya kusiqondisi I-Wafbese eyala I-Waf ukushintsha uhla lwemibhalo olusebenzayo lubuyele kuhla lwemibhalo olusebenzayo olulondolozwe ngaphambi kokuqala uhlelo. Sibala iqembu -β€―-cwd Ukuze kuphelele, abasebenzisi abaningi bamane basebenzise i-Waf kusuka kuhla lwemibhalo olusezingeni eliphezulu futhi bakhiqize amafayela okukhipha lapho.

Iyaqhubeka: Isahluko 4

Source: www.habr.com

Engeza amazwana