ns-3 mafunzo ya kiigaji cha mtandao. Sura ya 3

ns-3 mafunzo ya kiigaji cha mtandao. Sura ya 3
Sura ya 1,2

3 Kuanza
3.1 Muhtasari
3.2 Mahitaji
3.2.1 Kupakua toleo la ns-3 kama kumbukumbu ya chanzo
3.3 Kupakua ns-3 kwa kutumia Git
3.3.1 Inapakia ns-3 kwa kutumia Bake
3.4 Mkutano ns-3
3.4.1 Jengo na build.py
3.4.2 Kujenga kwa Bake
3.4.3 Jenga kwa Waf
3.5 Upimaji ns-3
3.6 Kuendesha hati
3.6.1 Hoja za mstari wa amri
3.6.2 Utatuzi
3.6.3 Saraka ya kufanya kazi

Sura ya 3

Kuanza

Sura hii inakusudiwa kumtayarisha msomaji kuanza na kompyuta ambayo huenda haijawahi kusakinisha ns-3. Inashughulikia majukwaa yanayotumika, mahitaji ya lazima, jinsi ya kupata ns-3, jinsi ya kujenga ns-3, na jinsi ya kujaribu muundo wako na kuendesha programu rahisi.

3.1 Muhtasari

Kiigaji cha ns-3 kimeundwa kama mfumo wa maktaba za programu shirikishi. Wakati wa kusanyiko, kanuni za programu za mtumiaji zimeunganishwa na maktaba hizi. Lugha za programu za C++ au Python hutumiwa kuandika programu maalum.

Ns-3 inasambazwa kama msimbo wa chanzo, ambayo ina maana kwamba mfumo unaolengwa lazima uwe na mazingira ya uundaji wa programu ili kwanza kuunda maktaba na kisha kuunda programu ya mtumiaji. Kimsingi, ns-3 inaweza kusambazwa kama maktaba zilizotengenezwa tayari kwa mfumo maalum, na katika siku zijazo zinaweza kusambazwa kwa njia hii. Lakini siku hizi watumiaji wengi hufanya kazi yao kwa kuhariri ns-3 yenyewe, kwa hivyo ni muhimu kuwa na msimbo wa chanzo kuunda maktaba. Ikiwa mtu yeyote angependa kuchukua kazi ya kuunda maktaba na vifurushi vilivyotengenezwa tayari kwa mifumo ya uendeshaji, tafadhali wasiliana na orodha ya barua. ns-watengenezaji.

Kisha, tutaangalia njia tatu za kupakua na kujenga ns-3. Ya kwanza ni kupakua na kujenga kutolewa rasmi kutoka kwa tovuti kuu. Ya pili ni uteuzi na mkusanyiko wa nakala za matoleo ya maendeleo ya ufungaji wa msingi wa ns-3. Ya tatu ni kutumia zana za ziada za ujenzi kupakia viendelezi zaidi vya ns-3. Tutapitia kila moja kwani zana ni tofauti kidogo.

Watumiaji wa Linux wenye uzoefu wanaweza kujiuliza kwa nini ns-3 haijatolewa kama kifurushi kama maktaba zingine nyingi zinazotumia kidhibiti cha kifurushi? Ingawa kuna vifurushi vya binary vya usambazaji mbalimbali wa Linux (kwa mfano Debian), watumiaji wengi huishia kuhariri maktaba na kulazimika kuunda upya ns-3 wenyewe, kwa hivyo kuwa na msimbo wa chanzo ni rahisi. Kwa sababu hii, tutazingatia kufunga kutoka kwa chanzo.

Kwa programu nyingi haki za ns-3 mizizi hazihitajiki, inashauriwa kutumia akaunti ya mtumiaji isiyo na upendeleo.

3.2 Mahitaji

Seti nzima ya maktaba za ns-3 zinazopatikana zina idadi ya utegemezi kwenye maktaba za watu wengine, lakini kwa sehemu kubwa ns-3 inaweza kujengwa na kutumika kwa usaidizi wa vipengele kadhaa vya kawaida (mara nyingi huwekwa kwa chaguo-msingi): mkusanyaji wa C++, Python, mhariri wa nambari ya chanzo (kwa mfano, vim, emacs au Eclipse) na, ikiwa hazina za ukuzaji zitatumika, mifumo ya udhibiti wa toleo la Git. Watumiaji wengi wa mara ya kwanza hawatahitaji kuwa na wasiwasi ikiwa usanidi wao utaripoti baadhi ya vipengele vya kina vya ns-3 ambavyo havipo, lakini kwa wale wanaotaka usakinishaji kamili, mradi hutoa wiki inayojumuisha kurasa zilizo na vidokezo na hila nyingi muhimu. Ukurasa mmoja kama huo ni ukurasa wa Usakinishaji, wenye maagizo ya usakinishaji wa mifumo mbalimbali, unaopatikana kwa: https://www.nsnam.org/wiki/Installation.

Sehemu ya Masharti ya wiki hii inaeleza ni vifurushi vipi vinavyohitajika kusaidia chaguo za kawaida za ns-3 na pia hutoa amri zinazotumiwa kuvisakinisha kwenye vionjo vya kawaida vya Linux au macOS.

Unaweza kuchukua fursa ya fursa hii kuchunguza ukurasa wa wiki wa ns-3 au tovuti kuu: https://www.nsnam.org, kwa sababu kuna habari nyingi huko. Kuanzia na toleo jipya zaidi la ns-3 (ns-3.29), zana zifuatazo zinahitajika ili kuendesha ns-3:

Kifurushi cha Zana/Toleo

  • Mkusanyaji wa C++
    clang++ au g++ (g++ toleo la 4.9 au la juu zaidi)
  • Chatu
    toleo la python2>= 2.7.10, au toleo la python3>=3.4
  • kwenda
    toleo lolote la hivi karibuni (kufikia ns-3 kwenye GitLab.com)
  • lami
    toleo lolote la hivi punde (kwa kufungua toleo la ns-3)
  • bunzip2
    toleo lolote la hivi punde (kwa kufungua toleo la ns-3)

Kuangalia toleo la msingi la Python, chapa python -V. Ili kuangalia toleo la g++, chapa g++ -v. Ikiwa zana zozote hazipo au ni nzee sana, tafadhali rejelea mwongozo wa usakinishaji kwenye ukurasa wa ns-3 wiki.

Kuanzia sasa na kuendelea, tunadhani kwamba msomaji anaendesha Linux, MacOS, au emulator ya Linux, na ana angalau zana zilizo hapo juu.

3.2.1 Kupakua toleo la ns-3 kama kumbukumbu ya chanzo

Hiki ni hatua ya mtumiaji mpya ambaye anataka kupakua na kujaribu matoleo mapya zaidi na vifurushi vya ns-3. Matoleo ya ns-3 yanachapishwa kama kumbukumbu za chanzo zilizoshinikizwa, wakati mwingine huitwa mpira wa lami. mpira wa lami ni muundo maalum wa kumbukumbu ya programu ambayo faili kadhaa zimeunganishwa pamoja. Kumbukumbu kawaida hubanwa. ns-3 mchakato wa kuwasha kupitia mpira wa lami ni rahisi, unahitaji tu kuchagua toleo, kupakua na kuifungua.

Wacha tuchukue kuwa wewe, kama mtumiaji, unataka kujenga ns-3 katika saraka ya ndani inayoitwa nafasi ya kazi. Unaweza kupata nakala inayofanya kazi ya toleo kwa kuingiza zifuatazo kwenye kiweko cha Linux (bila shaka, ukibadilisha nambari za toleo zinazofaa)

$ 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 

Makini na matumizi yaliyotumiwa hapo juu wget, ambayo ni zana ya mstari wa amri ya kupakua vitu kutoka kwenye mtandao. Ikiwa hujaisakinisha, unaweza kutumia kivinjari chako kwa hili.

Kufuatia hatua hizi kutakupeleka kwenye saraka ya ns-allinone-3.29, hapo unapaswa kuona faili na saraka kadhaa.

$ 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

Sasa uko tayari kujenga usambazaji wa msingi wa ns-3 na unaweza kuendelea hadi sehemu ya kujenga ns-3.

3.3 Kupakua ns-3 kwa kutumia Git

Msimbo wa ns-3 unapatikana katika hazina za Git kwenye GitLab.com kwa https://gitlab.com/nsnam/. Kikundi nsnam huleta pamoja hazina mbalimbali zinazotumiwa na mradi wa chanzo huria.

Njia rahisi ya kuanza kutumia hazina za Git ni kuweka uma au kuiga mazingira ns-3-allinone. Hii ni seti ya hati zinazosimamia upakiaji na mkusanyiko wa mifumo ndogo ya ns-3 inayotumika sana. Ikiwa wewe ni mgeni kwa Git, maneno "uma" na "clone" yanaweza kuwa huyafahamu kwako; ikiwa ni hivyo, tunapendekeza kwamba utengeneze (tengeneza nakala yako mwenyewe) hazina iliyoko kwenye GitLab.com kama hii:

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

Katika hatua hii, mtazamo wa saraka yako ns-3-allinone tofauti kidogo na saraka ya kumbukumbu ya kutolewa iliyoelezwa hapo juu. Inapaswa kuonekana kama hii:

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

Tafadhali kumbuka kuwa kuna hati pakua.py, ambayo kwa kuongeza itatoa ns-3 na msimbo wa chanzo unaoambatana. Hapa una chaguo: ama pakua muhtasari wa hivi punde wa ukuzaji wa ns-3:

$ python download.py

au unapendelea toleo la ns-3 kwa kutumia bendera -n ili kuonyesha nambari ya kutolewa:

$ python download.py -n ns-3.29

Baada ya hatua hii kwenye saraka ns-3-allinone hazina za ziada zitapakuliwa ns-3, bake, pybindgen ΠΈ netanim.

Kumbuka
Kwenye mashine iliyo na Ubuntu16.04 safi, nilihitaji kubadilisha amri kuwa hii: $ sudo python3 download.py -n ns-3.29 (hapa maelezo ya mfasiri).

3.3.1 Inapakia ns-3 kwa kutumia Bake

Njia mbili zilizo hapo juu (hifadhi ya chanzo au hazina ns-3-allinone kupitia Git) ni muhimu kwa kupata usakinishaji rahisi zaidi wa ns-3 na nyongeza nyingi (pybindgen kutengeneza vifungo vya Python na netanim kwa uhuishaji wa mtandao). Hifadhi ya tatu iliyotolewa na chaguo-msingi katika ns-3-allinone inaitwa bake.

Bika ni zana ya ujenzi ulioratibiwa wa programu kutoka kwa hazina nyingi, iliyoundwa kwa mradi wa ns-3. Bika inaweza kutumika kupata matoleo ya maendeleo ya ns-3, na pia kupakua na kujenga viendelezi vya toleo la msingi la usambazaji wa ns-3, kama vile mazingira. Utekelezaji wa Kanuni ya Moja kwa moja, CradleNetwork Simulation Cradle, uwezo wa kuunda vifungo vipya vya Python na "programu" mbalimbali za ns-3.

Kumbuka
CradleNetwork Simulation Cradle ni mfumo unaokuruhusu kutumia rafu halisi za mtandao wa TCP/IP ndani ya kiigaji cha mtandao.

Ikiwa unatarajia usakinishaji wako wa ns-3 kuwa na vipengele vya kina au vya ziada, unaweza kufuata njia hii ya usakinishaji.

Katika matoleo ya hivi karibuni ya ns-3 Bika iliongezwa kwa kutolewa kwa lami. Toleo hili linajumuisha faili ya usanidi inayokuruhusu kupakua matoleo ya sasa ya programu wakati wa toleo. Hiyo ni, kwa mfano, toleo Bika, ambayo inasambazwa pamoja na toleo ns-3.29, inaweza kutumika kupata vijenzi kwa toleo hilo la ns-3 au mapema, lakini haiwezi kutumika kupata vipengee kwa matoleo ya baadaye (ikiwa faili ya maelezo ya kifurushi bakeconf.xml haijasasishwa).

Unaweza pia kupata nakala mpya zaidi bakekwa kuingiza amri ifuatayo kwenye koni yako ya Linux (ikizingatiwa kuwa umesakinisha Git):

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

Unapoendesha git amri, unapaswa kuona kitu kama kifuatacho:

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.

Baada ya amri kukamilika Clone unapaswa kuwa na saraka inayoitwa bake, yaliyomo ambayo yanapaswa kuonekana kama hii:

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

Kumbuka kuwa umepakia hati kadhaa za Python, moduli ya Python iliyopewa jina bake na faili ya usanidi ya XML. Hatua inayofuata ni kutumia hati hizi kupakua na kujenga usambazaji wa ns-3 wa chaguo lako. Malengo kadhaa ya ubinafsishaji yanapatikana:

  1. ns-3.29: moduli inayolingana na kutolewa; itapakua vipengele sawa na kutolewa kwenye tarball;

  2. ns-3-dev: moduli sawa, lakini kwa kutumia msimbo kutoka kwa mti wa maendeleo;

  3. ns-allinone-3.29: Sehemu inayojumuisha vipengele vingine vya ziada kama vile Uelekezaji wa Bofya na Kitovu cha Kuiga Mtandao, Openflow kwa ns-3.

  4. ns-3-allinone: sawa na toleo la kutolewa la moduli kila mtu, lakini kwa msimbo wa maendeleo.

Kumbuka
Bonyeza - usanifu wa kawaida wa programu ya kuunda ruta.

Openflow ni itifaki ya kudhibiti mchakato wa kuchakata data inayopitishwa kupitia mtandao wa data na vipanga njia na swichi, kutekeleza teknolojia ya mtandao iliyoainishwa na programu.

Picha ya sasa ya ukuzaji (isiyotolewa) ns-3 inaweza kupatikana katika:https://gitlab.com/nsnam/ns-3-dev.git.

Waendelezaji hujaribu kuweka hazina hizi kwa utaratibu thabiti wa kufanya kazi, lakini ziko katika eneo la maendeleo na zina msimbo ambao haujatolewa, hivyo ikiwa huna mpango wa kutumia vipengele vipya, basi chagua kutolewa rasmi.

Unaweza kupata toleo jipya zaidi la msimbo kwa kuvinjari orodha ya hazina, au kwa kwenda kwenye ukurasa wa wavuti wa Matoleo ya ns-3:https://www.nsnam.org/releases/ na kubofya kiungo cha toleo jipya zaidi. Katika mfano huu tutaendelea na ns-3.29.

Sasa, ili kupata vipengele vya ns-3 tunavyohitaji, tutatumia chombo Bika. Hebu tuseme maneno machache ya utangulizi kuhusu kazi hiyo Bika.

Oka hufanya kazi kwa kupakia vyanzo vya kifurushi kwenye saraka chanzo na kusanikisha maktaba kwenye saraka ya ujenzi. Bika inaweza kuendeshwa kwa kurejelea binary, lakini ikiwa unataka kukimbia Bika sio kutoka kwa saraka ambayo ilipakuliwa, inashauriwa kuongeza njia bake kwa njia yako (kutofautisha kwa mazingira ya PATH), kwa mfano kama ifuatavyo (mfano wa ganda la Linux bash). Nenda kwenye saraka ya "kuoka" na kisha uweke vigezo vya mazingira vifuatavyo:

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

Hii itaweka programu bake.py kwa njia ya ganda na itaruhusu programu zingine kupata utekelezwaji na maktaba ambayo imeunda bake. Katika baadhi ya matukio ya matumizi bake, mpangilio wa PATH na PYTHONPATH ulioelezewa hapo juu hauhitajiki, lakini ujenzi kamili wa ns-3-allinone (na vifurushi vya ziada) kawaida huhitaji.

Nenda kwenye saraka yako ya kufanya kazi na ingiza zifuatazo kwenye koni:

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

Ifuatayo tutauliza Bika angalia ikiwa tuna zana za kutosha kupakia vipengele mbalimbali. Piga:

$ ./bake.py check

Unapaswa kuona kitu kama kifuatacho:

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

Hasa, zana za kupakia kama vile Mercurial, CVS, Git na Bazaar ni muhimu katika hatua hii kwani huturuhusu kupata msimbo. Katika hatua hii, sakinisha zana zinazokosekana kwa njia ya kawaida kwa mfumo wako (kama unajua jinsi gani) au wasiliana na msimamizi wa mfumo wako kwa usaidizi.

Ifuatayo, jaribu kupakua programu:

$ ./bake.py download

matokeo inapaswa kuwa kitu kama:

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

Hii itamaanisha kuwa vyanzo vitatu vimepakuliwa. Sasa nenda kwenye saraka ya chanzo na chapa ls; Unapaswa kuona:

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

Sasa uko tayari kujenga usambazaji wa ns-3.

3.4 Mkutano ns-3

Kama ilivyo kwa kupakua ns-3, kuna njia kadhaa za kujenga ns-3. Jambo kuu tunalotaka kusisitiza ni kwamba ns-3 imejengwa kwa kutumia zana ya kujenga inayoitwa Wafilivyoelezwa hapa chini. Watumiaji wengi watafanya kazi nao Waf, lakini kuna hati chache za kukusaidia kuanza au kupanga miundo ngumu zaidi. Kwa hivyo tafadhali, kabla ya kusoma juu Waf, angalia build.py na kusanyiko na bake.

3.4.1 Jengo na build.py

Attention! Hatua hii ya uundaji inapatikana tu kutoka kwa toleo la kumbukumbu la chanzo lililopatikana kama ilivyoelezwa hapo juu; na haijapakuliwa kupitia git au bake.

Wakati wa kufanya kazi na kumbukumbu ya kutolewa mpira wa lamindani ns-3-allinone Kuna hati rahisi ambayo inaweza kufanya ujumuishaji wa vifaa kuwa rahisi. Inaitwa build.py. Mpango huu utakuwekea mradi kwa njia muhimu zaidi. Walakini, kumbuka kuwa usanidi wa hali ya juu zaidi na kufanya kazi na ns-3 kawaida hujumuisha kutumia mfumo wa kujenga wa ns-3, Waf, ambao utaanzishwa baadaye katika mafunzo haya.

Ikiwa ulipakua kwa kutumia mpira wa lami, kisha kwenye saraka yako ~/nafasi ya kazi saraka iliyo na jina kitu kama ns-allinone-3.29. Weka yafuatayo:

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

Akiitwa build.py Tulitumia hoja za mstari wa amri kuunda mifano na majaribio yaliyotumiwa katika mafunzo haya, ambayo hayajajengwa kwa chaguo-msingi katika ns-3. Kwa chaguo-msingi, programu pia huunda moduli zote zinazopatikana. Kisha, ikiwa unataka, unaweza kuunda ns-3 bila mifano na majaribio, au kuwatenga moduli ambazo hazihitajiki kwa kazi yako.

Utaona ujumbe mwingi wa pato la mkusanyaji unaoonyeshwa na hati inapounda sehemu mbali mbali ambazo umepakia. Kwanza hati itajaribu kujenga animator netanim, kisha jenereta ya kumfunga pybindgen na hatimaye ns-3. Wakati mchakato umekamilika, unapaswa kuona yafuatayo:

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

Katika mistari mitatu ya mwisho ya orodha tunaona ujumbe kuhusu moduli ambazo hazijajengwa:

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

Hii ina maana kwamba baadhi ya moduli za ns-3 ambazo zinategemea maktaba za nje zinaweza kuwa hazijajengwa, au kwamba hazihitajiki kujengwa kwa usanidi huu. Hii haimaanishi kuwa simulator haijakusanywa au kwamba moduli zilizokusanywa hazitafanya kazi kwa usahihi.

3.4.2 Kujenga kwa Bake

Ikiwa ulitumia bake hapo juu kupata msimbo wa chanzo kutoka kwa hazina za mradi, unaweza kuendelea kuutumia kujenga ns-3. Piga:

$ ./bake.py build

na unapaswa kuona kitu kama:

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

Kitambulisho: Unaweza pia kupakua na kujenga hatua mara moja kwa kupiga "bake.py deploy".

Kukusanya vipengele vyote kunaweza kushindwa, lakini mkusanyiko utaendelea ikiwa sehemu haihitajiki. Kwa mfano, suala la hivi karibuni la kubebeka lilikuwa hilo castxml inaweza kukusanywa na chombo bake sio kwenye majukwaa yote. Katika kesi hii, ujumbe kama huu utaonekana:

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

Lakini castxml inahitajika tu ikiwa unataka kuunda vifungo vilivyosasishwa vya Python. Kwa watumiaji wengi hakuna haja ya hii (angalau hadi wabadilishe ns-3), kwa hivyo maonyo kama haya yanaweza kupuuzwa kwa usalama kwa sasa.

Ikiwa itashindwa, amri ifuatayo itakupa maoni juu ya kukosa utegemezi:

$ ./bake.py show

Vitegemezi mbalimbali vya vifurushi unavyojaribu kuunda vitaorodheshwa.

3.4.3 Jenga kwa Waf

Hadi kufikia hatua hii, kuanza kujenga ns-3, tulitumia ama hati build.py, au chombo bake. Zana hizi ni muhimu kwa ajili ya kujenga ns-3 na kudumisha maktaba. Kwa kweli, kujenga wanaendesha zana ya ujenzi Waf kutoka kwa saraka ns-3. Waf imewekwa na msimbo wa chanzo wa ns-3. Watumiaji wengi husonga mbele kwa haraka ili kutumia moja kwa moja ili kusanidi na kuunganisha ns-3 Waf. Kwa hivyo, ili kuendelea, tafadhali nenda kwenye saraka ya ns-3 uliyounda awali.

Hii haihitajiki kabisa kwa wakati huu, lakini itakuwa muhimu kurudi nyuma kidogo na kuona jinsi ya kufanya mabadiliko kwenye usanidi wa mradi. Pengine mabadiliko muhimu zaidi ya usanidi unayoweza kufanya ni kuunda toleo lililoboreshwa la msimbo. Kwa chaguo-msingi, umesanidi mradi wako ili kuunda toleo la utatuzi. Wacha tuangalie mradi wa kuunda muundo ulioboreshwa. Ili kuelezea Waf kwamba inapaswa kutengeneza miundo iliyoboreshwa inayojumuisha mifano na majaribio, utahitaji kutekeleza amri zifuatazo:

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

Hii itazindua Waf nje ya saraka ya ndani (kwa urahisi wako). Amri ya kwanza husafisha kutoka kwa ujenzi uliopita, hii kwa kawaida sio lazima kabisa, lakini ni mazoezi mazuri (pia angalia maelezo ya kujenga hapa chini); hii itafuta maktaba zilizoundwa hapo awali na faili za kitu zilizo kwenye saraka kujenga/. Wakati mradi umeundwa upya na mfumo wa ujenzi unakagua utegemezi mbalimbali, unapaswa kuona matokeo sawa na yafuatayo:

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)

Tafadhali kumbuka sehemu ya mwisho ya tangazo hapo juu. Baadhi ya chaguo za ns-3 hazijawezeshwa kwa chaguo-msingi au zinahitaji usaidizi wa mfumo ili kufanya kazi ipasavyo. Kwa mfano, ili kuwezesha XmlTo, maktaba lazima iwepo kwenye mfumo libxml-2.0. Ikiwa maktaba hii haikupatikana na chaguo la kukokotoa la ns-3 sambamba halijawezeshwa, ujumbe utaonyeshwa. Pia kumbuka kuwa inawezekana kutumia amri sudo kuweka "kuweka kitambulisho cha kikundi wakati wa kukimbia" kwa programu fulani. Haijawezeshwa kwa chaguo-msingi na kwa hivyo kipengele hiki kinaonekana kama "hakijawezeshwa". Hatimaye, ili kupata orodha ya chaguo zilizowezeshwa, tumia Waf na parameter --check-config.

Sasa hebu turudi nyuma na turudi kwenye muundo wa utatuzi ulio na mifano na majaribio.

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

Mfumo wa ujenzi sasa umeanzishwa na unaweza kuunda matoleo ya utatuzi wa programu za ns-3 kwa kuandika tu:

$ ./waf

Hatua zilizo hapo juu zinaweza kukulazimisha kuunda sehemu ya mfumo wa ns-3 mara mbili, lakini sasa unajua jinsi ya kubadilisha usanidi na kuunda nambari iliyoboreshwa.

Kuangalia ni wasifu gani unaotumika kwa usanidi fulani wa mradi, kuna amri:

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

Hali ya hapo juu build.py pia inaunga mkono hoja --enable-examples ΠΈ --enable-tests, lakini chaguzi zingine Waf haiungi mkono moja kwa moja. Kwa mfano, hii haitafanya kazi:

$ ./build.py --disable-python

majibu yatakuwa kama hii:

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

Hata hivyo, operator maalum - - inaweza kutumika kupitisha vigezo vya ziada kupitia wafkwa hivyo badala ya hapo juu amri ifuatayo itafanya kazi:

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

kwa sababu hutoa amri kuu ./waf sanidi --disable-python. Hapa kuna vidokezo zaidi vya utangulizi kuhusu Waf.

Kushughulikia makosa ya ujenzi

Matoleo ya ns-3 yanajaribiwa kwenye vikusanyaji vya hivi punde zaidi vya C++ vinavyopatikana wakati wa kutolewa kwenye usambazaji wa kawaida wa Linux na MacOS. Walakini, baada ya muda, ugawaji mpya hutolewa na wakusanyaji wapya, na wakusanyaji hawa wapya huwa na tabia zaidi juu ya maonyo. ns-3 husanidi muundo wake kushughulikia maonyo yote kama makosa, kwa hivyo wakati mwingine ikiwa unatumia toleo la zamani kwenye mfumo mpya, onyo la mkusanyaji linaweza kusimamisha ujenzi.

Kwa mfano, hapo awali kulikuwa na toleo la ns-3.28 la Fedora 28, ambalo lilijumuisha toleo jipya kuu. gcc (gcc-8) Kuunda toleo la ns-3.28 au matoleo ya awali chini ya Fedora 28, na Gtk2+ imewekwa, hitilafu ifuatayo itatokea:

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

Katika matoleo kuanzia ns-3.28.1, in Waf chaguo inapatikana kutatua matatizo haya. Inalemaza kuweka alama ya "-Werror" katika g++ na clang++. Hili ndilo chaguo la "--disable-werror" na lazima litumike wakati wa usanidi:

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

Sanidi au unganisha

Baadhi ya amri Waf kuwa na maana tu katika awamu ya usanidi, na zingine ni halali tu katika awamu ya ujenzi. Kwa mfano, ikiwa unataka kutumia vipengele vya kuiga ns-3, unaweza kuwezesha mpangilio wa biti kusini kutumia sudo, kama ilivyoelezwa hapo juu. Hii itafuta amri za hatua za usanidi, na hivyo unaweza kubadilisha usanidi kwa kutumia amri ifuatayo, ambayo pia inajumuisha mifano na vipimo.

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

Ukifanya hivi Waf itazindua sudokubadilisha programu za kuunda soketi za msimbo ili kukimbia na ruhusa mizizi. Katika Waf Kuna chaguzi zingine nyingi zinazopatikana kwa usanidi na hatua za ujenzi. Ili kuchunguza chaguo zako, ingiza:

$ ./waf --help

Katika sehemu inayofuata tutatumia chaguzi zinazohusiana na majaribio.

Wasifu wa Mkutano

Tayari tumeona jinsi unaweza kusanidi Waf kwa makusanyiko Debug ΠΈ optimized:

$ ./waf --build-profile=debug

Pia kuna wasifu wa mkutano wa kati, kutolewa. Chaguo -d ni sawa na --build-profile. Wasifu wa ujenzi hudhibiti utumiaji wa ukataji miti, madai, na swichi za uboreshaji wa mkusanyaji:

ns-3 mafunzo ya kiigaji cha mtandao. Sura ya 3

Kama unavyoona, ukataji miti na madai yanapatikana tu katika miundo ya utatuzi. Zoezi linalopendekezwa ni kuunda hati yako katika modi ya utatuzi, kisha utekeleze utendakazi unaorudiwa (kwa takwimu au mabadiliko ya vigezo) katika wasifu wa muundo ulioboreshwa.

Ikiwa unayo nambari ambayo inapaswa kuendeshwa tu katika profaili fulani za ujenzi, tumia 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;)

Chaguomsingi, Waf hujenga mabaki kwenye saraka ya ujenzi. Unaweza kutaja saraka tofauti ya pato kwa kutumia chaguo -β€―-out, kwa mfano:

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

Kwa kuchanganya hii na profaili za ujenzi, unaweza kubadilisha kwa urahisi kati ya chaguzi tofauti za ujumuishaji:

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

Ambayo hukuruhusu kufanya kazi na makusanyiko mengi bila kulazimika kuandika upya mkusanyiko wa hivi punde kila wakati. Unapobadilisha hadi wasifu mwingine, Waf itakusanya tu, bila kurudisha kila kitu kabisa.

Unapobadilisha wasifu wa kuunda kwa njia hii, unahitaji kuwa mwangalifu ili kutoa chaguo sawa za usanidi kila wakati. Kufafanua anuwai kadhaa za mazingira zitakusaidia kuzuia makosa:

$ 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

Wakusanyaji na bendera

Katika mifano hapo juu Waf kujenga ns-3 hutumia mkusanyaji wa C++ kutoka GCC ( g ++) Walakini, unaweza kubadilisha ile unayotumia Waf Mkusanyaji wa C++, kwa kufafanua utofauti wa mazingira wa CXX. Kwa mfano, kutumia mkusanyaji wa C++ Clang, clang++,

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

Kwa njia hiyo hiyo unaweza kusanidi Waf kutumia mkusanyiko uliosambazwa kwa kutumia wilaya:

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

Maelezo zaidi kuhusu distcc na mkusanyo uliosambazwa yanaweza kupatikana kwenye ukurasa wa mradi katika sehemu ya Hati. Ili kuongeza alama za mkusanyaji wakati wa kusanidi ns-3, tumia utofauti wa mazingira wa CXXFLAGS_EXTRA.

Ufungaji

Waf inaweza kutumika kusakinisha maktaba katika sehemu mbalimbali kwenye mfumo. Kwa chaguo-msingi, maktaba zilizokusanywa na zinazoweza kutekelezwa ziko kwenye saraka kujenga, na kwa kuwa Waf anajua eneo la maktaba hizi na zinazoweza kutekelezwa, hakuna haja ya kusakinisha maktaba popote pengine.

Ikiwa watumiaji wanapendelea kusakinisha nje ya saraka ya ujenzi, wanaweza kuendesha amri ./waf kufunga. Kiambishi awali cha chaguo-msingi cha usakinishaji ni / usr / wa ndaniHivyo ./waf kufunga itasakinisha programu ndani / usr / ndani / bin, maktaba ndani / usr / ndani / lib na faili za kichwa ndani /usr/local/include. Haki za mtumiaji mkuu kawaida zinahitaji kuwekwa na kiambishi awali, kwa hivyo amri ya kawaida itakuwa sudo ./waf install. Inapozinduliwa, Waf itachagua kwanza kutumia maktaba zilizoshirikiwa kwenye saraka ya ujenzi, kisha itatafuta maktaba kando ya njia ya maktaba zilizosanidiwa katika mazingira ya ndani. Kwa hivyo wakati wa kusakinisha maktaba kwenye mfumo, ni mazoezi mazuri kuangalia kama maktaba zinazofaa zinatumika. Watumiaji wanaweza kuchagua kusakinisha na kiambishi awali tofauti kwa kupitisha chaguo wakati wa usanidi --prefix, kwa mfano:

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

Ikiwa baadaye, baada ya kujenga, mtumiaji huingia amri ya ufungaji ./waf, kiambishi awali kitatumika /chagua/ndani.

Timu ./waf clean lazima itumike kabla ya kusanidi upya mradi ikiwa usakinishaji utatumia Waf chini ya kiambishi awali tofauti.

Kwa hivyo, kutumia ns-3 hakuna haja ya kupiga simu ./waf install. Watumiaji wengi hawatahitaji amri hii kwa sababu Waf itachukua maktaba za sasa kutoka kwa saraka ya ujenzi, lakini watumiaji wengine wanaweza kupata hii kuwa muhimu ikiwa shughuli zao zinahusisha kufanya kazi na programu nje ya saraka ya ns-3.

Waf single

Katika kiwango cha juu cha mti wa chanzo cha ns-3, kuna hati moja tu ya Waf. Mara tu unapoanza kufanya kazi, utatumia muda mwingi kwenye saraka scratch/ au ndani zaidisrc/... na wakati huo huo kuwa na kukimbia Waf. Unaweza kukumbuka tu ulipo na kukimbia Waf kama ifuatavyo:

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

lakini hii itakuwa ya kuchosha na kukabiliwa na makosa, kwa hivyo kuna suluhisho bora. Njia moja ya kawaida ni kutumia kihariri cha maandishi kama vile emacs au vim, ambapo vikao viwili vya terminal vinafunguliwa, moja hutumiwa kujenga ns-3, na ya pili hutumiwa kuhariri msimbo wa chanzo. Ikiwa unayo mpira wa lami, basi utofauti wa mazingira unaweza kusaidia:

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

$ cd scratch 
$ waff build

Kwenye saraka ya moduli inaweza kujaribu kuongeza hati ndogo ya waf kama exec ../../waf. Tafadhali, usifanye hivyo. Hii inachanganya kwa wanaoanza na, inapofanywa vibaya, husababisha ugumu wa kugundua makosa ya ujenzi. Suluhisho zilizoonyeshwa hapo juu ni njia ambayo inapaswa kutumika.

3.5 Upimaji ns-3

Unaweza kuendesha majaribio ya kitengo cha usambazaji wa ns-3 kwa kuendesha hati ./test.py:

$ ./test.py

Majaribio haya yanaendeshwa sambamba na Waf. Hatimaye unapaswa kuona ujumbe ukisema:

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

Huu ni ujumbe muhimu wa kutambua milipuko ya valgrind, kuacha kufanya kazi au hitilafu, ikionyesha matatizo na msimbo au kutopatana kati ya zana na msimbo.

Pia utaona matokeo ya mwisho kutoka Waf na tester inayoendesha kila jaribio, ambayo itaonekana kama hii:

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)

Amri hii kawaida huendeshwa na watumiaji ili kuthibitisha kwa haraka kuwa usambazaji wa ns-3 umejengwa ipasavyo. (Kumbuka kwamba mpangilio wa mistari ya "PASS: ..." inaweza kuwa tofauti, hii ni kawaida. La muhimu ni kwamba mstari wa muhtasari ulio mwishoni mwa ripoti unaonyesha kuwa majaribio yote yamefaulu; hakuna majaribio yaliyofeli au kuanguka.) Na WafNa test.py itasawazisha kazi katika cores za kichakata zinazopatikana za mashine.

3.6 Kuendesha hati

Kwa kawaida tunaendesha hati chini ya udhibiti Waf. Hii inaruhusu mfumo wa uundaji kuhakikisha kuwa njia za maktaba zilizoshirikiwa zimewekwa kwa usahihi na kwamba maktaba zinapatikana wakati wa utekelezaji. Ili kuendesha programu, tumia tu Waf na parameter -β€―-run. Wacha tuendeshe ns-3 sawa na mpango wa kila mahali hujambo duniakwa kuandika yafuatayo:

$ ./waf --run hello-simulator

Waf itaangalia kwanza kwamba programu imejengwa kwa usahihi na kujenga ikiwa ni lazima. Kisha Waf itafanya programu ambayo hutoa matokeo yafuatayo.

Hello Simulator

Hongera! Sasa wewe ni mtumiaji wa ns-3!

Nifanye nini ikiwa sijaona matokeo?

Ukiona ujumbe Wafikionyesha kuwa ujenzi umekamilika kwa mafanikio, lakini hauoni matokeo "Halo Simulator", basi kuna uwezekano kwamba katika sehemu ya [Build-with-Waf] ulibadilisha hali yako ya ujenzi kuwa optimized, lakini alikosa kurudi kwenye modi Debug. Toleo lote la dashibodi linalotumika katika mafunzo haya hutumia kijenzi maalum cha ns-3 ambacho hutekeleza kumbukumbu na hutumika kuchapisha ujumbe maalum kwenye dashibodi. Pato kutoka kwa kipengele hiki huzimwa kiotomatiki wakati msimbo ulioboreshwa unakusanywa - "huboreshwa". Ikiwa huoni pato la "Hello Simulator", weka yafuatayo:

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

kubinafsisha Waf kuunda matoleo ya utatuzi wa programu za ns-3, ambazo ni pamoja na mifano na majaribio. Kisha unapaswa kuunda upya toleo la sasa la utatuzi la msimbo kwa kuandika

$ ./waf

Sasa ikiwa unaendesha programu habari-simulator, unapaswa kuona matokeo yanayotarajiwa.

3.6.1 Hoja za mstari wa amri

Ili kupitisha hoja za mstari wa amri kwa programu ya ns-3, tumia muundo ufuatao:

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

Badilisha kwa jina la programu yako na kwa hoja. Hoja -β€―-command-template kwa Waf kimsingi ni kichocheo cha kujenga safu halisi ya amri Waf kutumika kutekeleza programu. Waf hukagua kuwa muundo umekamilika, huweka njia za maktaba zilizoshirikiwa, kisha hutumia kiolezo cha mstari wa amri kilichotolewa na kubadilisha jina la programu kwa kishikilia nafasi %s kuita kinachotekelezeka. Ikiwa unaona syntax hii kuwa ngumu, kuna toleo rahisi zaidi ambalo linahusisha programu ya ns-3 na hoja zake zilizoambatanishwa katika nukuu moja:

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

Mfano mwingine muhimu sana ni kuendesha vyumba vya majaribio kwa kuchagua. Wacha tufikirie kuna chumba cha majaribio kinachoitwa mytest (kwa kweli haipo). Hapo juu tulitumia hati ya ./test.py kuendesha idadi ya majaribio sambamba, ambayo huita tena programu ya majaribio. mkimbiaji wa mtihani. Wito mkimbiaji wa mtihani moja kwa moja kuendesha jaribio moja:

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

Hoja zitapitishwa kwa programu mkimbiaji wa mtihani. Kwa kuwa mytest haipo, ujumbe wa makosa utatolewa. Ili kuchapisha chaguo zinazopatikana za kiendesha jaribio, ingiza:

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

3.6.2 Utatuzi

Kuendesha programu za ns-3 chini ya matumizi mengine, kama vile kitatuzi (kwa mfano, gdb) au chombo cha mtihani wa kumbukumbu (kwa mfano, valgrind), tumia fomu inayofanana -β€―-command-template = "…". Kwa mfano, kukimbia kwenye debugger gdb programu yako ya hello-simulator ns-3 na hoja:

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

Kumbuka kuwa jina la programu ya ns-3 linakuja na hoja -β€―-run, na matumizi ya usimamizi (hapa gdb) ni ishara ya kwanza katika hoja -β€―-command-template. Chaguo -β€―-args hutoa habari gdbkwamba safu iliyobaki ya amri ni ya programu ya "chini". (Baadhi ya matoleo gdb sielewi chaguo -β€―-args. Katika kesi hii, ondoa hoja za programu kutoka -β€―-command-template na utumie seti ya amri gdb args.) Tunaweza kuchanganya kichocheo hiki na kilichotangulia ili kufanya jaribio chini ya kitatuzi:

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

3.6.3 Saraka ya kufanya kazi

Waf inapaswa kuzinduliwa kutoka eneo lake juu ya mti wa ns-3. Folda hii inakuwa saraka ya kufanya kazi ambapo faili za pato zitaandikwa. Lakini vipi ikiwa unataka kuweka faili hizi nje ya mti chanzo cha ns-3? Tumia hoja -β€―-cwd:

$ ./waf --cwd=...

Unaweza kupata kufaa zaidi kupata faili za towe kwenye saraka yako ya kufanya kazi. Katika kesi hii, hatua zifuatazo zisizo za moja kwa moja zinaweza kusaidia:

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

Mapambo haya ya toleo la awali la amri huhifadhi saraka ya sasa ya kazi, huenda kwenye saraka Wafna kisha kuelekeza Waf kubadilisha saraka ya kufanya kazi kurudi kwenye saraka ya sasa ya kufanya kazi iliyohifadhiwa kabla ya kuanza programu. Tunataja timu -β€―-cwd Kwa ukamilifu, watumiaji wengi huendesha tu Waf kutoka kwa saraka ya kiwango cha juu na kutoa faili za pato hapo.

Inaendelea: Sura ya 4

Chanzo: mapenzi.com

Kuongeza maoni