ns-3 network simulator maphunziro. Mutu 3

ns-3 network simulator maphunziro. Mutu 3
Chithunzi cha 1,2

3 Chiyambi
3.1 Mwachidule
3.2 Zofunikira
3.2.1 Kutsitsa kutulutsidwa kwa ns-3 ngati malo osungira zakale
3.3 Kutsitsa ns-3 pogwiritsa ntchito Git
3.3.1 Kutsegula ns-3 pogwiritsa ntchito Bake
3.4 Msonkhano ns-3
3.4.1 Kumanga ndi build.py
3.4.2 Kumanga ndi Bake
3.4.3 Mangani ndi Waf
3.5 Kuyesa ns-3
3.6 Kuyendetsa script
3.6.1 Malamulo a mizere
3.6.2 Kuchotsa zolakwika
3.6.3 Chikwatu chogwirira ntchito

Mutu 3

Kuyamba

Mutuwu ukukonzekera kukonzekeretsa owerenga kuti ayambe ndi kompyuta yomwe mwina sanayikepo ns-3. Zimakhudza nsanja zothandizidwa, zofunika, momwe mungapezere ns-3, momwe mungamangire ns-3, ndi momwe mungayesere kumanga kwanu ndikuyendetsa mapulogalamu osavuta.

3.1 Mwachidule

The ns-3 simulator imamangidwa ngati dongosolo lamalaibulale a mapulogalamu ogwirizana. Pakusonkhanitsa, ma code a mapulogalamu ogwiritsira ntchito amalumikizidwa ndi malaibulale awa. Zilankhulo za C ++ kapena Python zimagwiritsidwa ntchito polemba mapulogalamu achikhalidwe.

Ns-3 imagawidwa ngati gwero lachidziwitso, zomwe zikutanthauza kuti dongosolo lomwe mukufuna liyenera kukhala ndi malo opangira mapulogalamu kuti ayambe kumanga malaibulale ndikumanga pulogalamu ya ogwiritsa ntchito. M'malo mwake, ns-3 ikhoza kugawidwa ngati malaibulale okonzeka a dongosolo linalake, ndipo mtsogolomo akhoza kugawidwa motere. Koma masiku ano ogwiritsa ntchito ambiri amachitadi ntchito yawo posintha ns-3 palokha, kotero ndikofunikira kukhala ndi code yoyambira kuti mumange malaibulale. Ngati wina angafune kugwira ntchito yopanga malaibulale okonzeka okonzeka ndi phukusi lamakina ogwiritsira ntchito, chonde lemberani mndandanda wamakalata ns-madivelopa.

Kenako, tiwona njira zitatu zotsitsa ndikumanga ns-3. Choyamba ndikutsitsa ndikumanga kumasulidwa kovomerezeka kuchokera patsamba lalikulu. Chachiwiri ndi kusankha ndi kusonkhanitsa makope a mitundu yotukuka ya kukhazikitsa ns-3. Chachitatu ndikugwiritsa ntchito zida zomangira zowonjezera kuti mukweze zowonjezera za ns-3. Tidutsa chilichonse chifukwa zida ndizosiyana pang'ono.

Ogwiritsa ntchito a Linux odziwa bwino angadabwe kuti chifukwa chiyani ns-3 sichikuperekedwa ngati phukusi monga malaibulale ena ambiri omwe amagwiritsa ntchito phukusi loyang'anira? Ngakhale pali mapaketi a binary amagawidwe osiyanasiyana a Linux (monga Debian), ogwiritsa ntchito ambiri amatha kusintha malaibulale ndikumanganso ns-3 okha, kotero kukhala ndi khodi yoyambira kuli kothandiza. Pachifukwa ichi, tiyang'ana pa kukhazikitsa kuchokera ku gwero.

Pazinthu zambiri za ns-3 maufulu muzu sizofunika, tikulimbikitsidwa kugwiritsa ntchito akaunti yosavomerezeka.

3.2 Zofunikira

Gulu lonse la malaibulale a ns-3 omwe alipo ali ndi zodalira zingapo pama library a chipani chachitatu, koma mbali zambiri za ns-3 zitha kumangidwa ndikugwiritsidwa ntchito mothandizidwa ndi zida zingapo zodziwika (nthawi zambiri zimayikidwa mwachisawawa): C ++ compiler, Python, source code editor (mwachitsanzo, vim, emacs kapena kadamsana) ndipo, ngati nkhokwe zachitukuko zikugwiritsidwa ntchito, machitidwe owongolera mtundu wa Git. Ogwiritsa ntchito nthawi yoyamba sayenera kuda nkhawa ngati kasinthidwe kawo kanena kuti zina za ns-3 zasowa, koma kwa iwo omwe akufuna kuyika kwathunthu, pulojekitiyi imapereka wiki yomwe ili ndi masamba omwe ali ndi malangizo ndi zidule zambiri. Tsamba limodzi lotere ndi tsamba lokhazikitsa, lomwe lili ndi malangizo oyika pamakina osiyanasiyana, omwe amapezeka pa: https://www.nsnam.org/wiki/Installation.

Gawo la Prerequisites la wiki iyi likufotokoza kuti ndi mapaketi ati omwe amafunikira kuti athandizire zosankha za ns-3 komanso amaperekanso malamulo omwe amagwiritsidwa ntchito kuziyika pazokonda za Linux kapena macOS.

Mutha kugwiritsa ntchito mwayiwu kufufuza tsamba la ns-3 wiki kapena tsamba lalikulu: https://www.nsnam.org, chifukwa pali zambiri zambiri kumeneko. Kuyambira ndi mtundu waposachedwa wa ns-3 (ns-3.29), zida zotsatirazi ndizofunikira kuti mugwiritse ntchito ns-3:

Phukusi / Mtundu

  • C ++ wopanga
    clang++ kapena g++ (g++ version 4.9 kapena apamwamba)
  • Python
    python2 version>= 2.7.10, kapena python3 version>=3.4
  • Giti
    mtundu uliwonse waposachedwa (kuti mupeze ns-3 pa GitLab.com)
  • tar
    mtundu uliwonse waposachedwa (wotulutsa ns‑3)
  • bunzip2
    mtundu uliwonse waposachedwa (potsitsa kutulutsidwa kwa ns-3)

Kuti muwone mtundu wokhazikika wa Python, lembani python -V. Kuti muwone mtundu wa g++, lembani g++ -v. Ngati zida zilizonse zikusowa kapena zakale kwambiri, chonde onani kalozera woyika patsamba la ns-3 wiki.

Kuyambira pano, tikuganiza kuti owerenga akuyendetsa Linux, MacOS, kapena emulator ya Linux, ndipo ali ndi zida zomwe zili pamwambapa.

3.2.1 Kutsitsa kutulutsidwa kwa ns-3 ngati malo osungira zakale

Izi ndizochitika kwa wogwiritsa ntchito watsopano yemwe akufuna kutsitsa ndikuyesa zotulutsa zaposachedwa kwambiri za ns-3. ns-3 zotulutsidwa zimasindikizidwa ngati zosungidwa zakale, zomwe nthawi zina zimatchedwa mpira. mpira ndi wapadera mapulogalamu archive mtundu umene angapo owona ali pamodzi. Zosungirako nthawi zambiri zimapanikizidwa. ns-3 boot process kudzera mpira ndiyosavuta, mumangofunika kusankha chotulutsa, kutsitsa ndikuchimasula.

Tiyerekeze kuti inu, monga wosuta, mukufuna kupanga ns-3 mu bukhu lapafupi lotchedwa malo ogwirira ntchito. Mutha kupeza kopi yotulutsidwayo polowetsa zotsatirazi mu Linux console (kulowetsa manambala oyenerera, inde)

$ 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 

Samalani zomwe zimagwiritsidwa ntchito pamwambapa chotsani, chomwe ndi chida cholamula chotsitsa zinthu kuchokera pa intaneti. Ngati simunayike, mutha kugwiritsa ntchito msakatuli wanu pa izi.

Kutsatira izi kukutengerani ku chikwatu cha ns-allinone-3.29, pamenepo muyenera kuwona mafayilo angapo ndi zolemba.

$ 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

Tsopano mwakonzeka kupanga gawo la ns-3 ndipo mutha kupita ku gawo lomanga ns-3.

3.3 Kutsitsa ns-3 pogwiritsa ntchito Git

Khodi ya ns-3 ikupezeka mu nkhokwe za Git pa GitLab.com pa https://gitlab.com/nsnam/. Gulu nsam zimabweretsa pamodzi nkhokwe zosiyanasiyana zomwe zimagwiritsidwa ntchito ndi polojekiti yotseguka.

Njira yosavuta yoyambira kugwiritsa ntchito nkhokwe za Git ndikufoloko kapena kufananiza chilengedwe ns-3-allinone. Awa ndi ma script omwe amayang'anira kutsitsa ndi kusonkhanitsa ma subsystems omwe amagwiritsidwa ntchito kwambiri ns-3. Ngati ndinu watsopano ku Git, mawu akuti "foloko" ndi "clone" angakhale osadziwika kwa inu; ngati ndi choncho, tikupangira kuti mungopanga (pangani nokha) chosungira chomwe chili pa GitLab.com motere:

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

Pakadali pano, mawonekedwe a chikwatu chanu ns-3-allinone zosiyana pang'ono ndi zolemba zakale zomwe zafotokozedwa pamwambapa. Iyenera kuwoneka motere:

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

Chonde dziwani kuti pali script download.py, zomwe zidzatulutsanso ns-3 ndi code code yotsagana nayo. Pano pali kusankha: mwina kutsitsa chithunzithunzi chaposachedwa cha ns-3:

$ python download.py

kapena kusankha ns-3 kumasulidwa pogwiritsa ntchito mbendera -n kuwonetsa nambala yotulutsidwa:

$ python download.py -n ns-3.29

Pambuyo pa sitepe iyi kwa chikwatu ns-3-allinone nkhokwe zina zidzatsitsidwa ns-3, kuphika, pybindgen ΠΈ netanim.

ndemanga
Pa makina okhala ndi Ubuntu16.04 woyera, ndinafunika kusintha lamuloli kuti: $ sudo python3 download.py -n ns-3.29 (zolemba za womasulira pambuyo pake).

3.3.1 Kutsegula ns-3 pogwiritsa ntchito Bake

Njira ziwiri zapamwambazi (source archive kapena repository ns-3-allinone kudzera pa Git) ndizothandiza pakukhazikitsa kosavuta kwa ns-3 ndi ma addons angapo (pybindgen kupanga zomangira za Python ndi netanim kwa makanema ojambula pamaneti). Chosungira chachitatu choperekedwa mwachisawawa mu ns-3-allinone chimatchedwa kuphika.

Kuphika ndi chida chothandizira kupanga mapulogalamu kuchokera kumalo ambiri osungira, opangidwira pulojekiti ya ns-3. Kuphika angagwiritsidwe ntchito kupeza mitundu yachitukuko ya ns-3, komanso kutsitsa ndi kumanga zowonjezera za mtundu wa ns-3, monga chilengedwe. Direct Code Kuchita, CradleNetwork Simulation Cradle, kuthekera kopanga zomangira zatsopano za Python ndi "mapulogalamu" osiyanasiyana a ns-3.

ndemanga
CradleNetwork Simulation Cradle ndi chimango chomwe chimakupatsani mwayi wogwiritsa ntchito ma stacks enieni a TCP/IP mkati mwa simulator ya netiweki.

Ngati mukuyembekeza kuyika kwanu kwa ns-3 kukhala ndi zotsogola kapena zowonjezera, mutha kutsatira njira iyi.

M'mabuku aposachedwa a ns-3 Kuphika adawonjezedwa pakumasulidwa kwa phula. Kutulutsidwa kumaphatikizapo fayilo yosinthika yomwe imakulolani kutsitsa mapulogalamu omwe alipo panopa panthawi yotulutsidwa. Ndiko, mwachitsanzo, mtundu Kuphika, yomwe imagawidwa ndi kumasulidwa ns-3.29, ingagwiritsidwe ntchito kupeza zigawo zomwe zimatulutsidwa kwa ns-3 kapena m'mbuyomo, koma sizingagwiritsidwe ntchito kupeza zigawo zomwe zidzatulutse mtsogolo (ngati fayilo yofotokozera phukusi bakeconf.xml osasinthidwa).

Mukhozanso kupeza kope laposachedwa kwambiri kuphikapolowetsa lamulo ili mu Linux console yanu (poganiza kuti muli ndi Git):

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

Mukayendetsa git command, muyenera kuwona chonga ichi:

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.

Lamulo likamaliza choyerekeza muyenera kukhala ndi chikwatu chotchedwa kuphika, zomwe zili mkati mwake ziyenera kuwoneka motere:

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

Dziwani kuti mwatsitsa zolemba zingapo za Python, gawo la Python lotchedwa kuphika ndi fayilo yosinthika ya XML. Chotsatira ndikugwiritsa ntchito zolemba izi kutsitsa ndikumanga kugawa kwa ns-3 komwe mwasankha. Zolinga zingapo zosinthira makonda zilipo:

  1. ns-3.29: gawo lolingana ndi kumasulidwa; idzatsitsa zigawo zofanana ndi kumasulidwa mu tarball;

  2. ns-3-dev: gawo lofanana, koma kugwiritsa ntchito code kuchokera ku mtengo wa chitukuko;

  3. ns-allinone-3.29: Gawo lomwe lili ndi zina zowonjezera monga Dinani mayendedwe ndi Network Simulation Cradle, Openflow ya ns-3.

  4. ns-3-allinone: zofanana ndi mtundu wotulutsidwa wa module allinone, koma kwa code yachitukuko.

ndemanga
Dinani - Zomangamanga zamapulogalamu opangira ma routers.

Openflow ndi ndondomeko yoyendetsera ntchito yokonza deta yomwe imafalitsidwa pa netiweki ya data ndi ma routers ndi ma switch, kugwiritsa ntchito ukadaulo wofotokozedwa ndi mapulogalamu.

Chithunzi chojambula chamakono (chosatulutsidwa) ns-3 chingapezeke pa:https://gitlab.com/nsnam/ns-3-dev.git.

Madivelopa amayesa kusunga nkhokwezi mokhazikika, koma ali m'dera lachitukuko ndipo ali ndi ma code osatulutsidwa, kotero ngati simukukonzekera kugwiritsa ntchito zatsopano, sankhani kumasulidwa kovomerezeka.

Mukhoza kupeza mtundu waposachedwa wa code posakatula mndandanda wa nkhokwe, kapena kupita patsamba la ns-3 Releases:https://www.nsnam.org/releases/ ndikudina ulalo wa mtundu waposachedwa. Mu chitsanzo ichi tipitiriza ndi ns-3.29.

Tsopano, kuti tipeze zigawo za ns-3 zomwe tikufuna, tigwiritsa ntchito chida Kuphika. Tiyeni tinene mawu oyambilira okhudza ntchitoyi Kuphika.

Kuphika kumagwira ntchito potsegula magwero a phukusi mu chikwatu gwero ndi kukhazikitsa malaibulale mu bukhu lomanga. Kuphika itha kuyendetsedwa potengera binary, koma ngati mukufuna kuthamanga Kuphika osati kuchokera m'ndandanda yomwe idatsitsidwa, ndikoyenera kuwonjezera njira yopita kuphika kunjira yanu (PATH chilengedwe variable), mwachitsanzo motere (chitsanzo cha Linux bash shell). Pitani ku chikwatu cha "bake" ndikukhazikitsa zosintha zotsatirazi:

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

Izi zidzayika pulogalamuyo bake.py ku njira ya chipolopolo ndipo ilola mapulogalamu ena kuti apeze zomwe angachite ndi malaibulale omwe adapanga kuphika. Nthawi zina ntchito kuphika, PATH ndi PYTHONPATH zomwe zafotokozedwa pamwambapa sizikufunika, koma kumanga kwathunthu kwa ns-3-allinone (ndi phukusi lowonjezera) nthawi zambiri kumafunikira.

Pitani ku chikwatu chanu chogwirira ntchito ndikulowetsa zotsatirazi mu console:

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

Kenako tifunsa Kuphika fufuzani ngati tili ndi zida zokwanira zonyamulira zigawo zosiyanasiyana. Imbani:

$ ./bake.py check

Muyenera kuwona chinthu chonga ichi:

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

Makamaka, zida zokwezera monga Mercurial, CVS, Git ndi Bazaar ndizofunikira pagawoli chifukwa zimatilola kupeza code. Pakadali pano, ikani zida zomwe zikusowa monga mwachizolowezi padongosolo lanu (ngati mukudziwa) kapena funsani woyang'anira dongosolo lanu kuti akuthandizeni.

Kenako, yesani kutsitsa pulogalamuyi:

$ ./bake.py download

zotsatira zake ziyenera kukhala monga:

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

Izi zikutanthauza kuti magwero atatu adatsitsidwa. Tsopano pitani ku chikwatu gwero ndikulemba ls; Muyenera kuwona:

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

Tsopano mwakonzeka kupanga kugawa kwa ns-3.

3.4 Msonkhano ns-3

Monga kutsitsa ns-3, pali njira zingapo zopangira ns-3. Chinthu chachikulu chomwe tikufuna kutsindika ndikuti ns-3 imamangidwa pogwiritsa ntchito chida chomanga chotchedwa Wafzafotokozedwa pansipa. Ogwiritsa ntchito ambiri adzagwira nawo ntchito Waf, koma pali zolemba zingapo zothandiza kuti muyambe kapena kukonza zomangika zovuta. Kotero chonde, musanawerenge za Waf, yang'anani build.py ndi kusonkhana ndi kuphika.

3.4.1 Kumanga ndi build.py

Chonde chonde! Njira yomangayi imapezeka kokha kuchokera ku mtundu wa archive womwe wapezeka monga tafotokozera pamwambapa; ndipo osatsitsidwa kudzera pa git kapena kuphika.

Pamene ntchito ndi kumasulidwa archive mpiramu ns-3-allinone Pali script yothandiza yomwe ingapangitse kusonkhanitsa zigawozo kukhala zosavuta. Imatchedwa build.py. Pulogalamuyi idzakukhazikitsani polojekitiyi m'njira yothandiza kwambiri. Komabe, dziwani kuti kukhazikitsidwa kwapamwamba kwambiri ndikugwira ntchito ndi ns-3 nthawi zambiri kumaphatikizapo kugwiritsa ntchito ns-3's own build system, Waf, yomwe idzayambitsidwe patsogolo mu phunziroli.

Ngati mwatsitsa pogwiritsa ntchito mpira, kenako m'ndandanda wanu ~/malo ogwirira ntchito chikwatu chokhala ndi dzina chonga ns-allinone-3.29. Lowetsani zotsatirazi:

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

Poyimba build.py Tinagwiritsa ntchito mfundo za mzere wamalamulo kupanga zitsanzo ndi mayeso ogwiritsidwa ntchito mu phunziroli, zomwe sizinamangidwe mwachisawawa mu ns-3. Mwachikhazikitso, pulogalamuyi imapanganso ma modules onse omwe alipo. Kenako, ngati mukufuna, mutha kupanga ns-3 popanda zitsanzo ndi mayeso, kapena kusapatula ma module omwe safunikira pantchito yanu.

Mudzawona mauthenga ambiri ophatikizira omwe akuwonetsedwa ndi script pamene akupanga magawo osiyanasiyana omwe mwatsitsa. Choyamba script idzayesa kupanga animator netanim, ndiye jenereta yomangiriza pybindgen ndipo pomaliza ns-3. Mukamaliza, muyenera kuwona zotsatirazi:

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

M'mizere itatu yomaliza ya mndandandawo tikuwona uthenga wokhudza ma module omwe sanamangidwe:

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

Izi zimangotanthauza kuti ma module ena a ns-3 omwe amadalira malaibulale akunja mwina sanamangidwe, kapena kuti sakuyenera kumangidwa kuti apangidwe. Izi sizikutanthauza kuti simulator sinasonkhanitsidwe kapena kuti ma module osonkhanitsidwa sangagwire ntchito moyenera.

3.4.2 Kumanga ndi Bake

Ngati mudagwiritsa ntchito kuphika pamwambapa kuti mupeze magwero a gwero kuchokera ku nkhokwe za polojekiti, mutha kupitiliza kuigwiritsa ntchito pomanga ns-3. Imbani:

$ ./bake.py build

ndipo muyenera kuwona chinthu chonga:

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

Malangizo: Mukhozanso kutsitsa ndikumanga masitepe nthawi imodzi poyitana "bake.py deploy".

Kusonkhanitsa zigawo zonse kungalephereke, koma msonkhano udzapitirira ngati chigawocho sichikufunika. Mwachitsanzo, vuto laposachedwa la kunyamula linali kuti castxml akhoza kusonkhanitsidwa ndi chida kuphika osati pamapulatifomu onse. Pankhaniyi, uthenga wonga uwu udzawonekera:

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

Komabe, castxml zimangofunika ngati mukufuna kupanga zomangira zosinthidwa za Python. Kwa ogwiritsa ntchito ambiri palibe chifukwa cha izi (osachepera mpaka atasintha ns-3), kotero machenjezo otere akhoza kunyalanyazidwa bwino pakadali pano.

Ngati sichikanika, lamulo lotsatirali likupatsani malingaliro osowa odalira:

$ ./bake.py show

Zodalira zosiyanasiyana za phukusi zomwe mukuyesera kupanga zidzalembedwa.

3.4.3 Mangani ndi Waf

Mpaka pano, kuti tiyambe kumanga ns-3, tidagwiritsa ntchito script build.py, kapena chida kuphika. Zida izi ndizothandiza pomanga ns-3 ndikukonza malaibulale. Ndipotu, kumanga amayendetsa chida chomanga Waf kuchokera ku chikwatu ns-3. Waf idayikidwa ndi ns-3 source code. Ogwiritsa ntchito ambiri amapita patsogolo mwachangu kuti agwiritse ntchito kukonza ndi kusonkhanitsa ns-3 Waf. Chifukwa chake, kuti mupitilize, chonde pitani ku chikwatu cha ns-3 chomwe mudapanga poyambirira.

Izi sizikufunidwa kwenikweni panthawiyi, koma zidzakhala zothandiza kubwereranso pang'ono ndikuwona momwe mungasinthire makonzedwe a polojekiti. Mwina kusintha kothandiza kwambiri komwe mungapange ndikupanga mtundu wokometsedwa wa code. Mwachisawawa, mwakonza pulojekiti yanu kuti mupange mtundu wochotsa zolakwika. Tiyeni tiwone pulojekiti yoti tipange zomanga bwino. Kuti mufotokozere Waf kuti ikuyenera kupanga zomangika bwino zomwe zimaphatikizapo zitsanzo ndi mayeso, muyenera kutsatira malamulo awa:

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

Izi zidzayamba Waf kunja kwa bukhu lakwanu (kuti muthandize). Lamulo loyamba limatsuka kuchokera kumapangidwe am'mbuyomu, izi nthawi zambiri sizofunika kwenikweni, koma ndizochita zabwino (onaninso mbiri yomanga pansipa); izi zichotsa malaibulale omwe adapangidwa kale ndi mafayilo omwe ali mu bukhuli kumanga/. Pulojekitiyo ikakonzedwanso ndipo makina omanga amayang'ana zodalira zosiyanasiyana, muyenera kuwona zotuluka zofanana ndi izi:

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)

Chonde dziwani gawo lomaliza lazomwe zili pamwambapa. Zosankha zina za ns-3 sizimathandizidwa mwachisawawa kapena zimafuna chithandizo chadongosolo kuti chizigwira bwino ntchito. Mwachitsanzo, kuti mutsegule XmlTo, laibulale iyenera kupezeka pamakina libxml-2.0. Ngati laibulaleyi sinapezeke ndipo ntchito yofananira ndi ns-3 sinayatsidwe, uthenga uwonetsedwa. Komanso dziwani kuti n'zotheka kugwiritsa ntchito lamulo sudo kukhazikitsa pang'ono "kukhazikitsa ID ya gulu panthawi yothamanga" pamapulogalamu ena. Sizinayambitsidwe mwachisawawa ndipo chifukwa chake izi zikuwoneka ngati "zosayatsidwa". Pomaliza, kuti mupeze mndandanda wazosankha zomwe zathandizidwa, gwiritsani ntchito Waf ndi parameter --check-config.

Tsopano tiyeni tibwerere mmbuyo ndikubwerera ku debug build yomwe ili ndi zitsanzo ndi mayeso.

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

Njira yomanga tsopano yakhazikitsidwa ndipo mutha kupanga zosintha zamapulogalamu a ns-3 mwa kungolemba:

$ ./waf

Masitepe omwe ali pamwambapa akukakamizani kuti mupange gawo la ns-3 kawiri kawiri, koma tsopano mukudziwa momwe mungasinthire masinthidwe ndikumanga kachidindo kokometsedwa.

Kuti muwone kuti ndi mbiri iti yomwe ikugwira ntchito pakusintha kwa polojekiti, pali lamulo:

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

Zochitika pamwambapa build.py imachirikizanso mikangano --enable-examples ΠΈ --enable-tests, koma zosankha zina Waf sichichirikiza mwachindunji. Mwachitsanzo, izi sizingagwire ntchito:

$ ./build.py --disable-python

mayendedwe adzakhala motere:

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

Komabe, woyendetsa wapadera - - angagwiritsidwe ntchito kudutsa magawo owonjezera kudzera wafkotero m'malo mwa zomwe zili pamwambapa lamulo ili ligwira ntchito:

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

chifukwa imapanga lamulo lalikulu ./waf sintha --disable-python. Nawa maupangiri ena oyambira za Waf.

Kusamalira zolakwika zomanga

ns-3 kutulutsidwa kumayesedwa pamapangidwe aposachedwa a C ++ omwe amapezeka panthawi yotulutsidwa pamagawidwe wamba a Linux ndi MacOS. Komabe, pakapita nthawi, magawo atsopano amamasulidwa ndi ophatikiza atsopano, ndipo ophatikiza atsopanowa amakhala okonda kwambiri machenjezo. ns-3 imakonza mamangidwe ake kuti atenge machenjezo onse ngati zolakwika, kotero nthawi zina ngati mukugwiritsa ntchito mtundu wakale pamakina atsopano, chenjezo la compiler likhoza kuyimitsa kumanga.

Mwachitsanzo, m'mbuyomu panali kutulutsidwa kwa ns-3.28 kwa Fedora 28, komwe kumaphatikizapo mtundu watsopano waukulu. gcc (gcc-8). Kupanga kumasulidwa ns-3.28 kapena mitundu yoyambirira pansi pa Fedora 28, yokhala ndi Gtk2 + yoyika, cholakwika chotsatirachi chidzachitika:

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

Zotulutsidwa kuyambira pa ns-3.28.1, mu Waf njira ilipo yothetsera mavutowa. Zimalepheretsa kuyika mbendera ya "-Werror" mu g++ ndi clang++. Iyi ndi njira ya "--disable-werror" ndipo iyenera kugwiritsidwa ntchito pokonzekera:

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

Konzani kapena phatikiza

Malamulo ena Waf zili ndi tanthauzo mugawo lokonzekera, ndipo zina zimakhala zomveka pomanga gawo. Mwachitsanzo, ngati mukufuna kugwiritsa ntchito mawonekedwe a ns-3, mutha kuyatsa zoikamo sud kugwiritsa sudo, monga tafotokozera pamwambapa. Izi zidzasokoneza malamulo a sitepe yokonzekera, ndipo potero mukhoza kusintha masinthidwe pogwiritsa ntchito lamulo ili, lomwe limaphatikizapo zitsanzo ndi mayesero.

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

Ngati muchita izi Waf idzakhazikitsa sudokusintha ma emulation code socket popanga mapulogalamu kuti ayende ndi zilolezo muzu. The Waf Pali zosankha zina zambiri zomwe zilipo pakukonzekera ndi kumanga masitepe. Kuti muwone zomwe mungasankhe, lowetsani:

$ ./waf --help

M'gawo lotsatira tidzagwiritsa ntchito njira zina zoyesera.

Mbiri za Msonkhano

Tawona kale momwe mungasinthire Waf za misonkhano yesa ΠΈ yokonzedweratu:

$ ./waf --build-profile=debug

Palinso mbiri yapakatikati ya msonkhano, kumasulidwa. Njira -d ndi ofanana ndi --build-profile. Mbiri yomanga imawongolera kugwiritsa ntchito mitengo, zonena, ndi masinthidwe okhathamiritsa ophatikiza:

ns-3 network simulator maphunziro. Mutu 3

Monga mukuonera, kudula mitengo ndi zongopeka zimangopezeka muzokonza zolakwika. Mchitidwe wolimbikitsidwa ndikukulitsa zolemba zanu munjira yochotsa zolakwika, kenako bwerezabwereza (zowerengera kapena kusintha magawo) mu mbiri yabwino yomanga.

Ngati muli ndi kachidindo kamene kamayenera kumangogwira ntchito zina zomanga, gwiritsani ntchito 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;)

Zosasintha, Waf malo amamanga zinthu zakale mu bukhu lomanga. Mutha kutchulanso chikwatu chosiyana pogwiritsa ntchito njirayo -β€―-out, mwachitsanzo:

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

Kuphatikiza izi ndi mbiri yomanga, mutha kusinthana mosavuta pakati pa zosankha zosiyanasiyana:

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

Zomwe zimakulolani kuti mugwire ntchito ndi misonkhano ingapo popanda kulembanso msonkhano waposachedwa nthawi iliyonse. Mukasinthira ku mbiri ina, Waf adzasonkhanitsa zokhazo, popanda kubwezera zonse.

Mukasintha ma profaili motere, muyenera kusamala kuti mupereke zosankha zomwezo nthawi iliyonse. Kufotokozera zamitundu ingapo kudzakuthandizani kupewa zolakwika:

$ 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 ndi mbendera

Mu zitsanzo pamwambapa Waf kumanga ns-3 amagwiritsa ntchito C++ compiler kuchokera ku GCC ( g ++). Komabe, mutha kusintha zomwe mumagwiritsa ntchito Waf C ++ compiler, pofotokozera CXX chilengedwe chosinthika. Mwachitsanzo, kugwiritsa ntchito C++ compiler Clang, clang++,

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

Momwemonso mutha kukonza Waf kugwiritsa ntchito kugawa kophatikizana pogwiritsa ntchito distcc:

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

Zambiri zokhuza ma distcc ndi kuphatikiza kogawa zitha kupezeka patsamba la polojekiti mu gawo la Zolemba. Kuti muwonjezere mbendera zowotchera pokonza ns-3, gwiritsani ntchito CXXFLAGS_EXTRA chilengedwe kusintha.

kolowera

Waf angagwiritsidwe ntchito kukhazikitsa malaibulale m'malo osiyanasiyana pa dongosolo. Mwachikhazikitso, malaibulale ophatikizidwa ndi zoyeserera zili mu bukhuli kumanga, ndipo popeza Waf amadziwa komwe kuli malaibulalewa ndi zomwe zingagwiritsidwe ntchito, palibe chifukwa chokhazikitsa malaibulale kwina kulikonse.

Ngati ogwiritsa ntchito akufuna kukhazikitsa kunja kwa bukhu lomanga, amatha kuyendetsa lamulo ./waf kukhazikitsa. Chiyambi chosasinthika cha kukhazikitsa ndi / usr / kumalochifukwa chake ./waf kukhazikitsa adzakhazikitsa mapulogalamu mu / usr / loc / bin, library mu / usr / malo / lib ndi mafayilo amutu mu /usr/local/include. Ufulu wa Superuser nthawi zambiri umafunika kukhazikitsidwa ndi chikhazikitso chosasinthika, kotero lamulo lodziwika bwino lingakhale sudo ./waf kukhazikitsa. Ikakhazikitsidwa, Waf adzasankha kaye kugwiritsa ntchito malaibulale omwe amagawidwa m'mabuku omanga, kenako yang'anani malaibulale omwe ali m'njira yopita ku malaibulale omwe adakhazikitsidwa m'malo amderalo. Choncho poika malaibulale pa dongosolo, ndi bwino kuona ngati malaibulale oyenerera akugwiritsidwa ntchito. Ogwiritsa ntchito amatha kusankha kukhazikitsa ndi prefix yosiyana podutsa njirayo panthawi yokonzekera --prefix, mwachitsanzo:

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

Ngati pambuyo pake, mutatha kumanga, wogwiritsa ntchito akulowetsa lamulo lokhazikitsa ./waf, mawu oyamba adzagwiritsidwa ntchito /opt/local.

timu ./waf clean ziyenera kugwiritsidwa ntchito musanakonzenso pulojekitiyo ngati kukhazikitsa kudzagwiritsidwa ntchito Waf pansi pa mawu oyamba osiyana.

Chifukwa chake, kugwiritsa ntchito ns-3 palibe chifukwa choyimbira ./waf install. Ogwiritsa ntchito ambiri safuna lamulo ili chifukwa Waf atenga malaibulale omwe alipo mu bukhu lomanga, koma ogwiritsa ntchito ena angapeze izi zothandiza ngati ntchito zawo zikuphatikizapo kugwira ntchito ndi mapulogalamu kunja kwa bukhu la ns-3.

Waf single

Pamwamba pamtengo wa ns-3, pali Waf script imodzi yokha. Mukangoyamba kugwira ntchito, mudzakhala nthawi yochuluka m'ndandanda scratch/ kapena kuzama mkatisrc/... ndipo nthawi yomweyo ayenera kuthamanga Waf. Mutha kungokumbukira komwe muli ndikuthamanga Waf motere:

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

koma izi zidzakhala zotopetsa komanso zolakwika, kotero pali njira zabwinoko. Njira imodzi yodziwika bwino ndikugwiritsa ntchito mkonzi wamalemba monga emacs kapena vim, momwe magawo awiri omaliza amatsegulidwa, imodzi imagwiritsidwa ntchito pomanga ns-3, ndipo yachiwiri imagwiritsidwa ntchito kukonza kachidindo kochokera. Ngati muli nazo mpira, ndiye kusintha kwachilengedwe kungathandize:

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

$ cd scratch 
$ waff build

Mu chikwatu cha module zitha kukhala zokopa kuwonjezera ma waf script ngati exec ../../waf. Chonde, musapange zimenezo. Izi ndizosokoneza kwa ongoyamba kumene ndipo, zikachitika molakwika, zimatsogolera ku zolakwika zomanga zovuta kuzizindikira. Mayankho omwe awonetsedwa pamwambapa ndi njira yomwe iyenera kugwiritsidwa ntchito.

3.5 Kuyesa ns-3

Mutha kuyesa magawo a ns-3 poyesa script ./test.py:

$ ./test.py

Mayesowa amayendetsedwa molingana ndi Waf. Pamapeto pake muyenera kuwona meseji yakuti:

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

Uwu ndi uthenga wofunikira pakuzindikiritsa kuwonongeka kwa valgrind, kuwonongeka kapena zolakwika, zomwe zikuwonetsa zovuta ndi ma code kapena kusagwirizana pakati pa zida ndi ma code.

Mudzawonanso zotsatira zomaliza kuchokera Waf ndi tester yomwe imayesa mayeso aliwonse, omwe aziwoneka motere:

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)

Lamuloli nthawi zambiri limayendetsedwa ndi ogwiritsa ntchito kuti atsimikizire mwachangu kuti kugawa kwa ns-3 kumangika bwino. (Dziwani kuti dongosolo la "PASS: ..." mizere ingakhale yosiyana, izi ndi zachilendo. Chofunika ndi chakuti mzere wachidule womwe uli kumapeto kwa lipoti umasonyeza kuti mayesero onse adapambana; palibe mayesero omwe analephera kapena kugwa.) Ndipo Wafndi test.py idzafananiza ntchito pama processor cores omwe amapezeka pamakina.

3.6 Kuyendetsa script

Nthawi zambiri timayendetsa ma scripts pansi pa ulamuliro Waf. Izi zimalola dongosolo lomanga kuti liwonetsetse kuti njira zamalaibulale zomwe zimagawidwa zimakhazikitsidwa moyenera komanso kuti malaibulale akupezeka panthawi yothamanga. Kuti muyambe pulogalamuyo, ingogwiritsani ntchito Waf ndi parameter -β€―-run. Tiyeni tiyendetse ns-3 chofanana ndi pulogalamu yopezeka paliponse Moni Dziko Lapansipolemba izi:

$ ./waf --run hello-simulator

Waf adzayang'ana kaye kuti pulogalamuyo idamangidwa bwino ndikumanga ngati kuli kofunikira. Ndiye Waf idzachita pulogalamu yomwe imatulutsa zotsatira zotsatirazi.

Hello Simulator

Zabwino zonse! Ndinu wogwiritsa ntchito ns-3 tsopano!

Nditani ngati sindikuwona zotsatira?

Ngati muwona mauthenga Wafkuwonetsa kuti ntchitoyo idamalizidwa bwino, koma simukuwona zotsatira zake "Moni Simulator", ndiye pali kuthekera kuti mu gawo la [Build-with-Waf] mudasintha mawonekedwe anu yokonzedweratu, koma anaphonya kubwerera ku mode yesa. Zonse zomwe zimagwiritsidwa ntchito mu phunziroli zimagwiritsa ntchito chigawo chapadera cha ns-3 chomwe chimadula mitengo ndipo chimagwiritsidwa ntchito kusindikiza mauthenga achizolowezi ku console. Zomwe zimatuluka m'chigawochi zimangoyimitsidwa pokhapokha code yokonzedwa bwino ikapangidwa - "yokongoletsedwa". Ngati simukuwona zotsatira za "Hello Simulator", lowetsani zotsatirazi:

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

kusintha Waf kuti apange mitundu yochotsa zolakwika zamapulogalamu a ns-3, omwe ali ndi zitsanzo ndi mayeso. Muyenera kupanganso mtundu waposachedwa wa codeyo polemba

$ ./waf

Tsopano ngati mutayendetsa pulogalamuyi moni-simulator, muyenera kuwona zotsatira zomwe zikuyembekezeredwa.

3.6.1 Malamulo a mizere

Kuti mupereke mfundo za mzere wolamula ku pulogalamu ya ns-3, gwiritsani ntchito njira iyi:

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

M'malo ku dzina la pulogalamu yanu ndi mikangano. Kukangana -β€―-command-template chifukwa Waf kwenikweni ndi njira yopangira mzere wolamula weniweni Waf amagwiritsidwa ntchito kukhazikitsa pulogalamu. Waf imayang'ana kuti ntchitoyo yatha, imakhazikitsa njira zamalaibulale omwe amagawana nawo, kenako amagwiritsa ntchito template ya mzere woperekedwa ndikulowetsa dzina la pulogalamuyo kuti %s atchule zomwe zitha kuchitidwa. Ngati mukuwona kuti mawuwa ndi ovuta, pali mtundu wosavuta womwe umakhudza pulogalamu ya ns-3 ndi mfundo zake zomwe zili m'mawu amodzi:

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

Chitsanzo china chothandiza kwambiri ndikuyendetsa ma test suites mosankha. Tiyerekeze kuti pali test suite yotchedwa mytest (kwenikweni palibe). Pamwambapa tidagwiritsa ntchito ./test.py script kuti tiyese mayeso angapo mofananira, omwe amayitanitsa mobwerezabwereza pulogalamu yoyeserera. mayeso-wothamanga. Imbani mayeso-wothamanga mwachindunji kuyesa mayeso amodzi:

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

Zokambirana zidzaperekedwa ku pulogalamuyi mayeso-wothamanga. Popeza mytest kulibe, uthenga wolakwika udzapangidwa. Kuti musindikize zosankha zoyeserera zomwe zilipo, lowetsani:

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

3.6.2 Kuchotsa zolakwika

Kuyendetsa mapulogalamu a ns-3 pansi pazinthu zina, monga debugger (mwachitsanzo, gdb) kapena chida choyesera kukumbukira (mwachitsanzo, valavu), gwiritsani ntchito mawonekedwe ofanana -β€―-command-template = "…". Mwachitsanzo, kuthamanga mu debugger gdb pulogalamu yanu ya moni-simulator ns-3 yokhala ndi mikangano:

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

Dziwani kuti dzina la pulogalamu ya ns-3 limabwera ndi mkangano -β€―-run, ndi ntchito yoyang'anira (apa gdb) ndi chizindikiro choyamba pa mkangano -β€―-command-template. Njira -β€―-args amadziwitsa gdbkuti mzere wotsalawo ndi wa pulogalamu "yotsika". (Mabaibulo ena gdb sindikumvetsa chisankho -β€―-args. Pankhaniyi, chotsani mikangano ya pulogalamuyo -β€―-command-template ndikugwiritsa ntchito command set gdb args.) Titha kuphatikiza njira iyi ndi yapitayi kuti tiyese mayeso pansi pa debugger:

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

3.6.3 Chikwatu chogwirira ntchito

Waf iyenera kukhazikitsidwa kuchokera pamalo ake pamwamba pa mtengo wa ns-3. Foda iyi imakhala chikwatu chogwirira ntchito komwe mafayilo otulutsa adzalembedwa. Koma bwanji ngati mukufuna kusunga mafayilowa kunja kwa mtengo wa ns-3? Gwiritsani ntchito mfundo -β€―-cwd:

$ ./waf --cwd=...

Mutha kupeza kuti ndizosavuta kupeza mafayilo omwe ali mufoda yanu yogwirira ntchito. Pankhaniyi, zotsatirazi zosalunjika zingathandize:

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

Kukongoletsa uku kwa mtundu wakale wa lamulo kumasunga bukhu lomwe likugwira ntchito pano, limapita ku bukhu Wafkenako amalangiza Waf kusintha chikwatu chogwirira ntchito kubwerera ku bukhu lomwe likugwira ntchito lomwe lasungidwa musanayambe pulogalamuyo. Timatchula timu -β€―-cwd Kuti akwaniritse, ogwiritsa ntchito ambiri amangoyendetsa Waf kuchokera pamndandanda wapamwamba kwambiri ndikupanga mafayilo otulutsa pamenepo.

Ikupitilira: Chaputala 4

Source: www.habr.com

Kuwonjezera ndemanga