ns-3 network simulator tutorial. Chitsauko 3

ns-3 network simulator tutorial. Chitsauko 3
Chitsauko 1,2

3 Kutanga
3.1 Muchidimbu
3.2 Zvinodiwa
3.2.1 Kudhaunirodha ns-3 kuburitswa senzvimbo yekuchengetera zvinyorwa
3.3 Kudhaunirodha ns-3 uchishandisa Git
3.3.1 Kuisa ns-3 uchishandisa Bake
3.4 Gungano ns-3
3.4.1 Kuvaka nebuild.py
3.4.2 Kuvaka neBake
3.4.3 Vaka neWaf
3.5 Kuedza ns-3
3.6 Kumhanyisa chinyorwa
3.6.1 Mirairo mitsetse nharo
3.6.2 Debugging
3.6.3 dhairekitori rekushanda

Chitsauko 3

Kutanga

Ichi chitsauko chine chinangwa chekugadzirira muverengi kuti atange nekombuta inogona kunge isina kumbobvira yaisa ns-3. Iyo inovhara mapuratifomu anotsigirwa, zvinodikanwa, maitiro ekuwana ns-3, maitiro ekuvaka ns-3, uye maitiro ekuyedza kuvaka kwako uye kuita zvirongwa zviri nyore.

3.1 Muchidimbu

Iyo ns-3 simulator inovakwa sehurongwa hwekudyidzana software maraibhurari. Panguva yegungano, kodhi yezvirongwa zvevashandisi inobatanidzwa nemaraibhurari aya. Iyo C ++ kana Python programming mitauro inoshandiswa kunyora tsika zvirongwa.

Ns-3 inogoverwa sekodhi kodhi, zvinoreva kuti iyo inotarirwa system inofanirwa kunge iine software yekuvandudza nharaunda kuitira kuti itange yavaka maraibhurari uyezve kuvaka chirongwa chemushandisi. Muchidimbu, ns-3 inogona kugovaniswa semaraibhurari akagadzirira-akagadzirirwa eimwe system, uye mune ramangwana anogona kugoverwa nenzira iyi. Asi mazuvano vashandisi vazhinji vanoita basa ravo nekugadzirisa ns-3 pachayo, saka zvinobatsira kuve nekodhi yekodhi yekuvaka maraibhurari. Kana paine chero munhu angade kuita basa rekugadzira akagadzirira-akagadzirwa maraibhurari uye mapakeji ekushandisa masisitimu, ndapota bata iyo tsamba yekutumira. ns-vagadziri.

Tevere, isu tichatarisa nzira nhatu dzekurodha nekuvaka ns-3. Yekutanga ndeyekurodha uye kuvaka iyo yepamutemo kuburitswa kubva kune huru saiti. Yechipiri ndiko kusarudzwa uye kusangana kwemakopi ekuvandudza shanduro dzeiyo basic ns-3 kuisirwa. Yechitatu ndeye kushandisa mamwe maturusi ekuvaka kurodha mamwe ekuwedzera e ns-3. Tichapfuura neimwe neimwe sezvo maturusi akasiyana zvishoma.

Vane ruzivo vashandisi veLinux vangashamisika kuti sei ns-3 isina kupihwa sepakeji senge mamwe akawanda maraibhurari anoshandisa package maneja? Kunyangwe paine mabhanari mapakeji ekugoverwa kwakasiyana kweLinux (semuenzaniso Debian), vashandisi vazhinji vanopedzisira vagadzirisa maraibhurari uye vachizovaka patsva ns-3 ivo pachavo, saka kuve nekodhi kodhi iripo. Nechikonzero ichi, isu tinotarisa pakuisa kubva kunobva.

Kune akawanda maapplication ns-3 kodzero mudzi hazvidiwi, zvinokurudzirwa kushandisa isina kurongeka mushandisi account.

3.2 Zvinodiwa

Iyo yese seti yeanowanikwa ns-3 maraibhurari ane akati wandei anotsamira pamaraibhurari ebato rechitatu, asi kune chikamu chikuru ns-3 inogona kuvakwa uye kushandiswa nerutsigiro kune akati wandei akajairwa (anowanzo kuisirwa nekusarudzika) zvikamu: C ++ compiler, Python, sosi kodhi mupepeti (semuenzaniso, vim, emacs kana kudzikatidzika kwezuva) uye, kana nzvimbo dzekusimudzira dzakashandiswa, Git vhezheni yekudzora masisitimu. Vazhinji vekutanga-vashandisi havazodi kunetsekana kana gadziriso yavo ikashuma mamwe ns-3 epamberi maficha asipo, asi kune avo vanoda kuisirwa kuzere, chirongwa chinopa wiki iyo inosanganisira mapeji ane akawanda anobatsira matipi uye matipi. Rimwe peji rakadai iPeji yekuisa, ine mirairo yekuisa yeakasiyana masisitimu, anowanikwa pa: https://www.nsnam.org/wiki/Installation.

The Prerequisites chikamu cheiyi wiki chinotsanangura kuti ndeapi mapakeji anodiwa kutsigira zvakajairika ns-3 sarudzo uye zvakare inopa mirairo inoshandiswa kuaisa pane zvakajairika flavour yeLinux kana macOS.

Unogona kutora mukana uyu wekuongorora iyo ns-3 wiki peji kana iyo huru webhusaiti: https://www.nsnam.org, nekuti kune ruzivo rwakawanda ipapo. Kutanga neshanduro yazvino ye ns-3 (ns-3.29), maturusi anotevera anodiwa kuti uite ns-3:

Tool Package/Version

  • C++ compiler
    clang++ kana g++ (g++ version 4.9 kana kupfuura)
  • Python
    python2 vhezheni>= 2.7.10, kana python3 vhezheni>=3.4
  • Git
    chero yazvino vhezheni (kuwana ns-3 paGitLab.com)
  • tar
    chero yazvino vhezheni (yekusunungura ns-3 kuburitswa)
  • bunzip2
    chero yazvino vhezheni (yekusunungura iyo ns-3 kuburitswa)

Kuti utarise iyo default vhezheni yePython, nyora python -V. Kuti utarise g++ vhezheni, nyora g++ -v. Kana chero maturusi asipo kana asakara, ndapota tarisa kune yekumisikidza gwara pane ns-3 wiki peji.

Kubva zvino zvichienda mberi, isu tinofungidzira kuti muverengi ari kumhanyisa Linux, MacOS, kana Linux emulator, uye ane angangoita maturusi ari pamusoro.

3.2.1 Kudhaunirodha ns-3 kuburitswa senzvimbo yekuchengetera zvinyorwa

Iyi ndiyo nzira yechiito yemushandisi mutsva anoda kudhawunirodha uye kuyedza neazvino kuburitswa uye mapakeji e ns-3. ns-3 inoburitswa inoburitswa seyakamanikidzwa sosi matura, dzimwe nguva inonzi tarball. tarball ndeye yakakosha software archive fomati umo akati wandei mafaera anosanganiswa pamwechete. Iyo archive inowanzoomeswa. ns-3 boot process kuburikidza tarball iri nyore, iwe unongoda kusarudza kuburitsa, kurodha uye kuiburitsa.

Ngatifungei kuti iwe, semushandisi, unoda kuvaka ns-3 mudhairekitori remunharaunda rinonzi nzvimbo yekushanda. Iwe unogona kuwana kopi inoshanda yekuburitswa nekuisa zvinotevera muLinux console (kutsiva iyo yakakodzera shanduro nhamba, hongu)

$ 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 

Nyatsoteerera kune zvinoshandiswa pamusoro apa wget, inova chirairo chekuraira chishandiso chekurodha zvinhu kubva paInternet. Kana usati waiisa, unogona kushandisa browser yako pane izvi.

Kutevera matanho aya kunokuendesa kune ns-allinone-3.29 dhairekitori, ipapo iwe unofanirwa kuona akati wandei mafaera uye madhairekitori.

$ 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

Iwe zvino wagadzirira kuvaka iyo ns-3 base yekugovera uye unogona kuenda kuchikamu chekuvaka ns-3.

3.3 Kudhaunirodha ns-3 uchishandisa Git

Iyo ns-3 kodhi inowanikwa muGit repositories paGitLab.com pa https://gitlab.com/nsnam/. Group nsnam inounza pamwechete dzakasiyana siyana dzekuchengetedza dzinoshandiswa neyakavhurika sosi purojekiti.

Nzira iri nyore yekutanga kushandisa Git repositories ndeye forogo kana kuenzanisa nharaunda ns-3-allinone. Iyi seti yezvinyorwa zvinogadzirisa kurodha uye kuungana kweanonyanya kushandiswa ns-3 subsystems. Kana iwe uri mutsva kuGit, mazwi ekuti "fork" uye "clone" anogona kunge asina kujairika kwauri; kana zvirizvo, isu tinokurudzira kuti ungo tevedzera (ita yako kopi) iyo repository iri paGitLab.com seizvi:

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

Panguva ino, maonero edhairekitori rako ns-3-allinone zvakati siyanei neiyo yekuburitsa archive dhairekitori inotsanangurwa pamusoro. Inofanira kutaridzika seizvi:

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

Ndapota cherechedza kuti pane script download.py, iyo inozowedzera ns-3 uye inoperekedza sosi kodhi. Pano iwe une sarudzo: kurodha yazvino ns-3 yekuvandudza snapshot:

$ python download.py

kana kusarudza iyo ns-3 kuburitswa uchishandisa mureza -n kuratidza nhamba yekuburitsa:

$ python download.py -n ns-3.29

Mushure meiyi nhanho kune dhairekitori ns-3-allinone mamwe marepositories achatorwa ns-3, bake, pybindgen ΠΈ netanim.

taura pfungwa
Pamuchina une Ubuntu16.04 yakachena, ini ndaida kushandura murairo kune izvi: $ sudo python3 download.py -n ns-3.29 (zvino zvinyorwa zvemushanduri).

3.3.1 Kuisa ns-3 uchishandisa Bake

Idzi nzira mbiri dziri pamusoro (source archive kana repository ns-3-allinone kuburikidza neGit) inobatsira kuwana iyo yakapusa ns-3 yekumisikidza ine akawanda addons(pybindgen kugadzira Python bindings uye netanim yetiweki animation). Yechitatu repository yakapihwa nekusarudzika mu ns-3-allinone inonzi bake.

Bhaka chishandiso chekuvaka kwakarongeka kwesoftware kubva kune akawanda marepositori, akagadzirirwa iyo ns-3 chirongwa. Bhaka inogona kushandiswa kuwana shanduro dzekuvandudza dze ns-3, pamwe nekudhawunirodha nekuvaka mawedzero eiyo base vhezheni yekugovera ns-3, senge nharaunda. Direct Code Kuitwa, CradleNetwork Simulation Cradle, kukwanisa kugadzira zvisungo zvitsva zvePython uye zvakasiyana-siyana ns-3 "mapurogiramu".

taura pfungwa
CradleNetwork Simulation Cradle chigadziriso chinokutendera kuti ushandise chaiyo TCP/IP network stacks mukati metiweki simulator.

Kana iwe uchitarisira yako ns-3 kuisirwa kuve nepamusoro kana mamwe maficha, unogona kutevera iyi yekuisa nzira.

Mune ichangoburwa ns-3 kuburitswa Bhaka yakawedzerwa pakusunungurwa kwetara. Iko kuburitswa kunosanganisira faira yekumisikidza iyo inokutendera iwe kurodha yazvino software shanduro panguva yekuburitswa. Ndiko, semuenzaniso, shanduro Bhaka, iyo yakagovaniswa nekuburitswa ns-3.29, inogona kushandiswa kutora zvikamu zvekuburitswa kwe ns-3 kana kumberi, asi haigone kushandiswa kutora zvikamu zvekuzoburitswa gare gare (kana iro bakeconf.xml isina kuvandudzwa).

Iwe unogona zvakare kuwana kopi yazvino bakenekuisa murairo unotevera muLinux console yako (uchifunga kuti une Git yakaiswa):

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

Paunomhanyisa git command, iwe unofanirwa kuona chimwe chinhu sechinotevera:

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.

Mushure mokunge murairo wapera clone unofanira kuva nedhairekitori rine zita bake, zviri mukati mazvo zvinofanirwa kutaridzika seizvi:

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

Ziva kuti wakatakura akati wandei Python scripts, Python module inonzi bake uye XML yekumisikidza faira. Nhanho inotevera ndeye kushandisa zvinyorwa izvi kurodha uye kuvaka iyo ns-3 kugovera kwesarudzo yako. Zvinangwa zvinoverengeka zvekugadzirisa zviripo:

  1. ns-3.29: module inoenderana nekuburitswa; iyo inodhawunirodha zvinhu zvakafanana nekuburitswa mutarball;

  2. ns-3-dev: module yakafanana, asi uchishandisa kodhi kubva pamuti wekuvandudza;

  3. ns-allinone-3.29: Mushonga unosanganisira zvimwe zvekuwedzera zvakaita seKudzvanya routing uye Network Simulation Cradle, Openflow ye ns-3.

  4. ns-3-allinone: yakafanana neyekuburitswa vhezheni yemodule zvese pamwechete, asi yekuvandudza kodhi.

taura pfungwa
Click - modular software yekuvaka yekugadzira ma routers.

Openflow iprotocol yekutonga maitiro ekugadzirisa data inofambiswa pamusoro peiyo data network nema routers uye switch, kushandisa software-inotsanangurwa network tekinoroji.

Iyo yazvino yekuvandudza snapshot (isina-kuburitswa) ns-3 inogona kuwanikwa pa:https://gitlab.com/nsnam/ns-3-dev.git.

Vagadziri vanoedza kuchengetedza marekodhi aya muhurongwa hwekushanda, asi ari munzvimbo yekusimudzira uye ane kodhi isina kuburitswa, saka kana ukasaronga kushandisa zvitsva, sarudza iyo yepamutemo kuburitswa.

Unogona kuwana yazvino vhezheni yekodhi nekubhurawuza runyorwa rwezvinyorwa, kana nekuenda kune ns-3 Inoburitswa peji rewebhu:https://www.nsnam.org/releases/ uye nekudzvanya pane yazvino vhezheni link. Mumuenzaniso uyu tichaenderera mberi nens-3.29.

Zvino, kuti titore ns-3 zvikamu zvatinoda, isu tichashandisa chishandiso Bhaka. Ngatitaurei mashoko mashoma ekusuma nezvebasa racho Bhaka.

Bake inoshanda nekurodha mapakeji zvinyorwa mudhairekitori mabviro uye kuisa ma library mudura rekuvaka. Bhaka inogona kumhanya nekunongedza iyo binary, asi kana iwe uchida kumhanya Bhaka kwete kubva kudhairekitori rayakadhawunirwa, zvinokurudzirwa kuwedzera nzira yekuenda bake kunzira yako (PATH nharaunda inoshanduka), semuenzaniso sezvinotevera (muenzaniso weLinux bash shell). Enda kune "bake" dhairekitori uye wobva waisa anotevera nharaunda akasiyana:

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

Izvi zvichaisa purogiramu bake.py kune iyo shell nzira uye inobvumira mamwe mapurogiramu kuwana executable uye maraibhurari ayo akagadzira bake. Mune zvimwe zviitiko zvekushandisa bake, iyo PATH nePYTHONPATH inotsanangurwa pamusoro apa haidiwi, asi kuvakwa kwakakwana kwe ns-3-allinone (ine mamwe mapakeji) kazhinji kunoda.

Enda kune yako yekushanda dhairekitori uye isa zvinotevera muiyo console:

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

Zvino tichazobvunza Bhaka tarisa kuti tine midziyo yakakwana yekuisa zvinhu zvakasiyana-siyana. Dial:

$ ./bake.py check

Iwe unofanirwa kuona chimwe chinhu chakadai sechinotevera:

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

Kunyanya, kurodha maturusi akadai seMercurial, CVS, Git uye Bazaar akakosha mudanho iri sezvo vachitibvumidza kuwana kodhi. Panguva ino, isa zvishandiso zvisipo nenzira yakajairika kune yako system (kana iwe uchiziva sei) kana kubata yako system maneja kuti ubatsirwe.

Zvadaro, edza kudhaunirodha software:

$ ./bake.py download

chigumisiro chinofanira kuva chimwe chinhu chakadai:

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

Izvi zvichareva kuti matatu masosi akatorwa. Zvino enda kune iyo dhairekitori uye nyora ls; Iwe unofanirwa kuona:

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

Iye zvino wagadzirira kuvaka iyo ns-3 kugovera.

3.4 Gungano ns-3

Sekurodha pasi ns-3, kune nzira dzinoverengeka dzekuvaka ns-3. Chinhu chikuru chatinoda kusimbisa ndechekuti ns-3 inovakwa uchishandisa mudziyo wekuvaka unonzi Wafzvinotsanangurwa pazasi. Vazhinji vashandisi vachashanda navo Waf, asi pane zvinyorwa zvishoma zvinokubatsira kuti utange kana kuronga zvimwe zvakaoma kuvaka. Saka ndapota, usati waverenga nezve Waf, tarisai build.py uye ungano pamwe chete bake.

3.4.1 Kuvaka nebuild.py

Cherechedza chinyorwa! Iyi nhanho yekuvaka inongowanikwa kubva kune sosi archive vhezheni yakawanikwa sezvatsanangurwa pamusoro; uye kwete kurodha pasi kuburikidza negit kana kubheka.

Paunenge uchishanda neyakaburitswa archive tarballin ns-3-allinone Pane script inobatsira iyo inogona kuita kuti kuunganidza zvikamu zvive nyore. Inonzi build.py. Iyi purogiramu ichakugadzirira purojekiti nenzira inobatsira zvikuru. Nekudaro, cherechedza kuti kuseta kwepamberi uye kushanda ne ns-3 kazhinji kunosanganisira kushandisa ns-3's yega kuvaka sisitimu, Waf, iyo ichaunzwa gare gare muchidzidzo chino.

Kana iwe wakadhawunirodha uchishandisa tarball, ipapo mudhairekitori rako ~/nzvimbo yebasa dhairekitori rine zita rakafanana ns-allinone-3.29. Isa zvinotevera:

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

Pakufona build.py Isu takashandisa mitsetse yemirairo mitsetse kuvaka mienzaniso uye bvunzo dzinoshandiswa muchidzidzo ichi, izvo zvisina kuvakwa nekumisikidza mu ns-3. Nekutadza, chirongwa chinovakawo ese aripo mamodule. Zvino, kana uchida, unogona kuvaka ns-3 pasina mienzaniso uye bvunzo, kana kusabvisa mamodule asingadikanwi pabasa rako.

Iwe uchaona akawanda e compiler anobuda mameseji anoratidzwa neiyo script sezvo ichivaka zvikamu zvakasiyana zvawatakura. Kutanga iyo script ichaedza kuvaka iyo animator netanim, ipapo jenareta rinosunga pybindgen uye pakupedzisira ns-3. Kana iyo nzira yapera, iwe unofanirwa kuona zvinotevera:

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

Mumitsara mitatu yekupedzisira yerondedzero tinoona meseji nezve mamodule asina kuvakwa:

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

Izvi zvinongoreva kuti mamwe ma ns-3 mamodule anoenderana nemaraibhurari ekunze anogona kunge asina kuvakwa, kana kuti iwo haafanirwe kuvakirwa iyi gadziriso. Izvi hazvireve kuti simulator haina kuunganidzwa kana kuti mamodule akaunganidzwa haashande nemazvo.

3.4.2 Kuvaka neBake

Kana iwe wakashandisa kubheka pamusoro kuti uwane kodhi kodhi kubva kumapurojekiti epurojekiti, unogona kuramba uchiishandisa kuvaka ns-3. Dial:

$ ./bake.py build

uye iwe unofanirwa kuona chimwe chinhu chakadai:

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

kukurumidza: Unogonawo kuita zvese kurodha uye kuvaka matanho kamwechete nekudaidza "bake.py deploy".

Kuunganidza zvikamu zvose zvinogona kukundikana, asi gungano rinoenderera mberi kana chikamu chisingadiwi. Semuenzaniso, ichangoburwa yekutakurika nyaya yaive iyoyo castxml inogona kuunganidzwa nemudziyo bake kwete pamapuratifomu ese. Muchiitiko ichi, meseji yakaita seiyi ichabuda:

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

Zvisinei, castxml inongodiwa chete kana iwe uchida kugadzira yakagadziridzwa Python bindings. Kune vazhinji vashandisi hapana chikonzero cheizvi (zvichida kusvika vachinja ns-3), saka yambiro dzakadaro dzinogona kufuratirwa zvakachengeteka ikozvino.

Kana ikatadza, murairo unotevera unokupa zano pamusoro pekushaikwa kutsamira:

$ ./bake.py show

Izvo zvakasiyana-siyana zvinoenderana nemapakeji auri kuedza kuvaka anozonyorwa.

3.4.3 Vaka neWaf

Kusvika panguva ino, kutanga kuvaka ns-3, takashandisa chero script build.py, kana mudziyo bake. Zvishandiso izvi zvinobatsira pakuvaka ns-3 nekuchengetedza maraibhurari. Muchokwadi, kuvaka vanomhanyisa chishandiso chekuvaka Waf kubva mudhairekitori ns-3. Waf yakaiswa ne ns-3 source code. Vazhinji vashandisi vanokurumidza kuenda kune yakananga kushandiswa kugadzirisa uye kuunganidza iyo ns-3 Waf. Saka, kuti uenderere mberi, ndapota enda kune ns-3 dhairekitori yawakagadzira pakutanga.

Izvi hazvinyanyi kudiwa panguva ino, asi zvichave zvinobatsira kudzosera kumashure zvishoma uye kuona maitiro ekuita shanduko kugadziriso yeprojekiti. Pamwe iyo inonyanya kukosha shanduko yekuchinja iwe yaunogona kuita ndeye kugadzira yakagadziridzwa vhezheni yekodhi. Nekusagadzikana, iwe wakagadzirisa purojekiti yako kuti uvake debug vhezheni. Ngatitarisei purojekiti yekugadzira yakagadziridzwa kuvaka. Kutsanangurira Waf kuti inofanirwa kugadzira zvivakwa zvakagadziridzwa zvinosanganisira mienzaniso uye bvunzo, iwe unozofanirwa kumhanyisa inotevera mirairo:

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

Izvi zvichatanga Waf kunze kwedhairekitori renzvimbo (kuti zvikuitire nyore). Murairo wekutanga unochenesa kubva kune yakapfuura kuvaka, izvi kazhinji hazvinyanyi kudikanwa, asi itsika yakanaka (onawo kuvaka profiles pazasi); izvi zvinobvisa maraibhurari akagadzirwa kare uye chinhu mafaera ari mudhairekitori kuvaka/. Kana iyo purojekiti ikagadziridzwa uye iyo yekuvaka system inotarisa zvakasiyana-siyana zvinotsamira, iwe unofanirwa kuona zvakabuda zvakafanana neinotevera:

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)

Ndapota cherechedza chikamu chekupedzisira chezvinyorwa zviri pamusoro. Dzimwe sarudzo dze ns-3 hadzigoneswe nekusarudzika kana dzinoda tsigiro yehurongwa kuti ishande nemazvo. Semuenzaniso, kugonesa XmlTo, raibhurari inofanirwa kunge iripo pane system libxml-2.0. Kana raibhurari iyi isina kuwanikwa uye ns-3 inoenderana nayo isina kugoneswa, meseji icharatidzwa. Uyewo cherechedza kuti zvinokwanisika kushandisa murairo sudo kuseta iyo suid bit "set group ID panguva yekumhanya" kune mamwe mapurogiramu. Iyo haigone kugoneswa nekukasira uye saka chimiro ichi chinoratidzika se "chisina kugoneswa". Chekupedzisira, kuti uwane runyoro rwezvinogoneswa sarudzo, shandisa Waf ine parameter --check-config.

Zvino ngatidzokerei uye tidzokere ku debug kuvaka ine mienzaniso nemiedzo.

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

Iyo kuvaka sisitimu yave kumisikidzwa uye unogona kuvaka debug shanduro dze ns-3 zvirongwa nekungo typing:

$ ./waf

Matanho ari pamusoro angave akakumanikidza kuti uvake chikamu che ns-3 system kaviri, asi ikozvino iwe unoziva nzira yekushandura iyo gadziriso uye kuvaka yakagadziridzwa kodhi.

Kuti utarise kuti ndeipi chimiro chiri kushanda kune yakapihwa purojekiti kumisikidzwa, pane murairo:

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

Mamiriro ezvinhu ari pamusoro apa build.py inotsigirawo nharo --enable-examples ΠΈ --enable-tests, asi zvimwe zvingasarudzwa Waf haitsigire zvakananga. Semuenzaniso, izvi hazvishande:

$ ./build.py --disable-python

mhinduro ichava seizvi:

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

Nekudaro, iyo yakakosha opareta - - inogona kushandiswa kupfuudza mamwe ma paramita kuburikidza wafsaka pachinzvimbo chepamusoro murairo unotevera uchashanda:

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

nokuti inogadzira murairo mukuru ./waf gadzirisa --disable-python. Heano mamwe emamwe matipi ekusuma nezve Waf.

Kubata zvikanganiso zvekuvaka

ns-3 kuburitswa kunoedzwa pane ichangoburwa C ++ compilers iripo panguva yekuburitswa pane zvakajairika Linux uye MacOS kugoverwa. Nekudaro, nekufamba kwenguva, kugovera kutsva kunoburitswa nevanyowani, uye aya mabhatani matsva anowanzo kuve akanyanya pedantic nezve yambiro. ns-3 inogadzirisa kuvaka kwayo kubata yese yambiro sezvikanganiso, saka dzimwe nguva kana iwe uchimhanyisa yekare vhezheni pane nyowani system, yambiro yemubatanidzwa inogona kumisa kuvaka.

Semuenzaniso, kwakamboburitswa ns-3.28 yeFedora 28, iyo yaisanganisira nyowani huru vhezheni. gcc (gcc-8) Kuvaka kuburitswa ns-3.28 kana vhezheni dzekutanga pasi peFedora 28, ine Gtk2 + yakaiswa, chikanganiso chinotevera chichaitika:

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

Mukuburitswa kubva pans-3.28.1, mukati Waf sarudzo iripo kugadzirisa matambudziko aya. Inodzima kuseta "-Werror" mureza mu g++ uye clang++. Iyi ndiyo "--disable-werror" sarudzo uye inofanirwa kushandiswa panguva yekumisikidzwa:

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

Gadzirisa kana kuunganidza

Mimwe mirairo Waf zvine zvazvinoreva chete muchikamu chekugadzirisa, uye zvimwe zvinongoshanda muchikamu chekuvaka. Semuenzaniso, kana iwe uchida kushandisa iyo ns-3 emulation maficha, unogona kugonesa bit setting chamhembe kushandisa sudo, sezvatsanangurwa pamusoro apa. Izvi zvinodarika iyo yekumisikidza nhanho mirairo, uye nekudaro iwe unogona kushandura iyo gadziriso uchishandisa unotevera murairo, unosanganisirawo mienzaniso uye bvunzo.

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

Kana ukaita izvi Waf ichavhura sudokushandura emulation kodhi socket kugadzira zvirongwa kuti umhanye nemvumo mudzi. The Waf Kune dzimwe dzakawanda sarudzo dziripo dzekugadzirisa uye kuvaka matanho. Kuti uongorore sarudzo dzako, isa:

$ ./waf --help

Muchikamu chinotevera tichashandisa mamwe maitiro ane chekuita nekuyedza.

Gungano Profiles

Tatoona kuti unogona sei kugadzirisa Waf zvemagungano debug ΠΈ optimized:

$ ./waf --build-profile=debug

Kune zvakare yepakati musangano profile, kuregedzera. Option -d zvakafanana ne --build-profile. Iyo yekuvaka mbiri inodzora kushandiswa kwematanda, zvirevo, uye compiler optimization switch:

ns-3 network simulator tutorial. Chitsauko 3

Sezvauri kuona, kutema matanda uye zvirevo zvinongowanikwa mukugadzirisa debug kuvaka. Iyo inokurudzirwa tsika ndeyekugadzira script yako mudebug mode, wobva waita inodzokororwa kumhanya (yehuwandu kana shanduko yeparameta) mune yakagadziridzwa kuvaka chimiro.

Kana iwe uine kodhi iyo inofanirwa kungomhanya mune mamwe maprofile ekuvaka, shandisa iyo 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;)

Default, Waf nzvimbo dzinovaka zvigadzirwa mudura rekuvaka. Unogona kutsanangura dhairekitori rakasiyana uchishandisa sarudzo -β€―-out, somuenzaniso:

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

Nekubatanidza izvi nemaprofile ekuvaka, unogona kushandura zviri nyore pakati peakasiyana sarudzo dzekubatanidza:

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

Izvo zvinokutendera kuti ushande nemagungano akawanda pasina kunyorazve gungano razvino nguva yega yega. Paunochinja kune imwe chimiro, Waf ichaiunganidza chete, pasina kudzoreredza zvachose zvese.

Paunochinja maprofiles nenzira iyi, unofanirwa kungwarira kuti upe sarudzo dzakafanana dzekugadzirisa nguva yega yega. Kutsanangudza akati wandei nharaunda kunobatsira kudzivirira kukanganisa:

$ 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

Compilers uye mireza

Mumienzaniso iri pamusoro Waf kuvaka ns-3 inoshandisa iyo C++ compiler kubva kuGCC ( g ++) Nekudaro, iwe unogona kushandura iyo yaunoshandisa Waf C ++ compiler, nekutsanangura CXX nharaunda inoshanduka. Semuenzaniso, kushandisa C++ compiler Clang, clang++,

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

Nenzira imwechete iwe unogona kugadzirisa Waf kushandisa yakagoverwa compilation uchishandisa distcc:

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

Ruzivo rwakawanda nezve distcc uye kuunganidzwa kwakagoverwa kunogona kuwanikwa pane peji reprojekiti muChinyorwa chikamu. Kuti uwedzere mireza yekubatanidza paunenge uchigadzira ns-3, shandisa iyo CXXFLAGS_EXTRA nharaunda inosiyana.

Kuiswa

Waf inogona kushandiswa kuisa maraibhurari munzvimbo dzakasiyana pane system. Nekumisikidza, ma library akaunganidzwa uye executables ari mudhairekitori kuvaka, uye sezvo Waf ichiziva nzvimbo yemaraibhurari aya uye zvinotemerwa, hapana chikonzero chekuisa maraibhurari kumwe kumwe.

Kana vashandisi vakasarudza kuisa kunze kweiyo dhairekitori rekuvaka, vanogona kumhanya kuraira ./waf gadza. The default prefix yekuisa ndeye / usr / yemuno, saka ./waf gadza ichaisa mapurogiramu mukati / usr / local / bin, maraibhurari mukati / usr / local / lib uye mafaira emusoro mukati /usr/local/include. Kodzero dzeSuperuser kazhinji dzinoda kugadzikwa nechivakashure, saka murairo wakajairika ungave sudo ./waf kuisa. Kana yakatangwa, Waf ichatanga yasarudza kushandisa maraibhurari akagovaniswa mudhairekitori rekuvaka, wozotsvaga maraibhurari munzira inoenda kumaraibhurari akagadzirirwa munharaunda yenzvimbo. Saka pakuisa maraibhurari pahurongwa, itsika yakanaka kutarisa kuti maraibhurari akakodzera ari kushandiswa here. Vashandisi vanogona kusarudza kuisa neyakasiyana prefix nekupfuura sarudzo panguva yekumisikidza --prefix, somuenzaniso:

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

Kana gare gare, mushure mekuvaka, mushandisi anopinda murairo wekugadza ./waf, chivakashure chichashandiswa /opt/local.

chikwata ./waf clean inofanira kushandiswa isati yagadzirisazve purojekiti kana kuiswa kwacho kuchizoshandisa Waf pasi pechivakashure chakasiyana.

Saka, kushandisa ns-3 hapana chikonzero chekufona ./waf install. Vazhinji vashandisi havazodi uyu murairo nekuti Waf ichatora maraibhurari aripo kubva kudhairekitori rekuvaka, asi vamwe vashandisi vanogona kuwana izvi zvichibatsira kana zviitiko zvavo zvichisanganisira kushanda nemapurogiramu ari kunze kwen-3 dhairekitori.

Waf single

Pamusoro peiyo ns-3 sosi yemuti, pane imwechete Waf script. Kana uchinge watanga kushanda, iwe uchapedza nguva yakawanda mudhairekitori scratch/ kana kudzika mukatisrc/... uye panguva imwe chete vanofanira kumhanya Waf. Unogona kungoyeuka kwauri uye kumhanya Waf sezvinotevera:

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

asi izvi zvichave zvinofinha uye kukanganisa, saka kune mhinduro dziri nani. Imwe nzira yakajairika ndeye kushandisa chinyorwa chinyorwa senge emacs kana vim, umo zvikamu zviviri zvekupedzisira zvinovhurwa, imwe inoshandiswa kuvaka ns-3, uye yechipiri inoshandiswa kugadzirisa code code. Kana uine chete tarball, ipapo shanduko yenzvimbo inogona kubatsira:

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

$ cd scratch 
$ waff build

Mumodule dhairekitori zvingave zvinoyedza kuwedzera diki waf script senge exec ../../waf. Ndapota, usadaro. Izvi zvinovhiringa kune vatsva uye, kana zvikaitwa zvisina kunaka, zvinotungamira kune zvakaoma-kuona-kukanganisa kuvaka. Mhinduro dzakaratidzwa pamusoro ndiyo nzira inofanira kushandiswa.

3.5 Kuedza ns-3

Unogona kumhanyisa ns-3 yekugovera unit test nekumhanyisa script ./test.py:

$ ./test.py

Miedzo iyi inoitwa mukufambirana ne Waf. Pakupedzisira unofanira kuona meseji inoti:

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

Iyi meseji yakakosha yekuziva kuparara kwevalgrind, kuparara kana kukanganisa, zvichiratidza matambudziko nekodhi kana kusawirirana pakati pezvishandiso nekodhi.

Iwe uchaona zvakare yekupedzisira kubuda kubva Waf uye muongorori ari kuyedza bvunzo yega yega, inozotaridzika seizvi:

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)

Uyu murairo unowanzo itwa nevashandisi kukurumidza kuona kuti ns-3 kugovera kwakavakirwa nemazvo. (Cherechedza kuti kurongeka kwe "PASS: ..." mitsetse inogona kunge yakasiyana, izvi zvinowanzoitika. Chinokosha ndechokuti mutsara wepfupiso uri kumagumo emushumo unoratidza kuti bvunzo dzose dzakapasa; hapana bvunzo dzakakundikana kana kupunzika.) Uye Wafuye test.py inofananidzira basa pane iripo processor cores yemuchina.

3.6 Kumhanyisa chinyorwa

Isu tinowanzo mhanyisa zvinyorwa pasi pekutonga Waf. Izvi zvinobvumira iyo yekuvaka sisitimu kuti ive nechokwadi chekuti nzira dzeraibhurari dzakagovaniswa dzakaiswa nenzira kwayo uye kuti maraibhurari anowanikwa panguva yekumhanya. Kuti uite purogiramu, ingoshandisa Waf ine parameter -β€―-run. Ngatimhanyei ns-3 yakaenzana neyeubiquitous chirongwa makadii nyikanekunyora zvinotevera:

$ ./waf --run hello-simulator

Waf inotanga kutarisa kuti chirongwa chakavakirwa nemazvo uye kuvaka kana zvichidikanwa. Zvadaro Waf ichaita chirongwa chinoburitsa zvinotevera zvinobuda.

Hello Simulator

Makorokoto! Wava mushandisi we ns-3!

Chii chandinofanira kuita kana ndikasaona mhinduro?

Kana ukaona mameseji Wafzvichiratidza kuti chivakwa chakapedzwa zvinobudirira, asi hausi kuona zvakabuda "Hello Simulator", saka pane mukana wekuti muchikamu che [Build-with-Waf] wakachinja maitiro ako ekuvaka kuti optimized, asi ndakatadza kudzoka ku modhi debug. Yese inoburitsa inoburitsa inoshandiswa muchidzidzo ichi inoshandisa yakakosha ns-3 chikamu chinoita kutema matanda uye inoshandiswa kudhinda mameseji etsika kune koni. Kubuda kubva muchikamu ichi kunovharwa otomatiki kana kodhi yakagadziridzwa yaunganidzwa - "yakagadziridzwa". Kana iwe usingaone iyo "Hello Simulator" inobuda, isa zvinotevera:

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

kugadzirisa Waf kuvaka debug shanduro dze ns-3 zvirongwa, izvo zvinosanganisira mienzaniso uye bvunzo. Iwe unofanirwa kubva wavakazve yazvino debug vhezheni yekodhi nekunyora

$ ./waf

Zvino kana iwe uchimhanyisa chirongwa mhoro-simulator, iwe unofanirwa kuona mhedzisiro inotarisirwa.

3.6.1 Mirairo mitsetse nharo

Kuti upfuure mutsara wemirairo nharo kune ns-3 chirongwa, shandisa inotevera patani:

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

Tsiva kune zita rechirongwa chako uye kune nharo. Nharo -β€―-command-template nokuti Waf ndizvo chaizvo resipi yekuvaka iyo chaiyo yekuraira mutsara Waf inoshandiswa kuita purogiramu. Waf inotarisa kuti kuvaka kwapera, inoseta nzira dzekuraibhurari dzakagovaniswa, yobva yashandisa yakapihwa mutsara wemirairo template uye inotsiva zita rechirongwa kuti %s inobata nzvimbo kuti afonere zvinogoneka. Kana iwe ukaona iyi syntax yakaoma, pane yakapusa vhezheni inosanganisira iyo ns-3 chirongwa uye nharo dzayo dzakavharirwa mune imwechete makotesheni:

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

Mumwe muenzaniso unonyanya kubatsira ndeyekumhanyisa test suites kusarudza. Ngatitorei pane test suite inonzi mytest (chaizvoizvo haipo). Pamusoro takashandisa iyo ./test.py script kumhanyisa akati wandei bvunzo dzakafanana, iyo inodzokorodza ichidaidza chirongwa chebvunzo. bvunzo-mumhanyi. Call bvunzo-mumhanyi zvakananga kuita bvunzo imwe chete:

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

Nharo dzichapfuudzwa kuchirongwa bvunzo-mumhanyi. Sezvo mytest isipo, meseji yekukanganisa ichagadzirwa. Kuti utsikise anowanikwa test-runner sarudzo, isa:

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

3.6.2 Debugging

Kumhanyisa ns-3 zvirongwa pasi pechimwe chishandiso, senge debugger (semuenzaniso, gdb) kana chiyeuchidzo chekuedza (semuenzaniso, valgrind), shandisa fomu rakafanana -β€―-command-template = "…". Semuenzaniso, kumhanya mune debugger gdb yako mhoro-simulator ns-3 chirongwa chine nharo:

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

Ziva kuti ns-3 zita rechirongwa rinouya nenharo -β€―-run, uye manejimendi utility (pano gdb) ndicho chiratidzo chekutanga munharo -β€―-command-template. Option -β€―-args inozivisa gdbkuti yakasara yemutsetse wekuraira ndeye "yakaderera" chirongwa. (Dzimwe shanduro gdb kusanzwisisa sarudzo -β€―-args. Muchiitiko ichi, bvisa nharo dzepurogiramu kubva -β€―-command-template uye shandisa command set gdb args.) Tinogona kusanganisa iyi resipi uye yapfuura kuti tiite bvunzo pasi pedebugger:

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

3.6.3 dhairekitori rekushanda

Waf inofanira kutangwa kubva panzvimbo yayo kumusoro kwemuti we ns-3. Iyi folda inova dhairekitori rekushanda uko mafaera anobuda achanyorwa. Asi ko kana iwe uchida kuchengeta mafaera aya kunze kwe ns-3 sosi yemuti? Shandisa nharo -β€―-cwd:

$ ./waf --cwd=...

Unogona kuwana zviri nyore kuwana mafaera anobuda mudhairekitori rako rekushanda. Muchiitiko ichi, chiito chinotevera chisina kunanga chinogona kubatsira:

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

Uku kushongedzwa kweiyo yapfuura vhezheni yemurairo inochengetedza ikozvino kushanda dhairekitori, inoenda kune dhairekitori Wafndokuzoraira Waf kushandura dhairekitori rekushanda kudzokera kune razvino rekushanda dhairekitori rakachengetwa usati watanga chirongwa. Tinotaura chikwata -β€―-cwd Kuti uwane kukwana, vashandisi vazhinji vanongomhanya Waf kubva kumusoro-level dhairekitori uye kugadzira mafaera anobuda ipapo.

Inoenderera mberi: Chitsauko 4

Source: www.habr.com

Voeg